diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/.ratings
index 8d0110b243dc7321df8a630bd536313ca9d70853..fd69979b18663e90a6f14902dc35b70d9404553b 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/.ratings
@@ -1,2 +1,2 @@
-ExplorationAlg.java ccdbcb35619af73a4bfc73bbcb8ff255e360151e RED
+ExplorationAlg.java fbb9547b59a46da10a25bef60a04ef2060d8c277 RED
 ExplorationAlgActivator.java 1970505dc53286fd3752c909abc568e0bf598fe0 RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/ExplorationAlg.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/ExplorationAlg.java
index ccdbcb35619af73a4bfc73bbcb8ff255e360151e..fbb9547b59a46da10a25bef60a04ef2060d8c277 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/ExplorationAlg.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/ExplorationAlg.java
@@ -20,8 +20,25 @@ import static org.fortiss.af3.exploration.alg.service.ExplorationServiceManager.
 
 import org.eclipse.ui.IStartup;
 import org.fortiss.af3.exploration.alg.backend.Opt4JDseBackend;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.comm.MessageEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.platform.PlatformCommunicationGraphEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.InstantiatedAcyclicTaskGraphEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.InstantiatedTaskGraphEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.SafeTaskGraphEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.StrictTTDecoder;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.comm.MessageDecoder;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.instantiatetaskgraph.InstantiatedTaskMappingDecoder;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.instantiatetaskgraph.InstantiatedTaskMappingDecoderAcyclic;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.partitionmapping.PartitionMappingDecoderGraph;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.safetyfunction.SFGraphDecoder;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.safetyfunction.SFMappingDecoder;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.taskmapping.AbstractTaskMappingIdentityDecoder;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.taskmapping.instantiate.FailSilentAbstractTaskMappingDecoder;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.taskmapping.instantiate.TaskInstanceResourceAlignmentDecoder;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.StrictTTSchedule;
 import org.fortiss.af3.exploration.alg.service.IExplorationConstraintTransformationService;
 import org.fortiss.af3.exploration.alg.service.IExplorationEvaluatationService;
 import org.fortiss.af3.exploration.alg.service.IExplorationModuleService;
@@ -90,9 +107,58 @@ public final class ExplorationAlg implements IStartup {
 	}
 
 	/** Registers the exploration modules bundled with this plugin. */
+	@SuppressWarnings("unchecked")
 	private static void registerExplorationModules() {
+		// Functional groups of Decoders.
+		registerSafetyFunctionModules();
+		registerTaskMappingModules();
+		registerInstTaskGraphModules();
+
+		// Single exploration modules: Decoding.
+		getService(IExplorationModuleService.class).registerProblem(StrictTTSchedule.class,
+				new StrictTTDecoder());
+		getService(IExplorationModuleService.class).registerProblem(
+				PlatformCommunicationGraphEncoding.class, new PartitionMappingDecoderGraph());
+		getService(IExplorationModuleService.class).registerProblem(MessageEncoding.class,
+				new MessageDecoder());
+	}
+
+	/** Registers problem modules related to safety functions. */
+	@SuppressWarnings("unchecked")
+	private static void registerSafetyFunctionModules() {
+		getService(IExplorationModuleService.class).registerProblem(
+				AbstractTaskMappingEncoding.class, new SFMappingDecoder());
+		// TODO: ConstraintDecoder
+		// getService(IExplorationModuleService.class).registerProblem(
+		// AbstractTaskMappingEncoding.class, new SFMappingConstraintDecoder());
+		getService(IExplorationModuleService.class).registerProblem(SafeTaskGraphEncoding.class,
+				new SFGraphDecoder());
+	}
+
+	/** Registers all problem modules related to task mapping. */
+	private static void registerTaskMappingModules() {
+		getService(IExplorationModuleService.class).registerProblem(
+				AbstractTaskMappingEncoding.class, new AbstractTaskMappingIdentityDecoder());
 		getService(IExplorationModuleService.class).registerProblem(
 				FailSilentTaskMappingEncoding.class, new FailSilentAbstractTaskMappingDecoder());
+		// getService(IExplorationModuleService.class).registerProblem(
+		// FaultDetectionVotingTaskMappingEncoding.class,
+		// new FaultDetectionVotingAbstractTaskMappingDecoder());
+		getService(IExplorationModuleService.class).registerProblem(
+				InstantiatedTaskMappingEncoding.class, new TaskInstanceResourceAlignmentDecoder());
+	}
+
+	/**
+	 * Registers all modules related to the derivation of task graphs from instantiated task
+	 * mappings.
+	 */
+	@SuppressWarnings("unchecked")
+	private static void registerInstTaskGraphModules() {
+		getService(IExplorationModuleService.class).registerProblem(
+				InstantiatedTaskGraphEncoding.class, new InstantiatedTaskMappingDecoder());
+		getService(IExplorationModuleService.class).registerProblem(
+				InstantiatedAcyclicTaskGraphEncoding.class,
+				new InstantiatedTaskMappingDecoderAcyclic());
 	}
 
 	/** Register the DSE backend with the exploration plugin. */
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/.ratings
index 6f8381095a44618494b011cddc9c36ddb61fa6f6..7d71b68721299dd6cc17daddd5d1c618a0b3bb37 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/.ratings
@@ -1,6 +1,6 @@
 CompositeExplorationSolution.java db9dadb94e6696cddaf12f0c5238fecfc4348afc RED
-DSEFactory.java cf3435218c79fa80143333a1a24e77f653203563 RED
+DSEFactory.java c033d4fb34746a0f712be1d99e648d3c95623497 RED
 Explorer.java 48ce78929632a9b78b4c809c7719eb5aa46d21df RED
 ImplicitExplorationTargetFactory.java 25c3c668ed268843f8af7e37eb03370ed513b482 RED
 SolutionQuantification.java 19cd7caa721bbca3112af7825c7fb20a96a4a799 RED
-TaskMappingFactory.java d80e505c8a1b660a083a9e6f50d6fddbbb365d1e RED
+TaskMappingFactory.java 7fc51aac3a3f0342c7fbee01db0dd7c17251e49b RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java
index cf3435218c79fa80143333a1a24e77f653203563..c033d4fb34746a0f712be1d99e648d3c95623497 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java
@@ -43,18 +43,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.problem.CompositeProblemModuleBase;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.ArchitectureDecoder;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.ArchitectureExplorationProblemModule;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.StrictTTDecoder;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.comm.MessageDecoder;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.instantiatetaskgraph.InstantiatedTaskMappingDecoder;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.instantiatetaskgraph.InstantiatedTaskMappingDecoderAcyclic;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.partitionmapping.PartitionMappingDecoderGraph;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.partitionmapping.PartitionMappingIdentityDecoder;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.safetyfunction.SFEncodingDecoder;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.safetyfunction.SFGraphDecoder;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.safetyfunction.SFMappingConstraintDecoder;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.safetyfunction.SFMappingDecoder;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.taskmapping.AbstractTaskMappingIdentityDecoder;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.taskmapping.instantiate.TaskInstanceResourceAlignmentDecoder;
 import org.fortiss.af3.exploration.alg.dse.evaluator.ArchitectureEvaluator;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.FailSilentExecModelFactory;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.FaultDetectionVotingExecModelFactory;
@@ -152,32 +141,16 @@ public class DSEFactory {
 	 *             if (one of) the sub problem(s) cannot be registered.
 	 */
 	@SuppressWarnings("unchecked")
-	private <C, T extends SafetyFunctionArchEncoding<C>> void createSafetyFunctionArchProblem(
+	private <C, T extends SafetyFunctionArchEncoding> void createSafetyFunctionArchProblem(
 			ArchitectureExplorationProblemModule archExpProblemModule,
 			DecoderDependencyGraph execDepGraph) throws Exception {
 		// These suppress warnings are required since type erasure in Java does not allow to pass
 		// XY<Z>.class.
-		@SuppressWarnings("rawtypes") SafetyFunctionArchCreator sfCreator =
+		SafetyFunctionArchCreator sfCreator =
 				new SafetyFunctionArchCreator(systemModelAdapter.getSafetyFunctionAdapters(),
 						execDepGraph);
-		@SuppressWarnings("rawtypes") SFEncodingDecoder sfEncodingDecoder =
-				new SFEncodingDecoder<>();
-		@SuppressWarnings("rawtypes") SFGraphDecoder sfGraphDecoder =
-				new SFGraphDecoder(systemModelAdapter.getTaskGraphs());
-		@SuppressWarnings("rawtypes") SFMappingDecoder sfMappingDecoder = new SFMappingDecoder();
-		@SuppressWarnings("rawtypes") SFMappingConstraintDecoder sfMappingConstraintDecoder =
-				new SFMappingConstraintDecoder();
-
-		sfCreator.registerAssocDecoders(sfEncodingDecoder);
-		sfCreator.registerAssocDecoders(sfGraphDecoder);
-		sfCreator.registerAssocDecoders(sfMappingDecoder);
-		sfCreator.registerAssocDecoders(sfMappingConstraintDecoder);
 
 		@SuppressWarnings("rawtypes") List<ComposableDecoder> sfDecoders = new ArrayList<>();
-		sfDecoders.add(sfEncodingDecoder);
-		sfDecoders.add(sfGraphDecoder);
-		sfDecoders.add(sfMappingDecoder);
-		sfDecoders.add(sfMappingConstraintDecoder);
 
 		execDepGraph.addCreatedEncoding(sfCreator.getCreatedEncodingType());
 		archExpProblemModule.registerSubProblem(SafetyFunctionArchEncoding.class, sfCreator,
@@ -209,12 +182,6 @@ public class DSEFactory {
 								.getDeployableComponents().size());
 
 		@SuppressWarnings("rawtypes") List<ComposableDecoder> pmDecoders = new ArrayList<>();
-		PartitionMappingIdentityDecoder pmDecoder = new PartitionMappingIdentityDecoder();
-		TaskInstanceResourceAlignmentDecoder tiraDecoder =
-				new TaskInstanceResourceAlignmentDecoder();
-		pmDecoders.add(pmDecoder);
-		pmDecoders.add(tiraDecoder);
-		pmCreator.registerAssocDecoders(pmDecoder);
 		execDepGraph.addCreatedEncoding(pmCreator.getCreatedEncodingType());
 		archExpProblemModule.registerSubProblem(pmEnodingClass, pmCreator, pmDecoders);
 	}
@@ -243,7 +210,6 @@ public class DSEFactory {
 
 		@SuppressWarnings("rawtypes") List<ComposableDecoder> pmDecoders = new ArrayList<>();
 		PartitionMappingDecoderGraph pmgDecoder = new PartitionMappingDecoderGraph();
-		pmDecoders.add(pmgDecoder);
 		execDepGraph.addCreatedEncoding(pmCreator.getCreatedEncodingType());
 		archExpProblemModule.registerSubProblem(pmEnodingClass, pmCreator, pmDecoders);
 	}
@@ -275,12 +241,7 @@ public class DSEFactory {
 		AbstractTaskMappingCreator tmCreator =
 				tmFactory.createAbstractTaskMappingCreator(execDepGraph);
 		@SuppressWarnings("rawtypes") List<ComposableDecoder> abstrTaskDecoders = new ArrayList<>();
-		AbstractTaskMappingIdentityDecoder idtDecoder = new AbstractTaskMappingIdentityDecoder();
-		// abstrTaskDecoders.add(atmDecoder);
-		abstrTaskDecoders.add(idtDecoder);
-		// TODO: replace with the registration method that uses lists.
-		// tmCreator.registerAssocDecoders(atmDecoder);
-		tmCreator.registerAssocDecoders(idtDecoder);
+		// AbstractTaskMappingIdentityDecoder idtDecoder = new AbstractTaskMappingIdentityDecoder();
 
 		execDepGraph.addCreatedEncoding(tmCreator.getCreatedEncodingType());
 		archExpProblemModule.registerSubProblem(tmEnodingClass, tmCreator, abstrTaskDecoders);
@@ -312,24 +273,12 @@ public class DSEFactory {
 					DseSpecification dse, DecoderDependencyGraph execDepGraph) throws Exception {
 		// These suppress warnings are required since type erasure in Java does not allow to pass
 		// XY<Z>.class.
-		StrictTTDecoder<S, T> tmDecoder = tmFactory.createStrictTTDecoder(dse);
-		InstantiatedTaskMappingDecoder<S, ?> tgDecoder =
-				tmFactory.createInstantiatedTaskMappingDecoder();
-		InstantiatedTaskMappingDecoderAcyclic<S, ?> acycTgDecoder =
-				tmFactory.createAbstractToAcyclicTaskGraphDecoder();
-		@SuppressWarnings("rawtypes") MessageDecoder msgDecoder = tmFactory.createMessageDecoder();
 		@SuppressWarnings("rawtypes") TaskMappingCreator tmCreator =
 				tmFactory.createTaskMappingCreator(execDepGraph);
-		@SuppressWarnings("rawtypes") List<ComposableDecoder> instTaskDecoders = new ArrayList<>();
-		instTaskDecoders.add(tgDecoder);
-		instTaskDecoders.add(acycTgDecoder);
-		instTaskDecoders.add(msgDecoder);
-		instTaskDecoders.add(tmDecoder);
-		tmCreator.registerAssocDecoders(instTaskDecoders);
 
 		execDepGraph.addCreatedEncoding(tmCreator.getCreatedEncodingType());
 		archExpProblemModule.registerSubProblem(InstantiatedTaskMappingEncoding.class, tmCreator,
-				instTaskDecoders);
+				new ArrayList<>());
 	}
 
 	/**
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java
index d80e505c8a1b660a083a9e6f50d6fddbbb365d1e..7fc51aac3a3f0342c7fbee01db0dd7c17251e49b 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java
@@ -19,7 +19,6 @@ import java.util.Collection;
 
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.taskmapping.AbstractTaskMappingCreator;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.taskmapping.TaskMappingCreator;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.InstantiatedTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
@@ -43,11 +42,9 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.comm.IMessageRouter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.comm.ShortestPathRouter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.proc.EDFSchedulerBase;
 import org.fortiss.af3.exploration.alg.service.internal.ExplorationEvaluationService;
-import org.fortiss.af3.exploration.model.ExplorationSpecification;
 import org.fortiss.af3.exploration.model.ExplorationTarget;
 import org.fortiss.af3.exploration.model.time.DeadlineConstraint;
 import org.fortiss.af3.exploration.model.time.PeriodConstraint;
-import org.fortiss.af3.exploration.moea.model.DseSpecification;
 import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiAllocationConstraint;
 import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiDislocationConstraint;
 import org.fortiss.af3.exploration.moea.model.predefined.FailureMinObjective;
@@ -199,8 +196,7 @@ public abstract class TaskMappingFactory<S extends InstantiatedTaskMappingEntry,
 	 */
 	// TODO: remove these suppress warnings by propagating the generic C.
 	@SuppressWarnings({"rawtypes", "unchecked"})
-	public InstantiatedTaskMappingDecoder<S, InstantiatedTaskGraphEncoding>
-			createInstantiatedTaskMappingDecoder() {
+	public InstantiatedTaskMappingDecoder<S> createInstantiatedTaskMappingDecoder() {
 		return new InstantiatedTaskMappingDecoder();
 	}
 
@@ -211,7 +207,7 @@ public abstract class TaskMappingFactory<S extends InstantiatedTaskMappingEntry,
 	 *            The system model deduced from the logical and technical architecture.
 	 * @return An instance on an {@link InstantiatedTaskMappingDecoderAcyclic}.
 	 */
-	public InstantiatedTaskMappingDecoderAcyclic<S, ?> createAbstractToAcyclicTaskGraphDecoder() {
+	public InstantiatedTaskMappingDecoderAcyclic<S> createAbstractToAcyclicTaskGraphDecoder() {
 		throw new UnsupportedOperationException(
 				"The Decoder to instantiate an \"abstract\" and acyclic Task Graph has not been defined for current Execution Model.");
 	}
@@ -239,7 +235,7 @@ public abstract class TaskMappingFactory<S extends InstantiatedTaskMappingEntry,
 	 *            the decoding strategy.
 	 * @return instance of a {@link StrictTTDecoder}
 	 */
-	public StrictTTDecoder<S, T> createStrictTTDecoder(DseSpecification explorationDefinition) {
+	public StrictTTDecoder<S, T> createStrictTTDecoder() {
 		throw new UnsupportedOperationException(SCHED_NOT_IMPL_MSG);
 	}
 
@@ -260,7 +256,7 @@ public abstract class TaskMappingFactory<S extends InstantiatedTaskMappingEntry,
 	 *            DSE goal specification used within the exploration, useful for scheduling
 	 * @return instance of the EDF schedule decoder.
 	 */
-	public EDFSchedulerBase<?, ?> createEDFScheduler(ExplorationSpecification expSpec) {
+	public EDFSchedulerBase<?, ?> createEDFScheduler() {
 		throw new UnsupportedOperationException(SCHED_NOT_IMPL_MSG);
 	}
 
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/.ratings
index bb2619f095a49b2b3c13ca939d7ff6c16e41ae6e..9c1c8f255af7a0b7ac2f2354e0a5728163587db0 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/.ratings
@@ -1,4 +1,4 @@
 Opt4JDseTask.java b5cb9e664e7a8fc2b5157bcdcaca740c2fa85336 YELLOW
 Opt4JExplorationSolutionSet.java 8578ee9c438bc3327a64172e996306a89606c782 RED
-Opt4JExplorerBackend.java beb1fb9bcf27974bb99d1c626a3346daf67334db RED
+Opt4JExplorerBackend.java 8c673d28854328635af99c0df5ce2864b9bc2262 RED
 Opt4JSingleExplorationSolution.java 41ce92d11b2e7a6a8c39bffa990c691160c36c8d RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java
index beb1fb9bcf27974bb99d1c626a3346daf67334db..8c673d28854328635af99c0df5ce2864b9bc2262 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java
@@ -88,8 +88,6 @@ public class Opt4JExplorerBackend extends ExplorerBackendBase<EAOptimizer> {
 	/** EA parameters. */
 	private EAOptimizer opt4JParameters;
 
-	// public static Injector DseInjector = Guice.createInjector();
-
 	/**
 	 * Contains the problem module that includes the evaluators associated with the goals of the
 	 * DSE.
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/InitialEncodingProvider.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/InitialEncodingProvider.java
deleted file mode 100644
index d378a0d5e952144ee93eff3557bd2253f84e62a9..0000000000000000000000000000000000000000
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/InitialEncodingProvider.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*-------------------------------------------------------------------------+
-| Copyright 2018 fortiss GmbH                                              |
-|                                                                          |
-| 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 org.fortiss.af3.exploration.alg.dse.backend.opt4j.create;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
-import org.opt4j.core.Genotype;
-
-/**
- * Holds encodings which are generated from the input models. In contrast to {@link Genotype}s, they
- * are not considered as variables by the optimizer.
- * Nevertheless, this provider may also hold {@link Genotype} encodings for the case that an
- * exploration feature is disabled, but it's outputs would be required by dependent features. The
- * provider is responsible to provide the required inputs iff these inputs can be constructed from
- * the input models.
- * 
- * @author diewald
- */
-public class InitialEncodingProvider {
-	/** Holds the instance. */
-	private volatile static InitialEncodingProvider INSTANCE;
-
-	/** Constructor. */
-	private InitialEncodingProvider() {
-		// Prevent direct instantiation of this singleton.
-	}
-
-	/** Returns the instance of this singleton. */
-	public static synchronized InitialEncodingProvider getInstance() {
-		if(INSTANCE == null) {
-			INSTANCE = new InitialEncodingProvider();
-		}
-		return INSTANCE;
-	}
-
-	/**
-	 * Maintains a map of {@link IExplorationEncoding}s that can be constructed from the input
-	 * models.
-	 */
-	private Map<Class<? extends IExplorationEncoding>, IExplorationEncoding> inputEncodings =
-			new HashMap<>();
-
-	/** Registers a given input encoding that is constructed from the input models. */
-	public <T extends IExplorationEncoding> void registerInputEncoding(T encoding) {
-		@SuppressWarnings("unchecked") Class<T> encodingType = (Class<T>)encoding.getClass();
-		assert (!inputEncodings.containsKey(
-				encodingType)) : "You are trying to add an encoding to the input encoding whose type is already registered. This is not supported";
-		inputEncodings.put(encodingType, encoding);
-	}
-
-	/** Returns the input encoding of the given type. */
-	@SuppressWarnings("unchecked")
-	public <T extends IExplorationEncoding> T getInputEncoding(Class<T> encodingType) {
-		return (T)inputEncodings.get(encodingType);
-	}
-
-	/**
-	 * Returns the collection of {@link IExplorationEncoding} types constructed from the input
-	 * models.
-	 */
-	public Set<Class<? extends IExplorationEncoding>> getRegisteredEncodingTypes() {
-		return inputEncodings.keySet();
-	}
-
-	/** Empties the currently held encodings. */
-	public void clearEncodings() {
-		inputEncodings.clear();
-	}
-}
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/.ratings
index e864fdd3facd432c279baa89193bc836366d4425..74e85e0a7ca0beb49168d5562e0eb0963ff2815e 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/.ratings
@@ -1 +1 @@
-SafetyFunctionArchCreator.java e15712cd3dbf2a62f38c5dcad6cf101fff8525e1 RED
+SafetyFunctionArchCreator.java 3eace15fd28f2c6ad20090306a3e35641f35e5c7 RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/SafetyFunctionArchCreator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/SafetyFunctionArchCreator.java
index e15712cd3dbf2a62f38c5dcad6cf101fff8525e1..3eace15fd28f2c6ad20090306a3e35641f35e5c7 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/SafetyFunctionArchCreator.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/SafetyFunctionArchCreator.java
@@ -33,23 +33,22 @@ import com.google.inject.Inject;
  * 
  * @author diewald
  */
-public class SafetyFunctionArchCreator<C>
-		extends ComposableCreatorBase<SafetyFunctionArchEncoding<C>> {
+public class SafetyFunctionArchCreator extends ComposableCreatorBase<SafetyFunctionArchEncoding> {
 	/** Collection of safety functions present in the system. */
-	Collection<ISafetyFunctionAdapter<C>> sfAdapters;
+	Collection<ISafetyFunctionAdapter<?>> sfAdapters;
 
 	/** Constructor. */
 	@Inject
-	public SafetyFunctionArchCreator(Collection<ISafetyFunctionAdapter<C>> sfAdapters,
+	public SafetyFunctionArchCreator(Collection<ISafetyFunctionAdapter<?>> sfAdapters,
 			DecoderDependencyGraph execDepGraph) {
 		super(execDepGraph);
 		this.sfAdapters = sfAdapters;
 	}
 
 	/** {@inheritDoc} */
-	@SuppressWarnings({"rawtypes", "unchecked"})
+	@SuppressWarnings({"rawtypes"})
 	@Override
-	public SafetyFunctionArchEncoding<C> createComposable(FlatGenotypeMap createdGenotypes,
+	public SafetyFunctionArchEncoding createComposable(FlatGenotypeMap createdGenotypes,
 			FlatPhenotypeMap decodedPhenotypes) {
 		// It is clear that the generic is right. However, the compiler does not get it. Thus,
 		// suppress the corresponding Warnings.
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/.ratings
index 83b12ee2b757da8883c88152d8f30b585cffef6d..d2b47b8a749812af25704e8df9977e32e7a09e1d 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/.ratings
@@ -1,4 +1,4 @@
-AbstractTaskMappingCreator.java a83a8ec0a92b1ba5445cda875864e4213c22e8ef RED
-FailSilentTaskMappingCreator.java 26ad97acfca346207818684919f8d9eee68fca71 RED
-FaultDetectionVotingTaskMappingCreator.java 1c66a63552fa766d3763c1a4daf34c8d03b4b3a1 RED
+AbstractTaskMappingCreator.java 481bf7cebf384ba705cd5b099c7a3a63878bf3a5 RED
+FailSilentTaskMappingCreator.java 76afb8716f870091dc962dcca267665db31dc81d RED
+FaultDetectionVotingTaskMappingCreator.java fd0059619804d5e8e07f81fc97e9ba637b42d925 RED
 TaskMappingCreator.java da026f6e18b7220ccc1acb2ecb640d7ffcd488ea RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java
index a83a8ec0a92b1ba5445cda875864e4213c22e8ef..481bf7cebf384ba705cd5b099c7a3a63878bf3a5 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java
@@ -55,7 +55,7 @@ public class AbstractTaskMappingCreator extends
 	@Override
 	public AbstractTaskMappingEncoding createComposable(FlatGenotypeMap createdGenotypes,
 			FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws ExplorationException {
-		AbstractTaskGraphEncoding<?, ?> atgEnc =
+		AbstractTaskGraphEncoding atgEnc =
 				decodedPhenotypes.getEncoding(AbstractTaskGraphEncoding.class);
 		assert (atgEnc != null) : "The required abstract task graph encoding could not be found in the map of already decoded phenotypes.";
 		// The AbstractTaskMappingEncoding may be NULL to indicate that no previous step produced a
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java
index 26ad97acfca346207818684919f8d9eee68fca71..76afb8716f870091dc962dcca267665db31dc81d 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java
@@ -50,7 +50,7 @@ public class FailSilentTaskMappingCreator extends
 	@Override
 	public FailSilentTaskMappingEncoding createComposable(FlatGenotypeMap createdGenotypes,
 			FlatPhenotypeMap<Phenotype> decodedPhenotypes) {
-		AbstractTaskGraphEncoding<?, ?> atgEnc =
+		AbstractTaskGraphEncoding atgEnc =
 				decodedPhenotypes.getEncoding(AbstractTaskGraphEncoding.class);
 		assert (atgEnc != null) : "The required abstract task graph encoding could not be found in the map of already decoded phenotypes.";
 		AbstractTaskMappingEncoding atmEnc =
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java
index 1c66a63552fa766d3763c1a4daf34c8d03b4b3a1..fd0059619804d5e8e07f81fc97e9ba637b42d925 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java
@@ -51,7 +51,7 @@ public class FaultDetectionVotingTaskMappingCreator
 	@Override
 	public FaultDetectionVotingTaskMappingEncoding createComposable(
 			FlatGenotypeMap createdGenotypes, FlatPhenotypeMap<Phenotype> decodedPhenotypes) {
-		AbstractTaskGraphEncoding<?, ?> atgEnc =
+		AbstractTaskGraphEncoding atgEnc =
 				decodedPhenotypes.getEncoding(AbstractTaskGraphEncoding.class);
 		assert (atgEnc != null) : "The required abstract task graph encoding could not be found in the map of already decoded phenotypes.";
 		AbstractTaskMappingEncoding atmEnc =
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/safetyfunctionarch/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/safetyfunctionarch/.ratings
index 5a9feb1bf3b83b3c5dbf62829fe0cf87e356b354..f8f146749732ffc1096ad67bc1f3dedce1264c45 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/safetyfunctionarch/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/safetyfunctionarch/.ratings
@@ -1,2 +1,2 @@
-SafetyFunctionArchEncoding.java d66e000c4063e5c0938085d73030970695b6478e RED
-SafetyFunctionArchEntry.java 745ccb0f4754be1610fdfa4f9cc6947348c6c154 RED
+SafetyFunctionArchEncoding.java 7b44d8c7069f7947f34988be7b69210e5e68083a RED
+SafetyFunctionArchEntry.java 83b2819b2d749611aed25170e60eee11fc0edd2b RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/safetyfunctionarch/SafetyFunctionArchEncoding.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/safetyfunctionarch/SafetyFunctionArchEncoding.java
index d66e000c4063e5c0938085d73030970695b6478e..7b44d8c7069f7947f34988be7b69210e5e68083a 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/safetyfunctionarch/SafetyFunctionArchEncoding.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/safetyfunctionarch/SafetyFunctionArchEncoding.java
@@ -41,7 +41,7 @@ import org.opt4j.core.Genotype;
  * 
  * @author diewald
  */
-public class SafetyFunctionArchEncoding<C> extends PhenotypeBase implements IExplorationEncoding,
+public class SafetyFunctionArchEncoding extends PhenotypeBase implements IExplorationEncoding,
 		ComposableGenotype, Cloneable {
 
 	/** Random generator */
@@ -51,17 +51,17 @@ public class SafetyFunctionArchEncoding<C> extends PhenotypeBase implements IExp
 	 * Collection that consists of safety function design entries for each safety function that is
 	 * present in the input models.
 	 */
-	private List<SafetyFunctionArchEntry<C>> safetyFunctionArch = new ArrayList<>();
+	private List<SafetyFunctionArchEntry> safetyFunctionArch = new ArrayList<>();
 
 	/**
 	 * Constructor for creating a {@link SafetyFunctionArchEncoding} with entries for each safety
 	 * function defined in the input models. The selected entries can be either {@code randomize}d
 	 * or default to a 1oo1 design.
 	 */
-	public SafetyFunctionArchEncoding(Collection<ISafetyFunctionAdapter<C>> safetyFunctions,
+	public SafetyFunctionArchEncoding(Collection<ISafetyFunctionAdapter<?>> safetyFunctions,
 			boolean initialize, boolean randomize) {
 		if(initialize) {
-			for(ISafetyFunctionAdapter<C> currSF : safetyFunctions) {
+			for(ISafetyFunctionAdapter<?> currSF : safetyFunctions) {
 				if(randomize) {
 					safetyFunctionArch.add(createRandomSFDesign(currSF));
 				} else {
@@ -75,24 +75,22 @@ public class SafetyFunctionArchEncoding<C> extends PhenotypeBase implements IExp
 	 * Constructor for creating a {@link SafetyFunctionArchEncoding} with the given encoding. Each
 	 * {@link SafetyFunctionArchEntry} will be cloned.
 	 */
-	public SafetyFunctionArchEncoding(Collection<SafetyFunctionArchEntry<C>> safetyFunctionDesigns) {
-		for(SafetyFunctionArchEntry<C> entry : safetyFunctionDesigns) {
+	public SafetyFunctionArchEncoding(Collection<SafetyFunctionArchEntry> safetyFunctionDesigns) {
+		for(SafetyFunctionArchEntry entry : safetyFunctionDesigns) {
 			this.safetyFunctionArch.add(entry.clone());
 		}
 	}
 
 	/** Creates a 1oo1 {@link SafetyFunctionArchEntry}. */
-	public SafetyFunctionArchEntry<C>
-			createDefaultSFDesign(ISafetyFunctionAdapter<C> safetyFunction) {
-		return new SafetyFunctionArchEntry<C>(safetyFunction, 1, 0, false, false);
+	public SafetyFunctionArchEntry createDefaultSFDesign(ISafetyFunctionAdapter<?> safetyFunction) {
+		return new SafetyFunctionArchEntry(safetyFunction, 1, 0, false, false);
 	}
 
 	/**
 	 * Creates a {@link SafetyFunctionArchEntry} with randomized parameters subject to the
 	 * limitations defined in the given {@link ISafetyFunctionAdapter}.
 	 */
-	public SafetyFunctionArchEntry<C>
-			createRandomSFDesign(ISafetyFunctionAdapter<C> safetyFunction) {
+	public SafetyFunctionArchEntry createRandomSFDesign(ISafetyFunctionAdapter<?> safetyFunction) {
 		List<SafetyArchitecture> sfArch =
 				new ArrayList<>(safetyFunction.getAllowedSafetyArchitectures());
 		int randSFArchIdx = rand.nextInt(sfArch.size());
@@ -103,15 +101,15 @@ public class SafetyFunctionArchEncoding<C> extends PhenotypeBase implements IExp
 		boolean diagPresent = isDiagPresentSafetyArch(selectedSFArch).orElse(false);
 		boolean diagUnitConnected = isDiagConnectedSafetyArch(selectedSFArch).orElse(false);
 
-		return new SafetyFunctionArchEntry<C>(safetyFunction, selChannelNum, triggerNum,
-				diagPresent, diagUnitConnected);
+		return new SafetyFunctionArchEntry(safetyFunction, selChannelNum, triggerNum, diagPresent,
+				diagUnitConnected);
 	}
 
 	/**
 	 * Adds a {@link SafetyFunctionArchEntry} to the encoding of all safety functions in the
 	 * system.
 	 */
-	public boolean addEntry(SafetyFunctionArchEntry<C> entry) {
+	public boolean addEntry(SafetyFunctionArchEntry entry) {
 		return safetyFunctionArch.add(entry);
 	}
 
@@ -119,7 +117,7 @@ public class SafetyFunctionArchEncoding<C> extends PhenotypeBase implements IExp
 	 * Returns the {@link SafetyFunctionArchEntry} that is located at the given {@code index} of the
 	 * encoding.
 	 */
-	public SafetyFunctionArchEntry<C> getEntry(int index) {
+	public SafetyFunctionArchEntry getEntry(int index) {
 		if(index < 0 || index >= safetyFunctionArch.size()) {
 			return null;
 		}
@@ -130,7 +128,7 @@ public class SafetyFunctionArchEncoding<C> extends PhenotypeBase implements IExp
 	 * Returns the {@link SafetyFunctionArchEntry}s that compose {@code this}
 	 * {@link SafetyFunctionArchEncoding}.
 	 */
-	public Collection<SafetyFunctionArchEntry<C>> getAllEntries() {
+	public Collection<SafetyFunctionArchEntry> getAllEntries() {
 		return safetyFunctionArch;
 	}
 
@@ -138,8 +136,7 @@ public class SafetyFunctionArchEncoding<C> extends PhenotypeBase implements IExp
 	 * Returns the {@link SafetyFunctionArchEntry} that represents the chosen design of the given
 	 * {@link ISafetyFunctionAdapter}.
 	 */
-	public Optional<SafetyFunctionArchEntry<C>>
-			getDesignOf(ISafetyFunctionAdapter<?> safetyFunction) {
+	public Optional<SafetyFunctionArchEntry> getDesignOf(ISafetyFunctionAdapter<?> safetyFunction) {
 		return safetyFunctionArch.stream()
 				.filter(sfd -> sfd.getSafetyFunctionAdapter() == safetyFunction).findAny();
 	}
@@ -153,18 +150,18 @@ public class SafetyFunctionArchEncoding<C> extends PhenotypeBase implements IExp
 	/** {@inheritDoc} */
 	@Override
 	public <G extends Genotype> G newInstance() {
-		Collection<ISafetyFunctionAdapter<C>> sfAdapters =
+		Collection<ISafetyFunctionAdapter<?>> sfAdapters =
 				safetyFunctionArch.stream().map(sf -> sf.getSafetyFunctionAdapter())
 						.collect(Collectors.toList());
 		@SuppressWarnings("unchecked") G sfArchEncoding =
-				(G)new SafetyFunctionArchEncoding<C>(sfAdapters, true, true);
+				(G)new SafetyFunctionArchEncoding(sfAdapters, true, true);
 		return sfArchEncoding;
 	}
 
 	/** {@inheritDoc} */
 	@Override
 	public Object clone() {
-		return new SafetyFunctionArchEncoding<C>(safetyFunctionArch);
+		return new SafetyFunctionArchEncoding(safetyFunctionArch);
 	}
 
 	/** {@inheritDoc} */
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/safetyfunctionarch/SafetyFunctionArchEntry.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/safetyfunctionarch/SafetyFunctionArchEntry.java
index 745ccb0f4754be1610fdfa4f9cc6947348c6c154..83b2819b2d749611aed25170e60eee11fc0edd2b 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/safetyfunctionarch/SafetyFunctionArchEntry.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/safetyfunctionarch/SafetyFunctionArchEntry.java
@@ -28,10 +28,10 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ISafetyFunctionAdapter;
  * 
  * @author diewald
  */
-public class SafetyFunctionArchEntry<C> implements Cloneable {
+public class SafetyFunctionArchEntry implements Cloneable {
 
 	/** References the safety function whose design is represented by {@code this} class. */
-	private ISafetyFunctionAdapter<C> safetyFunction;
+	private ISafetyFunctionAdapter<?> safetyFunction;
 
 	/** Defines the number of (independent) channels. */
 	private int numChannels = 1;
@@ -53,7 +53,7 @@ public class SafetyFunctionArchEntry<C> implements Cloneable {
 	private boolean diagnosticUnitConnected = false;
 
 	/** Constructor. */
-	public SafetyFunctionArchEntry(ISafetyFunctionAdapter<C> safetyFunction, int numChannels,
+	public SafetyFunctionArchEntry(ISafetyFunctionAdapter<?> safetyFunction, int numChannels,
 			int numTriggerSignals, boolean diagnosisUnitPresent, boolean diagnosticUnitConnected) {
 		this.safetyFunction = safetyFunction;
 		this.numChannels = numChannels;
@@ -69,7 +69,7 @@ public class SafetyFunctionArchEntry<C> implements Cloneable {
 	}
 
 	/** Returns the safety function whose design is represented by {@code this} class. */
-	public ISafetyFunctionAdapter<C> getSafetyFunctionAdapter() {
+	public ISafetyFunctionAdapter<?> getSafetyFunctionAdapter() {
 		return safetyFunction;
 	}
 
@@ -159,8 +159,8 @@ public class SafetyFunctionArchEntry<C> implements Cloneable {
 
 	/** {@inheritDoc} */
 	@Override
-	public SafetyFunctionArchEntry<C> clone() {
-		return new SafetyFunctionArchEntry<C>(safetyFunction, numChannels, triggerSignalIdx,
+	public SafetyFunctionArchEntry clone() {
+		return new SafetyFunctionArchEntry(safetyFunction, numChannels, triggerSignalIdx,
 				diagnosticUnitPresent, diagnosticUnitConnected);
 	}
 
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/.ratings
index 8f88c0bd2f9a511c9b3b847342af6bd5b7f6ea0b..6ac8a86b8553ec9fa8f83eeea80fa6837d4d47ff 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/.ratings
@@ -1,5 +1,5 @@
-AbstractTaskGraphEncoding.java 6877ab11ffa719fc830f7cfc8992c85df9d00531 RED
-InstantiatedAcyclicTaskGraphEncoding.java 6457b136cecb40baff385e415e2d1a975f82c090 RED
-InstantiatedTaskGraphEncoding.java a97dab2f3695c9d3a4ab62e5fbe062c736c9baaf RED
-SafeTaskGraphEncoding.java bf51882e640d22da5e82e2203b29d50beddc7b0e RED
-TaskGraphEncoding.java 44dba5f97c80579f31fcb14f0d1fabfa80a6734a RED
+AbstractTaskGraphEncoding.java 88b91a2840448563ad33ba82aa7cabac666580a6 RED
+InstantiatedAcyclicTaskGraphEncoding.java 850f395330622bffbbaa5ac6e628969880726fe4 RED
+InstantiatedTaskGraphEncoding.java 5c778ed0f90cb7356794caaa4ec4ebc67bd40cf0 RED
+SafeTaskGraphEncoding.java 31c8db24f2d41118b9d1341ceed7e7d931c0927a RED
+TaskGraphEncoding.java 5b6807f5c939987b23fa87988319fd3fdabb0318 RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/AbstractTaskGraphEncoding.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/AbstractTaskGraphEncoding.java
index 6877ab11ffa719fc830f7cfc8992c85df9d00531..88b91a2840448563ad33ba82aa7cabac666580a6 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/AbstractTaskGraphEncoding.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/AbstractTaskGraphEncoding.java
@@ -15,35 +15,36 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph;
 
-import java.util.Collection;
+import java.util.Set;
 
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.ComposableGenotype;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
-import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.DefaultTaskGraph;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph;
 
+import com.google.inject.Inject;
+import com.google.inject.name.Named;
+
 /**
  * {@link TaskGraphEncoding} for {@link TaskGraph}s that <i>may</i> contain <i>abstract</i> tasks,
  * i.e. tasks that need to be instantiated with <i>concrete</i> tasks from a library.
  * 
  * @author diewald
  */
-public class AbstractTaskGraphEncoding<G extends ComposableGenotype, C> extends
-		TaskGraphEncoding<G, C, DefaultTaskGraph<?>> {
+public class AbstractTaskGraphEncoding extends TaskGraphEncoding<TaskGraph> {
 
 	/** Constructor. */
-	public AbstractTaskGraphEncoding(Collection<? extends DefaultTaskGraph<?>> originalTaskGraphs,
-			Double hyperPeriod) {
-		super((Collection<DefaultTaskGraph<?>>)originalTaskGraphs, hyperPeriod);
+	@Inject
+	public AbstractTaskGraphEncoding(
+			@Named("OriginalTaskGraphs") Set<TaskGraph> originalTaskGraphs,
+			@Named("HyperPeriod") Double hyperPeriod) {
+		super(originalTaskGraphs, hyperPeriod);
 	}
 
 	/** Copy Constructor. See {@link TaskGraphEncoding#TaskGraphEncoding(TaskGraphEncoding)}. */
-	public AbstractTaskGraphEncoding(AbstractTaskGraphEncoding<G, C> encoding) {
+	public AbstractTaskGraphEncoding(AbstractTaskGraphEncoding encoding) {
 		super(encoding);
 	}
 
 	/** {@inheritDoc} */
-	@SuppressWarnings("unchecked")
 	@Override
 	public Class<? extends Phenotype> getPTypeToRegister() {
 		return AbstractTaskGraphEncoding.class;
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/InstantiatedAcyclicTaskGraphEncoding.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/InstantiatedAcyclicTaskGraphEncoding.java
index 6457b136cecb40baff385e415e2d1a975f82c090..850f395330622bffbbaa5ac6e628969880726fe4 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/InstantiatedAcyclicTaskGraphEncoding.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/InstantiatedAcyclicTaskGraphEncoding.java
@@ -17,11 +17,9 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph;
 
 import java.util.Collection;
 
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.AcyclicTaskGraph;
-import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.DefaultTaskGraph;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph;
 
 /**
@@ -31,16 +29,16 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph;
  * 
  * @author diewald
  */
-public class InstantiatedAcyclicTaskGraphEncoding<T extends InstantiatedTaskMappingEntry, C>
-		extends TaskGraphEncoding<InstantiatedTaskMappingEncoding<T>, C, AcyclicTaskGraph> {
+public class InstantiatedAcyclicTaskGraphEncoding<T extends InstantiatedTaskMappingEntry> extends
+		TaskGraphEncoding<AcyclicTaskGraph> {
+
 	/** Constructor. */
-	public InstantiatedAcyclicTaskGraphEncoding(Collection<DefaultTaskGraph<?>> taskGraphs,
-			Double hyperPeriod) {
-		super(AcyclicTaskGraph.transformToAcyclicGraphs(taskGraphs), hyperPeriod);
+	public InstantiatedAcyclicTaskGraphEncoding(Collection<TaskGraph> collection, Double hyperPeriod) {
+		super(AcyclicTaskGraph.transformToAcyclicGraphs(collection), hyperPeriod);
 	}
 
 	/** Copy Constructor. See {@link TaskGraphEncoding#TaskGraphEncoding(TaskGraphEncoding)}. */
-	public InstantiatedAcyclicTaskGraphEncoding(InstantiatedAcyclicTaskGraphEncoding<T, C> encoding) {
+	public InstantiatedAcyclicTaskGraphEncoding(InstantiatedAcyclicTaskGraphEncoding<T> encoding) {
 		super(encoding);
 	}
 
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/InstantiatedTaskGraphEncoding.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/InstantiatedTaskGraphEncoding.java
index a97dab2f3695c9d3a4ab62e5fbe062c736c9baaf..5c778ed0f90cb7356794caaa4ec4ebc67bd40cf0 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/InstantiatedTaskGraphEncoding.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/InstantiatedTaskGraphEncoding.java
@@ -17,10 +17,8 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph;
 
 import java.util.Collection;
 
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
-import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.DefaultTaskGraph;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph;
 
 /**
@@ -28,16 +26,15 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph;
  * 
  * @author diewald
  */
-public class InstantiatedTaskGraphEncoding<T extends InstantiatedTaskMappingEntry, C> extends
-		TaskGraphEncoding<InstantiatedTaskMappingEncoding<T>, C, DefaultTaskGraph<?>> {
+public class InstantiatedTaskGraphEncoding<T extends InstantiatedTaskMappingEntry> extends
+		TaskGraphEncoding<TaskGraph> {
 	/** Constructor. */
-	public InstantiatedTaskGraphEncoding(Collection<DefaultTaskGraph<?>> originalTaskGraphs,
-			Double hyperPeriod) {
-		super((Collection<DefaultTaskGraph<?>>)originalTaskGraphs, hyperPeriod);
+	public InstantiatedTaskGraphEncoding(Collection<TaskGraph> collection, Double hyperPeriod) {
+		super(collection, hyperPeriod);
 	}
 
 	/** Copy Constructor. See {@link TaskGraphEncoding#TaskGraphEncoding(TaskGraphEncoding)}. */
-	public InstantiatedTaskGraphEncoding(InstantiatedTaskGraphEncoding<T, C> encoding) {
+	public InstantiatedTaskGraphEncoding(InstantiatedTaskGraphEncoding<T> encoding) {
 		super(encoding);
 	}
 
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/SafeTaskGraphEncoding.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/SafeTaskGraphEncoding.java
index bf51882e640d22da5e82e2203b29d50beddc7b0e..31c8db24f2d41118b9d1341ceed7e7d931c0927a 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/SafeTaskGraphEncoding.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/SafeTaskGraphEncoding.java
@@ -16,11 +16,11 @@
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph;
 
 import java.util.Collection;
+import java.util.Set;
 
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter;
-import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.DefaultTaskGraph;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph;
 
 /**
@@ -29,19 +29,18 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph;
  * 
  * @author diewald
  */
-public class SafeTaskGraphEncoding<C> extends
-		AbstractTaskGraphEncoding<SafetyFunctionArchEncoding<C>, C> {
+public class SafeTaskGraphEncoding extends AbstractTaskGraphEncoding {
 	/** Collection of task graphs extracted from the input models. */
-	Collection<TaskGraph> originalTaskGraphs;
+	private Collection<TaskGraph> originalTaskGraphs;
 
 	/** Constructor. */
-	public SafeTaskGraphEncoding(Collection<TaskGraph> originalTaskGraphs, Double hyperPeriod) {
-		super((Collection<? extends DefaultTaskGraph<?>>)originalTaskGraphs, hyperPeriod);
+	public SafeTaskGraphEncoding(Set<TaskGraph> originalTaskGraphs, Double hyperPeriod) {
+		super(originalTaskGraphs, hyperPeriod);
 		this.originalTaskGraphs = originalTaskGraphs;
 	}
 
 	/** Copy Constructor. See {@link TaskGraphEncoding#TaskGraphEncoding(TaskGraphEncoding)}. */
-	public SafeTaskGraphEncoding(SafeTaskGraphEncoding<C> encoding) {
+	public SafeTaskGraphEncoding(SafeTaskGraphEncoding encoding) {
 		super(encoding);
 	}
 
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/TaskGraphEncoding.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/TaskGraphEncoding.java
index 44dba5f97c80579f31fcb14f0d1fabfa80a6734a..5b6807f5c939987b23fa87988319fd3fdabb0318 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/TaskGraphEncoding.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskgraph/TaskGraphEncoding.java
@@ -22,7 +22,6 @@ import java.util.HashSet;
 
 import org.eclipse.emf.ecore.EObject;
 import org.fortiss.af3.component.model.Component;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.PhenotypeBase;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter;
@@ -38,8 +37,8 @@ import org.opt4j.core.Genotype;
  * 
  * @author diewald
  */
-public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> extends PhenotypeBase
-		implements IExplorationEncoding, Cloneable {
+public class TaskGraphEncoding<T extends TaskGraph> extends PhenotypeBase implements
+		IExplorationEncoding, Cloneable {
 	/** {@link TaskGraph} that represents the deployable components and their signals. */
 	protected Collection<T> taskGraphs;
 
@@ -50,13 +49,13 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten
 	 * Collection of {@link ITaskAdapter}s that shall be mapped to deployment targets
 	 * ({@link IExecutionUnitAdapter}).
 	 */
-	protected Collection<ITaskAdapter<C>> deployableComponents = new HashSet<>();
+	protected Collection<ITaskAdapter<?>> taskSet = new HashSet<>();
 
 	/**
 	 * Subset of {@link ITaskAdapter}s from the collection of deployable components
 	 * that may be replicated.
 	 */
-	protected Collection<ITaskAdapter<C>> replicableComponents = new HashSet<>();
+	protected Collection<ITaskAdapter<?>> replicableTasks = new HashSet<>();
 
 	/**
 	 * Constructor that initializes {@code this} encoding with the collection of
@@ -66,12 +65,11 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten
 		this.taskGraphs = taskGraphs;
 		this.hyperPeriod = hyperPeriod;
 
-		this.deployableComponents.clear();
+		this.taskSet.clear();
 
 		for(TaskGraph tg : taskGraphs) {
-			@SuppressWarnings("unchecked") Collection<? extends ITaskAdapter<C>> tasks =
-					(Collection<? extends ITaskAdapter<C>>)tg.getTasks();
-			deployableComponents.addAll(tasks);
+			Collection<? extends ITaskAdapter<?>> tasks = tg.getTasks();
+			taskSet.addAll(tasks);
 		}
 	}
 
@@ -79,11 +77,11 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten
 	 * Copy constructor that takes an existing {@link TaskGraphEncoding} as input and
 	 * generates an equivalent copy.
 	 */
-	public TaskGraphEncoding(TaskGraphEncoding<G, C, T> encoding) {
+	public TaskGraphEncoding(TaskGraphEncoding<T> encoding) {
 		this.hyperPeriod = encoding.getHyperPeriod();
 		taskGraphs.addAll(encoding.getTaskGraphs());
-		deployableComponents.addAll(encoding.deployableComponents);
-		replicableComponents.addAll(encoding.replicableComponents);
+		taskSet.addAll(encoding.taskSet);
+		replicableTasks.addAll(encoding.replicableTasks);
 	}
 
 	/** Returns the collection of {@link TaskGraph}s composing {@code this} encoding. */
@@ -95,7 +93,7 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten
 	 * Adds the given {@link ITaskAdapter} to its corresponding {@link TaskGraph} in {@code this}
 	 * encoding.
 	 */
-	public void addTask(ITaskAdapter<C> task) {
+	public void addTask(ITaskAdapter<?> task) {
 		// TODO: Here, we use the assumption that the given task refers to a task that is also
 		// present in the system model adapter.
 
@@ -105,9 +103,9 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten
 		assert (taskGraph != null) : "The task to be added could be neither found in this encoding, nor the input models.";
 
 		taskGraph.addTask(task);
-		deployableComponents.add(task);
+		taskSet.add(task);
 		if(task.getMinReplication() != task.getMaxReplication()) {
-			replicableComponents.add(task);
+			replicableTasks.add(task);
 		}
 	}
 
@@ -115,7 +113,7 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten
 	 * Adds all signals defined in the input models for the given {@link ITaskAdapter} which must be
 	 * contained in any of the internal {@link TaskGraph}s.
 	 */
-	public void addSignalsOf(ITaskAdapter<C> task, TaskGraph origTaskGraph) {
+	public void addSignalsOf(ITaskAdapter<?> task, TaskGraph origTaskGraph) {
 		// The given task must be in the any of the task graphs!
 
 		T taskGraph = getGraphOf(task, taskGraphs);
@@ -142,7 +140,7 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten
 	 * Adds the signals of a cloned task by querying the existing signals from the clone's original
 	 * task.
 	 */
-	public void addClonedSignalsOf(ITaskAdapter<C> originalTask, ITaskAdapter<C> clonedTask) {
+	public void addClonedSignalsOf(ITaskAdapter<?> originalTask, ITaskAdapter<?> clonedTask) {
 		// The given task must be in the any of the task graphs!
 
 		T taskGraph = getGraphOf(originalTask, taskGraphs);
@@ -171,16 +169,16 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten
 	 * Clones the given {@link ITaskAdapter} and adds it to the corresponding task
 	 * graph and further data structures.
 	 */
-	public ITaskAdapter<C> cloneTask(ITaskAdapter<C> task) {
+	public ITaskAdapter<?> cloneTask(ITaskAdapter<?> task) {
 		// Clone the task and add it to the corresponding task graph.
 		TaskGraph taskGraph = getGraphOf(task, taskGraphs);
-		ITaskAdapter<C> clonedTask = task.clone();
+		ITaskAdapter<?> clonedTask = task.clone();
 		taskGraph.addTask(clonedTask);
 		addClonedSignalsOf(task, clonedTask);
 		// Add the cloned task to the cache sets.
-		deployableComponents.add(clonedTask);
-		if(replicableComponents.contains(task)) {
-			replicableComponents.add(clonedTask);
+		taskSet.add(clonedTask);
+		if(replicableTasks.contains(task)) {
+			replicableTasks.add(clonedTask);
 		}
 
 		return clonedTask;
@@ -194,7 +192,7 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten
 	}
 
 	/** Whether {@code this} encoding contains the given task. */
-	public boolean containsTask(ITaskAdapter<C> task) {
+	public boolean containsTask(ITaskAdapter<?> task) {
 		return getGraphOf(task, taskGraphs) != null;
 	}
 
@@ -206,12 +204,12 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten
 	 * 
 	 * @returns {@code true} iff a containing {@link TaskGraph} has been found.
 	 */
-	public boolean removeTask(ITaskAdapter<C> task) {
+	public boolean removeTask(ITaskAdapter<?> task) {
 		TaskGraph taskGraph = getGraphOf(task, taskGraphs);
 		if(taskGraph != null) {
 			taskGraph.removeTask(task);
-			deployableComponents.remove(task);
-			replicableComponents.remove(task);
+			taskSet.remove(task);
+			replicableTasks.remove(task);
 			return true;
 		}
 		assert (false); // Never here.
@@ -241,8 +239,8 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten
 	 * @return The asociated {@link ITaskAdapter}, or {@code null} if none can be
 	 *         identified.
 	 */
-	public synchronized ITaskAdapter<C> getDeployableComponentOf(EObject originalEObject) {
-		for(ITaskAdapter<C> deployableComponentAdapter : deployableComponents) {
+	public synchronized ITaskAdapter<?> getDeployableComponentOf(EObject originalEObject) {
+		for(ITaskAdapter<?> deployableComponentAdapter : taskSet) {
 			if(deployableComponentAdapter.getObject() == originalEObject) {
 				return deployableComponentAdapter;
 			}
@@ -254,8 +252,8 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten
 	 * Returns the deployable (software) components that my be
 	 * replicated. May contain "abstract" {@link Component}s.
 	 */
-	public Collection<ITaskAdapter<C>> getReplicableComponents() {
-		return replicableComponents;
+	public Collection<ITaskAdapter<?>> getReplicableComponents() {
+		return replicableTasks;
 	}
 
 	/**
@@ -263,8 +261,8 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten
 	 * only those {@link ITaskAdapter} are searched which can be actually executed on
 	 * {@link ExecutionUnit}s, i.e. "abstract" components are not considered.
 	 */
-	public ITaskAdapter<C> getReplicableDeployableComponentOf(EObject originalEObject) {
-		for(ITaskAdapter<C> deployableComponentAdapter : replicableComponents) {
+	public ITaskAdapter<?> getReplicableDeployableComponentOf(EObject originalEObject) {
+		for(ITaskAdapter<?> deployableComponentAdapter : replicableTasks) {
 			if(deployableComponentAdapter.getObject() == originalEObject) {
 				return deployableComponentAdapter;
 			}
@@ -280,13 +278,6 @@ public class TaskGraphEncoding<G extends Genotype, C, T extends TaskGraph> exten
 	/** {@inheritDoc} */
 	@Override
 	public Object clone() {
-		return new TaskGraphEncoding<G, C, T>(this);
-	}
-
-	/** {@inheritDoc} */
-	@SuppressWarnings("unchecked")
-	@Override
-	public Class<? extends Phenotype> getPTypeToRegister() {
-		return (Class<? extends Phenotype>)TaskGraphEncoding.class;
+		return new TaskGraphEncoding<T>(this);
 	}
 }
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/.ratings
index f05c8e7c5ddf642fd64df0efb2fa4ba6fac627e0..ab8a8b6cb1ae9151033340e290f8b02ec8a6abe7 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/.ratings
@@ -1,2 +1,2 @@
-TaskMappingEncoding.java f5d0f55f893f7d5583ff5c12840d5fb4c9add5a9 RED
+TaskMappingEncoding.java b944240cb5e8ab19fc773d85e652f2d880d8361f RED
 TaskMappingEntry.java 407c9065007f8cd4adc8b64eea13a837bba581ae RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java
index f5d0f55f893f7d5583ff5c12840d5fb4c9add5a9..b944240cb5e8ab19fc773d85e652f2d880d8361f 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java
@@ -46,6 +46,7 @@ import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
 import org.fortiss.af3.exploration.model.ExplorationConstraint;
 import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiAllocationConstraint;
 import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiDislocationConstraint;
+import org.fortiss.af3.task.model.Task;
 import org.fortiss.tooling.common.util.LambdaUtils;
 
 import com.google.common.collect.HashMultimap;
@@ -97,7 +98,7 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T
 	protected Collection<Partition> partitions;
 
 	/** The input {@link TaskGraphEncoding} that contains the tasks and their signals. */
-	protected TaskGraphEncoding<?, ?, ?> tgEncoding;
+	protected TaskGraphEncoding<?> tgEncoding;
 
 	/** The input {@link PartitionMappingEncoding}: Targets to deploy tasks. */
 	protected PartitionMappingEncoding partMappingEncoding;
@@ -111,7 +112,7 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T
 	 */
 	@SuppressWarnings("unchecked")
 	public TaskMappingEncoding(PartitionMappingEncoding partMappingEncoding,
-			TaskGraphEncoding<?, ?, ?> tgEncoding) {
+			TaskGraphEncoding<?> tgEncoding) {
 		this.tgEncoding = tgEncoding;
 		this.partMappingEncoding = partMappingEncoding;
 		this.tasks = (Collection<S>)tgEncoding.getTasks();
@@ -129,7 +130,7 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T
 	 *             if no valid allocation targets can be identified for one {@link ITaskAdapter}.
 	 */
 	public TaskMappingEncoding(PartitionMappingEncoding partMappingEncoding,
-			TaskGraphEncoding<?, ?, ?> tgEncoding, boolean initialize) throws ExplorationException {
+			TaskGraphEncoding<?> tgEncoding, boolean initialize) throws ExplorationException {
 		this(partMappingEncoding, tgEncoding);
 		if(initialize) {
 			resetEncoding();
@@ -143,7 +144,7 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T
 	 *             if no valid allocation targets can be identified for one {@link ITaskAdapter}.
 	 */
 	public TaskMappingEncoding(PartitionMappingEncoding partMappingEncoding,
-			TaskGraphEncoding<?, ?, ?> tgEncoding,
+			TaskGraphEncoding<?> tgEncoding,
 			TaskMappingEncoding<ITaskAdapter<?>, ?> incompleteEncoding) throws ExplorationException {
 		this(partMappingEncoding, tgEncoding);
 		completeEncoding(incompleteEncoding);
@@ -724,7 +725,7 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T
 	}
 
 	/** Returns all independent {@link DefaultTaskGraph}s contained in this encoding. */
-	public TaskGraphEncoding<?, ?, ?> getTaskGraphEncoding() {
+	public TaskGraphEncoding<?> getTaskGraphEncoding() {
 		return tgEncoding;
 	}
 
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/.ratings
index 30db933ed23ca4aa33164654e1e4c20374c885db..0b39ca83e17aefa7a059939e84a9c1c9783b1ad1 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/.ratings
@@ -1,2 +1,2 @@
-AbstractTaskMappingEncoding.java d4abec537050aa6a6bad3805d19d5db10cc2418e RED
+AbstractTaskMappingEncoding.java fa5ec76217a920b514c7ee255f3ca0b3f0360ae0 RED
 AbstractTaskMappingEntry.java 5a402c12dbf882f6c6f19146a66f837764f50e1f RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java
index d4abec537050aa6a6bad3805d19d5db10cc2418e..fa5ec76217a920b514c7ee255f3ca0b3f0360ae0 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java
@@ -44,8 +44,7 @@ public class AbstractTaskMappingEncoding extends
 	 * Constructor that is initialized with a reference to the DSE specification and the input
 	 * system model.
 	 */
-	AbstractTaskMappingEncoding(PartitionMappingEncoding partEnc,
-			SafeTaskGraphEncoding<?> tgEncoding) {
+	AbstractTaskMappingEncoding(PartitionMappingEncoding partEnc, SafeTaskGraphEncoding tgEncoding) {
 		super(partEnc, tgEncoding);
 	}
 
@@ -56,13 +55,13 @@ public class AbstractTaskMappingEncoding extends
 	 *             if no valid allocation targets can be identified for one {@link ITaskAdapter}.
 	 */
 	public AbstractTaskMappingEncoding(PartitionMappingEncoding partEnc,
-			SafeTaskGraphEncoding<?> tgEncoding, boolean initialize) throws ExplorationException {
+			SafeTaskGraphEncoding tgEncoding, boolean initialize) throws ExplorationException {
 		super(partEnc, tgEncoding, initialize);
 	}
 
 	/** Copy Constructor. */
 	public AbstractTaskMappingEncoding(PartitionMappingEncoding partEnc,
-			TaskGraphEncoding<?, ?, ?> tgEncoding) {
+			TaskGraphEncoding<?> tgEncoding) {
 		super(partEnc, tgEncoding);
 	}
 
@@ -73,7 +72,7 @@ public class AbstractTaskMappingEncoding extends
 	 *             if no valid allocation targets can be identified for one {@link ITaskAdapter}.
 	 */
 	public AbstractTaskMappingEncoding(PartitionMappingEncoding partEnc,
-			AbstractTaskGraphEncoding<?, ?> atgEnc, boolean initialize) throws ExplorationException {
+			AbstractTaskGraphEncoding atgEnc, boolean initialize) throws ExplorationException {
 		super(partEnc, atgEnc, initialize);
 	}
 
@@ -87,7 +86,7 @@ public class AbstractTaskMappingEncoding extends
 	 *             if no valid allocation targets can be identified for one {@link ITaskAdapter}.
 	 */
 	public AbstractTaskMappingEncoding(PartitionMappingEncoding partEnc,
-			AbstractTaskGraphEncoding<?, ?> atgEnc, AbstractTaskMappingEncoding partialEncoding)
+			AbstractTaskGraphEncoding atgEnc, AbstractTaskMappingEncoding partialEncoding)
 			throws ExplorationException {
 		super(partEnc, atgEnc, partialEncoding);
 	}
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/.ratings
index ba01f626e726707317c9fd264291324f8c43889e..bbd58aa16c293185c11b74b8e3bdfb9ac45a02a2 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/.ratings
@@ -1,6 +1,6 @@
-FailSilentTaskMappingEncoding.java bf7ccbfa67f5f83c0b29175813613841b99f8494 RED
-FailSilentTaskMappingEntry.java b73b4242c590b45ad30c482390fee8eaa06179dc RED
-FaultDetectionVotingTaskMappingEncoding.java b1b8e16a4286dca3b5d8081f4406b08ed0d3d3eb RED
+FailSilentTaskMappingEncoding.java cbd5546ce9cb78fd284464ea07d9be4a68a96006 RED
+FailSilentTaskMappingEntry.java 6cc36c6e47786732ffc71c636820a44659917886 RED
+FaultDetectionVotingTaskMappingEncoding.java 247891eb76b773dca87017b293fa7f0711781ad1 RED
 FaultDetectionVotingTaskMappingEntry.java ae401b16a2098ee85809f895c2469f494b6fc279 RED
-InstantiatedTaskMappingEncoding.java 009a5a48ac03e206cbe6ba98439455b1c7d2c850 RED
+InstantiatedTaskMappingEncoding.java 0900e95fdc40241738762b84810a194ace305da7 RED
 InstantiatedTaskMappingEntry.java ffac1e77d53b2a9253b864b876aae18b6820f1f0 RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java
index bf7ccbfa67f5f83c0b29175813613841b99f8494..cbd5546ce9cb78fd284464ea07d9be4a68a96006 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java
@@ -39,13 +39,12 @@ public class FailSilentTaskMappingEncoding extends
 	 * system model.
 	 */
 	FailSilentTaskMappingEncoding(PartitionMappingEncoding partEnc,
-			AbstractTaskGraphEncoding<?, ?> tgEncoding) {
+			AbstractTaskGraphEncoding tgEncoding) {
 		super(partEnc, tgEncoding);
 	}
 
 	/** Copy Constructor. */
-	FailSilentTaskMappingEncoding(PartitionMappingEncoding partEnc,
-			TaskGraphEncoding<?, ?, ?> tgEncoding) {
+	FailSilentTaskMappingEncoding(PartitionMappingEncoding partEnc, TaskGraphEncoding<?> tgEncoding) {
 		super(partEnc, tgEncoding);
 	}
 
@@ -57,8 +56,7 @@ public class FailSilentTaskMappingEncoding extends
 	 *             if no valid allocation targets can be identified for one {@link ITaskAdapter}.
 	 */
 	public FailSilentTaskMappingEncoding(PartitionMappingEncoding partEnc,
-			AbstractTaskGraphEncoding<?, ?> tgEncoding, boolean initialize)
-			throws ExplorationException {
+			AbstractTaskGraphEncoding tgEncoding, boolean initialize) throws ExplorationException {
 		super(partEnc, tgEncoding, initialize);
 	}
 
@@ -67,7 +65,7 @@ public class FailSilentTaskMappingEncoding extends
 	 * {@link AbstractTaskMappingEncoding}.
 	 */
 	public FailSilentTaskMappingEncoding(PartitionMappingEncoding partEnc,
-			AbstractTaskGraphEncoding<?, ?> tgEncoding, AbstractTaskMappingEncoding abstractEncoding) {
+			AbstractTaskGraphEncoding tgEncoding, AbstractTaskMappingEncoding abstractEncoding) {
 		super(partEnc, tgEncoding, abstractEncoding);
 	}
 
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEntry.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEntry.java
index b73b4242c590b45ad30c482390fee8eaa06179dc..6cc36c6e47786732ffc71c636820a44659917886 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEntry.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEntry.java
@@ -30,8 +30,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter;
 public class FailSilentTaskMappingEntry extends InstantiatedTaskMappingEntry implements Cloneable {
 
 	/** Constructs a mapping entry the represents the mapping to a given deployment target. */
-	FailSilentTaskMappingEntry(ITaskAdapter<?> deployableComponent,
-			Partition deploymentTarget) {
+	FailSilentTaskMappingEntry(ITaskAdapter<?> deployableComponent, Partition deploymentTarget) {
 		super(deployableComponent, deploymentTarget);
 	}
 
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java
index b1b8e16a4286dca3b5d8081f4406b08ed0d3d3eb..247891eb76b773dca87017b293fa7f0711781ad1 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java
@@ -38,7 +38,7 @@ public class FaultDetectionVotingTaskMappingEncoding extends
 	 * system model.
 	 */
 	FaultDetectionVotingTaskMappingEncoding(PartitionMappingEncoding partEnc,
-			AbstractTaskGraphEncoding<?, ?> tgEncoding) {
+			AbstractTaskGraphEncoding tgEncoding) {
 		super(partEnc, tgEncoding);
 	}
 
@@ -50,8 +50,7 @@ public class FaultDetectionVotingTaskMappingEncoding extends
 	 *             if no valid allocation targets can be identified for one {@link ITaskAdapter}.
 	 */
 	public FaultDetectionVotingTaskMappingEncoding(PartitionMappingEncoding partEnc,
-			AbstractTaskGraphEncoding<?, ?> tgEncoding, boolean initialize)
-			throws ExplorationException {
+			AbstractTaskGraphEncoding tgEncoding, boolean initialize) throws ExplorationException {
 		super(partEnc, tgEncoding, initialize);
 		assert (false) : "Never here any more.";
 	}
@@ -61,7 +60,7 @@ public class FaultDetectionVotingTaskMappingEncoding extends
 	 * the given {@link AbstractTaskMappingEncoding}.
 	 */
 	public FaultDetectionVotingTaskMappingEncoding(PartitionMappingEncoding partEnc,
-			AbstractTaskGraphEncoding<?, ?> tgEncoding, AbstractTaskMappingEncoding abstractEncoding) {
+			AbstractTaskGraphEncoding tgEncoding, AbstractTaskMappingEncoding abstractEncoding) {
 		super(partEnc, tgEncoding, abstractEncoding);
 	}
 
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java
index 009a5a48ac03e206cbe6ba98439455b1c7d2c850..0900e95fdc40241738762b84810a194ace305da7 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java
@@ -46,13 +46,13 @@ public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTask
 	 * system model.
 	 */
 	protected InstantiatedTaskMappingEncoding(PartitionMappingEncoding partEnc,
-			AbstractTaskGraphEncoding<?, ?> tgEncoding) {
+			AbstractTaskGraphEncoding tgEncoding) {
 		super(partEnc, tgEncoding);
 	}
 
 	/** Copy Constructor. */
 	protected InstantiatedTaskMappingEncoding(PartitionMappingEncoding partEnc,
-			TaskGraphEncoding<?, ?, ?> tgEncoding) {
+			TaskGraphEncoding<?> tgEncoding) {
 		super(partEnc, tgEncoding);
 	}
 
@@ -64,8 +64,7 @@ public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTask
 	 *             if no valid allocation targets can be identified for one {@link ITaskAdapter}.
 	 */
 	public InstantiatedTaskMappingEncoding(PartitionMappingEncoding partEnc,
-			AbstractTaskGraphEncoding<?, ?> tgEncoding, boolean initialize)
-			throws ExplorationException {
+			AbstractTaskGraphEncoding tgEncoding, boolean initialize) throws ExplorationException {
 		super(partEnc, tgEncoding, initialize);
 	}
 
@@ -74,7 +73,7 @@ public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTask
 	 * given {@link AbstractTaskMappingEncoding}.
 	 */
 	public InstantiatedTaskMappingEncoding(PartitionMappingEncoding partEnc,
-			AbstractTaskGraphEncoding<?, ?> tgEncoding, AbstractTaskMappingEncoding abstractEncoding) {
+			AbstractTaskGraphEncoding tgEncoding, AbstractTaskMappingEncoding abstractEncoding) {
 		super(partEnc, tgEncoding);
 		this.constraintMap = abstractEncoding.copyConstraintMap(null);
 		instantiateAbstractEntries(abstractEncoding);
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/.ratings
index 3b4fc495bd41f35dfaead69c2ee2015a9c9875cc..04d9ec76289e6c35972b7b9a5c730d70f8279805 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/.ratings
@@ -2,4 +2,4 @@ ComposableCreator.java 6d2d61205890a2b0b99f41d2caa4debc511c8b4a RED
 ComposableCreatorBase.java e1a898541dd2b480e6c345ad2429bf93393957e6 RED
 CompositeCreator.java bb054d281931f461ca67def20360cc767940e204 RED
 CompositeCreatorBase.java d897947ff0db02ea1cac4034a4912f9afce283ec RED
-GuiceCreator.java 34e89e1ed5c8aa411b61682e84be0e9910533b3e RED
+GuiceCreator.java 0a5a0c771346775ba21a739ebf8761c17bd78b13 RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/GuiceCreator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/GuiceCreator.java
index 34e89e1ed5c8aa411b61682e84be0e9910533b3e..0a5a0c771346775ba21a739ebf8761c17bd78b13 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/GuiceCreator.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/GuiceCreator.java
@@ -15,7 +15,8 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.create;
 
-import org.opt4j.core.genotype.IntegerGenotype;
+import org.opt4j.core.Genotype;
+import org.opt4j.core.genotype.CompositeGenotype;
 import org.opt4j.core.problem.Creator;
 
 /**
@@ -23,11 +24,12 @@ import org.opt4j.core.problem.Creator;
  * 
  * @author diewald
  */
-public class GuiceCreator implements Creator<IntegerGenotype> {
+public class GuiceCreator implements
+		Creator<CompositeGenotype<Class<? extends Genotype>, ? extends Genotype>> {
 
 	/** {@inheritDoc} */
 	@Override
-	public IntegerGenotype create() {
-		return new IntegerGenotype(1, 10);
+	public CompositeGenotype<Class<? extends Genotype>, ? extends Genotype> create() {
+		return new CompositeGenotype();
 	}
 }
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/.ratings
index c19bee17a012987651b2651c2c114b6b4b487995..e6e9b2d5050efe844e7f1a9eaec1b1186bd15fb0 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/.ratings
@@ -2,5 +2,7 @@ ComposableDecoder.java 0ef247e0e8424968cd8dab8317df0e504c5018d4 RED
 ComposableDecoderBase.java 7c47b41e609b6911128efa469c2dd65122276bcc RED
 CompositeDecoder.java 68864146cbd7b0d1444d4157cf88023deb4a21ea RED
 CompositeDecoderBase.java cc878483ec3dcf3afd60509579c7c17a3433893c RED
-GuiceDecoder.java cbdf0f9505a65552dc503c1b92c017deca0ba44e RED
-PhenotypeDecoder.java 82766d64d8d6d0aa02078921517848c3585240a6 RED
+GuiceDecoder.java d0284d290da2c0248f1a59b654045f5d1042303e RED
+PhenotypeDecoder.java 042d35c9bcba9a2cddc5e82ca5abe6f52438d1c3 RED
+ThreadScope.java f3a2b90fdbf0b2aabde4112c94623da5c262952b RED
+ThreadScoped.java a8335b0831586ea6ced17a5e7adf2952b72957d9 RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/GuiceDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/GuiceDecoder.java
index cbdf0f9505a65552dc503c1b92c017deca0ba44e..d0284d290da2c0248f1a59b654045f5d1042303e 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/GuiceDecoder.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/GuiceDecoder.java
@@ -17,11 +17,15 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositege
 
 import static org.fortiss.af3.exploration.alg.service.ExplorationServiceManager.getService;
 
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception.DecodingRuntimeException;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
 import org.fortiss.af3.exploration.alg.dse.module.DecoderModule;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.alg.service.IExplorationModuleService;
 import org.opt4j.core.Genotype;
+import org.opt4j.core.genotype.CompositeGenotype;
 import org.opt4j.core.problem.Decoder;
 import org.opt4j.core.start.Opt4JTask;
 
@@ -38,6 +42,10 @@ import com.google.inject.Provides;
  */
 public class GuiceDecoder extends AbstractModule implements Decoder<Genotype, Phenotype> {
 
+	/** SystemModelAdapter containing input parameters. */
+	// FIXME: Move to general injector in the ExplorationModule service.
+	protected SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> sysModel;
+
 	/** Resulting phenotype from the decoding phase that is composed of sub-{@link Phenotype}s. */
 	protected Phenotype composedPhenotype;
 
@@ -53,22 +61,27 @@ public class GuiceDecoder extends AbstractModule implements Decoder<Genotype, Ph
 	protected Injector decodingInjector;
 
 	/** Reference to the input {@link Genotype}. */
-	protected Genotype genotype;
+	// @ThreadScoped
+	protected ThreadLocal<CompositeGenotype<Class<? extends Genotype>, ? extends Genotype>> genotype =
+			new ThreadLocal<>();
 
-	// TODO: Switch from field injections to Constructor injection as far as possible.
-	// /** Constructor. */
-	// @Inject
-	// public GuiceDecoder(Injector opt4JInjector) {
-	// decoderInjector = opt4JInjector;
-	// }
+	/** Constructor. */
+	public GuiceDecoder(SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> sysModel) {
+		this.sysModel = sysModel;
+	}
 
 	/** {@inheritDoc} */
+	@SuppressWarnings("unchecked")
 	@Override
-	@Provides
 	public Phenotype decode(Genotype genotype) {
 		// The decode operations are responsible to add the results of the decode operation to the
 		// parent phenotype.
-		this.genotype = genotype;
+		if(!(genotype instanceof CompositeGenotype)) {
+			throw new DecodingRuntimeException(genotype, this,
+					"The top-most DSE process decoder requires a CompositeGenotype as input!");
+		}
+		this.genotype
+				.set((CompositeGenotype<Class<? extends Genotype>, ? extends Genotype>)genotype);
 		// TODO(AD): See configure(): We need a service machenism and user configuration to select
 		// the desired set of activated decoders.
 		decodingInjector = opt4JInjector.createChildInjector(this);
@@ -78,15 +91,51 @@ public class GuiceDecoder extends AbstractModule implements Decoder<Genotype, Ph
 
 	/** Provides the composite {@link Genotype} as required by the Guice framework. */
 	@Provides
-	public Genotype getGenotype() {
-		return genotype;
+	// @ThreadScoped
+			public
+			CompositeGenotype<Class<? extends Genotype>, ? extends Genotype> getGenotype() {
+		return genotype.get();
+	}
+
+	/** Returns the sub-genotype of the given type, or {@code null} if none is found. */
+	public <T extends Genotype> T getGenotype(Class<T> genotypeType) {
+		return getGenotype().get(genotypeType);
 	}
 
 	/** {@inheritDoc} */
 	@Override
 	protected void configure() {
+		// bindScope(ThreadScoped.class, new ThreadScope());
+		install(sysModel);
+
 		for(DecoderModule<?> module : getService(IExplorationModuleService.class).getDecoders()) {
 			install(module);
 		}
 	}
+
+	/*
+	 * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+	 * HACKs below! They are used to retrieve the concrete genotypes. Scoping shall resolve the
+	 * problem of Genotypes living in parallel.
+	 * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+	 */
+	/**
+	 * Returns the {@link SafetyFunctionArchEncoding} sub-{@link Genotype} passed to this decoder.
+	 * (Testing!!!)
+	 */
+	// TODO: Move to the encoding to render the approach more modular.
+	@Provides
+	public SafetyFunctionArchEncoding getSFAEnc() {
+		return getGenotype(SafetyFunctionArchEncoding.class);
+	}
+
+	// @Provides
+	// public SafetyFunctionArchEncoding getSFAEnc() {
+	// return getGenotype(SafetyFunctionArchEncoding.class);
+	// }
+	//
+	// @Provides
+	// public SafetyFunctionArchEncoding getSFAEnc() {
+	// return getGenotype(SafetyFunctionArchEncoding.class);
+	// }
 }
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/PhenotypeDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/PhenotypeDecoder.java
index 82766d64d8d6d0aa02078921517848c3585240a6..042d35c9bcba9a2cddc5e82ca5abe6f52438d1c3 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/PhenotypeDecoder.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/PhenotypeDecoder.java
@@ -18,7 +18,6 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositege
 import java.util.Collection;
 
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception.DecodingException;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.problem.CompositeProblemModuleBase;
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/ThreadScope.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/ThreadScope.java
new file mode 100644
index 0000000000000000000000000000000000000000..f3a2b90fdbf0b2aabde4112c94623da5c262952b
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/ThreadScope.java
@@ -0,0 +1,137 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2018 fortiss GmbH                                              |
+|                                                                          |
+| 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 org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode;
+
+import static com.google.common.base.Preconditions.checkState;
+
+import java.util.Map;
+
+import com.google.inject.Key;
+import com.google.inject.OutOfScopeException;
+import com.google.inject.Provider;
+import com.google.inject.Scope;
+import com.google.inject.Scopes;
+
+/**
+ * Scopes a single execution of a block of code. Apply this scope with a
+ * try/finally block:
+ * 
+ * <pre>
+ * <code>
+ * 
+ *   scope.enter();
+ *   try {
+ *     // explicitly seed some seed objects...
+ *     scope.seed(Key.get(SomeObject.class), someObject);
+ *     // create and access scoped objects
+ *   } finally {
+ *     scope.exit();
+ *   }
+ * </code>
+ * </pre>
+ *
+ * The scope can be initialized with one or more seed values by calling
+ * <code>seed(key, value)</code> before the injector will be called upon to
+ * provide for this key. A typical use is for a servlet filter to enter/exit the
+ * scope, representing a Request Scope, and seed HttpServletRequest and
+ * HttpServletResponse. For each key inserted with seed(), you must include a
+ * corresponding binding:
+ * 
+ * <pre>
+ * <code>
+ *   bind(key)
+ *       .toProvider(SimpleScope.&lt;KeyClass&gt;seededKeyProvider())
+ *       .in(ScopeAnnotation.class);
+ * </code>
+ * </pre>
+ *
+ * @author Jesse Wilson
+ * @author Fedor Karpelevitch
+ */
+public class ThreadScope implements Scope {
+
+	private static final Provider<Object> SEEDED_KEY_PROVIDER = new Provider<Object>() {
+		public Object get() {
+			throw new IllegalStateException("If you got here then it means that"
+					+ " your code asked for scoped object which should have been"
+					+ " explicitly seeded in this scope by calling"
+					+ " SimpleScope.seed(), but was not.");
+		}
+	};
+	private final ThreadLocal<Map<Key<?>, Object>> values = new ThreadLocal<Map<Key<?>, Object>>();
+
+	// public void enter() {
+	// checkState(values.get() == null, "A scoping block is already in progress");
+	// values.set(Maps.<Key<?>, Object>newHashMap());
+	// }
+	//
+	// public void exit() {
+	// checkState(values.get() != null, "No scoping block in progress");
+	// values.remove();
+	// }
+
+	public <T> void seed(Key<T> key, T value) {
+		Map<Key<?>, Object> scopedObjects = getScopedObjectMap(key);
+		checkState(!scopedObjects.containsKey(key), "A value for the key %s was "
+				+ "already seeded in this scope. Old value: %s New value: %s", key,
+				scopedObjects.get(key), value);
+		scopedObjects.put(key, value);
+	}
+
+	public <T> void seed(Class<T> clazz, T value) {
+		seed(Key.get(clazz), value);
+	}
+
+	public <T> Provider<T> scope(final Key<T> key, final Provider<T> unscoped) {
+		return new Provider<T>() {
+			public T get() {
+				Map<Key<?>, Object> scopedObjects = getScopedObjectMap(key);
+
+				@SuppressWarnings("unchecked") T current = (T)scopedObjects.get(key);
+				if(current == null && !scopedObjects.containsKey(key)) {
+					current = unscoped.get();
+
+					// don't remember proxies; these exist only to serve circular dependencies
+					if(Scopes.isCircularProxy(current)) {
+						return current;
+					}
+
+					scopedObjects.put(key, current);
+				}
+				return current;
+			}
+		};
+	}
+
+	private <T> Map<Key<?>, Object> getScopedObjectMap(Key<T> key) {
+		Map<Key<?>, Object> scopedObjects = values.get();
+		if(scopedObjects == null) {
+			throw new OutOfScopeException("Cannot access " + key + " outside of a scoping block");
+		}
+		return scopedObjects;
+	}
+
+	/**
+	 * Returns a provider that always throws exception complaining that the object
+	 * in question must be seeded before it can be injected.
+	 *
+	 * @return typed provider
+	 */
+	@SuppressWarnings({"unchecked"})
+	public static <T> Provider<T> seededKeyProvider() {
+		return (Provider<T>)SEEDED_KEY_PROVIDER;
+	}
+}
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/ThreadScoped.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/ThreadScoped.java
new file mode 100644
index 0000000000000000000000000000000000000000..a8335b0831586ea6ced17a5e7adf2952b72957d9
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/ThreadScoped.java
@@ -0,0 +1,38 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2018 fortiss GmbH                                              |
+|                                                                          |
+| 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 org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import com.google.inject.Scope;
+import com.google.inject.ScopeAnnotation;
+
+/**
+ * Annotation to mark the decoding {@link Scope}.
+ * 
+ * @author diewald
+ */
+@Target({TYPE, METHOD})
+@Retention(RUNTIME)
+@ScopeAnnotation
+public @interface ThreadScoped {
+	// No impl for annotations...
+}
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/.ratings
index ea6d806fb50d0416bc161f2658cd082a720f7028..afc426e4c2d40e2f1935f6d87a36a4383ecc6412 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/.ratings
@@ -1,3 +1,4 @@
-DecodingException.java 2988884a382981eac51bb42fec30f41d2cc683b6 RED
+DecodingException.java 40bb717fbcdfbceabbc0b7610d6c5bb85ec78cc1 YELLOW
+DecodingRuntimeException.java b464b624cd1b387210206c53e63c4b367705bde7 YELLOW
 DependencyException.java b5ebab9ef715091cfe6d998c0acc70658a8e5536 RED
 MissingDependencyException.java 474cd48820802b026a7109abb2ae56a2ab8eb7b3 RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/DecodingException.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/DecodingException.java
index 2988884a382981eac51bb42fec30f41d2cc683b6..40bb717fbcdfbceabbc0b7610d6c5bb85ec78cc1 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/DecodingException.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/DecodingException.java
@@ -27,39 +27,39 @@ import org.opt4j.core.problem.Decoder;
  */
 public class DecodingException extends ExplorationException {
 	/** Constructor specialized for decoding errors. */
-	public DecodingException(Genotype gentotype, Decoder<?, ?> decoder) {
-		super("Decoding Error: Could not decode " + gentotype + " using the decoder " + decoder +
+	public DecodingException(Genotype genotype, Decoder<?, ?> decoder) {
+		super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder +
 				".");
 	}
 
 	/** Constructor specialized for decoding errors. Takes an additional message. */
-	public DecodingException(Genotype gentotype, Decoder<?, ?> decoder, String msg) {
-		super("Decoding Error: Could not decode " + gentotype + " using the decoder " + decoder +
+	public DecodingException(Genotype genotype, Decoder<?, ?> decoder, String msg) {
+		super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder +
 				". " + msg);
 	}
 
 	/** Constructor specialized for decoding errors. Takes an additional message. */
-	public DecodingException(Genotype gentotype, Decoder<?, ?> decoder, String msg, Exception e) {
-		super("Decoding Error: Could not decode " + gentotype + " using the decoder " + decoder +
+	public DecodingException(Genotype genotype, Decoder<?, ?> decoder, String msg, Exception e) {
+		super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder +
 				". " + msg, e);
 	}
 
 	/** Constructor specialized for decoding errors. */
-	public DecodingException(Genotype gentotype, ComposableDecoder<?, ?> decoder) {
-		super("Decoding Error: Could not decode " + gentotype + " using the decoder " + decoder +
+	public DecodingException(Genotype genotype, ComposableDecoder<?, ?> decoder) {
+		super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder +
 				".");
 	}
 
 	/** Constructor specialized for decoding errors. Takes an additional message. */
-	public DecodingException(Genotype gentotype, ComposableDecoder<?, ?> decoder, String msg) {
-		super("Decoding Error: Could not decode " + gentotype + " using the decoder " + decoder +
+	public DecodingException(Genotype genotype, ComposableDecoder<?, ?> decoder, String msg) {
+		super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder +
 				". " + msg);
 	}
 
 	/** Constructor specialized for decoding errors. Takes an additional message. */
-	public DecodingException(Genotype gentotype, ComposableDecoder<?, ?> decoder, String msg,
+	public DecodingException(Genotype genotype, ComposableDecoder<?, ?> decoder, String msg,
 			Exception e) {
-		super("Decoding Error: Could not decode " + gentotype + " using the decoder " + decoder +
+		super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder +
 				". " + msg, e);
 	}
 }
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/DecodingRuntimeException.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/DecodingRuntimeException.java
new file mode 100644
index 0000000000000000000000000000000000000000..b464b624cd1b387210206c53e63c4b367705bde7
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/exception/DecodingRuntimeException.java
@@ -0,0 +1,66 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2016 fortiss GmbH                                              |
+|                                                                          |
+| 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 org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception;
+
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoder;
+import org.fortiss.af3.exploration.alg.exception.ExplorationRuntimeException;
+import org.opt4j.core.Genotype;
+import org.opt4j.core.problem.Decoder;
+
+/**
+ * Container for exceptions thrown in the decoding steps.
+ * 
+ * @author diewald
+ */
+public class DecodingRuntimeException extends ExplorationRuntimeException {
+	/** Constructor specialized for decoding errors. */
+	public DecodingRuntimeException(Genotype genotype, Decoder<?, ?> decoder) {
+		super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder +
+				".");
+	}
+
+	/** Constructor specialized for decoding errors. Takes an additional message. */
+	public DecodingRuntimeException(Genotype genotype, Decoder<?, ?> decoder, String msg) {
+		super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder +
+				". " + msg);
+	}
+
+	/** Constructor specialized for decoding errors. Takes an additional message. */
+	public DecodingRuntimeException(Genotype genotype, Decoder<?, ?> decoder, String msg,
+			Exception e) {
+		super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder +
+				". " + msg, e);
+	}
+
+	/** Constructor specialized for decoding errors. */
+	public DecodingRuntimeException(Genotype genotype, ComposableDecoder<?, ?> decoder) {
+		super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder +
+				".");
+	}
+
+	/** Constructor specialized for decoding errors. Takes an additional message. */
+	public DecodingRuntimeException(Genotype genotype, ComposableDecoder<?, ?> decoder, String msg) {
+		super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder +
+				". " + msg);
+	}
+
+	/** Constructor specialized for decoding errors. Takes an additional message. */
+	public DecodingRuntimeException(Genotype genotype, ComposableDecoder<?, ?> decoder, String msg,
+			Exception e) {
+		super("Decoding Error: Could not decode " + genotype + " using the decoder " + decoder +
+				". " + msg, e);
+	}
+}
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/phenotype/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/phenotype/.ratings
index 5b66f64cb3aaa1de3c11b8e043e7d73c70b5d67a..eeb34295208eaa7e2ad045a2c48ed97698d337f3 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/phenotype/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/phenotype/.ratings
@@ -1,3 +1,3 @@
-FlatPhenotypeMap.java e14d80c49f974bb9857fe0d2068b39ccee6b0c87 RED
+FlatPhenotypeMap.java f29317abac6af034248a1b24dd95a0a330e202ec RED
 Phenotype.java 724ee55fdbd1a040e4363ec1fe2cb4d9f42b8e55 RED
 PhenotypeBase.java 0f0fc0300fdad1b3516dab143e657767ddaf36fa RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/phenotype/FlatPhenotypeMap.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/phenotype/FlatPhenotypeMap.java
index e14d80c49f974bb9857fe0d2068b39ccee6b0c87..f29317abac6af034248a1b24dd95a0a330e202ec 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/phenotype/FlatPhenotypeMap.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/phenotype/FlatPhenotypeMap.java
@@ -19,7 +19,6 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.InitialEncodingProvider;
 import org.fortiss.af3.exploration.alg.service.ExplorationEncodingMap;
 import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
 import org.opt4j.core.problem.Creator;
@@ -51,8 +50,7 @@ public class FlatPhenotypeMap<T extends Phenotype> extends ExplorationEncodingMa
 			if(IExplorationEncoding.class.isAssignableFrom(subGenotypeClass)) {
 				@SuppressWarnings("unchecked") Class<IExplorationEncoding> inputEncoding =
 						(Class<IExplorationEncoding>)subGenotypeClass;
-				@SuppressWarnings("unchecked") P encoding =
-						(P)InitialEncodingProvider.getInstance().getInputEncoding(inputEncoding);
+				@SuppressWarnings("unchecked") P encoding = null;
 				phenotype = encoding;
 			}
 		}
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/safetyfunctionarch/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/safetyfunctionarch/.ratings
index 3a20768d3a0ce810c79d8d4153862a809b9e98d7..bb690714be56fd8376a14cb867f591da5ee4bc0f 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/safetyfunctionarch/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/safetyfunctionarch/.ratings
@@ -1,2 +1,2 @@
-CopySafetyFunctionArch.java 92c728e3c40e1dde265d43564957d2cd55e7109b RED
+CopySafetyFunctionArch.java 93d7b1397d4b8d793c047a8c952b383cf2fe730f RED
 CopySafetyFunctionArchModule.java ed14d74cc2f945124b7383ef1a1c1262ff546dea RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/safetyfunctionarch/CopySafetyFunctionArch.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/safetyfunctionarch/CopySafetyFunctionArch.java
index 92c728e3c40e1dde265d43564957d2cd55e7109b..93d7b1397d4b8d793c047a8c952b383cf2fe730f 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/safetyfunctionarch/CopySafetyFunctionArch.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/safetyfunctionarch/CopySafetyFunctionArch.java
@@ -23,11 +23,11 @@ import org.opt4j.operators.copy.Copy;
  * 
  * @author diewald
  */
-public class CopySafetyFunctionArch implements Copy<SafetyFunctionArchEncoding<?>> {
+public class CopySafetyFunctionArch implements Copy<SafetyFunctionArchEncoding> {
 
 	/** {@inheritDoc} */
 	@Override
-	public SafetyFunctionArchEncoding<?> copy(SafetyFunctionArchEncoding<?> other) {
-		return (SafetyFunctionArchEncoding<?>)other.clone();
+	public SafetyFunctionArchEncoding copy(SafetyFunctionArchEncoding other) {
+		return (SafetyFunctionArchEncoding)other.clone();
 	}
 }
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/.ratings
index a8076f4f97de26a379bae51fce51c98ef0979e63..91fd68666a313d20e47f13c8747e44d60c16c865 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/.ratings
@@ -1,5 +1,5 @@
-MutateChannelNumber.java 2e49168b8d78cf98669babe400f47e6beb2fcfe5 RED
-MutateConnectedDiagnosisPresent.java 9089e7c8c0fdf2f2b2fe3a91495090dcd840efab RED
-MutateSafetyArchBase.java 572ca678c91ba6b7288ae672312c89d67e117bd9 RED
-MutateSafetyFunctionArchitectureModule.java 005944541da58e07816b67cd7ab15872b7503dfc RED
-MutateSafetyTriggerSignalNumber.java 385efb314ad5faabc4a18f25d189a413b6c2ac64 RED
+MutateChannelNumber.java f616faa5824fbfef7856192c8d5bd7c389eeb978 RED
+MutateConnectedDiagnosisPresent.java 0156e6fbb1774823a5c8a3ee24dea809fd5e44a6 RED
+MutateSafetyArchBase.java 29c91b28d8f1bb2e65add4525c6027942fc59a33 RED
+MutateSafetyFunctionArchitectureModule.java bb771ba71ab6788b2b6bbf462a7a8da65cab5328 RED
+MutateSafetyTriggerSignalNumber.java f3dbe9689e96ae5d8d4934f41123ab2af8d5183f RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateChannelNumber.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateChannelNumber.java
index 2e49168b8d78cf98669babe400f47e6beb2fcfe5..f616faa5824fbfef7856192c8d5bd7c389eeb978 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateChannelNumber.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateChannelNumber.java
@@ -26,14 +26,14 @@ import org.opt4j.operators.mutate.Mutate;
  * 
  * @author diewald
  */
-public class MutateChannelNumber<C> extends MutateSafetyArchBase<C> {
+public class MutateChannelNumber<C> extends MutateSafetyArchBase {
 	/** {@inheritDoc} */
 	@Override
-	public void mutate(SafetyFunctionArchEncoding<C> genotype, double p) {
+	public void mutate(SafetyFunctionArchEncoding genotype, double p) {
 		// Determine the safety functions that shall be manipulated.
-		Collection<SafetyFunctionArchEntry<C>> selEntries = selectSafetyFunctions(genotype, p);
+		Collection<SafetyFunctionArchEntry> selEntries = selectSafetyFunctions(genotype, p);
 
-		for(SafetyFunctionArchEntry<C> sfEntry : selEntries) {
+		for(SafetyFunctionArchEntry sfEntry : selEntries) {
 			int[] allowedChannels = sfEntry.getSafetyFunctionAdapter().getAllowedChannelNumbers();
 			int selectedChannelIdx = sfEntry.getNumChannels();
 			if(rand.nextBoolean()) {
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateConnectedDiagnosisPresent.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateConnectedDiagnosisPresent.java
index 9089e7c8c0fdf2f2b2fe3a91495090dcd840efab..0156e6fbb1774823a5c8a3ee24dea809fd5e44a6 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateConnectedDiagnosisPresent.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateConnectedDiagnosisPresent.java
@@ -27,14 +27,14 @@ import org.opt4j.operators.mutate.Mutate;
  * 
  * @author diewald
  */
-public class MutateConnectedDiagnosisPresent<C> extends MutateSafetyArchBase<C> {
+public class MutateConnectedDiagnosisPresent extends MutateSafetyArchBase {
 	/** {@inheritDoc} */
 	@Override
-	public void mutate(SafetyFunctionArchEncoding<C> genotype, double p) {
+	public void mutate(SafetyFunctionArchEncoding genotype, double p) {
 		// Determine the safety functions that shall be manipulated.
-		Collection<SafetyFunctionArchEntry<C>> selEntries = selectSafetyFunctions(genotype, p);
+		Collection<SafetyFunctionArchEntry> selEntries = selectSafetyFunctions(genotype, p);
 
-		for(SafetyFunctionArchEntry<C> sfEntry : selEntries) {
+		for(SafetyFunctionArchEntry sfEntry : selEntries) {
 			// Toggle the presence of a diagnostic unit for this safety function. This has only an
 			// effect if the selected architecture supports additional diagnostic units.
 			// 2/3 --> equal distribution of choices considering the connection to an output unit.
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyArchBase.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyArchBase.java
index 572ca678c91ba6b7288ae672312c89d67e117bd9..29c91b28d8f1bb2e65add4525c6027942fc59a33 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyArchBase.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyArchBase.java
@@ -29,20 +29,20 @@ import org.opt4j.operators.mutate.Mutate;
  * 
  * @author diewald
  */
-public abstract class MutateSafetyArchBase<C> extends MutateBase<SafetyFunctionArchEncoding<C>> {
+public abstract class MutateSafetyArchBase extends MutateBase<SafetyFunctionArchEncoding> {
 	/**
 	 * Selects a collection of {@link SafetyFunctionArchEntry}s from the given
 	 * {@link SafetyFunctionArchEncoding} whose element number depends on the given probability
 	 * {@code p}.
 	 */
-	protected Collection<SafetyFunctionArchEntry<C>>
-			selectSafetyFunctions(SafetyFunctionArchEncoding<C> genotype, double p) {
-		Collection<SafetyFunctionArchEntry<C>> selEntries = new ArrayList<>();
+	protected Collection<SafetyFunctionArchEntry> selectSafetyFunctions(
+			SafetyFunctionArchEncoding genotype, double p) {
+		Collection<SafetyFunctionArchEntry> selEntries = new ArrayList<>();
 		int size = genotype.size();
 		int idx = rand.nextInt(size);
 		for(int i = 0; i < genotype.size(); i++) {
 			if(idx < p * size) {
-				SafetyFunctionArchEntry<C> entry = genotype.getEntry(idx);
+				SafetyFunctionArchEntry entry = genotype.getEntry(idx);
 				if(entry != null) {
 					selEntries.add(entry);
 				}
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyFunctionArchitectureModule.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyFunctionArchitectureModule.java
index 005944541da58e07816b67cd7ab15872b7503dfc..bb771ba71ab6788b2b6bbf462a7a8da65cab5328 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyFunctionArchitectureModule.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyFunctionArchitectureModule.java
@@ -30,15 +30,13 @@ import com.google.inject.Module;
  */
 public class MutateSafetyFunctionArchitectureModule extends MutateOperatorModuleBase {
 	/** {@inheritDoc} */
-	@SuppressWarnings({"rawtypes", "unchecked"})
+	@SuppressWarnings({"rawtypes"})
 	@Override
 	public void config() {
 		super.config();
 
 		addOperatorInstance(SafetyFunctionArchEncoding.class, new MutateChannelNumber());
-		addOperatorInstance(SafetyFunctionArchEncoding.class,
-				new MutateSafetyTriggerSignalNumber());
-		addOperatorInstance(SafetyFunctionArchEncoding.class,
-				new MutateConnectedDiagnosisPresent());
+		addOperatorInstance(SafetyFunctionArchEncoding.class, new MutateSafetyTriggerSignalNumber());
+		addOperatorInstance(SafetyFunctionArchEncoding.class, new MutateConnectedDiagnosisPresent());
 	}
 }
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyTriggerSignalNumber.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyTriggerSignalNumber.java
index 385efb314ad5faabc4a18f25d189a413b6c2ac64..f3dbe9689e96ae5d8d4934f41123ab2af8d5183f 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyTriggerSignalNumber.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyTriggerSignalNumber.java
@@ -27,16 +27,17 @@ import org.opt4j.operators.mutate.Mutate;
  * 
  * @author diewald
  */
-public class MutateSafetyTriggerSignalNumber<C> extends MutateSafetyArchBase<C> {
+public class MutateSafetyTriggerSignalNumber<C> extends MutateSafetyArchBase {
 	/** {@inheritDoc} */
 	@Override
-	public void mutate(SafetyFunctionArchEncoding<C> genotype, double p) {
+	public void mutate(SafetyFunctionArchEncoding genotype, double p) {
 		// Determine the safety functions that shall be manipulated.
-		Collection<SafetyFunctionArchEntry<C>> selEntries = selectSafetyFunctions(genotype, p);
+		Collection<SafetyFunctionArchEntry> selEntries = selectSafetyFunctions(genotype, p);
 
-		for(SafetyFunctionArchEntry<C> sfEntry : selEntries) {
-			int[] allowedTriggers = sfEntry.getSafetyFunctionAdapter()
-					.getAllowedTriggerSignalNumbers(sfEntry.getNumChannels());
+		for(SafetyFunctionArchEntry sfEntry : selEntries) {
+			int[] allowedTriggers =
+					sfEntry.getSafetyFunctionAdapter().getAllowedTriggerSignalNumbers(
+							sfEntry.getNumChannels());
 			int selectedTriggerIdx = sfEntry.getTriggerSignalIdx();
 			if(rand.nextBoolean()) {
 				// Increase the req. number of trigger for the safety function.
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/.ratings
index aaff7ae70f5c466d0257824a89f474fde2e5b832..85fbc6dc9c1881334aa61a794373f4f12c7e5ed5 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/.ratings
@@ -1,8 +1,7 @@
-ArchExpSubDecoder.java 8878133e8b65858b4cd7cedd243d49d391066323 RED
 ArchitectureDecoder.java d067dc995e0895860d98d717647c0f7b061f5908 RED
-ArchitectureExplorationProblemModule.java a1c6b8ced3b1bf54ce9d9b957b0f4c80a821bdab RED
+ArchitectureExplorationProblemModule.java 957299811d40d0a11126ff4f8eaa45d0cc54af7e RED
 DseProblemModuleBase.java 0eba41852529e92e7255c7a7d8fce18354facbca RED
 EvaluatorWrapper.java 3747e5b78b1dcef8e1595c1ae9354e8ef2738e79 RED
 ExplorationGoalPriorityMultiEvaluator.java 1f6d2aa6ece8acdf4f57face0439f3429ab87329 RED
 ProblemModuleBase.java 460f7a8a07435eb13634caa9072e425bdf20e399 RED
-StrictTTDecoder.java d44d02b5f866717ebaa40a8a1a32225852e56af8 RED
+StrictTTDecoder.java d55ece0076bec24d74fd18dae3e33aaa9d2ac854 RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchitectureExplorationProblemModule.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchitectureExplorationProblemModule.java
index a1c6b8ced3b1bf54ce9d9b957b0f4c80a821bdab..957299811d40d0a11126ff4f8eaa45d0cc54af7e 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchitectureExplorationProblemModule.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchitectureExplorationProblemModule.java
@@ -71,7 +71,7 @@ public class ArchitectureExplorationProblemModule
 		// bindProblem(dseFactory.createArchitectureExplorationCreator(),
 		// dseFactory.createArchitectureDecoder(execDepGraph), archEvaluator);
 
-		bindProblem(new GuiceCreator(), new GuiceDecoder(), archEvaluator);
+		bindProblem(new GuiceCreator(), new GuiceDecoder(systemModelAdapter), archEvaluator);
 
 		// Create/Bind the subproblems of the architectural exploration problem.
 		try {
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/StrictTTDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/StrictTTDecoder.java
index d44d02b5f866717ebaa40a8a1a32225852e56af8..d55ece0076bec24d74fd18dae3e33aaa9d2ac854 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/StrictTTDecoder.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/StrictTTDecoder.java
@@ -15,29 +15,23 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-
 import org.fortiss.af3.exploration.alg.dse.TaskMappingFactory;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.comm.MessageEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.platform.PlatformCommunicationGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.InstantiatedAcyclicTaskGraphEncoding;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.InstantiatedTaskGraphEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoderBase;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception.DecodingException;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.StrictTTSchedule;
+import org.fortiss.af3.exploration.alg.dse.module.DecoderModule;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.FailSilentExecModelFactory;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.comm.TDMABusScheduler;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.proc.EDFSchedulerBase;
-import org.fortiss.af3.exploration.moea.model.DseSpecification;
 import org.opt4j.core.Genotype;
 
-import com.google.inject.Inject;
+import com.google.inject.Provides;
 
 /**
  * The Decoder decodes {@link Genotype}s into phenotype objects.
@@ -45,7 +39,7 @@ import com.google.inject.Inject;
  * @author huang
  */
 public class StrictTTDecoder<S extends InstantiatedTaskMappingEntry, T extends InstantiatedTaskMappingEncoding<S>>
-		extends ComposableDecoderBase<T, StrictTTSchedule<S, T>> implements ArchExpSubDecoder {
+		extends DecoderModule<StrictTTSchedule<S, T>> {
 	/** Underlying EDF task scheduler */
 	private EDFSchedulerBase<S, T> simpleEDFScheduler;
 
@@ -57,95 +51,45 @@ public class StrictTTDecoder<S extends InstantiatedTaskMappingEntry, T extends I
 	 * run.
 	 */
 	@SuppressWarnings("unchecked")
-	@Inject
-	public StrictTTDecoder(DseSpecification explorationDefinition) {
-
-		TaskMappingFactory<?, ?> tmFactory = TaskMappingFactory.getInstance();
-
-		simpleEDFScheduler = (EDFSchedulerBase<S, T>)tmFactory
-				.createEDFScheduler(explorationDefinition.getTargetSpecification());
-		simpleBusScheduler =
-				new TDMABusScheduler<S, T>(explorationDefinition.getTargetSpecification());
+	public StrictTTDecoder() {
+		// FIXME: HACK to create the FailSilentTaskMappingFactory. Support for FaultDetection will
+		// be added again after switching to DI mechanisms completely.
+		// TaskMappingFactory<?, ?> tmFactory = TaskMappingFactory.getInstance();
+		TaskMappingFactory<?, ?> tmFactory = FailSilentExecModelFactory.getInstance();
+		simpleEDFScheduler = (EDFSchedulerBase<S, T>)tmFactory.createEDFScheduler();
+		simpleBusScheduler = new TDMABusScheduler<S, T>();
 	}
 
-	/** {@inheritDoc} */
-	@Override
-	public StrictTTSchedule<S, T> decodeComposable(T genotype,
-			FlatPhenotypeMap<Phenotype> phenotypeTypeMap) {
-		@SuppressWarnings("unchecked") MessageEncoding<S, T> msgEnc =
-				phenotypeTypeMap.getEncoding(MessageEncoding.class);
-		assert (msgEnc != null) : "The required message encoding could not be found in the map of already decoded phenotypes.";
-		@SuppressWarnings("unchecked") InstantiatedAcyclicTaskGraphEncoding<S, ?> acycItgEnc =
-				phenotypeTypeMap.getEncoding(InstantiatedAcyclicTaskGraphEncoding.class);
-		assert (acycItgEnc != null) : "The required acyclic and instantiated task graph encoding could not be found in the map of already decoded phenotypes.";
-		PlatformCommunicationGraphEncoding pcgEncoding =
-				phenotypeTypeMap.getEncoding(PlatformCommunicationGraphEncoding.class);
-		PartitionMappingEncoding partEnc =
-				phenotypeTypeMap.getEncoding(PartitionMappingEncoding.class);
-		assert (partEnc != null) : "The required partition mapping encoding could not be found in the map of already decoded phenotypes.";
+	@Provides
+	public StrictTTSchedule<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> decode(
+			FailSilentTaskMappingEncoding itmEnc,
+			MessageEncoding<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> msgEnc,
+			InstantiatedAcyclicTaskGraphEncoding<FailSilentTaskMappingEntry> acycItgEnc,
+			PlatformCommunicationGraphEncoding pcgEncoding, PartitionMappingEncoding partEnc) {
+		return decode(itmEnc, msgEnc, acycItgEnc, pcgEncoding, partEnc);
+	}
 
+	public StrictTTSchedule<S, T> decode(T itmEnc, MessageEncoding<S, T> msgEnc,
+			InstantiatedAcyclicTaskGraphEncoding<S> acycItgEnc,
+			PlatformCommunicationGraphEncoding pcgEncoding, PartitionMappingEncoding partEnc) {
 		// TODO: Externalize the validation such that the encoding is not required to be passed to
 		// the constructor (is there for validation purposes)
-		StrictTTSchedule<S, T> schedule = new StrictTTSchedule<S, T>(genotype);
-		simpleEDFScheduler.schedule(acycItgEnc, partEnc, genotype, schedule);
-
+		StrictTTSchedule<S, T> schedule = new StrictTTSchedule<S, T>(itmEnc);
+		simpleEDFScheduler.schedule(acycItgEnc, partEnc, itmEnc, schedule);
 		assert (schedule.validateSchedule(true));
 
 		// TODO: Find out why the message scheduler does not require the task graph. Actually, it
 		// should require it...
-		simpleBusScheduler.schedule(schedule, msgEnc.getPeriodicMessages(), acycItgEnc,
-				pcgEncoding);
+		simpleBusScheduler
+				.schedule(schedule, msgEnc.getPeriodicMessages(), acycItgEnc, pcgEncoding);
 		assert (schedule.validateSchedule(true));
 
 		return schedule;
 	}
 
-	/**
-	 * {@inheritDoc}
-	 * 
-	 * @throws DecodingException
-	 *             see {@link ComposableDecoderBase}
-	 */
-	@Override
-	public StrictTTSchedule<S, T> updateComposable(T inGenotype, StrictTTSchedule<S, T> outGenotype,
-			FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException {
-		// Not required: The message encoding is a Phenotype only.
-		return null;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Collection<Class<?>> getRequiredTypes() {
-		Collection<Class<?>> reqTypes = new ArrayList<>();
-		reqTypes.add(InstantiatedTaskMappingEncoding.class);
-		reqTypes.add(MessageEncoding.class);
-		reqTypes.add(PlatformCommunicationGraphEncoding.class);
-		reqTypes.add(PartitionMappingEncoding.class);
-		reqTypes.add(InstantiatedAcyclicTaskGraphEncoding.class);
-		// FIXME: Remove as soon as the evaluators can declare their required Phenotypes!!! (Needed
-		// for the period evaluator)
-		reqTypes.add(InstantiatedTaskGraphEncoding.class);
-
-		return reqTypes;
-	}
-
-	/** {@inheritDoc} */
-	@SuppressWarnings("unchecked")
-	@Override
-	public Class<StrictTTSchedule<S, T>> getOutputType() {
-		Class<? super StrictTTSchedule<S, T>> retType = StrictTTSchedule.class;
-		return (Class<StrictTTSchedule<S, T>>)retType;
-	}
-
 	/** {@inheritDoc} */
 	@Override
-	public Collection<Class<?>> getOptionalTypes() {
-		return Collections.emptySet();
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Class<?> getPrimaryInputType() {
-		return InstantiatedTaskMappingEncoding.class;
+	public StrictTTSchedule<S, T> decode(Genotype genotype) {
+		return null;
 	}
 }
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings
index f910098ee71d86e6535e84f8620c8440e3e83ad4..96d2ad9c606a2e76a3c187d3a2aa49af55d5fa47 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings
@@ -1 +1 @@
-MessageDecoder.java 78eda9938a9d176f0e69bcffd4bbec28049db93d RED
+MessageDecoder.java 5faf743c30edc661d4f9c4b39483c34a5148a8a9 RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java
index 78eda9938a9d176f0e69bcffd4bbec28049db93d..5faf743c30edc661d4f9c4b39483c34a5148a8a9 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java
@@ -15,7 +15,6 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.comm;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Map;
 
@@ -23,16 +22,14 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.comm.MessageEn
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.platform.PlatformCommunicationGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.InstantiatedTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoder;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoderBase;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception.DecodingException;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
+import org.fortiss.af3.exploration.alg.dse.module.DecoderModule;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.comm.Message;
@@ -42,8 +39,9 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.comm.IMessageRouter.
 import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.comm.MessageRouter;
 import org.jgrapht.DirectedGraph;
 import org.jgrapht.graph.DefaultEdge;
+import org.opt4j.core.Genotype;
 
-import com.google.inject.Inject;
+import com.google.inject.Provides;
 
 /**
  * {@link ComposableDecoder} that takes an {@link InstantiatedTaskMappingEncoding} and a) an
@@ -53,7 +51,7 @@ import com.google.inject.Inject;
  * @author diewald
  */
 public class MessageDecoder<S extends TaskMappingEntry<ITaskAdapter<?>, Partition>, T extends TaskMappingEncoding<ITaskAdapter<?>, S>>
-		extends ComposableDecoderBase<T, MessageEncoding<S, T>> {
+		extends DecoderModule<MessageEncoding<S, T>> {
 	/**
 	 * {@link MessageGenerator} which analyzes an {@link InstantiatedTaskMappingEncoding} and
 	 * determines the required {@link Message}s.
@@ -64,37 +62,28 @@ public class MessageDecoder<S extends TaskMappingEntry<ITaskAdapter<?>, Partitio
 	protected IMessageRouter messageRouter;
 
 	/** Default constructor that requires a reference to the input models. */
-	@Inject
 	public MessageDecoder() {
 		messageGenerator = new MessageGenerator<S, T>();
 		messageRouter = new MessageRouter();
 	}
 
-	/**
-	 * {@inheritDoc}
-	 * 
-	 * @throws DecodingException
-	 */
-	@Override
-	public MessageEncoding<S, T> decodeComposable(T genotype,
-			FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException {
-		PlatformCommunicationGraphEncoding pcgEncoding =
-				decodedPhenotypes.getEncoding(PlatformCommunicationGraphEncoding.class);
-		assert (pcgEncoding != null) : "The required platform communication graph encoding could not" +
-				" be found in the map of already decoded phenotypes.";
-		@SuppressWarnings("unchecked") AbstractTaskGraphEncoding<AbstractTaskMappingEncoding, ?> atgEnc =
-				decodedPhenotypes.getEncoding(AbstractTaskGraphEncoding.class);
-		assert (pcgEncoding != null) : "The required atstract task graph encoding encoding could not" +
-				" be found in the map of already decoded phenotypes.";
+	@Provides
+	public MessageEncoding<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> decode(
+			FailSilentTaskMappingEncoding tmEnc, PlatformCommunicationGraphEncoding pcgEnc,
+			AbstractTaskGraphEncoding atgEnc) throws DecodingException {
+		return decode(tmEnc, pcgEnc, atgEnc);
+	}
 
-		Collection<Message> generatedMessages = messageGenerator.generateMessages(genotype, atgEnc);
+	public MessageEncoding<S, T> decode(T tmEnc, PlatformCommunicationGraphEncoding pcgEnc,
+			AbstractTaskGraphEncoding atgEnc) throws DecodingException {
+		Collection<Message> generatedMessages = messageGenerator.generateMessages(tmEnc, atgEnc);
 		Map<Message, DirectedGraph<IResourceAdapter<?>, DefaultEdge>> messageRouteMap =
-				messageRouter.calculateMessageRoutes(generatedMessages, pcgEncoding,
+				messageRouter.calculateMessageRoutes(generatedMessages, pcgEnc,
 						RoutingStrategy.SHORTEST_PATH);
 		if(messageRouteMap == null) {
 			// At least one *invalid* communication link is required by the given mapping =>
 			// infeasible mapping.
-			throw new DecodingException(genotype, this,
+			throw new DecodingException(tmEnc, this,
 					"At least one message could not be routed from the sending unit to all its receivers.");
 		}
 
@@ -106,40 +95,10 @@ public class MessageDecoder<S extends TaskMappingEntry<ITaskAdapter<?>, Partitio
 		return new MessageEncoding<>(generatedMessages);
 	}
 
-	/**
-	 * {@inheritDoc}
-	 * 
-	 * @throws DecodingException
-	 *             see {@link ComposableDecoder}.
-	 */
-	@Override
-	public MessageEncoding<S, T> updateComposable(T inGenotype, MessageEncoding<S, T> outGenotype,
-			FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException {
-		// Not required: The message encoding is a Phenotype only.
-		// TODO: Throw a decoding exception, instead.
-		return null;
-	}
-
 	/** {@inheritDoc} */
 	@Override
-	public Collection<Class<?>> getRequiredTypes() {
-		Collection<Class<?>> reqTypes = new ArrayList<>();
-		reqTypes.add(InstantiatedTaskMappingEncoding.class);
-		reqTypes.add(InstantiatedTaskGraphEncoding.class);
-		reqTypes.add(PlatformCommunicationGraphEncoding.class);
-		return reqTypes;
-	}
-
-	/** {@inheritDoc} */
-	@SuppressWarnings("rawtypes")
-	@Override
-	public Class<MessageEncoding> getOutputType() {
-		return MessageEncoding.class;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Class<?> getPrimaryInputType() {
-		return InstantiatedTaskMappingEncoding.class;
+	public MessageEncoding<S, T> decode(Genotype genotype) {
+		// TODO Auto-generated method stub
+		return null;
 	}
 }
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/.ratings
index 80c558fe9e638ab1a5290ef75d510533dbb26e45..71055902a70cd2d2ef0b8db007fb54b0aaaca701 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/.ratings
@@ -1,2 +1,2 @@
-InstantiatedTaskMappingDecoder.java e73da437e703017adacce54f6778f553180c02b2 RED
-InstantiatedTaskMappingDecoderAcyclic.java 979d34e0bfc76cc39ac201b3d9d34500f44ce30d RED
+InstantiatedTaskMappingDecoder.java 4738a0c2a31312add96f9ee9425be841038885d9 RED
+InstantiatedTaskMappingDecoderAcyclic.java 5a6462fcf57680abe11163e5838aea4c84e03b88 RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoder.java
index e73da437e703017adacce54f6778f553180c02b2..4738a0c2a31312add96f9ee9425be841038885d9 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoder.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoder.java
@@ -25,21 +25,21 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunction
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.InstantiatedTaskGraphEncoding;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoder;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoderBase;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception.DecodingException;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
+import org.fortiss.af3.exploration.alg.dse.module.DecoderModule;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.DefaultTaskGraph;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.SignalAdapterWeightedEdge;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraphInstantiator;
+import org.opt4j.core.Genotype;
 
-import com.google.inject.Inject;
+import com.google.inject.Provides;
 
 /**
  * {@link ComposableDecoder} that takes an {@link InstantiatedTaskMappingEncoding} as input and
@@ -47,30 +47,26 @@ import com.google.inject.Inject;
  * 
  * @author diewald
  */
-public class InstantiatedTaskMappingDecoder<T extends InstantiatedTaskMappingEntry, C> extends
-		ComposableDecoderBase<InstantiatedTaskMappingEncoding<T>, InstantiatedTaskGraphEncoding<T, C>> {
-	/** Constructs a new decoder to generate {@link InstantiatedTaskGraphEncoding}. */
-	@Inject
-	public InstantiatedTaskMappingDecoder() {
+public class InstantiatedTaskMappingDecoder<T extends InstantiatedTaskMappingEntry> extends
+		DecoderModule<InstantiatedTaskGraphEncoding<T>> {
+
+	@Provides
+	public InstantiatedTaskGraphEncoding<FailSilentTaskMappingEntry> decode(
+			FailSilentTaskMappingEncoding itmEnc, AbstractTaskGraphEncoding atgEnc,
+			SafetyFunctionArchEncoding sfEnc) throws DecodingException {
+		return decode(itmEnc, atgEnc, sfEnc);
 	}
 
-	/** {@inheritDoc} */
-	@Override
-	public InstantiatedTaskGraphEncoding<T, C> decodeComposable(
-			InstantiatedTaskMappingEncoding<T> genotype,
-			FlatPhenotypeMap<Phenotype> phenotypeTypeMap) throws DecodingException {
-		@SuppressWarnings("unchecked") AbstractTaskGraphEncoding<AbstractTaskMappingEncoding, C> atgEnc =
-				phenotypeTypeMap.getEncoding(AbstractTaskGraphEncoding.class);
-		assert (atgEnc != null) : "The required abstract task graph encoding could not be found in the map of already decoded phenotypes.";
-
-		SafetyFunctionArchEncoding<?> sfEnc =
-				phenotypeTypeMap.getEncoding(SafetyFunctionArchEncoding.class);
-
-		Collection<DefaultTaskGraph<?>> tgColl = atgEnc.getTaskGraphs();
-		TaskGraphInstantiator<DefaultTaskGraph<?>> tgInstatiator =
-				new TaskGraphInstantiator<>(tgColl, genotype);
-		InstantiatedTaskGraphEncoding<T, C> itgEnc = new InstantiatedTaskGraphEncoding<T, C>(
-				tgInstatiator.createMultipleInstanceTaskGraphs(tgColl), atgEnc.getHyperPeriod());
+	public InstantiatedTaskGraphEncoding<T> decode(InstantiatedTaskMappingEncoding<T> itmEnc,
+			AbstractTaskGraphEncoding atgEnc, SafetyFunctionArchEncoding sfEnc)
+			throws DecodingException {
+		Collection<TaskGraph> tgColl = atgEnc.getTaskGraphs();
+		TaskGraphInstantiator<TaskGraph> tgInstatiator =
+				new TaskGraphInstantiator<>(tgColl, itmEnc);
+		InstantiatedTaskGraphEncoding<T> itgEnc =
+				new InstantiatedTaskGraphEncoding<T>(
+						tgInstatiator.createMultipleInstanceTaskGraphs(tgColl),
+						atgEnc.getHyperPeriod());
 
 		if(sfEnc != null) {
 			removeInterSafetyChannelSignals(sfEnc, itgEnc);
@@ -86,9 +82,9 @@ public class InstantiatedTaskMappingDecoder<T extends InstantiatedTaskMappingEnt
 	 */
 	// FIXME: also consider other realizing components.
 	// TODO: consider moving this operation
-	private void removeInterSafetyChannelSignals(SafetyFunctionArchEncoding<?> sfEnc,
-			InstantiatedTaskGraphEncoding<T, C> itgEnc) throws DecodingException {
-		for(SafetyFunctionArchEntry<?> sfEntry : sfEnc.getAllEntries()) {
+	private void removeInterSafetyChannelSignals(SafetyFunctionArchEncoding sfEnc,
+			InstantiatedTaskGraphEncoding<T> itgEnc) throws DecodingException {
+		for(SafetyFunctionArchEntry sfEntry : sfEnc.getAllEntries()) {
 			Collection<ITaskAdapter<?>> sfCompAdps =
 					castToRawColl(sfEntry.getSafetyFunctionAdapter().getRealizingComponents());
 			assert (sfCompAdps.size() > 0);
@@ -97,7 +93,7 @@ public class InstantiatedTaskMappingDecoder<T extends InstantiatedTaskMappingEnt
 			// Get the "containing" task graph. We must check all replacement components (instances)
 			// since we don't know which one was instantiated (or it would be more costly to find
 			// out).
-			DefaultTaskGraph<?> sfTG = null;
+			TaskGraph sfTG = null;
 			for(ITaskAdapter<?> curSFCompAdp : sfCompAdp.getReplacementComponents()) {
 				sfTG = itgEnc.getTaskGraphOf(curSFCompAdp);
 				if(sfTG != null) {
@@ -121,15 +117,18 @@ public class InstantiatedTaskMappingDecoder<T extends InstantiatedTaskMappingEnt
 				ITaskAdapter<?> outputUnit =
 						sfEntry.getSafetyFunctionAdapter().getOutputComponent();
 				// TODO: only for a single diag unit.
-				Collection<ITaskAdapter<?>> realizingSFUnits = itgEnc.getTasks().stream()
-						.filter(d -> sfUnits.contains(d.getReplacedComponent()))
-						.collect(Collectors.toList());
-				Collection<ITaskAdapter<?>> realizingDiagUnits = itgEnc.getTasks().stream()
-						.filter(d -> diagUnits.contains(d.getReplacedComponent()))
-						.collect(Collectors.toList());
-				Collection<ITaskAdapter<?>> outComps = itgEnc.getTasks().stream()
-						.filter(d -> d.getObject() == outputUnit.getObject())
-						.collect(Collectors.toList());
+				Collection<ITaskAdapter<?>> realizingSFUnits =
+						itgEnc.getTasks().stream()
+								.filter(d -> sfUnits.contains(d.getReplacedComponent()))
+								.collect(Collectors.toList());
+				Collection<ITaskAdapter<?>> realizingDiagUnits =
+						itgEnc.getTasks().stream()
+								.filter(d -> diagUnits.contains(d.getReplacedComponent()))
+								.collect(Collectors.toList());
+				Collection<ITaskAdapter<?>> outComps =
+						itgEnc.getTasks().stream()
+								.filter(d -> d.getObject() == outputUnit.getObject())
+								.collect(Collectors.toList());
 
 				// Pick an sf component instance that is assigned to the current channel.
 				ITaskAdapter<?> currentChannelSFUnit = null;
@@ -193,8 +192,7 @@ public class InstantiatedTaskMappingDecoder<T extends InstantiatedTaskMappingEnt
 	 *            {@link ITaskAdapter} of the currently processed output aggregation
 	 *            element.
 	 */
-	private void updateTaskGraph(DefaultTaskGraph<?> sfTG,
-			Collection<ITaskAdapter<?>> realizingSFUnits,
+	private void updateTaskGraph(TaskGraph sfTG, Collection<ITaskAdapter<?>> realizingSFUnits,
 			Collection<ITaskAdapter<?>> realizingDiagUnits, Collection<ITaskAdapter<?>> outComps,
 			ITaskAdapter<?> currentChannelSFUnit, ITaskAdapter<?> currentChannelDiagUnit,
 			ITaskAdapter<?> currentChannelOutputUnit) {
@@ -230,49 +228,10 @@ public class InstantiatedTaskMappingDecoder<T extends InstantiatedTaskMappingEnt
 		}
 	}
 
-	/**
-	 * {@inheritDoc}
-	 * 
-	 * @throws DecodingException
-	 *             see {@link ComposableDecoder}.
-	 */
-	@Override
-	public InstantiatedTaskGraphEncoding<T, C> updateComposable(
-			InstantiatedTaskMappingEncoding<T> inGenotype,
-			InstantiatedTaskGraphEncoding<T, C> outGenotype,
-			FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException {
-		// Not required: The InstantiatedTaskGraphEncoding is a Phenotype only.
-		// TODO: Throw a decoding exception, instead.
-		return null;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Collection<Class<?>> getRequiredTypes() {
-		Collection<Class<?>> reqTypes = new ArrayList<>();
-		reqTypes.add(InstantiatedTaskMappingEncoding.class);
-		reqTypes.add(AbstractTaskGraphEncoding.class);
-		return reqTypes;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Collection<Class<?>> getOptionalTypes() {
-		Collection<Class<?>> optTypes = new ArrayList<>();
-		optTypes.add(SafetyFunctionArchEncoding.class);
-		return optTypes;
-	}
-
-	/** {@inheritDoc} */
-	@SuppressWarnings("rawtypes")
-	@Override
-	public Class<InstantiatedTaskGraphEncoding> getOutputType() {
-		return InstantiatedTaskGraphEncoding.class;
-	}
-
 	/** {@inheritDoc} */
 	@Override
-	public Class<?> getPrimaryInputType() {
-		return InstantiatedTaskMappingEncoding.class;
+	public InstantiatedTaskGraphEncoding<T> decode(Genotype genotype) {
+		// TODO Auto-generated method stub
+		return null;
 	}
 }
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoderAcyclic.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoderAcyclic.java
index 979d34e0bfc76cc39ac201b3d9d34500f44ce30d..5a6462fcf57680abe11163e5838aea4c84e03b88 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoderAcyclic.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatetaskgraph/InstantiatedTaskMappingDecoderAcyclic.java
@@ -15,22 +15,17 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.instantiatetaskgraph;
 
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.InstantiatedAcyclicTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.InstantiatedTaskGraphEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoder;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoderBase;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception.DecodingException;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
+import org.fortiss.af3.exploration.alg.dse.module.DecoderModule;
+import org.opt4j.core.Genotype;
 
-import com.google.inject.Inject;
+import com.google.inject.Provides;
 
 /**
  * {@link ComposableDecoder} that takes an {@link InstantiatedTaskMappingEncoding} as input and
@@ -38,79 +33,30 @@ import com.google.inject.Inject;
  * 
  * @author diewald
  */
-public class InstantiatedTaskMappingDecoderAcyclic<T extends InstantiatedTaskMappingEntry, C>
-		extends
-		ComposableDecoderBase<InstantiatedTaskMappingEncoding<T>, InstantiatedAcyclicTaskGraphEncoding<T, C>> {
-	/** Constructs a new decoder to generate {@link InstantiatedTaskGraphEncoding}. */
-	@Inject
-	public InstantiatedTaskMappingDecoderAcyclic() {
+public class InstantiatedTaskMappingDecoderAcyclic<T extends InstantiatedTaskMappingEntry> extends
+		DecoderModule<InstantiatedAcyclicTaskGraphEncoding<T>> {
+
+	@Provides
+	public InstantiatedAcyclicTaskGraphEncoding<FailSilentTaskMappingEntry> decodeFailSilent(
+			AbstractTaskGraphEncoding atgEnc,
+			InstantiatedTaskGraphEncoding<FailSilentTaskMappingEntry> itgEnc) {
+		// TODO: Replace with "decode". Fixup type (generic) conversion.
+		return new InstantiatedAcyclicTaskGraphEncoding<FailSilentTaskMappingEntry>(
+				itgEnc.getTaskGraphs(), atgEnc.getHyperPeriod());
 	}
 
-	/** {@inheritDoc} */
-	@Override
-	public InstantiatedAcyclicTaskGraphEncoding<T, C> decodeComposable(
-			InstantiatedTaskMappingEncoding<T> genotype,
-			FlatPhenotypeMap<Phenotype> phenotypeTypeMap) {
-		// TODO: automate the retrieval of phenotypes.
-		@SuppressWarnings("unchecked") AbstractTaskGraphEncoding<InstantiatedTaskMappingEncoding<T>, C> atgEnc =
-				phenotypeTypeMap.getEncoding(AbstractTaskGraphEncoding.class);
-		assert (atgEnc != null) : "The required abstract task graph encoding could not be found in the map of already decoded phenotypes.";
-
-		@SuppressWarnings("unchecked") InstantiatedTaskGraphEncoding<T, C> itgEnc =
-				phenotypeTypeMap.getEncoding(InstantiatedTaskGraphEncoding.class);
-		assert (itgEnc != null) : "The required abstract task graph encoding could not be found in the map of already decoded phenotypes.";
-
-		InstantiatedAcyclicTaskGraphEncoding<T, C> iAtgEnc =
-				new InstantiatedAcyclicTaskGraphEncoding<T, C>(itgEnc.getTaskGraphs(),
+	public InstantiatedAcyclicTaskGraphEncoding<T> decode(AbstractTaskGraphEncoding atgEnc,
+			InstantiatedTaskGraphEncoding<T> itgEnc) {
+		InstantiatedAcyclicTaskGraphEncoding<T> iAtgEnc =
+				new InstantiatedAcyclicTaskGraphEncoding<T>(itgEnc.getTaskGraphs(),
 						atgEnc.getHyperPeriod());
-
 		return iAtgEnc;
 	}
 
-	/**
-	 * {@inheritDoc}
-	 * 
-	 * @throws DecodingException
-	 *             see {@link ComposableDecoder}.
-	 */
-	@Override
-	public InstantiatedAcyclicTaskGraphEncoding<T, C> updateComposable(
-			InstantiatedTaskMappingEncoding<T> inGenotype,
-			InstantiatedAcyclicTaskGraphEncoding<T, C> outGenotype,
-			FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException {
-		// Not required: The InstantiatedTaskGraphEncoding is a Phenotype only.
-		// TODO: Throw a decoding exception, instead.
-		return null;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Collection<Class<?>> getRequiredTypes() {
-		Collection<Class<?>> reqTypes = new ArrayList<>();
-		reqTypes.add(InstantiatedTaskMappingEncoding.class);
-		reqTypes.add(InstantiatedTaskGraphEncoding.class);
-
-		return reqTypes;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Collection<Class<?>> getOptionalTypes() {
-		Collection<Class<?>> optTypes = new ArrayList<>();
-		optTypes.add(SafetyFunctionArchEncoding.class);
-		return optTypes;
-	}
-
-	/** {@inheritDoc} */
-	@SuppressWarnings("rawtypes")
-	@Override
-	public Class<InstantiatedAcyclicTaskGraphEncoding> getOutputType() {
-		return InstantiatedAcyclicTaskGraphEncoding.class;
-	}
-
 	/** {@inheritDoc} */
 	@Override
-	public Class<?> getPrimaryInputType() {
-		return InstantiatedTaskMappingEncoding.class;
+	public InstantiatedAcyclicTaskGraphEncoding<T> decode(Genotype genotype) {
+		// TODO Auto-generated method stub
+		return null;
 	}
 }
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/.ratings
index 2ae985fac65ccadc8e670bc8d96f4a3957e48ca9..cf38bc17c2e296902320ab33e46af896cf44f537 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/.ratings
@@ -1,2 +1 @@
-PartitionMappingDecoderGraph.java 73645b119904fb34c8a1136a7603af8830a94778 RED
-PartitionMappingIdentityDecoder.java 964e0e992dd33aeec4ed55a83d9c6c6f7883a7a0 RED
+PartitionMappingDecoderGraph.java 7e1578be1cd243b11994085d599310ba669ba263 RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingDecoderGraph.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingDecoderGraph.java
index 73645b119904fb34c8a1136a7603af8830a94778..7e1578be1cd243b11994085d599310ba669ba263 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingDecoderGraph.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingDecoderGraph.java
@@ -21,94 +21,86 @@ import java.util.Collection;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.platform.PlatformCommunicationGraphEncoding;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoderBase;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.ArchExpSubDecoder;
+import org.fortiss.af3.exploration.alg.dse.module.DecoderModule;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ICommunicationResourceAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter;
 import org.fortiss.tooling.common.util.LambdaUtils;
 import org.jgrapht.Graphs;
 import org.jgrapht.graph.DefaultEdge;
+import org.opt4j.core.Genotype;
+import org.opt4j.core.genotype.CompositeGenotype;
+
+import com.google.inject.Provides;
 
 /**
+ * Update the {@link PlatformCommunicationGraphEncoding} with potential changes from the partition
+ * mapping. Partitions are added as leaves to the graph (behind phys. execution units).
  * 
  * @author diewald
  */
-public class PartitionMappingDecoderGraph extends
-		ComposableDecoderBase<PlatformCommunicationGraphEncoding, PlatformCommunicationGraphEncoding>
-		implements ArchExpSubDecoder {
-	/** {@inheritDoc} */
-	@Override
-	public PlatformCommunicationGraphEncoding decodeComposable(
-			PlatformCommunicationGraphEncoding genotype,
-			FlatPhenotypeMap<Phenotype> decodedPhenotypes) {
-		PartitionMappingEncoding pmEnc =
-				decodedPhenotypes.getEncoding(PartitionMappingEncoding.class);
-		assert (pmEnc != null) : "The required platform communication graph encoding could not" +
-				" be found in the map of already decoded phenotypes.";
+// TODO: DecodeUpdate: We may consider moving the decode method to the creator.
+public class PartitionMappingDecoderGraph extends DecoderModule<PlatformCommunicationGraphEncoding> {
 
-		for(IResourceAdapter<?> execUnit : genotype.getActualGraph().vertexSet()) {
+	@Provides
+	PartitionMappingEncoding getPmEnc(
+			CompositeGenotype<Class<? extends Genotype>, ? extends Genotype> compGene) {
+		return compGene.get(PartitionMappingEncoding.class);
+	}
+
+	@Provides
+	public PlatformCommunicationGraphEncoding decodeComposable(
+			PlatformCommunicationGraphEncoding pcmEnc, PartitionMappingEncoding pmEnc) {
+		for(IResourceAdapter<?> execUnit : pcmEnc.getActualGraph().vertexSet()) {
 			for(IResourceAdapter<?> partition : pmEnc.getRequesters(execUnit)) {
-				genotype.getActualGraph().addVertex(partition);
-				genotype.getActualGraph().addEdge(partition, execUnit);
-				genotype.getActualGraph().addEdge(execUnit, partition);
+				pcmEnc.getActualGraph().addVertex(partition);
+				pcmEnc.getActualGraph().addEdge(partition, execUnit);
+				pcmEnc.getActualGraph().addEdge(execUnit, partition);
 			}
 		}
 
-		return genotype;
+		return pcmEnc;
 	}
 
-	/** {@inheritDoc} */
-	@Override
 	public PlatformCommunicationGraphEncoding updateComposable(
-			PlatformCommunicationGraphEncoding inGenotype,
-			PlatformCommunicationGraphEncoding outGenotype,
-			FlatPhenotypeMap<Phenotype> decodedPhenotypes) {
-		PartitionMappingEncoding pmEnc =
-				decodedPhenotypes.getEncoding(PartitionMappingEncoding.class);
-		assert (pmEnc != null) : "The required partition mapping encoding could not" +
-				" be found in the map of already decoded phenotypes.";
+			PlatformCommunicationGraphEncoding pcmEnc, PartitionMappingEncoding pmEnc) {
 		// Remove non-existing Partitions (from a previous iteration).
 		Collection<IResourceAdapter<?>> removeVertices = new ArrayList<>();
-		for(IResourceAdapter<?> resource : inGenotype.getActualGraph().vertexSet()) {
+		for(IResourceAdapter<?> resource : pcmEnc.getActualGraph().vertexSet()) {
 			if((resource instanceof Partition) && !pmEnc.getRequesters().contains(resource)) {
-				Collection<DefaultEdge> edgeSet = inGenotype.getActualGraph().edgesOf(resource);
-				inGenotype.getActualGraph().removeAllEdges(edgeSet);
+				Collection<DefaultEdge> edgeSet = pcmEnc.getActualGraph().edgesOf(resource);
+				pcmEnc.getActualGraph().removeAllEdges(edgeSet);
 				removeVertices.add(resource);
 			}
 		}
-		inGenotype.getActualGraph().removeAllVertices(removeVertices);
+		pcmEnc.getActualGraph().removeAllVertices(removeVertices);
 		// Add missing Partitions.
 		for(Partition partition : pmEnc.getRequesters()) {
-			if(!inGenotype.getActualGraph().containsVertex(partition)) {
+			if(!pcmEnc.getActualGraph().containsVertex(partition)) {
 				// We have only one Partition per entry --> Multiples for task mappings.
 				// TODO: Correct the return type for single and multi returns.
 				IResourceAdapter<?> execUnit =
 						pmEnc.getAllocatedResourcesFor(partition).iterator().next();
-				inGenotype.getActualGraph().addVertex(partition);
+				pcmEnc.getActualGraph().addVertex(partition);
 				// FIXME: HACK!!! Connects the Partitions to the communication resource attached to
 				// the phys exec unit. This is used to avoid larger reworks in the TDMA Message
 				// scheduler. The scheduler must be reconsidered to reflect internal comm. of a
 				// core/processor correctly.
 				Collection<IResourceAdapter<?>> commResources =
-						Graphs.neighborListOf(inGenotype.getActualGraph(), execUnit);
-				IResourceAdapter<?> commresource = LambdaUtils
-						.getFirst(commResources, r -> r instanceof ICommunicationResourceAdapter)
-						.get();
-				inGenotype.getActualGraph().addEdge(partition, commresource);
-				inGenotype.getActualGraph().addEdge(commresource, partition);
+						Graphs.neighborListOf(pcmEnc.getActualGraph(), execUnit);
+				IResourceAdapter<?> commresource =
+						LambdaUtils.getFirst(commResources,
+								r -> r instanceof ICommunicationResourceAdapter).get();
+				pcmEnc.getActualGraph().addEdge(partition, commresource);
+				pcmEnc.getActualGraph().addEdge(commresource, partition);
 			}
 		}
-		return inGenotype;
+		return pcmEnc;
 	}
 
 	/** {@inheritDoc} */
 	@Override
-	public Collection<Class<?>> getRequiredTypes() {
-		Collection<Class<?>> reqTypes = new ArrayList<>();
-		reqTypes.add(PlatformCommunicationGraphEncoding.class);
-		reqTypes.add(PartitionMappingEncoding.class);
-		return reqTypes;
+	public PlatformCommunicationGraphEncoding decode(Genotype genotype) {
+		// TODO Auto-generated method stub
+		return null;
 	}
 }
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingIdentityDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingIdentityDecoder.java
deleted file mode 100644
index 964e0e992dd33aeec4ed55a83d9c6c6f7883a7a0..0000000000000000000000000000000000000000
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingIdentityDecoder.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*-------------------------------------------------------------------------+
-| Copyright 2018 fortiss GmbH                                              |
-|                                                                          |
-| 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 org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.partitionmapping;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoderBase;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.ArchExpSubDecoder;
-
-/**
- * 
- * @author diewald
- */
-public class PartitionMappingIdentityDecoder
-		extends ComposableDecoderBase<PartitionMappingEncoding, PartitionMappingEncoding>
-		implements ArchExpSubDecoder {
-	/** {@inheritDoc} */
-	@Override
-	public PartitionMappingEncoding decodeComposable(PartitionMappingEncoding genotype,
-			FlatPhenotypeMap<Phenotype> decodedPhenotypes) {
-		return genotype;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public PartitionMappingEncoding updateComposable(PartitionMappingEncoding inGenotype,
-			PartitionMappingEncoding outGenotype, FlatPhenotypeMap<Phenotype> decodedPhenotypes) {
-		return inGenotype;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Collection<Class<?>> getRequiredTypes() {
-		Collection<Class<?>> reqTypes = new ArrayList<>();
-		reqTypes.add(PartitionMappingEncoding.class);
-		return reqTypes;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Collection<Class<?>> getOptionalTypes() {
-		Collection<Class<?>> optTypes = new ArrayList<>();
-		optTypes.add(PartitionMappingEncoding.class);
-		return optTypes;
-	}
-}
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/.ratings
index d486787fa471036493ae4a60895f5f999c18a123..9d13ec3c482d870dc214771346492d62bcff9039 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/.ratings
@@ -1,4 +1,3 @@
-SFEncodingDecoder.java 35536dec62c42b3acfc3a53973e804e238cfdad2 RED
-SFGraphDecoder.java 82c9b536a526e0e2b23d35a64124e622e5eedd5a RED
-SFMappingConstraintDecoder.java 69b46dc6184f316102df770ebad3814361db6d11 RED
-SFMappingDecoder.java 0fe8c6aad79085a5be5ead4c38b21e06095944a9 RED
+SFGraphDecoder.java 0b42b83465213eb13ae59765f6bf53c1c8bd3b66 RED
+SFMappingConstraintDecoder.java 01e8f450a78ffff9572a7f203b3699cff507e99f RED
+SFMappingDecoder.java 8d890da23b7dab19ff11163a79f9ba6a2c0a9a3c RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFEncodingDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFEncodingDecoder.java
deleted file mode 100644
index 35536dec62c42b3acfc3a53973e804e238cfdad2..0000000000000000000000000000000000000000
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFEncodingDecoder.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*-------------------------------------------------------------------------+
-| Copyright 2016 fortiss GmbH                                              |
-|                                                                          |
-| 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 org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.safetyfunction;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEncoding;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoder;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoderBase;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception.DecodingException;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.ArchExpSubDecoder;
-
-/**
- * Provides a {@link SafetyFunctionArchEncoding} to the set of {@link Phenotype} types.
- * This {@link ComposableDecoder} is an identity operation.
- * 
- * @author diewald
- */
-public class SFEncodingDecoder<C> extends
-		ComposableDecoderBase<SafetyFunctionArchEncoding<C>, SafetyFunctionArchEncoding<C>>
-		implements ArchExpSubDecoder {
-
-	/**
-	 * {@inheritDoc}
-	 * 
-	 * @throws DecodingException
-	 *             see {@link ComposableDecoderBase}.
-	 */
-	@Override
-	public SafetyFunctionArchEncoding<C> decodeComposable(SafetyFunctionArchEncoding<C> genotype,
-			FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException {
-		return genotype;
-	}
-
-	/**
-	 * {@inheritDoc}
-	 * 
-	 * @throws DecodingException
-	 *             see {@link ComposableDecoderBase}.
-	 */
-	@Override
-	public SafetyFunctionArchEncoding<C>
-			updateComposable(SafetyFunctionArchEncoding<C> inGenotype,
-					SafetyFunctionArchEncoding<C> outGenotype,
-					FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException {
-		return inGenotype;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Collection<Class<?>> getRequiredTypes() {
-		Collection<Class<?>> reqTypes = new ArrayList<>();
-		reqTypes.add(SafetyFunctionArchEncoding.class);
-		return reqTypes;
-	}
-
-	/** {@inheritDoc} */
-	@SuppressWarnings("unchecked")
-	@Override
-	public Class<SafetyFunctionArchEncoding<C>> getOutputType() {
-		Class<? super SafetyFunctionArchEncoding<C>> retType = SafetyFunctionArchEncoding.class;
-		return (Class<SafetyFunctionArchEncoding<C>>)retType;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Class<?> getPrimaryInputType() {
-		return SafetyFunctionArchEncoding.class;
-	}
-}
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFGraphDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFGraphDecoder.java
index 82c9b536a526e0e2b23d35a64124e622e5eedd5a..0b42b83465213eb13ae59765f6bf53c1c8bd3b66 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFGraphDecoder.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFGraphDecoder.java
@@ -15,26 +15,24 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.safetyfunction;
 
-import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Set;
 
+import org.eclipse.swt.internal.C;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.SafeTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.TaskGraphEncoding;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoder;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoderBase;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.CompositeDecoder;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception.DecodingException;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.ArchExpSubDecoder;
+import org.fortiss.af3.exploration.alg.dse.module.DecoderModule;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph;
+import org.opt4j.core.Genotype;
 
-import com.google.inject.Inject;
+import com.google.inject.Provider;
+import com.google.inject.Provides;
+import com.google.inject.name.Named;
 
 /**
  * {@link ComposableDecoder} that generates {@link ITaskAdapter}s from the
@@ -42,36 +40,19 @@ import com.google.inject.Inject;
  * 
  * @author diewald
  */
-public class SFGraphDecoder<C>
-		extends ComposableDecoderBase<SafetyFunctionArchEncoding<C>, SafeTaskGraphEncoding<C>>
-		implements ArchExpSubDecoder {
-	/** Task Graphs extracted from the input models. */
-	Collection<TaskGraph> origTaskGraphs;
-
-	/** Constructs a new decoder that instantiates {@link AbstractTaskMappingEncoding}. */
-	@Inject
-	public SFGraphDecoder(Collection<TaskGraph> origTaskGraphs) {
-		this.origTaskGraphs = origTaskGraphs;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public SafeTaskGraphEncoding<C> decodeComposable(SafetyFunctionArchEncoding<C> genotype,
-			FlatPhenotypeMap<Phenotype> phenotypetypeMap) {
-		if(genotype == null) {
-			return null;
-		}
-
-		@SuppressWarnings("unchecked") AbstractTaskGraphEncoding<AbstractTaskMappingEncoding, C> atgEnc =
-				phenotypetypeMap.getEncoding(AbstractTaskGraphEncoding.class);
-		// TODO: we should dynamically retrieve the encoding here, since the statement below assumes
-		// that this decoding step is performed before others.
-		// FIXME: Find a way to pass the original taks graph. We might have a circular dependency
+public class SFGraphDecoder extends DecoderModule<SafeTaskGraphEncoding> implements
+		Provider<SafetyFunctionArchEncoding> {
+
+	@Provides
+	public SafeTaskGraphEncoding decode(SafetyFunctionArchEncoding sfaEnc,
+			AbstractTaskGraphEncoding atgEnc,
+			@Named("OriginalTaskGraphs") Set<TaskGraph> origTaskGraphs) {
+		// FIXME: Find a way to pass the original task graph. We might have a circular dependency
 		// here.
-		SafeTaskGraphEncoding<C> encoding =
-				new SafeTaskGraphEncoding<>(origTaskGraphs, atgEnc.getHyperPeriod());
+		SafeTaskGraphEncoding encoding =
+				new SafeTaskGraphEncoding(origTaskGraphs, atgEnc.getHyperPeriod());
 
-		for(SafetyFunctionArchEntry<C> sFAEntry : genotype.getAllEntries()) {
+		for(SafetyFunctionArchEntry sFAEntry : sfaEnc.getAllEntries()) {
 			boolean diagPresent = sFAEntry.isDiagnosicUnitPresent();
 			if(!diagPresent && containsDiagUnits(sFAEntry, encoding)) {
 				removeDiagUnits(sFAEntry, encoding);
@@ -83,31 +64,19 @@ public class SFGraphDecoder<C>
 		return encoding;
 	}
 
-	/**
-	 * {@inheritDoc}
-	 * 
-	 * @throws DecodingException
-	 *             see {@link CompositeDecoder}.
-	 */
-	@Override
-	public SafeTaskGraphEncoding<C> updateComposable(SafetyFunctionArchEncoding<C> inGenotype,
-			SafeTaskGraphEncoding<C> outGenotype, FlatPhenotypeMap<Phenotype> decodedPhenotypes)
-			throws DecodingException {
-		// Not required: The abstract task graph encoding is a Phenotype only.
-		// TODO: Throw a decoding exception, instead.
-		return null;
-	}
-
 	/**
 	 * Checks whether the given {@link TaskGraphEncoding} contains diagnostic units from the given
 	 * {@link SafetyFunctionArchEntry}.
 	 */
-	private boolean containsDiagUnits(SafetyFunctionArchEntry<C> sFAEntry,
-			SafeTaskGraphEncoding<C> encoding) {
-		Collection<ITaskAdapter<C>> sfComps =
-				sFAEntry.getSafetyFunctionAdapter().getDiagnosticComponents();
+	// TODO: This method should be encapsulated within the SFA entry or the adapter to avoid the raw
+	// casting here.
+	private boolean containsDiagUnits(SafetyFunctionArchEntry sFAEntry,
+			SafeTaskGraphEncoding encoding) {
+		Collection<ITaskAdapter<?>> sfComps =
+				(Collection<ITaskAdapter<?>>)(Collection<?>)sFAEntry.getSafetyFunctionAdapter()
+						.getDiagnosticComponents();
 		if(!sfComps.isEmpty()) {
-			return encoding.containsTask(sfComps.stream().findAny().get());
+			return encoding.containsTask((ITaskAdapter<C>)sfComps.stream().findAny().get());
 		}
 		return false;
 	}
@@ -116,54 +85,45 @@ public class SFGraphDecoder<C>
 	 * Adds the diagnostic units from the {@link SafetyFunctionArchEntry} to the
 	 * {@link TaskGraphEncoding}.
 	 */
-	private void addDiagUnits(SafetyFunctionArchEntry<C> sFAEntry,
-			SafeTaskGraphEncoding<C> encoding) {
-		Collection<ITaskAdapter<C>> diagComps =
-				sFAEntry.getSafetyFunctionAdapter().getDiagnosticComponents();
+	private void addDiagUnits(SafetyFunctionArchEntry sFAEntry, SafeTaskGraphEncoding encoding) {
+		Collection<ITaskAdapter<?>> diagComps =
+				(Collection<ITaskAdapter<?>>)(Collection<?>)sFAEntry.getSafetyFunctionAdapter()
+						.getDiagnosticComponents();
 		addTasks(diagComps, encoding);
 	}
 
 	/**
-	 * Adds the given collection of {@link ITaskAdapter}s from the
-	 * {@link SafetyFunctionArchEntry} to the {@link TaskGraphEncoding}.
+	 * Adds the given collection of {@link ITaskAdapter}s from the {@link SafetyFunctionArchEntry}
+	 * to the {@link TaskGraphEncoding}.
 	 */
-	private void addTasks(Collection<ITaskAdapter<C>> tasks, SafeTaskGraphEncoding<C> encoding) {
+	private void addTasks(Collection<ITaskAdapter<?>> tasks, SafeTaskGraphEncoding encoding) {
 		// Add the Components.
 		tasks.stream().forEach(task -> encoding.addTask(task));
 
 		// Add the corresponding signals.
-		for(ITaskAdapter<C> task : tasks) {
+		for(ITaskAdapter<?> task : tasks) {
 			TaskGraph tg = encoding.getOriginalTaskGraph(task);
 			encoding.addSignalsOf(task, tg);
 		}
 	}
 
 	/** Removes the diagnostic units from the {@link TaskGraphEncoding}. */
-	private void removeDiagUnits(SafetyFunctionArchEntry<C> sFAEntry,
-			SafeTaskGraphEncoding<C> encoding) {
-		Collection<ITaskAdapter<C>> sfComps =
-				sFAEntry.getSafetyFunctionAdapter().getDiagnosticComponents();
+	private void removeDiagUnits(SafetyFunctionArchEntry sFAEntry, SafeTaskGraphEncoding encoding) {
+		Collection<ITaskAdapter<?>> sfComps =
+				(Collection<ITaskAdapter<?>>)(Collection<?>)sFAEntry.getSafetyFunctionAdapter()
+						.getDiagnosticComponents();
 		sfComps.stream().forEach(t -> encoding.removeTask(t));
 	}
 
 	/** {@inheritDoc} */
 	@Override
-	public Collection<Class<?>> getRequiredTypes() {
-		Collection<Class<?>> reqTypes = new ArrayList<>();
-		reqTypes.add(SafetyFunctionArchEncoding.class);
-		return reqTypes;
-	}
-
-	/** {@inheritDoc} */
-	@SuppressWarnings("rawtypes")
-	@Override
-	public Class<AbstractTaskGraphEncoding> getOutputType() {
-		return AbstractTaskGraphEncoding.class;
+	public SafeTaskGraphEncoding decode(Genotype genotype) {
+		return null;
 	}
 
 	/** {@inheritDoc} */
 	@Override
-	public Class<?> getPrimaryInputType() {
-		return AbstractTaskMappingEncoding.class;
+	public SafetyFunctionArchEncoding get() {
+		return new SafetyFunctionArchEncoding(null);
 	}
 }
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingConstraintDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingConstraintDecoder.java
index 69b46dc6184f316102df770ebad3814361db6d11..01e8f450a78ffff9572a7f203b3699cff507e99f 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingConstraintDecoder.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingConstraintDecoder.java
@@ -24,15 +24,14 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunction
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.constraint.InternalReplicationConstraint;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.constraint.InternalSeparationConstraint;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoderBase;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.decode.ConstraintGenerationDecoder;
+import org.fortiss.af3.exploration.alg.dse.module.DecoderModule;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ISafetyFunctionAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter;
 import org.fortiss.af3.platform.hierarchic.model.tile.Tile;
+import org.opt4j.core.Genotype;
 
-import com.google.inject.Inject;
+import com.google.inject.Provides;
 
 /**
  * Generates allocation and replication constraints for the safety architectures of the safety
@@ -40,64 +39,49 @@ import com.google.inject.Inject;
  * 
  * @author diewald
  */
-public class SFMappingConstraintDecoder<C>
-		extends ComposableDecoderBase<SafetyFunctionArchEncoding<C>, AbstractTaskMappingEncoding>
+public class SFMappingConstraintDecoder<C> extends DecoderModule<AbstractTaskMappingEncoding>
 		implements ConstraintGenerationDecoder {
-	/** Constructs a new decoder that instantiates {@link AbstractTaskMappingEncoding}. */
-	@Inject
-	public SFMappingConstraintDecoder() {
-	}
 
-	/** {@inheritDoc} */
-	@Override
-	public AbstractTaskMappingEncoding decodeComposable(SafetyFunctionArchEncoding<C> genotype,
-			FlatPhenotypeMap<Phenotype> decodedPhenotypes) {
-		return null;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public AbstractTaskMappingEncoding updateComposable(SafetyFunctionArchEncoding<C> inGenotype,
-			AbstractTaskMappingEncoding outGenotype,
-			FlatPhenotypeMap<Phenotype> decodedPhenotypes) {
-		for(SafetyFunctionArchEntry<C> sFAEntry : inGenotype.getAllEntries()) {
+	@Provides
+	public AbstractTaskMappingEncoding updateComposable(SafetyFunctionArchEncoding sfaEnc,
+			AbstractTaskMappingEncoding atmEnc) {
+		for(SafetyFunctionArchEntry sFAEntry : sfaEnc.getAllEntries()) {
 			int channelNumber = sFAEntry.getNumChannels();
 
 			Collection<InternalReplicationConstraint> replicationConstraints = new HashSet<>();
 			for(ITaskAdapter<?> comp : sFAEntry.getSafetyFunctionAdapter().getAllComponents()) {
-				replicationConstraints
-						.add(new InternalReplicationConstraint(comp, channelNumber, channelNumber));
+				replicationConstraints.add(new InternalReplicationConstraint(comp, channelNumber,
+						channelNumber));
 			}
 
-			outGenotype.replaceConstraints(InternalReplicationConstraint.class,
-					replicationConstraints);
+			atmEnc.replaceConstraints(InternalReplicationConstraint.class, replicationConstraints);
 		}
 
-		outGenotype.replaceConstraints(InternalSeparationConstraint.class,
-				createSeparationConstraints(inGenotype));
+		atmEnc.replaceConstraints(InternalSeparationConstraint.class,
+				createSeparationConstraints(sfaEnc));
 
-		return outGenotype;
+		return atmEnc;
 	}
 
 	/**
 	 * Creates {@link InternalSeparationConstraint}s for the sets of realizing, diagnostic, and
 	 * output units of each safety function.
 	 */
-	private Collection<InternalSeparationConstraint>
-			createSeparationConstraints(SafetyFunctionArchEncoding<C> sfEnc) {
+	private Collection<InternalSeparationConstraint> createSeparationConstraints(
+			SafetyFunctionArchEncoding sfEnc) {
 		Collection<InternalSeparationConstraint> sepConstraints = new HashSet<>();
 
-		for(SafetyFunctionArchEntry<C> sfEntry : sfEnc.getAllEntries()) {
-			ISafetyFunctionAdapter<C> sfAdp = sfEntry.getSafetyFunctionAdapter();
+		for(SafetyFunctionArchEntry sfEntry : sfEnc.getAllEntries()) {
+			ISafetyFunctionAdapter<?> sfAdp = sfEntry.getSafetyFunctionAdapter();
 
 			// TODO: We should not be aware of the Tile type here.
 			// FIXME: We need a "better" machanism than the fault containment region. Also,
-			sepConstraints.add(
-					new InternalSeparationConstraint(sfAdp.getRealizingComponents(), Tile.class));
-			sepConstraints.add(
-					new InternalSeparationConstraint(sfAdp.getDiagnosticComponents(), Tile.class));
-			sepConstraints.add(new InternalSeparationConstraint(
-					Arrays.asList(sfAdp.getOutputComponent()), Tile.class));
+			sepConstraints.add(new InternalSeparationConstraint(sfAdp.getRealizingComponents(),
+					Tile.class));
+			sepConstraints.add(new InternalSeparationConstraint(sfAdp.getDiagnosticComponents(),
+					Tile.class));
+			sepConstraints.add(new InternalSeparationConstraint(Arrays.asList(sfAdp
+					.getOutputComponent()), Tile.class));
 		}
 
 		return sepConstraints;
@@ -105,15 +89,8 @@ public class SFMappingConstraintDecoder<C>
 
 	/** {@inheritDoc} */
 	@Override
-	public Collection<Class<?>> getRequiredTypes() {
-		Collection<Class<?>> requiredTypes = new HashSet<>();
-		requiredTypes.add(SafetyFunctionArchEncoding.class);
-		return requiredTypes;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Class<?> getPrimaryInputType() {
-		return SafetyFunctionArchEncoding.class;
+	public AbstractTaskMappingEncoding decode(Genotype genotype) {
+		// TODO Auto-generated method stub
+		return null;
 	}
 }
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingDecoder.java
index 0fe8c6aad79085a5be5ead4c38b21e06095944a9..8d890da23b7dab19ff11163a79f9ba6a2c0a9a3c 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingDecoder.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingDecoder.java
@@ -27,103 +27,81 @@ import java.util.Set;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.comm.constraint.InternalIsolatedCommunicationSet;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEntry;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEntry;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoder;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoderBase;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception.DecodingException;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.decode.ConstraintGenerationDecoder;
+import org.fortiss.af3.exploration.alg.dse.module.DecoderModule;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry;
 import org.fortiss.af3.exploration.alg.exception.ExplorationException;
+import org.opt4j.core.Genotype;
 
-import com.google.inject.Inject;
+import com.google.inject.Provides;
 
 /**
  * Decodes a {@link SafetyFunctionArchEncoding} into an {@link AbstractTaskMappingEncoding}.
  * 
  * @author diewald
  */
-public class SFMappingDecoder<C>
-		extends ComposableDecoderBase<SafetyFunctionArchEncoding<C>, AbstractTaskMappingEncoding>
-		implements ConstraintGenerationDecoder {
-	/** Constructs a new decoder that instantiates {@link AbstractTaskMappingEncoding}. */
-	@Inject
-	public SFMappingDecoder() {
-	}
+public class SFMappingDecoder<C> extends DecoderModule<AbstractTaskMappingEncoding> implements
+		ConstraintGenerationDecoder {
 
-	/**
-	 * {@inheritDoc}
-	 * 
-	 * @throws DecodingException
-	 *             see {@link ComposableDecoder}.
-	 */
+	/** {@inheritDoc} */
 	@Override
-	public AbstractTaskMappingEncoding decodeComposable(SafetyFunctionArchEncoding<C> genotype,
-			FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException {
-		AbstractTaskMappingEncoding atmEnc =
-				decodedPhenotypes.getEncoding(AbstractTaskMappingEncoding.class);
-		assert (atmEnc != null) : "The required abstract task mapping encoding could not be found in the map of already decoded phenotypes.";
-		return updateComposable(genotype, atmEnc, decodedPhenotypes);
+	public AbstractTaskMappingEncoding decode(Genotype genotype) {
+		return null;
 	}
 
-	/**
-	 * {@inheritDoc}
-	 * 
-	 * @throws DecodingException
-	 *             see {@link ComposableDecoder}.
-	 */
-	@Override
-	public AbstractTaskMappingEncoding updateComposable(SafetyFunctionArchEncoding<C> inGenotype,
-			AbstractTaskMappingEncoding outGenotype, FlatPhenotypeMap<Phenotype> decodedPhenotypes)
-			throws DecodingException {
-		if(inGenotype == null) {
-			return null;
-		}
+	@Provides
+	public AbstractTaskMappingEncoding decode(SafetyFunctionArchEncoding sfaEnc,
+			AbstractTaskMappingEncoding atmEnc) throws DecodingException {
 
 		// TODO: replace with a dynamic mechanism for the retrieval of deployable components.
-		for(SafetyFunctionArchEntry<C> sFAEntry : inGenotype.getAllEntries()) {
+		for(SafetyFunctionArchEntry sFAEntry : sfaEnc.getAllEntries()) {
 			boolean diagPresent = sFAEntry.isDiagnosicUnitPresent();
 			int channelNumber = sFAEntry.getNumChannels();
 
-			Collection<ITaskAdapter<C>> sfComps =
-					sFAEntry.getSafetyFunctionAdapter().getRealizingComponents();
-			Collection<ITaskAdapter<C>> diagComps =
-					sFAEntry.getSafetyFunctionAdapter().getDiagnosticComponents();
-			ITaskAdapter<C> outComponent = sFAEntry.getSafetyFunctionAdapter().getOutputComponent();
+			// TODO: Encapsulate in the encoding / adapter --> Raw cast.
+			Collection<ITaskAdapter<?>> sfComps =
+					(Collection<ITaskAdapter<?>>)(Collection<?>)sFAEntry.getSafetyFunctionAdapter()
+							.getRealizingComponents();
+			Collection<ITaskAdapter<?>> diagComps =
+					(Collection<ITaskAdapter<?>>)(Collection<?>)sFAEntry.getSafetyFunctionAdapter()
+							.getDiagnosticComponents();
+			ITaskAdapter<?> outComponent = sFAEntry.getSafetyFunctionAdapter().getOutputComponent();
 
 			// We assume that the entry number must be equal for all realizing components of a
 			// safety function.
 			Collection<AbstractTaskMappingEntry> sfEntries =
-					outGenotype.getMappingEntriesOf(sfComps.stream().findAny().get());
+					atmEnc.getMappingEntriesOf(sfComps.stream().findAny().get());
 			int entryNumber = sfEntries.size();
 
 			// TODO: use a more generic solution to instantiate these tyoes of constraints during
 			// the creation phase.
 			Set<IMappingEntry<?, ?>> existingEntries = new HashSet<>();
-			if(outGenotype.getConstraintsOf(InternalIsolatedCommunicationSet.class).isEmpty()) {
-				for(ITaskAdapter<C> comp : sFAEntry.getSafetyFunctionAdapter().getAllComponents()) {
+			if(atmEnc.getConstraintsOf(InternalIsolatedCommunicationSet.class).isEmpty()) {
+				for(ITaskAdapter<?> comp : sFAEntry.getSafetyFunctionAdapter().getAllComponents()) {
 					Collection<AbstractTaskMappingEntry> curEntry =
-							outGenotype.getMappingEntriesOf(comp);
+							atmEnc.getMappingEntriesOf(comp);
 					assert (curEntry.size() <= 1);
 					existingEntries.addAll(curEntry);
 				}
-				outGenotype.putConstraint(InternalIsolatedCommunicationSet.class,
+				atmEnc.putConstraint(InternalIsolatedCommunicationSet.class,
 						new InternalIsolatedCommunicationSet(existingEntries));
 			}
 
 			// In case that diagnostic units are not present in the *previous* encoding, we need to
 			// add some more.
 			Collection<AbstractTaskMappingEntry> diagEntries =
-					outGenotype.getMappingEntriesOf(diagComps.stream().findAny().get());
+					atmEnc.getMappingEntriesOf(diagComps.stream().findAny().get());
 			if(diagPresent && diagEntries != null && diagEntries.isEmpty()) {
 				try {
-					addMissingDiagUnits(outGenotype, diagComps, entryNumber);
+					addMissingDiagUnits(atmEnc, diagComps, entryNumber);
 				} catch(ExplorationException e) {
-					throw new DecodingException(inGenotype, this,
+					throw new DecodingException(
+							sfaEnc,
+							this,
 							"Error adding diagnostic components to match the number of safety channels.",
 							e);
 				}
@@ -133,40 +111,40 @@ public class SFMappingDecoder<C>
 			for(int i = entryNumber; i < channelNumber; i++) {
 				try {
 					Set<IMappingEntry<?, ?>> createdEntries = new HashSet<>();
-					createdEntries.addAll(addSFComponents(outGenotype, sfComps));
+					createdEntries.addAll(addSFComponents(atmEnc, sfComps));
 					if(diagPresent) {
-						createdEntries.addAll(addSFComponents(outGenotype, diagComps));
+						createdEntries.addAll(addSFComponents(atmEnc, diagComps));
 					}
 					// TODO: for each channel, the output component is "replicated" here.
-					createdEntries
-							.addAll(addSFComponents(outGenotype, Arrays.asList(outComponent)));
+					createdEntries.addAll(addSFComponents(atmEnc, Arrays.asList(outComponent)));
 
-					outGenotype.putConstraint(InternalIsolatedCommunicationSet.class,
+					atmEnc.putConstraint(InternalIsolatedCommunicationSet.class,
 							new InternalIsolatedCommunicationSet(createdEntries));
 				} catch(ExplorationException e) {
-					throw new DecodingException(inGenotype, this,
+					throw new DecodingException(
+							sfaEnc,
+							this,
 							"Error adding safety components to match the number of safety channels.",
 							null);
 				}
 			}
-			List<InternalIsolatedCommunicationSet> isoCommSet = new ArrayList<>(
-					outGenotype.getConstraintsOf(InternalIsolatedCommunicationSet.class));
+			List<InternalIsolatedCommunicationSet> isoCommSet =
+					new ArrayList<>(atmEnc.getConstraintsOf(InternalIsolatedCommunicationSet.class));
 			for(int i = entryNumber - 1; i > channelNumber; i--) {
 				Collection<IMappingEntry<?, ?>> rmEntries =
 						isoCommSet.get(i).getIsolatedCommunicationSet();
 
-				removeSFEntries(outGenotype, rmEntries);
-				removeMatchingConstraint(outGenotype,
-						getFirst(rmEntries, (s) -> true).orElse(null));
+				removeSFEntries(atmEnc, rmEntries);
+				removeMatchingConstraint(atmEnc, getFirst(rmEntries, (s) -> true).orElse(null));
 			}
 
 			if(!diagPresent) {
 				// If no diagnostic unit is present in the encoding, remove its entire task.
-				removeDiagUnits(outGenotype, diagComps);
+				removeDiagUnits(atmEnc, diagComps);
 			}
 		}
 
-		return outGenotype;
+		return atmEnc;
 	}
 
 	/**
@@ -174,13 +152,13 @@ public class SFMappingDecoder<C>
 	 * the encoding previously did not contain diagnostic units.
 	 * 
 	 * @throws ExplorationException
-	 *             if no valid allocation targets can be identified for one
-	 *             {@link ITaskAdapter}.
+	 *             if no valid allocation targets can be identified for one {@link ITaskAdapter}.
 	 */
 	private void addMissingDiagUnits(AbstractTaskMappingEncoding outGenotype,
-			Collection<ITaskAdapter<C>> diagComps, int entryNumber) throws ExplorationException {
-		List<InternalIsolatedCommunicationSet> isoComm = new ArrayList<>(
-				outGenotype.getConstraintsOf(InternalIsolatedCommunicationSet.class));
+			Collection<ITaskAdapter<?>> diagComps, int entryNumber) throws ExplorationException {
+		List<InternalIsolatedCommunicationSet> isoComm =
+				new ArrayList<>(
+						outGenotype.getConstraintsOf(InternalIsolatedCommunicationSet.class));
 		for(int i = 0; i < entryNumber; i++) {
 			Set<IMappingEntry<?, ?>> createdEntries = addSFComponents(outGenotype, diagComps);
 			InternalIsolatedCommunicationSet curConstr = isoComm.get(i);
@@ -190,7 +168,7 @@ public class SFMappingDecoder<C>
 
 	/** Entirely removes the diagnostic units of a safety function from a given mapping. */
 	private void removeDiagUnits(AbstractTaskMappingEncoding outGenotype,
-			Collection<ITaskAdapter<C>> diagComps) {
+			Collection<ITaskAdapter<?>> diagComps) {
 		for(ITaskAdapter<?> diagComp : diagComps) {
 			Collection<AbstractTaskMappingEntry> removedEntries = outGenotype.removeTask(diagComp);
 			Collection<InternalIsolatedCommunicationSet> isoCommConstrs =
@@ -204,18 +182,16 @@ public class SFMappingDecoder<C>
 	}
 
 	/**
-	 * Adds one random entry to the task mapping for each of the given
-	 * {@link ITaskAdapter}s.
+	 * Adds one random entry to the task mapping for each of the given {@link ITaskAdapter}s.
 	 * 
 	 * @throws ExplorationException
-	 *             if no valid allocation targets can be identified for one
-	 *             {@link ITaskAdapter}.
+	 *             if no valid allocation targets can be identified for one {@link ITaskAdapter}.
 	 */
 	private Set<IMappingEntry<?, ?>> addSFComponents(AbstractTaskMappingEncoding outGenotype,
-			Collection<ITaskAdapter<C>> sfComps) throws ExplorationException {
+			Collection<ITaskAdapter<?>> sfComps) throws ExplorationException {
 		Set<IMappingEntry<?, ?>> createdEntries = new HashSet<>();
 		if(sfComps != null) {
-			for(ITaskAdapter<C> curSFComp : sfComps) {
+			for(ITaskAdapter<?> curSFComp : sfComps) {
 				createdEntries.add(outGenotype.createAndAddRandomEntry(curSFComp));
 			}
 		}
@@ -261,20 +237,4 @@ public class SFMappingDecoder<C>
 		assert rmConstr != null;
 		outGenotype.getConstraintsOf(InternalIsolatedCommunicationSet.class).remove(rmConstr);
 	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Collection<Class<?>> getRequiredTypes() {
-		Collection<Class<?>> reqTypes = new ArrayList<>();
-		reqTypes.add(SafetyFunctionArchEncoding.class);
-		reqTypes.add(AbstractTaskGraphEncoding.class);
-		reqTypes.add(AbstractTaskMappingEncoding.class);
-		return reqTypes;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Class<?> getPrimaryInputType() {
-		return AbstractTaskMappingEncoding.class;
-	}
 }
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/.ratings
index 05e34d61403edce325bd14f8f5f72fddb5806c9c..b31ab89928f4e8b7789d3847eec8a4601a436b2d 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/.ratings
@@ -1,2 +1,2 @@
-AbstractTaskMappingIdentityDecoder.java 35871c7a2d43f7645282a75507f0d2276a53dbc4 RED
-TaskMappingDecoderBase.java f75f02c16f7b9b9eb16fa9935f904bde9eaf293c RED
+AbstractTaskMappingIdentityDecoder.java 78febd451216d4635c565b352c4c9e895334ff2f RED
+TaskMappingDecoderBase.java 38993e58fbb58bb577827079cacf04d487670713 RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/AbstractTaskMappingIdentityDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/AbstractTaskMappingIdentityDecoder.java
index 35871c7a2d43f7645282a75507f0d2276a53dbc4..78febd451216d4635c565b352c4c9e895334ff2f 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/AbstractTaskMappingIdentityDecoder.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/AbstractTaskMappingIdentityDecoder.java
@@ -15,17 +15,12 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.taskmapping;
 
-import java.util.ArrayList;
-import java.util.Collection;
-
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoder;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.ArchExpSubDecoder;
+import org.opt4j.core.Genotype;
 
 /**
  * Provides a {@link AbstractTaskMappingEncoding} to the set of {@link Phenotype} types.
@@ -37,52 +32,17 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.ArchExpSubDecod
 // decoder anymore. We'd need a clearer concept when to use which operators anyways (Dependent on
 // the selected features of the DSE).
 public class AbstractTaskMappingIdentityDecoder extends
-		TaskMappingDecoderBase<AbstractTaskMappingEntry, AbstractTaskMappingEncoding, AbstractTaskMappingEncoding>
-		implements ArchExpSubDecoder {
-	/** {@inheritDoc} */
-	@Override
-	public AbstractTaskMappingEncoding decodeComposable(AbstractTaskMappingEncoding genotype,
-			FlatPhenotypeMap<Phenotype> decodedPhenotypes) {
-		return genotype;
-	}
+		TaskMappingDecoderBase<AbstractTaskMappingEntry, AbstractTaskMappingEncoding> {
 
-	/** {@inheritDoc} */
-	@Override
-	public AbstractTaskMappingEncoding updateComposable(AbstractTaskMappingEncoding inGenotype,
-			AbstractTaskMappingEncoding outGenotype,
-			FlatPhenotypeMap<Phenotype> decodedPhenotypes) {
-		PartitionMappingEncoding pmEncoding =
-				decodedPhenotypes.getEncoding(PartitionMappingEncoding.class);
-		assert (pmEncoding != null);
-		inGenotype.updatePartitionMapping(pmEncoding);
-		return alignWithResourceModifications(inGenotype, decodedPhenotypes);
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Collection<Class<?>> getRequiredTypes() {
-		Collection<Class<?>> reqTypes = new ArrayList<>();
-		reqTypes.add(AbstractTaskMappingEncoding.class);
-		reqTypes.add(PartitionMappingEncoding.class);
-		return reqTypes;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Collection<Class<?>> getOptionalTypes() {
-		Collection<Class<?>> optTypes = new ArrayList<>();
-		return optTypes;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Class<AbstractTaskMappingEncoding> getOutputType() {
-		return AbstractTaskMappingEncoding.class;
+	// FIXME: Update the mapping. --> Provides
+	public AbstractTaskMappingEncoding decode(AbstractTaskMappingEncoding atmEnc,
+			PartitionMappingEncoding partEnc) {
+		return alignWithResourceModifications(atmEnc, partEnc);
 	}
 
 	/** {@inheritDoc} */
 	@Override
-	public Class<?> getPrimaryInputType() {
-		return AbstractTaskMappingEncoding.class;
+	public AbstractTaskMappingEncoding decode(Genotype genotype) {
+		return null;
 	}
 }
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/TaskMappingDecoderBase.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/TaskMappingDecoderBase.java
index f75f02c16f7b9b9eb16fa9935f904bde9eaf293c..38993e58fbb58bb577827079cacf04d487670713 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/TaskMappingDecoderBase.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/TaskMappingDecoderBase.java
@@ -22,9 +22,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmappi
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoderBase;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
+import org.fortiss.af3.exploration.alg.dse.module.DecoderModule;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter;
 import org.fortiss.af3.exploration.alg.exception.ExplorationException;
@@ -33,8 +31,8 @@ import org.fortiss.af3.exploration.alg.exception.ExplorationException;
  * 
  * @author diewald
  */
-public abstract class TaskMappingDecoderBase<S extends TaskMappingEntry<ITaskAdapter<?>, Partition>, T extends TaskMappingEncoding<ITaskAdapter<?>, S>, P extends Phenotype>
-		extends ComposableDecoderBase<T, P> {
+public abstract class TaskMappingDecoderBase<S extends TaskMappingEntry<ITaskAdapter<?>, Partition>, T extends TaskMappingEncoding>
+		extends DecoderModule<T> {
 
 	/**
 	 * Reallocates the {@link IResourceAdapter}s if the set of {@link IResourceAdapter}s was changed
@@ -42,22 +40,19 @@ public abstract class TaskMappingDecoderBase<S extends TaskMappingEntry<ITaskAda
 	 * 
 	 * @param taskMapping
 	 *            {@link TaskMappingEncoding} to adapt.
-	 * @param decodedPhenotypes
-	 *            {@link Phenotype} set required to gather the alignment information, .e.g.,
-	 *            resource encodings.
+	 * @param partEnc
+	 *            Mapping of Partitions to cores etc.
 	 * @return Aligned {@link TaskMappingEncoding}.
 	 */
-	protected T alignWithResourceModifications(T taskMapping,
-			FlatPhenotypeMap<Phenotype> decodedPhenotypes) {
-		PartitionMappingEncoding pmEncoding =
-				decodedPhenotypes.getEncoding(PartitionMappingEncoding.class);
-		assert (pmEncoding != null);
-
+	@SuppressWarnings("unchecked")
+	protected T alignWithResourceModifications(T taskMapping, PartitionMappingEncoding partEnc) {
 		Collection<S> relocateEntries = new ArrayList<>();
-		Collection<IResourceAdapter<?>> existingPartitions = pmEncoding.getResources();
-		for(S mappingEntry : taskMapping.getMappingEntries()) {
-			if(!existingPartitions.contains(mappingEntry.getTarget())) {
-				relocateEntries.add(mappingEntry);
+		Collection<IResourceAdapter<?>> existingPartitions = partEnc.getResources();
+		// FIXME: Hack to get rid of compilation errors when registering the
+		// InstantiatedTaskMappingDecoder.
+		for(Object mappingEntry : taskMapping.getMappingEntries()) {
+			if(!existingPartitions.contains(((S)mappingEntry).getTarget())) {
+				relocateEntries.add((S)mappingEntry);
 			}
 		}
 
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/.ratings
index 4147f4f35a372529dd1b083e81a81915c15e4ec9..04941aa3c53d2f7ab0ed33f06c8c5f61f857a269 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/.ratings
@@ -1,4 +1,3 @@
-AbstractTaskMappingDecoder.java 85d46ecd859052c487f31e47065375ae423e50ff RED
-FailSilentAbstractTaskMappingDecoder.java ef6d7055ee2ea70a74bea696903162e917c2b010 RED
-FaultDetectionVotingAbstractTaskMappingDecoder.java 9e8a9713ed2270229b27897b089078a57493b317 RED
-TaskInstanceResourceAlignmentDecoder.java fe8b789f3a0185585a90cf1882fd3983453b4a0d RED
+FailSilentAbstractTaskMappingDecoder.java 40acf470cbc4f47ca0593e75a2aa060d67b04db4 RED
+FaultDetectionVotingAbstractTaskMappingDecoder.java fe6777288a89b1ca3e5eaf842653fbc768016a08 RED
+TaskInstanceResourceAlignmentDecoder.java 8567290ebc74927263f5265f44d7acdcbf99797f RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FailSilentAbstractTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FailSilentAbstractTaskMappingDecoder.java
index ef6d7055ee2ea70a74bea696903162e917c2b010..40acf470cbc4f47ca0593e75a2aa060d67b04db4 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FailSilentAbstractTaskMappingDecoder.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FailSilentAbstractTaskMappingDecoder.java
@@ -20,16 +20,10 @@ import static org.fortiss.tooling.common.util.LambdaUtils.filterSet;
 import java.util.ArrayList;
 import java.util.Collection;
 
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEntry;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoder;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception.DecodingException;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
 import org.fortiss.af3.exploration.alg.dse.module.DecoderModule;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter;
 import org.opt4j.core.Genotype;
@@ -46,52 +40,29 @@ import com.google.inject.Provides;
 public class FailSilentAbstractTaskMappingDecoder extends
 		DecoderModule<FailSilentTaskMappingEncoding> {
 
-	/**
-	 * Input mapping of partitions to executions units. This step maps to partitions encoded here.
-	 * Additionally, information about the phys. executor may be required for smart mapping
-	 * decisions.
-	 */
-	// @Inject
-	// PartitionMappingEncoding partEnc;
-
-	/** {@inheritDoc} */
+	// TODO: Abstract to the AbstractTaskMappingDecoder.
+	// FIXME: Handle the case where no previous FailSilentTaskMappingEncoding exists.
 	@Provides
 	public FailSilentTaskMappingEncoding decode(AbstractTaskMappingEncoding atmEnc,
-			AbstractTaskGraphEncoding<?, ?> atgEnc, PartitionMappingEncoding partEnc) {
-		return null;
-		// return new FailSilentTaskMappingEncoding(partEnc, atgEnc, atmEnc);
-	}
-
-	// TODO: Abstract to the AbstractTaskMappingDecoder.
-	/**
-	 * {@inheritDoc}
-	 * 
-	 * @throws DecodingException
-	 *             see {@link ComposableDecoder}.
-	 */
-	public FailSilentTaskMappingEncoding
-			updateComposable(AbstractTaskMappingEncoding inGenotype,
-					FailSilentTaskMappingEncoding outGenotype,
-					FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException {
-		outGenotype.replaceConstraints(inGenotype.getConstraints());
+			FailSilentTaskMappingEncoding fstmEnc) {
+		fstmEnc.replaceConstraints(atmEnc.getConstraints());
 
-		for(ITaskAdapter<?> comp : inGenotype.getRequesters()) {
-			Collection<AbstractTaskMappingEntry> abstrEntries =
-					inGenotype.getMappingEntriesOf(comp);
+		for(ITaskAdapter<?> comp : atmEnc.getRequesters()) {
+			Collection<AbstractTaskMappingEntry> abstrEntries = atmEnc.getMappingEntriesOf(comp);
 			Collection<FailSilentTaskMappingEntry> instEntries;
 			if(comp.isInstantiationRequired()) {
 				instEntries =
-						filterSet(outGenotype.getMappingEntries(), e -> e.getSource()
+						filterSet(fstmEnc.getMappingEntries(), e -> e.getSource()
 								.getReplacedComponent() == comp);
 			} else {
-				instEntries = outGenotype.getMappingEntriesOf(comp);
+				instEntries = fstmEnc.getMappingEntriesOf(comp);
 			}
 
 			// Missing Associations between instantiated and abstract entries indicate the need to
 			// create or remove corresp. entries.
 			for(AbstractTaskMappingEntry abstrEntry : abstrEntries) {
 				if(abstrEntry.getAssociatedElement().isEmpty()) {
-					outGenotype.createAndAddEntry(abstrEntry);
+					fstmEnc.createAndAddEntry(abstrEntry);
 				}
 			}
 
@@ -101,28 +72,28 @@ public class FailSilentAbstractTaskMappingDecoder extends
 					rmEntries.add(instEntry);
 				}
 			}
-			rmEntries.forEach(e -> outGenotype.removeEntry(e));
+			rmEntries.forEach(e -> fstmEnc.removeEntry(e));
 		}
 
 		// Remove all tasks that are present in the output encoding but not in the input encoding.
 		Collection<ITaskAdapter<?>> rmTasks = new ArrayList<>();
-		for(ITaskAdapter<?> comp : outGenotype.getRequesters()) {
+		for(ITaskAdapter<?> comp : fstmEnc.getRequesters()) {
 			ITaskAdapter<?> rmComponent = comp;
 			if(comp.isInstantiation()) {
 				comp = comp.getReplacedComponent();
 			}
-			if(!inGenotype.getRequesters().contains(comp)) {
+			if(!atmEnc.getRequesters().contains(comp)) {
 				rmTasks.add(rmComponent);
 			}
 		}
-		rmTasks.forEach(e -> outGenotype.removeTask(e));
+		rmTasks.forEach(e -> fstmEnc.removeTask(e));
 
-		for(FailSilentTaskMappingEntry entry : outGenotype.getMappingEntries()) {
+		for(FailSilentTaskMappingEntry entry : fstmEnc.getMappingEntries()) {
 			entry.resetTarget(entry.getAssociatedElement(AbstractTaskMappingEntry.class)
 					.getTarget());
 		}
 
-		return outGenotype;
+		return fstmEnc;
 	}
 
 	/** {@inheritDoc} */
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FaultDetectionVotingAbstractTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FaultDetectionVotingAbstractTaskMappingDecoder.java
index 9e8a9713ed2270229b27897b089078a57493b317..fe6777288a89b1ca3e5eaf842653fbc768016a08 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FaultDetectionVotingAbstractTaskMappingDecoder.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FaultDetectionVotingAbstractTaskMappingDecoder.java
@@ -20,8 +20,6 @@ import static org.fortiss.tooling.common.util.LambdaUtils.filterSet;
 import java.util.ArrayList;
 import java.util.Collection;
 
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FaultDetectionVotingTaskMappingEncoding;
@@ -34,8 +32,6 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter;
 import org.opt4j.core.Genotype;
 import org.opt4j.core.problem.Decoder;
 
-import com.google.inject.Provides;
-
 /**
  * {@link Decoder} for instantiating an {@link AbstractTaskMappingEncoding} to a
  * {@link FaultDetectionVotingTaskMappingEncoding}.
@@ -43,22 +39,20 @@ import com.google.inject.Provides;
  * @author diewald
  */
 // FIXME: The type hierarchy and naming of the classes is extremely confusing. FIX ASAP!
+// FIXME: Currently disabled (no provides method). There seems to a conflict in the type resolution
+// of the InstantiatedTaskMappingEncoding with the current notion of FailSilent FaultDections Task
+// representations.
 public class FaultDetectionVotingAbstractTaskMappingDecoder extends
 		DecoderModule<FaultDetectionVotingTaskMappingEncoding> {
 
-	/** {@inheritDoc} */
-	@Provides
-	public FaultDetectionVotingTaskMappingEncoding decode(AbstractTaskMappingEncoding atmEnc,
-			AbstractTaskGraphEncoding<?, ?> atgEnc, PartitionMappingEncoding partEnc) {
-		return new FaultDetectionVotingTaskMappingEncoding(partEnc, atgEnc, atmEnc);
-	}
+	// /** {@inheritDoc} */
+	// @Provides
+	// public FaultDetectionVotingTaskMappingEncoding decode(AbstractTaskMappingEncoding atmEnc,
+	// AbstractTaskGraphEncoding atgEnc, PartitionMappingEncoding partEnc) {
+	// // return new FaultDetectionVotingTaskMappingEncoding(partEnc, atgEnc, atmEnc);
+	// return null;
+	// }
 
-	/**
-	 * {@inheritDoc}
-	 * 
-	 * @throws DecodingException
-	 *             see {@link DecodingException}.
-	 */
 	public FaultDetectionVotingTaskMappingEncoding updateComposable(
 			AbstractTaskMappingEncoding inGenotype,
 			FaultDetectionVotingTaskMappingEncoding outGenotype,
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/TaskInstanceResourceAlignmentDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/TaskInstanceResourceAlignmentDecoder.java
index fe8b789f3a0185585a90cf1882fd3983453b4a0d..8567290ebc74927263f5265f44d7acdcbf99797f 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/TaskInstanceResourceAlignmentDecoder.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/TaskInstanceResourceAlignmentDecoder.java
@@ -15,61 +15,31 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.taskmapping.instantiate;
 
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.taskmapping.TaskMappingDecoderBase;
+import org.opt4j.core.Genotype;
+import org.opt4j.core.optimizer.Operator;
 
 /**
+ * Aligns mappings of instantiated tasks with the partition mapping that may have been modified by
+ * {@link Operator}s.
  * 
  * @author diewald
  */
 public class TaskInstanceResourceAlignmentDecoder extends
-		TaskMappingDecoderBase<InstantiatedTaskMappingEntry, InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry>, InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry>> {
-
-	/** {@inheritDoc} */
-	@Override
-	public InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry> decodeComposable(
-			InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry> genotype,
-			FlatPhenotypeMap<Phenotype> decodedPhenotypes) {
-		PartitionMappingEncoding pmEncoding =
-				decodedPhenotypes.getEncoding(PartitionMappingEncoding.class);
-		assert (pmEncoding != null);
-		genotype.updatePartitionMapping(pmEncoding);
-		return genotype;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry> updateComposable(
-			InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry> inGenotype,
-			InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry> outGenotype,
-			FlatPhenotypeMap<Phenotype> decodedPhenotypes) {
-		PartitionMappingEncoding pmEncoding =
-				decodedPhenotypes.getEncoding(PartitionMappingEncoding.class);
-		assert (pmEncoding != null);
-		inGenotype.updatePartitionMapping(pmEncoding);
-		return alignWithResourceModifications(inGenotype, decodedPhenotypes);
-	}
+		TaskMappingDecoderBase<InstantiatedTaskMappingEntry, InstantiatedTaskMappingEncoding> {
 
-	/** {@inheritDoc} */
-	@Override
-	public Collection<Class<?>> getRequiredTypes() {
-		Collection<Class<?>> reqTypes = new ArrayList<>();
-		reqTypes.add(InstantiatedTaskMappingEncoding.class);
-		reqTypes.add(PartitionMappingEncoding.class);
-		return reqTypes;
-	}
+	// @Provides
+	// public InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry> updateComposable(
+	// InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry> itmEnc,
+	// PartitionMappingEncoding partEnc) {
+	// return alignWithResourceModifications(itmEnc, partEnc);
+	// }
 
 	/** {@inheritDoc} */
 	@Override
-	public Collection<Class<?>> getOptionalTypes() {
-		Collection<Class<?>> optTypes = new ArrayList<>();
-		return optTypes;
+	public InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry> decode(Genotype genotype) {
+		return null;
 	}
 }
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/.ratings
index 8d8579e6733faee8ebbced39c1ab7213ddf9c128..dc7f46b666fc17e8d3258f3016226de927f2b6f1 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/.ratings
@@ -1,10 +1,10 @@
 ComponentMultiAllocationConstraintEvaluator.java 1c3d042eaaec011bd4d2daaa20e3decf8a273c0a RED
 ComponentMultiDislocationConstraintEvaluator.java 851d415151da11a72f1b0b708ec264dfe97f6928 RED
 ConstraintEvaluatorBase.java 390219c84242650b2c5ed3732499a77ce815a552 RED
-DeadlineConstraintEvaluator.java dfe69382d843405eb1c9626c578f04a8c141b49c RED
+DeadlineConstraintEvaluator.java c13c1393352adee2d6772216521fb2afd498392c RED
 IConstraintEvaluator.java dc8c058ba3fa6dccd03f082970890f53174375fc RED
 MappingEvaluatorConstraint.java 9e704335297e306d32ad777e12df978e60e67ab4 RED
 NoEmptyPartitionConstraintEvaluator.java ef3e421ba61f9d69834189aa1d72d85e3587e391 RED
-PeriodConstraintEvaluator.java 10830bfc9386df4a9617914a4830637f3fdb90ae RED
+PeriodConstraintEvaluator.java d991cda903374a4f27c1e9b0f78e164832139892 RED
 SafetyIntegrityLevelConstraintEvaluator.java fce18765a86640032e7135cdefc98eee9702366c RED
 SameSilInPartitionConstraintEvaluator.java 6ae270852cc66f603004ed1718406c7ff88f744d RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/DeadlineConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/DeadlineConstraintEvaluator.java
index dfe69382d843405eb1c9626c578f04a8c141b49c..c13c1393352adee2d6772216521fb2afd498392c 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/DeadlineConstraintEvaluator.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/DeadlineConstraintEvaluator.java
@@ -71,10 +71,10 @@ public class DeadlineConstraintEvaluator<S extends InstantiatedTaskMappingEntry,
 		sourceDeployableComponent = new ArrayList<>();
 		targetDeployableComponent = new ArrayList<>();
 
-		sourceDeployableComponent
-				.add(systemModelAdapter.getDeployableComponentOf(optGoal.getStartComponent()));
-		targetDeployableComponent.add(
-				systemModelAdapter.getDeployableComponentOf(explorationTarget.getEndComponent()));
+		sourceDeployableComponent.add(systemModelAdapter.getDeployableComponentOf(optGoal
+				.getStartComponent()));
+		targetDeployableComponent.add(systemModelAdapter.getDeployableComponentOf(explorationTarget
+				.getEndComponent()));
 
 		deadline = explorationTarget.getDeadline();
 
@@ -114,7 +114,7 @@ public class DeadlineConstraintEvaluator<S extends InstantiatedTaskMappingEntry,
 	public DoubleValue evaluateGoal(StrictTTSchedule<S, T> schedule,
 			FlatPhenotypeMap<Phenotype> phenotypeTypeMap,
 			ClassToInstanceMap<EObject> transformedModels) {
-		@SuppressWarnings("unchecked") InstantiatedAcyclicTaskGraphEncoding<S, ?> acycItgEnc =
+		InstantiatedAcyclicTaskGraphEncoding<S> acycItgEnc =
 				phenotypeTypeMap.getEncoding(InstantiatedAcyclicTaskGraphEncoding.class);
 		assert (acycItgEnc != null) : "The required acyclic and instantiated task graph encoding could not be found in the map of already decoded phenotypes.";
 
@@ -132,11 +132,13 @@ public class DeadlineConstraintEvaluator<S extends InstantiatedTaskMappingEntry,
 			// the start time is the release time of this iteration, which is the beginning
 			// of the period
 			// double start = i * tg.getPeriod();
-			ITaskAdapter<?> earliestComp = sourceDeployableComponent.stream()
-					.min(Comparator.comparing(t -> schedule.getFirstStartTime(t, j))).get();
+			ITaskAdapter<?> earliestComp =
+					sourceDeployableComponent.stream()
+							.min(Comparator.comparing(t -> schedule.getFirstStartTime(t, j))).get();
 			double start = schedule.getFirstStartTime(earliestComp, i);
-			ITaskAdapter<?> latestComp = targetDeployableComponent.stream()
-					.min(Comparator.comparing(t -> schedule.getLastEndTime(t, j))).get();
+			ITaskAdapter<?> latestComp =
+					targetDeployableComponent.stream()
+							.min(Comparator.comparing(t -> schedule.getLastEndTime(t, j))).get();
 			double end = schedule.getLastEndTime(latestComp, i);
 			double latency = end - start;
 
@@ -166,8 +168,7 @@ public class DeadlineConstraintEvaluator<S extends InstantiatedTaskMappingEntry,
 		// TODO: AD: is this check really required here? Shouldn't this be done by the
 		// inputvalidator?
 		if(explorationTarget.getStartComponent() == null ||
-				explorationTarget.getEndComponent() == null ||
-				explorationTarget.getDeadline() <= 0) {
+				explorationTarget.getEndComponent() == null || explorationTarget.getDeadline() <= 0) {
 			return false;
 		}
 
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/PeriodConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/PeriodConstraintEvaluator.java
index 10830bfc9386df4a9617914a4830637f3fdb90ae..d991cda903374a4f27c1e9b0f78e164832139892 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/PeriodConstraintEvaluator.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/PeriodConstraintEvaluator.java
@@ -65,7 +65,7 @@ public class PeriodConstraintEvaluator<S extends InstantiatedTaskMappingEntry, T
 	public DoubleValue evaluateGoal(StrictTTSchedule<S, T> schedule,
 			FlatPhenotypeMap<Phenotype> phenotypeTypeMap,
 			ClassToInstanceMap<EObject> transformedModels) {
-		@SuppressWarnings("unchecked") InstantiatedTaskGraphEncoding<S, ?> itgEnc =
+		InstantiatedTaskGraphEncoding<S> itgEnc =
 				phenotypeTypeMap.getEncoding(InstantiatedTaskGraphEncoding.class);
 		assert (itgEnc != null) : "The required instantiated task graph encoding could not be found in the map of phenotypes.";
 		InstantiatedTaskMappingEncoding<?> itmEnc =
@@ -80,8 +80,7 @@ public class PeriodConstraintEvaluator<S extends InstantiatedTaskMappingEntry, T
 			TaskGraph taskGraph = itgEnc.getTaskGraphOf(deployableComponent);
 			// we need to check each iteration in the hyper period
 			if(taskGraph != null) {
-				for(int i = 0; i < systemModelAdapter.getHyperPeriod() /
-						taskGraph.getPeriod(); i++) {
+				for(int i = 0; i < systemModelAdapter.getHyperPeriod() / taskGraph.getPeriod(); i++) {
 					double periodEnd = (i + 1) * taskGraph.getPeriod();
 					double end = schedule.getLastEndTime(deployableComponent, i);
 					if(end > periodEnd) {
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/.ratings
index cec4a3b6c77ff46a747db91becf3b62e1e03c8d0..b1ab31c36177774288004d8840ec5464a3616f1d 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/.ratings
@@ -1,5 +1,5 @@
 EnergyObjectiveEvaluator.java 55b55ad26c1ab1ec6511615678df01f08b4927b7 RED
-FailSilentReliabilityEvaluator.java b3167361dc95242d6a3bedff716890d70be12622 RED
-FaultDetectionVotingReliabilityEvaluator.java f855845cbea8a2aaba5481b3769f6b00d8683480 RED
+FailSilentReliabilityEvaluator.java 8cf419d991d2cbd9c8fae1e93aa0a5d72620d7cf RED
+FaultDetectionVotingReliabilityEvaluator.java 8df68773fb9a63c224981c6aae13178937585d80 RED
 MappingEvaluatorObjective.java 17a9b315ed0385a1dca2a753118cae0e5f42af2b RED
-ReliabilityEvaluatorBase.java 303e2f735ec79e533522e1cfedc6b568ce5352d8 RED
+ReliabilityEvaluatorBase.java 0112a1349d4b23a58b28c49b3b8679c2e22c0423 RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/FailSilentReliabilityEvaluator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/FailSilentReliabilityEvaluator.java
index b3167361dc95242d6a3bedff716890d70be12622..8cf419d991d2cbd9c8fae1e93aa0a5d72620d7cf 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/FailSilentReliabilityEvaluator.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/FailSilentReliabilityEvaluator.java
@@ -24,7 +24,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.in
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.StrictTTSchedule;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
-import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.DefaultTaskGraph;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph;
 import org.fortiss.af3.exploration.alg.service.IExplorationTargetEvaluator;
 import org.fortiss.af3.exploration.moea.model.predefined.FailureMinObjective;
 import org.fortiss.af3.exploration.moea.model.predefined.FailureType;
@@ -48,7 +48,7 @@ public class FailSilentReliabilityEvaluator extends
 	@Override
 	protected double evaluateInternal(
 			StrictTTSchedule<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> schedule,
-			FailSilentTaskMappingEncoding itmEnc, DefaultTaskGraph<?> taskGraph,
+			FailSilentTaskMappingEncoding itmEnc, TaskGraph taskGraph,
 			FailureType failureProbabilityType) {
 
 		// for the StrictTTFaileSilence model, no sdc could occur
@@ -102,7 +102,8 @@ public class FailSilentReliabilityEvaluator extends
 
 	/** {@inheritDoc} */
 	@Override
-	public IExplorationTargetEvaluator<StrictTTSchedule<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding>, Double, FailureMinObjective>
+	public
+			IExplorationTargetEvaluator<StrictTTSchedule<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding>, Double, FailureMinObjective>
 			createEvaluator(SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter,
 					FailureMinObjective explorationTarget) throws InstantiationException {
 		try {
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/FaultDetectionVotingReliabilityEvaluator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/FaultDetectionVotingReliabilityEvaluator.java
index f855845cbea8a2aaba5481b3769f6b00d8683480..8df68773fb9a63c224981c6aae13178937585d80 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/FaultDetectionVotingReliabilityEvaluator.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/FaultDetectionVotingReliabilityEvaluator.java
@@ -38,7 +38,8 @@ import org.fortiss.af3.exploration.moea.model.predefined.FailureType;
  * 
  * @author huang
  */
-public class FaultDetectionVotingReliabilityEvaluator extends
+public class FaultDetectionVotingReliabilityEvaluator
+		extends
 		ReliabilityEvaluatorBase<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> {
 
 	/** Helper class to save the reliability information */
@@ -55,8 +56,8 @@ public class FaultDetectionVotingReliabilityEvaluator extends
 
 		/** Constructs a new {@link ReliabilityMeasure} (initialized to all zero). */
 		public ReliabilityMeasure() {
-			this(new Apfloat(0, FP_PRECISION), new Apfloat(0, FP_PRECISION),
-					new Apfloat(0, FP_PRECISION));
+			this(new Apfloat(0, FP_PRECISION), new Apfloat(0, FP_PRECISION), new Apfloat(0,
+					FP_PRECISION));
 		}
 
 		/** Constructs a new {@link ReliabilityMeasure} (initialized to user supplied values) */
@@ -108,7 +109,7 @@ public class FaultDetectionVotingReliabilityEvaluator extends
 			null;
 
 	/** Last task graph */
-	private DefaultTaskGraph<?> lastTaskGraph = null;
+	private TaskGraph lastTaskGraph = null;
 
 	/** Last analysis result */
 	private ReliabilityMeasure lastResult = null;
@@ -128,10 +129,12 @@ public class FaultDetectionVotingReliabilityEvaluator extends
 	 * voting).
 	 */
 	@Override
-	public double evaluateInternal(
-			StrictTTSchedule<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> schedule,
-			FaultDetectionVotingTaskMappingEncoding itmEnc, DefaultTaskGraph<?> taskGraph,
-			FailureType failureProbabilityType) {
+	public
+			double
+			evaluateInternal(
+					StrictTTSchedule<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> schedule,
+					FaultDetectionVotingTaskMappingEncoding itmEnc, TaskGraph taskGraph,
+					FailureType failureProbabilityType) {
 
 		// TODO: Implement this caching in a safer way, and potentially extend it to other cases.
 		// first of all, see if the scenario was just analyzed
@@ -189,8 +192,7 @@ public class FaultDetectionVotingReliabilityEvaluator extends
 
 	/** Entry point for task analysis */
 	private ReliabilityMeasure taskAnalysis(ITaskAdapter<?> deployableComponent,
-			DefaultTaskGraph<?> taskgraph,
-			Collection<FaultDetectionVotingTaskMappingEntry> mappings) {
+			TaskGraph taskgraph, Collection<FaultDetectionVotingTaskMappingEntry> mappings) {
 
 		ReliabilityMeasure rm = new ReliabilityMeasure();
 		ActorAnalysisNode start = new ActorAnalysisNode();
@@ -203,19 +205,22 @@ public class FaultDetectionVotingReliabilityEvaluator extends
 
 	/** Analyzes the reliability of a task. */
 	private void taskAnalysis(ITaskAdapter<?> deployableComponent, ActorAnalysisNode current,
-			DefaultTaskGraph<?> taskgraph, ReliabilityMeasure rm,
+			TaskGraph taskgraph, ReliabilityMeasure rm,
 			List<FaultDetectionVotingTaskMappingEntry> mappings) {
 
 		// the start node
 		if(current.level < 0) {
-			ActorAnalysisNode suc = new ActorAnalysisNode(current, 1, new Apfloat(1, FP_PRECISION),
-					current.level + 1);
+			ActorAnalysisNode suc =
+					new ActorAnalysisNode(current, 1, new Apfloat(1, FP_PRECISION),
+							current.level + 1);
 			taskAnalysis(deployableComponent, suc, taskgraph, rm, mappings);
-			ActorAnalysisNode due = new ActorAnalysisNode(current, 0, new Apfloat(1, FP_PRECISION),
-					current.level + 1);
+			ActorAnalysisNode due =
+					new ActorAnalysisNode(current, 0, new Apfloat(1, FP_PRECISION),
+							current.level + 1);
 			taskAnalysis(deployableComponent, due, taskgraph, rm, mappings);
-			ActorAnalysisNode sdc = new ActorAnalysisNode(current, -1, new Apfloat(1, FP_PRECISION),
-					current.level + 1);
+			ActorAnalysisNode sdc =
+					new ActorAnalysisNode(current, -1, new Apfloat(1, FP_PRECISION),
+							current.level + 1);
 			taskAnalysis(deployableComponent, sdc, taskgraph, rm, mappings);
 		} else {
 			// compute the local probabilities
@@ -262,14 +267,17 @@ public class FaultDetectionVotingReliabilityEvaluator extends
 				}
 			} else {
 				// create the children
-				ActorAnalysisNode suc = new ActorAnalysisNode(current, 1,
-						current.probability.multiply(localPr), current.level + 1);
+				ActorAnalysisNode suc =
+						new ActorAnalysisNode(current, 1, current.probability.multiply(localPr),
+								current.level + 1);
 				taskAnalysis(deployableComponent, suc, taskgraph, rm, mappings);
-				ActorAnalysisNode due = new ActorAnalysisNode(current, 0,
-						current.probability.multiply(localPr), current.level + 1);
+				ActorAnalysisNode due =
+						new ActorAnalysisNode(current, 0, current.probability.multiply(localPr),
+								current.level + 1);
 				taskAnalysis(deployableComponent, due, taskgraph, rm, mappings);
-				ActorAnalysisNode sdc = new ActorAnalysisNode(current, -1,
-						current.probability.multiply(localPr), current.level + 1);
+				ActorAnalysisNode sdc =
+						new ActorAnalysisNode(current, -1, current.probability.multiply(localPr),
+								current.level + 1);
 				taskAnalysis(deployableComponent, sdc, taskgraph, rm, mappings);
 			}
 		}
@@ -284,7 +292,7 @@ public class FaultDetectionVotingReliabilityEvaluator extends
 	 *            Defines the reliability value assigned to the logical components.
 	 * @return {@link ReliabilityMeasure} for the given {@link TaskGraph}.
 	 */
-	private ReliabilityMeasure appAnalysis(DefaultTaskGraph<?> tg,
+	private ReliabilityMeasure appAnalysis(TaskGraph tg,
 			Map<ITaskAdapter<?>, ReliabilityMeasure> actorReliabilities) {
 		ReliabilityMeasure rm = new ReliabilityMeasure();
 
@@ -306,8 +314,8 @@ public class FaultDetectionVotingReliabilityEvaluator extends
 	}
 
 	/** Computes the success probability of a task */
-	private static Apfloat
-			computeTaskSuc(Map<ITaskAdapter<?>, ReliabilityMeasure> actorReliabilities) {
+	private static Apfloat computeTaskSuc(
+			Map<ITaskAdapter<?>, ReliabilityMeasure> actorReliabilities) {
 		// SUC: the task is successful, iff all actors are successful
 		Apfloat taskSuc = new Apfloat(1, FP_PRECISION);
 		for(ITaskAdapter<?> deployableComponent : actorReliabilities.keySet()) {
@@ -377,7 +385,8 @@ public class FaultDetectionVotingReliabilityEvaluator extends
 
 	/** {@inheritDoc} */
 	@Override
-	public IExplorationTargetEvaluator<StrictTTSchedule<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding>, Double, FailureMinObjective>
+	public
+			IExplorationTargetEvaluator<StrictTTSchedule<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding>, Double, FailureMinObjective>
 			createEvaluator(SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter,
 					FailureMinObjective explorationTarget) throws InstantiationException {
 		try {
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/ReliabilityEvaluatorBase.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/ReliabilityEvaluatorBase.java
index 303e2f735ec79e533522e1cfedc6b568ce5352d8..0112a1349d4b23a58b28c49b3b8679c2e22c0423 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/ReliabilityEvaluatorBase.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/ReliabilityEvaluatorBase.java
@@ -28,7 +28,6 @@ import org.apfloat.FixedPrecisionApfloatHelper;
 import org.eclipse.emf.ecore.EObject;
 import org.fortiss.af3.component.model.Component;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap;
@@ -39,7 +38,6 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
-import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.DefaultTaskGraph;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.faultmodel.FaultDetector;
 import org.fortiss.af3.exploration.moea.model.predefined.FailureMinObjective;
@@ -55,8 +53,7 @@ import com.google.common.collect.ClassToInstanceMap;
  * @author huang
  */
 public abstract class ReliabilityEvaluatorBase<S extends InstantiatedTaskMappingEntry, T extends InstantiatedTaskMappingEncoding<S>>
-		extends
-		ExplorationTargetEvaluatorBase<StrictTTSchedule<S, T>, Double, FailureMinObjective> {
+		extends ExplorationTargetEvaluatorBase<StrictTTSchedule<S, T>, Double, FailureMinObjective> {
 
 	/** Precision of floating point values */
 	protected final static int FP_PRECISION = 50;
@@ -66,8 +63,8 @@ public abstract class ReliabilityEvaluatorBase<S extends InstantiatedTaskMapping
 			new HashMap<ITaskAdapter<?>, Map<IExecutionUnitAdapter<?>, Apfloat>>();
 
 	/** Helper required to perform {@link org.apfloat.Apfloat}-based calculations. */
-	private FixedPrecisionApfloatHelper apfloatHelper =
-			new FixedPrecisionApfloatHelper(FP_PRECISION);
+	private FixedPrecisionApfloatHelper apfloatHelper = new FixedPrecisionApfloatHelper(
+			FP_PRECISION);
 
 	/**
 	 * References the "target" {@link Component} in the original input model. This is the
@@ -185,8 +182,8 @@ public abstract class ReliabilityEvaluatorBase<S extends InstantiatedTaskMapping
 		}
 
 		if(!targetsToBeRemoved.isEmpty()) {
-			System.out.println(
-					"WARNING: ignoring the following mapping locations due to lack of reliability annotation:");
+			System.out
+					.println("WARNING: ignoring the following mapping locations due to lack of reliability annotation:");
 			for(IExecutionUnitAdapter<?> deploymentTarget : targetsToBeRemoved) {
 				systemModelAdapter.getDeploymentTargets().remove(deploymentTarget);
 				System.out.print(deploymentTarget.getName() + ",");
@@ -221,7 +218,7 @@ public abstract class ReliabilityEvaluatorBase<S extends InstantiatedTaskMapping
 	public DoubleValue evaluateGoal(StrictTTSchedule<S, T> schedule,
 			FlatPhenotypeMap<Phenotype> phenotypeTypeMap,
 			ClassToInstanceMap<EObject> transformedModels) {
-		@SuppressWarnings("unchecked") AbstractTaskGraphEncoding<AbstractTaskMappingEncoding, ?> atgEnc =
+		AbstractTaskGraphEncoding atgEnc =
 				phenotypeTypeMap.getEncoding(AbstractTaskGraphEncoding.class);
 		assert (atgEnc != null) : "The required abstract task graph encoding could not be found in the map of phenotypes.";
 		@SuppressWarnings("unchecked") T itmEnc =
@@ -246,7 +243,7 @@ public abstract class ReliabilityEvaluatorBase<S extends InstantiatedTaskMapping
 	 * If the failure probability is 0, -100 is returned to avoid log(0).
 	 */
 	protected abstract double evaluateInternal(StrictTTSchedule<S, T> schedule, T itmEnc,
-			DefaultTaskGraph<?> taskGraph, FailureType failureProbabilityType);
+			TaskGraph taskGraph, FailureType failureProbabilityType);
 
 	/**
 	 * {@inheritDoc}
@@ -299,9 +296,9 @@ public abstract class ReliabilityEvaluatorBase<S extends InstantiatedTaskMapping
 		taskmap.put(deploymentTarget, reliability);
 		Apfloat one = new Apfloat(1, FP_PRECISION);
 		NumberFormat formatter = new DecimalFormat("0.######E0");
-		System.out.println(
-				"Task " + deployableComponent.getName() + " on " + deploymentTarget.getName() +
-						" : " + formatter.format(one.subtract(reliability).doubleValue()));
+		System.out.println("Task " + deployableComponent.getName() + " on " +
+				deploymentTarget.getName() + " : " +
+				formatter.format(one.subtract(reliability).doubleValue()));
 	}
 
 	/**
@@ -327,13 +324,15 @@ public abstract class ReliabilityEvaluatorBase<S extends InstantiatedTaskMapping
 	protected Apfloat getComponentFailureRate(ITaskAdapter<?> deployableComponent,
 			IExecutionUnitAdapter<?> deploymentTarget) {
 		if(deployableComponent.getObject() instanceof EObject) {
-			deployableComponent = systemModelAdapter
-					.getRealizeableDeployableComponentOf((EObject)deployableComponent.getObject());
+			deployableComponent =
+					systemModelAdapter
+							.getRealizeableDeployableComponentOf((EObject)deployableComponent
+									.getObject());
 			if(componentReliability.get(deployableComponent) != null &&
 					componentReliability.get(deployableComponent).get(deploymentTarget) != null) {
 				Apfloat one = new Apfloat(1, FP_PRECISION);
-				return one.subtract(
-						componentReliability.get(deployableComponent).get(deploymentTarget));
+				return one.subtract(componentReliability.get(deployableComponent).get(
+						deploymentTarget));
 			}
 		}
 		return null;
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/.ratings
index 7aaa8c3281291841a7bf6bc3907b515140eaec68..731ce5fa3e14f9481657c62876e5bf6553670053 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/.ratings
@@ -1,2 +1,2 @@
-SafetyChannelPortReplicator.java 5990480f0a7fc3ee1671ab71cf6a650aeb4e7dce RED
-SafetyDiagUnitRemover.java b1a08fa29528ef5df0c21f47161173cf65b94554 RED
+SafetyChannelPortReplicator.java bb3a2ea361002d67baacb7aaf411e4733a887505 RED
+SafetyDiagUnitRemover.java 5148abab7b56dae7d9ac6123de9d7ed4307dfd05 RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/SafetyChannelPortReplicator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/SafetyChannelPortReplicator.java
index 5990480f0a7fc3ee1671ab71cf6a650aeb4e7dce..bb3a2ea361002d67baacb7aaf411e4733a887505 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/SafetyChannelPortReplicator.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/SafetyChannelPortReplicator.java
@@ -71,11 +71,10 @@ public class SafetyChannelPortReplicator extends TransformationModuleBase<Compon
 			ITransformationModule.TransformationState state, TransformationContext context,
 			ExplorationTransformationInputs inputs, SubClassToInstanceMap<N> transformedModels,
 			EObject outputModel) {
-		@SuppressWarnings("unchecked") SafetyFunctionArchEncoding<Component> sfaEnc =
-				inputs.getEncoding(SafetyFunctionArchEncoding.class);
+		SafetyFunctionArchEncoding sfaEnc = inputs.getEncoding(SafetyFunctionArchEncoding.class);
 
 		Collection<Component> sfComponents = new HashSet<>();
-		for(SafetyFunctionArchEntry<Component> sfaEntry : sfaEnc.getAllEntries()) {
+		for(SafetyFunctionArchEntry sfaEntry : sfaEnc.getAllEntries()) {
 			Collection<ITaskAdapter<Component>> entryCompAdps =
 					sfaEntry.getSafetyFunctionAdapter().getAllComponents();
 			entryCompAdps.forEach(c -> sfComponents.add(c.getObject()));
@@ -86,8 +85,8 @@ public class SafetyChannelPortReplicator extends TransformationModuleBase<Compon
 
 		Collection<InputPort> connectedInputPorts = new HashSet<>();
 		for(OutputPort curOutPort : sfOutPorts) {
-			curOutPort.getOutgoingChannels()
-					.forEach(ch -> connectedInputPorts.add((InputPort)ch.getTarget()));
+			curOutPort.getOutgoingChannels().forEach(
+					ch -> connectedInputPorts.add((InputPort)ch.getTarget()));
 		}
 
 		Collection<InputPort> nonSfInputPorts =
@@ -99,8 +98,9 @@ public class SafetyChannelPortReplicator extends TransformationModuleBase<Compon
 			List<Channel> incomingChannels = inPort.getIncomingChannels();
 			for(int chIdx = 1; chIdx < incomingChannels.size(); chIdx++) {
 				char suffix = (char)(chIdx - 1 + 'a');
-				InputPort genPort = replicateInputPortAndAttach(inPort, inPort.getComponent(),
-						inPort.getName() + "_" + suffix);
+				InputPort genPort =
+						replicateInputPortAndAttach(inPort, inPort.getComponent(),
+								inPort.getName() + "_" + suffix);
 				Channel curCh = incomingChannels.get(chIdx);
 				curCh.setTarget(genPort);
 				InputPort origPort = (InputPort)genToOrigAssocMap.get(inPort);
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/SafetyDiagUnitRemover.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/SafetyDiagUnitRemover.java
index b1a08fa29528ef5df0c21f47161173cf65b94554..5148abab7b56dae7d9ac6123de9d7ed4307dfd05 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/SafetyDiagUnitRemover.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/SafetyDiagUnitRemover.java
@@ -96,14 +96,13 @@ public class SafetyDiagUnitRemover extends TransformationModuleBase<ComponentArc
 					"Could not retrieve the generated Component Architecture.");
 		}
 
-		@SuppressWarnings("unchecked") SafetyFunctionArchEncoding<Component> sfaEnc =
-				inputs.getEncoding(SafetyFunctionArchEncoding.class);
+		SafetyFunctionArchEncoding sfaEnc = inputs.getEncoding(SafetyFunctionArchEncoding.class);
 		if(sfaEnc == null) {
 			throw new TransformationModuleException(this,
 					"A SafetyFunctionArchEncoding is required for this module to operate properly.");
 		}
 
-		for(SafetyFunctionArchEntry<Component> sfaEntry : sfaEnc.getAllEntries()) {
+		for(SafetyFunctionArchEntry sfaEntry : sfaEnc.getAllEntries()) {
 			if(!sfaEntry.isDiagnosicUnitPresent()) {
 				for(ITaskAdapter<Component> diagCompAdp : sfaEntry.getSafetyFunctionAdapter()
 						.getDiagnosticComponents()) {
@@ -116,10 +115,10 @@ public class SafetyDiagUnitRemover extends TransformationModuleBase<ComponentArc
 
 						// Get all channels connected to the current diagnostic Component.
 						Collection<Channel> genChannels = new ArrayList<>();
-						((Component)genDiagComponent).getInputPorts()
-								.forEach(p -> genChannels.addAll(p.getIncomingChannels()));
-						((Component)genDiagComponent).getOutputPorts()
-								.forEach(p -> genChannels.addAll(p.getOutgoingChannels()));
+						((Component)genDiagComponent).getInputPorts().forEach(
+								p -> genChannels.addAll(p.getIncomingChannels()));
+						((Component)genDiagComponent).getOutputPorts().forEach(
+								p -> genChannels.addAll(p.getOutgoingChannels()));
 						// Remove all ports from Components which are connected to the diagnostic
 						// Component. Can be included if needed. NOTE: Instantiated components will
 						// introduce the "same" Port again.
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/.ratings
index 8678ff5d29425f2e46928a9a52c607cefe0255d2..3d0f9a8a656d566aa64d79fdcf82ceac1fa63d9e 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/.ratings
@@ -1,2 +1,2 @@
-FailSilentExecModelFactory.java 45d74ef3ed0bc01f51ff912a67f8e163199b73cc RED
-FaultDetectionVotingExecModelFactory.java 5f0f357388b614c1671879742ff46fe64f15a2b9 RED
+FailSilentExecModelFactory.java 5811c8cba759f3e7ca5809e6021a64f4a5188788 RED
+FaultDetectionVotingExecModelFactory.java 0d0d9cf608f95f1dfe3afd653049ae2f3bb19d5a RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FailSilentExecModelFactory.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FailSilentExecModelFactory.java
index 45d74ef3ed0bc01f51ff912a67f8e163199b73cc..5811c8cba759f3e7ca5809e6021a64f4a5188788 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FailSilentExecModelFactory.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FailSilentExecModelFactory.java
@@ -45,11 +45,9 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.proc.EDFSchedulerBase;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.proc.FailSilentEDFScheduler;
-import org.fortiss.af3.exploration.model.ExplorationSpecification;
 import org.fortiss.af3.exploration.model.ExplorationTarget;
 import org.fortiss.af3.exploration.model.time.DeadlineConstraint;
 import org.fortiss.af3.exploration.model.time.PeriodConstraint;
-import org.fortiss.af3.exploration.moea.model.DseSpecification;
 import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiAllocationConstraint;
 import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiDislocationConstraint;
 import org.fortiss.af3.exploration.moea.model.predefined.FailureMinObjective;
@@ -134,7 +132,7 @@ public class FailSilentExecModelFactory extends
 	@Override
 	// TODO: identify why a warning is generated here.
 	public
-			InstantiatedTaskMappingDecoderAcyclic<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding>
+			InstantiatedTaskMappingDecoderAcyclic<FailSilentTaskMappingEntry>
 			createAbstractToAcyclicTaskGraphDecoder() {
 		return new InstantiatedTaskMappingDecoderAcyclic();
 	}
@@ -149,9 +147,8 @@ public class FailSilentExecModelFactory extends
 	/** {@inheritDoc} */
 	@Override
 	public StrictTTDecoder<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding>
-			createStrictTTDecoder(DseSpecification explorationDefinition) {
-		return new StrictTTDecoder<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding>(
-				explorationDefinition);
+			createStrictTTDecoder() {
+		return new StrictTTDecoder<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding>();
 	}
 
 	/**
@@ -159,8 +156,8 @@ public class FailSilentExecModelFactory extends
 	 * given execution model
 	 */
 	@Override
-	public EDFSchedulerBase<?, ?> createEDFScheduler(ExplorationSpecification expSpec) {
-		return new FailSilentEDFScheduler(expSpec);
+	public EDFSchedulerBase<?, ?> createEDFScheduler() {
+		return new FailSilentEDFScheduler();
 	}
 
 	/* Construct Evaluators for Optimization Goals. */
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FaultDetectionVotingExecModelFactory.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FaultDetectionVotingExecModelFactory.java
index 5f0f357388b614c1671879742ff46fe64f15a2b9..0d0d9cf608f95f1dfe3afd653049ae2f3bb19d5a 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FaultDetectionVotingExecModelFactory.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FaultDetectionVotingExecModelFactory.java
@@ -45,11 +45,9 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.proc.EDFSchedulerBase;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.proc.FaultDetectionVotingEDFScheduler;
-import org.fortiss.af3.exploration.model.ExplorationSpecification;
 import org.fortiss.af3.exploration.model.ExplorationTarget;
 import org.fortiss.af3.exploration.model.time.DeadlineConstraint;
 import org.fortiss.af3.exploration.model.time.PeriodConstraint;
-import org.fortiss.af3.exploration.moea.model.DseSpecification;
 import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiAllocationConstraint;
 import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiDislocationConstraint;
 import org.fortiss.af3.exploration.moea.model.predefined.FailureMinObjective;
@@ -141,7 +139,7 @@ public class FaultDetectionVotingExecModelFactory
 	@Override
 	// TODO: identify why a warning is generated here.
 	public
-			InstantiatedTaskMappingDecoderAcyclic<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding>
+			InstantiatedTaskMappingDecoderAcyclic<FaultDetectionVotingTaskMappingEntry>
 			createAbstractToAcyclicTaskGraphDecoder() {
 		return new InstantiatedTaskMappingDecoderAcyclic();
 	}
@@ -158,15 +156,14 @@ public class FaultDetectionVotingExecModelFactory
 	@Override
 	public
 			StrictTTDecoder<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding>
-			createStrictTTDecoder(DseSpecification explorationDefinition) {
-		return new StrictTTDecoder<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding>(
-				explorationDefinition);
+			createStrictTTDecoder() {
+		return new StrictTTDecoder<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding>();
 	}
 
 	/** {@inheritDoc} */
 	@Override
-	public EDFSchedulerBase<?, ?> createEDFScheduler(ExplorationSpecification expSpec) {
-		return new FaultDetectionVotingEDFScheduler(expSpec);
+	public EDFSchedulerBase<?, ?> createEDFScheduler() {
+		return new FaultDetectionVotingEDFScheduler();
 	}
 
 	/* Construct Evaluators for Optimization Goals. */
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/.ratings
index 7152e0ce76d9e553da0b413f51ae61b05823bf14..4bf577b83bb6458749270d3f0c6d42ed082eb0c3 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/.ratings
@@ -9,9 +9,9 @@ IPlatformArchitectureAdapter.java 399d3cdff468c5ac95ca4cf6f17caabdeb2fef16 RED
 IRequestAdapter.java d9298837caf9e15971471aae0bb567e416e82a41 RED
 IResourceAdapter.java 4d41218b96f25daedad66098250baf622a3f89b3 RED
 IResourceConnectionAdapter.java 67d0a7f54de3e3fe21532fc33f6b853eb844b993 RED
-ISafetyFunctionAdapter.java 503745b2c45c19995f37b10e8d640aeca06d5154 RED
+ISafetyFunctionAdapter.java 6a16258729ba9dff91c35285d18bc06cc99a713a RED
 ISignalAdapter.java 2bdb578564cf1d3351c99811c9090e2e9bd70715 RED
 ITaskAdapter.java 0f8c8699bb48e609211713aef6a7e1e82a00c963 RED
 ITransmissionUnitAdapter.java 217aca158641261dc8035805f341fe4c4c527a36 RED
 InternalComponentParameters.java cd5eea4ddf104c4cb3c4521d3256566812876027 RED
-SystemModelAdapter.java f92341ec7813ad4301b0f3abc084b3dbc6f8055f RED
+SystemModelAdapter.java 28bf6b9de321f56d14bad7d8f362fe30e28d2fae RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/ISafetyFunctionAdapter.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/ISafetyFunctionAdapter.java
index 503745b2c45c19995f37b10e8d640aeca06d5154..6a16258729ba9dff91c35285d18bc06cc99a713a 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/ISafetyFunctionAdapter.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/ISafetyFunctionAdapter.java
@@ -17,6 +17,7 @@ package org.fortiss.af3.exploration.alg.dse.sysmodel.arch;
 
 import java.util.Collection;
 
+import org.fortiss.af3.component.model.Component;
 import org.fortiss.af3.safety.model.SafetyArchitecture;
 
 /**
@@ -42,20 +43,26 @@ public interface ISafetyFunctionAdapter<T> {
 	 * Returns the collection of {@link ITaskAdapter}s that are realizing diagnostic
 	 * functions of the actual safety function.
 	 */
-	Collection<ITaskAdapter<T>> getDiagnosticComponents();
+	// FIXME: intermediate HACK. For back-transformations, the AF3 adapters should be used which
+	// contain information about the concrete model types.
+	Collection<ITaskAdapter<Component>> getDiagnosticComponents();
 
 	/**
 	 * Returns the {@link ITaskAdapter} that generates the output signal of the
 	 * safety functions, i.e. a voter or HW interfacing component.
 	 */
+	// FIXME: intermediate HACK. For back-transformations, the AF3 adapters should be used which
+	// contain information about the concrete model types.
 	// TODO: extend to collection.
-	ITaskAdapter<T> getOutputComponent();
+	ITaskAdapter<Component> getOutputComponent();
 
 	/**
-	 * Returns the collection of all {@link ITaskAdapter}s that represent
-	 * {@code this} safety function.
+	 * Returns the collection of all {@link ITaskAdapter}s that represent {@code this} safety
+	 * function.
 	 */
-	Collection<ITaskAdapter<T>> getAllComponents();
+	// FIXME: intermediate HACK. For back-transformations, the AF3 adapters should be used which
+	// contain information about the concrete model types.
+	Collection<ITaskAdapter<Component>> getAllComponents();
 
 	/**
 	 * Returns the collection of {@link SafetyArchitecture}s that may be used to implement
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java
index f92341ec7813ad4301b0f3abc084b3dbc6f8055f..28bf6b9de321f56d14bad7d8f362fe30e28d2fae 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java
@@ -33,18 +33,13 @@ import java.util.stream.Collectors;
 import org.eclipse.emf.ecore.EObject;
 import org.fortiss.af3.component.model.Component;
 import org.fortiss.af3.component.model.ComponentArchitecture;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.InitialEncodingProvider;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.platform.PlatformCommunicationGraphEncoding;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceConnectionAdapter.ConnectionType;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.AcyclicTaskGraph;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.DefaultTaskGraph;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.SignalAdapterWeightedEdge;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph;
 import org.fortiss.af3.exploration.alg.exception.InvalidTimingModelException;
-import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
 import org.fortiss.af3.platform.model.ExecutionUnit;
 import org.fortiss.af3.platform.model.IPlatformArchitectureElement;
 import org.fortiss.af3.platform.model.IPlatformCommunicationResource;
@@ -57,17 +52,19 @@ import org.fortiss.tooling.base.model.element.IHierarchicElement;
 import org.fortiss.tooling.base.model.element.IModelElement;
 import org.jgrapht.Graphs;
 import org.jgrapht.alg.ConnectivityInspector;
-import org.opt4j.core.Genotype;
 
 import com.google.common.collect.HashMultimap;
 import com.google.common.collect.Multimap;
+import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
+import com.google.inject.name.Named;
 
 /**
  * Adapter to the system model used as input for the DSE which is created for a specific DSE run.
  * 
  * @author barner, huang
  */
-public class SystemModelAdapter<C, E, SO, SI, G, TR, M> {
+public class SystemModelAdapter<C, E, SO, SI, G, TR, M> extends AbstractModule {
 
 	/**
 	 * Constant defining the allowed tolerance for the calculation of the greatest common divisor
@@ -94,8 +91,8 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> {
 	 * Look up table to determine the input/output directions of {@link IConnector} types of the
 	 * target {@link PlatformArchitecture}.
 	 */
-	protected Map<Class<? extends IConnector>, ConnectionType> connectionTypeLUT =
-			Collections.emptyMap();
+	protected Map<Class<? extends IConnector>, ConnectionType> connectionTypeLUT = Collections
+			.emptyMap();
 
 	/**
 	 * Deployable software components that may be replicated (per default: all @{code
@@ -160,7 +157,7 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> {
 	protected PlatformCommunicationGraphEncoding platformCommunicationGraph;
 
 	/** The set of independent {@link DefaultTaskGraph}s derived from the logical architecture. */
-	protected Collection<TaskGraph> taskGraphs;
+	protected Set<TaskGraph> taskGraphs;
 
 	/**
 	 * The set of independent directed acyclic {@link DefaultTaskGraph}s derived from the logical
@@ -229,7 +226,7 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> {
 		// - Print some debugging output
 		// - Determine the hyper-period of all {@link TaskGraph}s contained in this {@link
 		// SystemModelAdapter}.
-		taskGraphs = new ArrayList<TaskGraph>();
+		taskGraphs = new HashSet<TaskGraph>();
 		acyclicTaskGraphs = new ArrayList<>();
 
 		// Temporary task graph: add vertices (= software components / tasks that need to be mapped
@@ -249,8 +246,9 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> {
 		tasksInGraph = registerTaskGraphsForTasks(taskGraphs);
 
 		// Construct an Directed Acyclic TaskGraph (e.g., utilized in scheduling).
-		acyclicTaskGraphs = taskGraphs.stream().map(tg -> new AcyclicTaskGraph(tg))
-				.collect(Collectors.toList());
+		acyclicTaskGraphs =
+				taskGraphs.stream().map(tg -> new AcyclicTaskGraph(tg))
+						.collect(Collectors.toList());
 		componentInAcyclicGraph = registerTaskGraphsForTasks(acyclicTaskGraphs);
 
 		// Print some debugging output: print the taskgraphs and display them in a dialog.
@@ -273,9 +271,9 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> {
 	 * @throws InvalidTimingModelException
 	 *             if the periods for a single task graph cannot be set up.
 	 */
-	private Collection<TaskGraph> createDefaultTaskGraphs(TaskGraph monolithicTaskGraph)
+	private Set<TaskGraph> createDefaultTaskGraphs(TaskGraph monolithicTaskGraph)
 			throws InvalidTimingModelException {
-		Collection<TaskGraph> independentTaskGraphs = new ArrayList<>();
+		Set<TaskGraph> independentTaskGraphs = new HashSet<>();
 		// Compute vertex sets of maximum connected components of temporary task graph
 		ConnectivityInspector<ITaskAdapter<?>, SignalAdapterWeightedEdge> ci =
 				new ConnectivityInspector<ITaskAdapter<?>, SignalAdapterWeightedEdge>(
@@ -297,22 +295,6 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> {
 		return independentTaskGraphs;
 	}
 
-	/**
-	 * Creates the initial set of encodings that can be constructed from the input system models.
-	 * While {@link Genotype}s and {@link Phenotype}s have a special meaning in the optimizers'
-	 * context, {@link IExplorationEncoding}s are "only" system abstraction without any of the
-	 * aforementioned meanings.
-	 */
-	@SuppressWarnings("unchecked")
-	protected void createInitialEncodings() {
-		InitialEncodingProvider initEncProvider = InitialEncodingProvider.getInstance();
-		initEncProvider.clearEncodings();
-
-		initEncProvider.registerInputEncoding(
-				new AbstractTaskGraphEncoding<AbstractTaskMappingEncoding, C>(
-						(Collection<? extends DefaultTaskGraph<?>>)getTaskGraphs(), hyperPeriod));
-	}
-
 	/**
 	 * Adds the given collection of {@link ISafetyFunctionAdapter}s to {@code this}
 	 * {@link SystemModelAdapter} that represents the input system models. In contrast to other
@@ -349,8 +331,8 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> {
 	// TODO: Here, we know that the IDeployableCOmponentAdapters are constructed using Components.
 	// However, we should try to avoid the "SuppressWarnings".
 	@SuppressWarnings("unchecked")
-	private <T extends TaskGraph> Map<ITaskAdapter<C>, T>
-			registerTaskGraphsForTasks(Collection<T> graphs) {
+	private <T extends TaskGraph> Map<ITaskAdapter<C>, T> registerTaskGraphsForTasks(
+			Collection<T> graphs) {
 		Map<ITaskAdapter<C>, T> componentToGraphMap = new HashMap<ITaskAdapter<C>, T>();
 
 		for(T taskGraph : graphs) {
@@ -387,8 +369,8 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> {
 	 */
 	private <T extends TaskGraph> void printAndDisplayTaskGraphs(Collection<T> taskGraphs) {
 		for(T taskGraph : taskGraphs) {
-			System.out.println(
-					"Application " + taskGraph + ":" + " period = " + taskGraph.getPeriod());
+			System.out.println("Application " + taskGraph + ":" + " period = " +
+					taskGraph.getPeriod());
 			System.out.println(taskGraph);
 			System.out.println("");
 
@@ -544,9 +526,9 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> {
 	 * Returns the {@link ISafetyFunctionAdapter}s constructed from the safety functions that are
 	 * present in the input models.
 	 */
-	public Collection<ISafetyFunctionAdapter<C>> getSafetyFunctionAdapters() {
+	public Collection<ISafetyFunctionAdapter<?>> getSafetyFunctionAdapters() {
 		if(safetyFunctionAdapters != null) {
-			return safetyFunctionAdapters;
+			return (Collection<ISafetyFunctionAdapter<?>>)(Collection<?>)safetyFunctionAdapters;
 		}
 		return Collections.emptySet();
 	}
@@ -578,7 +560,9 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> {
 	 * Returns all independent {@link DefaultTaskGraph}s contained in this
 	 * {@link SystemModelAdapter}.
 	 */
-	public Collection<? extends TaskGraph> getTaskGraphs() {
+	@Provides
+	@Named("OriginalTaskGraphs")
+	public Set<TaskGraph> getTaskGraphs() {
 		return taskGraphs;
 	}
 
@@ -607,9 +591,8 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> {
 	}
 
 	/**
-	 * Returns the {@link ISignalAdapter}s "emitted" by the given
-	 * {@link ITaskAdapter}. Returns an empty collection if the given
-	 * {@link ITaskAdapter} does not emit anything.
+	 * Returns the {@link ISignalAdapter}s "emitted" by the given {@link ITaskAdapter}. Returns an
+	 * empty collection if the given {@link ITaskAdapter} does not emit anything.
 	 */
 	public Collection<ISignalAdapter<SO, ?>> getEmmittedMessages(ITaskAdapter<?> sender) {
 		// TODO: use another representation ro make an access via the reference obsolete
@@ -625,6 +608,8 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> {
 	 * Returns the hyper period of all tasks in the system, i.e. the hyper-period of all independent
 	 * {@link DefaultTaskGraph}s.
 	 */
+	@Provides
+	@Named("HyperPeriod")
 	public Double getHyperPeriod() {
 		return hyperPeriod;
 	}
@@ -680,9 +665,9 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> {
 
 			// This section handles the traversal between the elements of the same platform
 			// architecture.
-			targetConnectors.addAll(
-					seekIntraPlatformTargetConnectors(sourceConnector, possibleTargetConnectors,
-							visitedTargetConnectors, nextTargetConnector, af3DeploymentTargets));
+			targetConnectors.addAll(seekIntraPlatformTargetConnectors(sourceConnector,
+					possibleTargetConnectors, visitedTargetConnectors, nextTargetConnector,
+					af3DeploymentTargets));
 
 			visitedTargetConnectors.add(nextTargetConnector);
 		}
@@ -743,8 +728,9 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> {
 			// Do not traverse back (to same connector) & not to the same IHierarchicElement.
 			if(!visitedTargetConnectors.contains(connectorTgt) &&
 					tgtElement != sourceConnector.getOwner()) {
-				if(tgtElement instanceof IPlatformArchitectureElement && isValidConnectionTarget(
-						(IPlatformArchitectureElement)tgtElement, deploymentTargets)) {
+				if(tgtElement instanceof IPlatformArchitectureElement &&
+						isValidConnectionTarget((IPlatformArchitectureElement)tgtElement,
+								deploymentTargets)) {
 					targetConnectors.add(connectorTgt);
 				} else if(tgtElement == connectorSrc.getOwner().getContainer() &&
 						!(nextTargetConnector instanceof IPlatformExport)) {
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/.ratings
index 7c71b98c20002ad6a5f08b7fc64326dbdb10b984..b1b7315c8bbff57157cc210da70c17c83bb5f147 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/.ratings
@@ -8,6 +8,6 @@ AF3RequestAdapter.java c859ff360212cdab994895ee84390a235922c3cf RED
 AF3ResourceAdapter.java ca6c78c2cffe0e7c2d28990138e309b851a192d7 RED
 AF3ResourceConnectionAdapter.java 56a9eb31aa8a64702bf82b5c072ccdc3cd32bf53 RED
 AF3SignalAdapter.java 7d124a5c25b8267fa3be16d897253252f96c21c7 RED
-AF3SystemModelAdapter.java 07b8ad0613452cd08b3ef588b7de3c9cbfb3021e RED
+AF3SystemModelAdapter.java ce9ac0d795ddba5ad77903215560689f732a82dc RED
 AF3TaskAdapter.java 4ee4e1bcf1f4780f0a4f069d1a0bcf177a241dc7 RED
 AF3TransmissionUnitAdapter.java 41e176391fbb7577fc63b790d3f508d8eeffc445 RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3SystemModelAdapter.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3SystemModelAdapter.java
index 07b8ad0613452cd08b3ef588b7de3c9cbfb3021e..ce9ac0d795ddba5ad77903215560689f732a82dc 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3SystemModelAdapter.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3SystemModelAdapter.java
@@ -84,7 +84,8 @@ import com.google.common.collect.Multimap;
  * 
  * @author diewald
  */
-public class AF3SystemModelAdapter extends
+public class AF3SystemModelAdapter
+		extends
 		SystemModelAdapter<Task, ExecutionUnit, TaskOutputPort, TaskInputPort, GatewayUnit, TransmissionUnit, MemoryUnit> {
 
 	/**
@@ -105,8 +106,8 @@ public class AF3SystemModelAdapter extends
 	/** Cache the Annotation View's update status. */
 	private boolean annotationUpdateEnabled;
 
-	public static Map<Class<? extends IConnector>, ConnectionType> connectionTypeLUT =
-			Collections.unmodifiableMap(new HashMap<Class<? extends IConnector>, ConnectionType>() {
+	public static Map<Class<? extends IConnector>, ConnectionType> connectionTypeLUT = Collections
+			.unmodifiableMap(new HashMap<Class<? extends IConnector>, ConnectionType>() {
 				{
 				}
 			});
@@ -118,19 +119,20 @@ public class AF3SystemModelAdapter extends
 		Optional<ComponentToTaskAllocationEntry> anyEntry =
 				getFirst(componentTaskAllocs.getEntries());
 		if(!anyEntry.isPresent()) {
-			throw new Exception("The set of component to task allocations is empty." +
-					" It is needed by the DSE. Exiting.");
+			throw new Exception("The set of component to task allocations is empty."
+					+ " It is needed by the DSE. Exiting.");
 		}
 		Optional<IModelElement> anyComponent = getFirst(anyEntry.get().getSourceElements());
 		if(!anyComponent.isPresent()) {
-			throw new Exception("At least one task is not associated with a Component." +
-					" It is needed by the DSE. Exiting.");
+			throw new Exception("At least one task is not associated with a Component."
+					+ " It is needed by the DSE. Exiting.");
 		}
 		ComponentArchitecture compArch =
 				getFirstParentWithType(anyComponent.get(), ComponentArchitecture.class);
 		this.logicalArchitecture = new AF3LogicalArchitectureAdapter(compArch);
-		PlatformArchitecture platArch = getFirstParentWithType(
-				getFirst(execUnits.getEntries()).orElse(null), PlatformArchitecture.class);
+		PlatformArchitecture platArch =
+				getFirstParentWithType(getFirst(execUnits.getEntries()).orElse(null),
+						PlatformArchitecture.class);
 		this.platformArchitecture = new AF3PlatformArchitectureAdapter(platArch);
 		// End: Porting code.
 
@@ -168,18 +170,15 @@ public class AF3SystemModelAdapter extends
 
 		setupEmittedMessages();
 
-		// Create the initial encodings that can already be constructed from the input models.
-		createInitialEncodings();
-
 		// Re-enable annotation view updates.
 		setUpdateEnabled(annotationUpdateEnabled);
 	}
 
 	/**
 	 * Creates a collection of {@link ITaskAdapter}s that are available to
-	 * instantiate other "abstract" {@link ITaskAdapter}s. Only those
-	 * {@link ITaskAdapter}s which are referenced by {@link Component}s of the input
-	 * {@link ComponentArchitecture} are included in the collection.
+	 * instantiate other "abstract" {@link ITaskAdapter}s. Only those {@link ITaskAdapter}s which
+	 * are referenced by {@link Component}s of the input {@link ComponentArchitecture} are included
+	 * in the collection.
 	 */
 	// TODO(#3264)
 	// private Multimap<Component, ITaskAdapter<Component>> createComponentReplacementAdapters(
@@ -257,8 +256,8 @@ public class AF3SystemModelAdapter extends
 	 * 
 	 * @throws Exception
 	 */
-	private Collection<ISignalAdapter<TaskOutputPort, TaskInputPort>>
-			createSignalAdapters(SuperSet<Signal> signals) throws Exception {
+	private Collection<ISignalAdapter<TaskOutputPort, TaskInputPort>> createSignalAdapters(
+			SuperSet<Signal> signals) throws Exception {
 		// TODO: We could also use the signals directly, but that affects the rest of the DSE. Thus
 		// this change needs to be considered thoroughly and requires (maybe) large changes.
 		Collection<ISignalAdapter<TaskOutputPort, TaskInputPort>> rval = new ArrayList<>();
@@ -369,8 +368,8 @@ public class AF3SystemModelAdapter extends
 	 * 
 	 * @throws Exception
 	 */
-	private Collection<IMemoryUnitAdapter<MemoryUnit>>
-			createMemoryUnits(PlatformArchitecture platformArchitecture) throws Exception {
+	private Collection<IMemoryUnitAdapter<MemoryUnit>> createMemoryUnits(
+			PlatformArchitecture platformArchitecture) throws Exception {
 		Collection<IMemoryUnitAdapter<MemoryUnit>> rval =
 				new ArrayList<IMemoryUnitAdapter<MemoryUnit>>();
 		for(MemoryUnit currentMemoryUnit : getChildrenWithType(platformArchitecture,
@@ -407,8 +406,8 @@ public class AF3SystemModelAdapter extends
 	 * @throws Exception
 	 */
 	// TODO(#3262): Also power here...
-	private Collection<IGatewayUnitAdapter<GatewayUnit>>
-			createGatewayUnits(PlatformArchitecture platformArchitecture) throws Exception {
+	private Collection<IGatewayUnitAdapter<GatewayUnit>> createGatewayUnits(
+			PlatformArchitecture platformArchitecture) throws Exception {
 		Collection<IGatewayUnitAdapter<GatewayUnit>> rval =
 				new ArrayList<IGatewayUnitAdapter<GatewayUnit>>();
 
@@ -426,13 +425,13 @@ public class AF3SystemModelAdapter extends
 	 * @throws Exception
 	 */
 	// TODO(#3262): Also power, here.
-	private Collection<ITransmissionUnitAdapter<TransmissionUnit>>
-			createTransmissionUnits(PlatformArchitecture platformArchitecture) throws Exception {
+	private Collection<ITransmissionUnitAdapter<TransmissionUnit>> createTransmissionUnits(
+			PlatformArchitecture platformArchitecture) throws Exception {
 		Collection<ITransmissionUnitAdapter<TransmissionUnit>> rval =
 				new ArrayList<ITransmissionUnitAdapter<TransmissionUnit>>();
 
-		for(TransmissionUnit transmissionUnit : EcoreUtils.getChildrenWithType(platformArchitecture,
-				TransmissionUnit.class)) {
+		for(TransmissionUnit transmissionUnit : EcoreUtils.getChildrenWithType(
+				platformArchitecture, TransmissionUnit.class)) {
 			rval.add(new AF3TransmissionUnitAdapter(transmissionUnit));
 		}
 		return rval;
@@ -523,7 +522,8 @@ public class AF3SystemModelAdapter extends
 	 */
 	// TODO: Refactor this method to use the static methods from the AF3Utils class instead.
 	private void determineNextConnectionTargets(LinkedList<IConnector> deployableConnectors,
-			Collection<IConnector> visitedConnectors, Collection<IHierarchicElement> targetElements,
+			Collection<IConnector> visitedConnectors,
+			Collection<IHierarchicElement> targetElements,
 			Collection<ExecutionUnit> af3DeploymentTargets) {
 		for(IHierarchicElement targetElement : targetElements) {
 			if(targetElement instanceof IPlatformResource &&
@@ -644,8 +644,7 @@ public class AF3SystemModelAdapter extends
 	 * matching {@link Deployment} to the given list.
 	 */
 	private void addMatchingParameterDeploymentTo(Set<Deployment> paramDeployments,
-			ComponentArchitecture componentArchitecture,
-			PlatformArchitecture platformArchitecture) {
+			ComponentArchitecture componentArchitecture, PlatformArchitecture platformArchitecture) {
 		List<Deployment> matchingDeployments =
 				getDeploymentsWithParametersOf(componentArchitecture, platformArchitecture);
 		if(matchingDeployments != null && matchingDeployments.size() > 0) {
@@ -659,8 +658,8 @@ public class AF3SystemModelAdapter extends
 	 * Returns the set of {@link ComponentArchitecture}s that contain the referenced
 	 * {@link Component}s given by the {@code replacementComponents} map.
 	 */
-	private Set<ComponentArchitecture>
-			getReferencedCompArchs(Multimap<Component, Component> replacementComponents) {
+	private Set<ComponentArchitecture> getReferencedCompArchs(
+			Multimap<Component, Component> replacementComponents) {
 		Set<ComponentArchitecture> referencedCompArchs = new HashSet<ComponentArchitecture>();
 		for(Component diverseComponent : replacementComponents.values()) {
 			ComponentArchitecture diversityCompArch =
@@ -691,7 +690,9 @@ public class AF3SystemModelAdapter extends
 		}
 
 		assert (executionUnitAdapter == null) : "No IExecutionUnitAdapter found for the ExecutionUnit " +
-				af3ExecutionUnit.getName() + "(ID: " + af3ExecutionUnit.getId() +
+				af3ExecutionUnit.getName() +
+				"(ID: " +
+				af3ExecutionUnit.getId() +
 				"). Every AF3-ExecutionUnit should have a IExecutionUnitAdapter equivalent.";
 
 		return executionUnitAdapter;
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/.ratings
index 94515c542c3b4f364f69ded4bf1d794d7395c3e5..5ca24ee72f1df65da78dfc1c699955135370c1d0 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/.ratings
@@ -1,5 +1,5 @@
 AcyclicTaskGraph.java 51100f233b5f74b041e90567792cc6749323bb82 RED
 DefaultTaskGraph.java d93154c7edf376e60e46f5f3b164bfa7d939b959 RED
 SignalAdapterWeightedEdge.java b40989eecb8e94357476bfc5c7e9ef7e59013c9e RED
-TaskGraph.java 27fdf1acbbc10d47db9a4a7f20eaa7525a599aa9 RED
+TaskGraph.java f57b7d2fea23de276dad9334370b7007efa3f591 RED
 TaskGraphInstantiator.java 1f8a218f8c4ad885ca7d7d9560932f0f6a063a7b RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/TaskGraph.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/TaskGraph.java
index 27fdf1acbbc10d47db9a4a7f20eaa7525a599aa9..f57b7d2fea23de276dad9334370b7007efa3f591 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/TaskGraph.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/TaskGraph.java
@@ -61,14 +61,14 @@ public interface TaskGraph {
 	Set<ITaskAdapter<?>> getTasks();
 
 	/**
-	 * Checks whether {@code this} {@link TaskGraph} contains the given
-	 * {@link ITaskAdapter} or an instance of it.
+	 * Checks whether {@code this} {@link TaskGraph} contains the given {@link ITaskAdapter} or an
+	 * instance of it.
 	 */
 	boolean containsTask(ITaskAdapter<?> task);
 
 	/**
-	 * Checks whether {@code this} {@link TaskGraph} contains any of the given
-	 * {@link ITaskAdapter}s.
+	 * Checks whether {@code this} {@link TaskGraph} contains any of the given {@link ITaskAdapter}
+	 * s.
 	 */
 	boolean containsAnyTaskOf(Collection<ITaskAdapter<?>> taskSet);
 
@@ -112,6 +112,11 @@ public interface TaskGraph {
 	/** Registers a fault detector for a given task. */
 	void addFaultDetector(ITaskAdapter<?> deployableComponent, FaultDetector faultDetector);
 
+	/** Returns the fault detector corresponding to the given Task and ID. */
+	// TODO: Remove, bad design. Fault detectors are tasks and should be added in a decoder to
+	// another phenotype.
+	FaultDetector getFaultDetector(ITaskAdapter<?> task, int id);
+
 	/** Returns a random fault detector index / ID for the given task. */
 	int getRandomFaultDetectorId(ITaskAdapter<?> deployableComponent);
 }
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/.ratings
index 6f62fe77b75bd999f31626543f2011aea63b198d..556bab8b7d4549fd53310cac26b0e4876b9354c2 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/.ratings
@@ -1,2 +1,2 @@
 Message.java d4b5432ef03c3630ad1cbb8bd12b867a851f1559 RED
-MessageGenerator.java 13d7678c5043b61a3306ffc50f8af97842ae0817 RED
+MessageGenerator.java 133db9b92b2ed440d0f0309e748d459940d17b42 RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/MessageGenerator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/MessageGenerator.java
index 13d7678c5043b61a3306ffc50f8af97842ae0817..133db9b92b2ed440d0f0309e748d459940d17b42 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/MessageGenerator.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/MessageGenerator.java
@@ -26,7 +26,6 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmappi
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
@@ -47,8 +46,7 @@ public class MessageGenerator<S extends TaskMappingEntry<ITaskAdapter<?>, Partit
 	 * Generates messages from the given {#link encoding}. This methods evaluates the {#link
 	 * encoding}
 	 */
-	public Collection<Message> generateMessages(T encoding,
-			AbstractTaskGraphEncoding<AbstractTaskMappingEncoding, ?> atgEnc) {
+	public Collection<Message> generateMessages(T encoding, AbstractTaskGraphEncoding atgEnc) {
 		Collection<Message> generatedMessages = new HashSet<Message>();
 
 		// TODO: represent the signals in the task graph: do not use the systemModelAdapter here.
@@ -61,8 +59,7 @@ public class MessageGenerator<S extends TaskMappingEntry<ITaskAdapter<?>, Partit
 
 			TaskGraph tg = atgEnc.getTaskGraphOf(senderComponent);
 
-			@SuppressWarnings("unchecked") Collection<ISignalAdapter<?, ?>> emittedMessages =
-					new ArrayList<>();
+			Collection<ISignalAdapter<?, ?>> emittedMessages = new ArrayList<>();
 			tg.getGraph().outgoingEdgesOf(senderComponent)
 					.forEach(e -> emittedMessages.add(e.getSignalAdapter()));
 
@@ -78,9 +75,10 @@ public class MessageGenerator<S extends TaskMappingEntry<ITaskAdapter<?>, Partit
 				// generic type reflection will be required!
 				Collection<S> mappingEntriesOfSuccesors =
 						getSuccessorMappingEntries(encoding, currentMessageAdapter);
-				Message generatedMessage = generateMessageForSenderEntry(currentMessageAdapter,
-						(InstantiatedTaskMappingEntry)entry, mappingEntriesOfSuccesors,
-						allIsoCommConstr, otherIsoCommConstr);
+				Message generatedMessage =
+						generateMessageForSenderEntry(currentMessageAdapter,
+								(InstantiatedTaskMappingEntry)entry, mappingEntriesOfSuccesors,
+								allIsoCommConstr, otherIsoCommConstr);
 				if(generatedMessage != null) {
 					generatedMessages.add(generatedMessage);
 				}
@@ -94,8 +92,8 @@ public class MessageGenerator<S extends TaskMappingEntry<ITaskAdapter<?>, Partit
 	 * Creates a {@link Collection} which contains all {@link IMappingEntry}s that are causally
 	 * depend on the given sender {@link ITaskAdapter}.
 	 */
-	private Collection<S> getSuccessorMappingEntries(T encoding,
-			ISignalAdapter<?, ?> emittedMessage) {
+	private Collection<S>
+			getSuccessorMappingEntries(T encoding, ISignalAdapter<?, ?> emittedMessage) {
 		Collection<S> mappingEntriesOfSuccesors = new HashSet<S>();
 		Collection<ITaskAdapter<?>> realSuccessorComponents = new HashSet<>();
 
@@ -111,8 +109,9 @@ public class MessageGenerator<S extends TaskMappingEntry<ITaskAdapter<?>, Partit
 		}
 
 		for(ITaskAdapter<?> successorComponent : realSuccessorComponents) {
-			Collection<ITaskAdapter<?>> encComps = filterSet(encoding.getRequesters(),
-					c -> c.getObject() == successorComponent.getObject());
+			Collection<ITaskAdapter<?>> encComps =
+					filterSet(encoding.getRequesters(),
+							c -> c.getObject() == successorComponent.getObject());
 			for(ITaskAdapter<?> encComp : encComps) {
 				mappingEntriesOfSuccesors.addAll(encoding.getMappingEntriesOf(encComp));
 			}
@@ -158,9 +157,9 @@ public class MessageGenerator<S extends TaskMappingEntry<ITaskAdapter<?>, Partit
 	 * Returns whether the given {@link IMappingEntry} is included in any of the given
 	 * {@link InternalIsolatedCommunicationSet}s.
 	 */
-	private boolean isPartOfIsolationCommConstraint(
-			Collection<InternalIsolatedCommunicationSet> isoComm,
-			InstantiatedTaskMappingEntry entry) {
+	private boolean
+			isPartOfIsolationCommConstraint(Collection<InternalIsolatedCommunicationSet> isoComm,
+					InstantiatedTaskMappingEntry entry) {
 		AbstractTaskMappingEntry actualEntry =
 				entry.getAssociatedElement(AbstractTaskMappingEntry.class);
 
@@ -177,8 +176,8 @@ public class MessageGenerator<S extends TaskMappingEntry<ITaskAdapter<?>, Partit
 	 * Returns a collection of all {@link InternalIsolatedCommunicationSet} constraints that do not
 	 * include the given {@link IMappingEntry}.
 	 */
-	private Collection<InternalIsolatedCommunicationSet>
-			getOtherIsolationCommConstraints(T outGenotype, S entry) {
+	private Collection<InternalIsolatedCommunicationSet> getOtherIsolationCommConstraints(
+			T outGenotype, S entry) {
 		// TODO: here we use the knowledge that we have instantiated task mapping entries.
 		IMappingEntry<?, ?> actualEntry =
 				entry.getAssociatedElement(AbstractTaskMappingEntry.class);
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/.ratings
index e8d483c7ac38361fd611edb7ed86fd49d0916091..f5ec5ddc26775bd11a005fee3a5c6be9e1a3515f 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/.ratings
@@ -1,2 +1,2 @@
 ScheduleRuntimeException.java 88fefc07c8fdffc468fb8b49ccc4a38864823277 RED
-SchedulerBase.java e6e6cde677b0435fd247b80efd8cd9c662a2ba51 RED
+SchedulerBase.java 0420f98eacc569e8d3c83408326be98bc2a7c0cc RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/SchedulerBase.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/SchedulerBase.java
index e6e6cde677b0435fd247b80efd8cd9c662a2ba51..0420f98eacc569e8d3c83408326be98bc2a7c0cc 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/SchedulerBase.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/SchedulerBase.java
@@ -18,10 +18,8 @@ package org.fortiss.af3.exploration.alg.dse.sysmodel.sched;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.stream.Collectors;
 
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter;
-import org.fortiss.af3.exploration.model.ExplorationSpecification;
 import org.fortiss.af3.exploration.model.ExplorationTarget;
 import org.fortiss.af3.exploration.model.time.DeadlineConstraint;
 
@@ -44,10 +42,11 @@ public class SchedulerBase {
 	protected Map<DeadlineConstraint, ITaskAdapter<?>> deadlineTargetComponent;
 
 	/** Constructs a scheduler for a given input model. */
-	public SchedulerBase(ExplorationSpecification expSpec) {
-		this.deadlines =
-				expSpec.getTargets().stream().filter(t -> (t instanceof DeadlineConstraint))
-						.map(DeadlineConstraint.class::cast).collect(Collectors.toList());
+	// TODO: Readd deadline constraints.
+	public SchedulerBase() {
+		// this.deadlines =
+		// expSpec.getTargets().stream().filter(t -> (t instanceof DeadlineConstraint))
+		// .map(DeadlineConstraint.class::cast).collect(Collectors.toList());
 
 		componentDeadlineSourceMap = new HashMap<ITaskAdapter<?>, DeadlineConstraint>();
 		deadlineTargetComponent = new HashMap<DeadlineConstraint, ITaskAdapter<?>>();
@@ -56,10 +55,8 @@ public class SchedulerBase {
 	}
 
 	/**
-	 * Creates two maps that
-	 * <li>relate a {@link ITaskAdapter} which is defined as
-	 * the "source" of a deadline to its {@link DeadlineConstraint} and
-	 * <li>a map that relates
+	 * Creates two maps that <li>relate a {@link ITaskAdapter} which is defined as the "source" of a
+	 * deadline to its {@link DeadlineConstraint} and <li>a map that relates
 	 * {@link DeadlineConstraint}s with its "target" {@link ITaskAdapter}s.
 	 */
 	// private void createComponentDeadlineMap() {
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/.ratings
index 1ab65ac657b91454b4095d566800988fefd16e95..0ae5ff5229c06a583edb6eeebca2c1f0c32b18f6 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/.ratings
@@ -1 +1 @@
-TDMABusScheduler.java 20b532bc5028b4ab0e117f12001d9138b4ee00d8 RED
+TDMABusScheduler.java 17daaf222cd6923b20b8091a38a02c9f081b8585 RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/TDMABusScheduler.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/TDMABusScheduler.java
index 20b532bc5028b4ab0e117f12001d9138b4ee00d8..17daaf222cd6923b20b8091a38a02c9f081b8585 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/TDMABusScheduler.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/TDMABusScheduler.java
@@ -48,7 +48,6 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.comm.Message;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.comm.IMessageRouter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.comm.ShortestPathRouter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.SchedulerBase;
-import org.fortiss.af3.exploration.model.ExplorationSpecification;
 import org.jgrapht.DirectedGraph;
 import org.jgrapht.Graphs;
 import org.jgrapht.graph.DefaultEdge;
@@ -72,14 +71,13 @@ public class TDMABusScheduler<S extends InstantiatedTaskMappingEntry, T extends
 	private IMessageRouter messageRouter;
 
 	/** Constructs a {@link TDMABusScheduler} for a given input model. */
-	public TDMABusScheduler(ExplorationSpecification expSpec) {
-		super(expSpec);
+	public TDMABusScheduler() {
 		this.messageRouter = new ShortestPathRouter();
 	}
 
 	/** Add simple TDMA bus schedule / communication time to a pure task schedule. */
 	public void schedule(StrictTTSchedule<S, T> schedule, Collection<Message> generatedMessages,
-			InstantiatedAcyclicTaskGraphEncoding<S, ?> acycItgEnc,
+			InstantiatedAcyclicTaskGraphEncoding<S> acycItgEnc,
 			PlatformCommunicationGraphEncoding pcgEncoding) {
 		Multimap<TimeSlot, Message> emitableMessagesPerSlot = HashMultimap.create();
 		Map<TimeSlot, Integer> reqRecvMsgsPerSlot = new HashMap<TimeSlot, Integer>();
@@ -159,8 +157,7 @@ public class TDMABusScheduler<S extends InstantiatedTaskMappingEntry, T extends
 					messageGraph.edgesOf(currentMessage.getSenderTimeSlot().getResource());
 			// Here, we assume that a message may have only one source element. This assumption fits
 			// to multi-cast messaging and the principle how new messages are generated.
-			assert senderResourceEdges
-					.size() == 1 : "Each message must have exactly one source slot!";
+			assert senderResourceEdges.size() == 1 : "Each message must have exactly one source slot!";
 			ICommunicationResourceAdapter<?> communicationResource =
 					(ICommunicationResourceAdapter<?>)messageGraph
 							.getEdgeTarget(senderResourceEdges.iterator().next());
@@ -183,13 +180,15 @@ public class TDMABusScheduler<S extends InstantiatedTaskMappingEntry, T extends
 			// Determine and generate successor messages from the current one.
 			// TODO: remove dependency on the TimeSlot
 			Collection<TimeSlot> reachedReceiverSlots = new HashSet<TimeSlot>();
-			Collection<Message> succMessages = generateSuccessorMessages(schedule, currentMessage,
-					messageGraph, communicationResource, communicationSlot, messageRoutes,
-					reqRecvMsgsPerSlot, reachedReceiverSlots);
+			Collection<Message> succMessages =
+					generateSuccessorMessages(schedule, currentMessage, messageGraph,
+							communicationResource, communicationSlot, messageRoutes,
+							reqRecvMsgsPerSlot, reachedReceiverSlots);
 			messageReadyQueue.addAll(succMessages);
 			// The ready and release queues are updated for the next iteration.
-			List<TimeSlot> readySenderSlots = findNextSenderSlots(reachedReceiverSlots,
-					reqRecvMsgsPerSlot, emitableMessagesPerSlot);
+			List<TimeSlot> readySenderSlots =
+					findNextSenderSlots(reachedReceiverSlots, reqRecvMsgsPerSlot,
+							emitableMessagesPerSlot);
 			updateMessageQueues(readySenderSlots, emitableMessagesPerSlot, messageReleaseQueue,
 					messageReadyQueue);
 		}
@@ -292,8 +291,8 @@ public class TDMABusScheduler<S extends InstantiatedTaskMappingEntry, T extends
 				messageRouter.getRemainingMessageGraphs(currentMessage, communicationResource,
 						currentMessageGraph);
 		// Generate a new message for each direct successor in the communication graph.
-		for(IResourceAdapter<?> nextCommunicationResource : Graphs
-				.successorListOf(currentMessageGraph, communicationResource)) {
+		for(IResourceAdapter<?> nextCommunicationResource : Graphs.successorListOf(
+				currentMessageGraph, communicationResource)) {
 			// Check, if a new message is required, i.e. the current direct successor is no receiver
 			// of the message.
 			if(!currentMessageReceiverResources.contains(nextCommunicationResource)) {
@@ -310,8 +309,9 @@ public class TDMABusScheduler<S extends InstantiatedTaskMappingEntry, T extends
 
 				// Finally, generate the message.
 				if(!successorReceiverSlots.isEmpty()) {
-					Message successorMessage = new Message(currentMessage.getSignalAdapter(),
-							communicationSlot, successorReceiverSlots);
+					Message successorMessage =
+							new Message(currentMessage.getSignalAdapter(), communicationSlot,
+									successorReceiverSlots);
 					generatedMessages.add(successorMessage);
 					messageRoutes.put(successorMessage, successorRoute);
 				}
@@ -428,16 +428,18 @@ public class TDMABusScheduler<S extends InstantiatedTaskMappingEntry, T extends
 		// time is added to avoid time slots with a duration of zero.
 		double resourceWCTT = 0.0;
 		if(communicationResource instanceof ITransmissionUnitAdapter) {
-			resourceWCTT = ((ITransmissionUnitAdapter<?>)communicationResource)
-					.getTransmissionDuration(message.getMessageSize() / bitsPerMByte);
+			resourceWCTT =
+					((ITransmissionUnitAdapter<?>)communicationResource)
+							.getTransmissionDuration(message.getMessageSize() / bitsPerMByte);
 		} else if(communicationResource instanceof IGatewayUnitAdapter) {
 			resourceWCTT = ((IGatewayUnitAdapter<?>)communicationResource).getWCFT();
 		}
 		// resourceWCTT = Math.max(resourceWCTT, minTransmissionDuration);
 
 		// Create a new slot for the message.
-		TimeSlot communicationSlot = new TimeSlot(message, communicationResource, messageStartTime,
-				messageStartTime + resourceWCTT);
+		TimeSlot communicationSlot =
+				new TimeSlot(message, communicationResource, messageStartTime, messageStartTime +
+						resourceWCTT);
 
 		// Insert the created slot into the schedule of the communication resource.
 		if(schedule.getResourceSchedule(communicationResource) != null) {
@@ -545,8 +547,9 @@ public class TDMABusScheduler<S extends InstantiatedTaskMappingEntry, T extends
 				// to shifting other TimeSlots on the same resource.
 				if(shiftTime > 0) {
 					// Shift slots of causality violating slot.
-					HashSet<TimeSlot> shiftedSlots = shiftResourceSlots(successorSlot, shiftTime,
-							schedule.getResourceSchedule(successorSlot.getResource()));
+					HashSet<TimeSlot> shiftedSlots =
+							shiftResourceSlots(successorSlot, shiftTime,
+									schedule.getResourceSchedule(successorSlot.getResource()));
 					assert (schedule.getResourceSchedule(successorSlot.getResource())
 							.validateResourceSchedule());
 
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/.ratings
index 53bbb73e4a6efdfddcefd705960ed7cfbb9fa7b3..a32ee0965e667e07fc6f1575050f5884d3f563bc 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/.ratings
@@ -1,3 +1,3 @@
-EDFSchedulerBase.java a8da54ef6ed72e0b7c13f21910e4d148f918d2a1 RED
-FailSilentEDFScheduler.java 6dcfc322b509231a9d621c8f6277ee411df59c5f RED
-FaultDetectionVotingEDFScheduler.java af93ad1d506c88e5969dfde32523e0bd5956bc2b RED
+EDFSchedulerBase.java 3122fc970dc82626d8b03da92053a0e01730d212 RED
+FailSilentEDFScheduler.java fad92e0152096cbb980d94aba1cab2d0ac9887a5 RED
+FaultDetectionVotingEDFScheduler.java e94d4042ebf5f909048e6eabd23eed52b98ad2f1 RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/EDFSchedulerBase.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/EDFSchedulerBase.java
index a8da54ef6ed72e0b7c13f21910e4d148f918d2a1..3122fc970dc82626d8b03da92053a0e01730d212 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/EDFSchedulerBase.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/EDFSchedulerBase.java
@@ -46,7 +46,6 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.ScheduleRuntimeException;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.SchedulerBase;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.comm.TDMABusScheduler;
-import org.fortiss.af3.exploration.model.ExplorationSpecification;
 import org.fortiss.af3.exploration.model.time.DeadlineConstraint;
 import org.jgrapht.Graphs;
 import org.jgrapht.traverse.TopologicalOrderIterator;
@@ -207,13 +206,13 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T
 		 * References the {@link TaskMappingEncoding} for which {@code this} {@link Comparator} is
 		 * defined.
 		 */
-		private InstantiatedAcyclicTaskGraphEncoding<S, ?> acycItgEnc;
+		private InstantiatedAcyclicTaskGraphEncoding<S> acycItgEnc;
 
 		/**
 		 * Constructs a {@link SchedulingObjectComparator} which is subject to the given
 		 * {@link TaskMappingEncoding}.
 		 */
-		SchedulingObjectComparator(InstantiatedAcyclicTaskGraphEncoding<S, ?> acycItgEnc) {
+		SchedulingObjectComparator(InstantiatedAcyclicTaskGraphEncoding<S> acycItgEnc) {
 			this.acycItgEnc = acycItgEnc;
 		}
 
@@ -242,24 +241,19 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T
 
 				// TODO: This used to be based on TaskGraph.index. Check if the implementation based
 				// on the {@link TaskGraph}s {@link #hashCode} is also correct.
-				return Integer.compare(
-						acycItgEnc.getTaskGraphOf(obj1.deployableComponent).hashCode(),
-						acycItgEnc.getTaskGraphOf(obj2.deployableComponent).hashCode());
+				return Integer
+						.compare(acycItgEnc.getTaskGraphOf(obj1.deployableComponent).hashCode(),
+								acycItgEnc.getTaskGraphOf(obj2.deployableComponent).hashCode());
 			}
 		}
 	}
 
-	/** Constructs a simple EDF scheduler for a given exploration run */
-	public EDFSchedulerBase(ExplorationSpecification expSpec) {
-		super(expSpec);
-	}
-
 	/**
 	 * Creates and returns a release queue for the given {@link TaskMappingEncoding}. A release
 	 * queue contains those {@link SchedulingObject}s which remain to be scheduled.
 	 */
-	private synchronized SortedSet<SchedulingObject>
-			createReleaseQueue(InstantiatedAcyclicTaskGraphEncoding<S, ?> acycItgEnc) {
+	private synchronized SortedSet<SchedulingObject> createReleaseQueue(
+			InstantiatedAcyclicTaskGraphEncoding<S> acycItgEnc) {
 		SchedulingObjectComparator EDFTopologicalComparator =
 				new SchedulingObjectComparator(acycItgEnc);
 		TreeSet<SchedulingObject> releaseQueue =
@@ -279,13 +273,14 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T
 					double releasetime = i * taskGraph.getPeriod();
 					double effectiveDeadline = releasetime + taskGraph.getPeriod();
 
-					SchedulingObject sobject = new SchedulingObject(EDFTopologicalComparator,
-							deployableComponent, releasetime, effectiveDeadline);
+					SchedulingObject sobject =
+							new SchedulingObject(EDFTopologicalComparator, deployableComponent,
+									releasetime, effectiveDeadline);
 					// set the topological index
 					sobject.index = index++;
 					// add the predecessor list
-					for(SignalAdapterWeightedEdge edge : taskGraph.getGraph()
-							.incomingEdgesOf(deployableComponent)) {
+					for(SignalAdapterWeightedEdge edge : taskGraph.getGraph().incomingEdgesOf(
+							deployableComponent)) {
 						ITaskAdapter<?> sourceComponent = taskGraph.getGraph().getEdgeSource(edge);
 						// look into the previous allocated scheduling objects
 						for(SchedulingObject pred : localReleaseQueue) {
@@ -323,7 +318,7 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T
 	 * <li>the tasks within the task graph are scheduled according to topological order</li>
 	 * </ul>
 	 */
-	public void schedule(InstantiatedAcyclicTaskGraphEncoding<S, ?> acycItgEnc,
+	public void schedule(InstantiatedAcyclicTaskGraphEncoding<S> acycItgEnc,
 			PartitionMappingEncoding partEnc, T taskMapping, StrictTTSchedule<S, T> schedule) {
 		SortedSet<SchedulingObject> releaseQueue = createReleaseQueue(acycItgEnc);
 		// Create copy of release queue
@@ -369,8 +364,9 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T
 		while(!readyQueue.isEmpty()) {
 			// Add and resort ready queue acc. to deadlines (they can appear dynamically after the
 			// execution of another component)
-			Collection<ITaskAdapter<?>> componentsWithDeadlines = Sets.intersection(
-					schedulingComponentMap.keySet(), componentDeadlineSourceMap.keySet());
+			Collection<ITaskAdapter<?>> componentsWithDeadlines =
+					Sets.intersection(schedulingComponentMap.keySet(),
+							componentDeadlineSourceMap.keySet());
 			if(!componentsWithDeadlines.isEmpty()) {
 				for(ITaskAdapter<?> currentDeadlineComponent : componentsWithDeadlines) {
 					// Retrieve the IDeployableComponentAdapter that is the target of the current
@@ -404,15 +400,17 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T
 			// Pick first task in the ready queue...
 			SchedulingObject schedulingObject = readyQueue.first();
 			// ...and schedule it
-			Apfloat finishTime = scheduleObject(schedulingObject, acycItgEnc, partEnc, taskMapping,
-					schedule, currenttimes, mappingEntryToTimeSlot, generatedTimeSlots);
+			Apfloat finishTime =
+					scheduleObject(schedulingObject, acycItgEnc, partEnc, taskMapping, schedule,
+							currenttimes, mappingEntryToTimeSlot, generatedTimeSlots);
 
 			// Check if any successor becomes ready
 			List<SchedulingObject> toBeRemoved = new ArrayList<SchedulingObject>();
 			for(SchedulingObject object : releaseQueueLocal) {
 				if(object.predecessors.contains(schedulingObject)) {
-					object.ready = (object.ready > finishTime.doubleValue() ? object.ready
-							: finishTime.doubleValue());
+					object.ready =
+							(object.ready > finishTime.doubleValue() ? object.ready : finishTime
+									.doubleValue());
 					object.unscheduledPredecessors.remove(schedulingObject);
 					if(object.unscheduledPredecessors.isEmpty()) {
 						toBeRemoved.add(object);
@@ -429,8 +427,8 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T
 			for(SchedulingObject schObj : releaseQueueLocal) {
 				Double compPeriod = schObj.deployableComponent.getPeriod();
 				if(compPeriod != null) {
-					throw new RuntimeException(
-							"The Components " + releaseQueueLocal + " were not scheduled...");
+					throw new RuntimeException("The Components " + releaseQueueLocal +
+							" were not scheduled...");
 				}
 			}
 		}
@@ -441,7 +439,7 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T
 
 	/** Inserts a single {@link SchedulingObject} into the {@link StrictTTSchedule} */
 	private Apfloat scheduleObject(SchedulingObject schedulingObject,
-			InstantiatedAcyclicTaskGraphEncoding<S, ?> acycItgEnc, PartitionMappingEncoding partEnc,
+			InstantiatedAcyclicTaskGraphEncoding<S> acycItgEnc, PartitionMappingEncoding partEnc,
 			T encoding, StrictTTSchedule<S, T> schedule,
 			Map<IExecutionUnitAdapter<?>, Apfloat> currentTimeMap,
 			Map<S, TimeSlot> mappingEntryToTimeSlot,
@@ -478,8 +476,9 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T
 			}
 
 			// Add execution time
-			Apfloat deployableComponentExecutionTime = getExecutionTime(encoding, acycItgEnc,
-					schedulingObject.deployableComponent, entry);
+			Apfloat deployableComponentExecutionTime =
+					getExecutionTime(encoding, acycItgEnc, schedulingObject.deployableComponent,
+							entry);
 			if(deployableComponentExecutionTime.compareTo(Apcomplex.ZERO) == -1) {
 				throw new ScheduleRuntimeException(schedule,
 						"Could not determine the runtime execution time for the Component " +
@@ -500,9 +499,10 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T
 			// Build time slot
 			long iteration = java.lang.Math.round(schedulingObject.release / taskGraph.getPeriod());
 			iteration = iteration >= 0 ? iteration : 0;
-			TimeSlot deployableComponentSlot = schedule.createTimeSlot(entry, partition,
-					predecessorSlots, startTime.floatValue(),
-					deployableComponentEndTime.floatValue(), iteration);
+			TimeSlot deployableComponentSlot =
+					schedule.createTimeSlot(entry, partition, predecessorSlots,
+							startTime.floatValue(), deployableComponentEndTime.floatValue(),
+							iteration);
 
 			// Register the generated TimeSlot at its predecessors.
 			for(SchedulingObject predecessor : schedulingObject.getPredecessors()) {
@@ -521,9 +521,10 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T
 			// the current deployableComponentSlot.
 			// Add the information about the sender and the receiver TimeSlots which contain the
 			// start and end times of the Message.
-			Apfloat delay = registerIncomingMessagesWithSchedule(encoding, acycItgEnc, schedule,
-					mappingEntryToTimeSlot, schedulingObject.deployableComponent, startTime,
-					entry.getTarget(), iteration, deployableComponentSlot);
+			Apfloat delay =
+					registerIncomingMessagesWithSchedule(encoding, acycItgEnc, schedule,
+							mappingEntryToTimeSlot, schedulingObject.deployableComponent,
+							startTime, entry.getTarget(), iteration, deployableComponentSlot);
 
 			deployableComponentSlot.shift(delay.floatValue());
 			deployableComponentEndTime =
@@ -544,7 +545,7 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T
 	/** Returns the execution time for the given {@link ITaskAdapter}. */
 	protected abstract Apfloat getExecutionTime(
 			TaskMappingEncoding<?, ? extends TaskMappingEntry<?, ?>> encoding,
-			InstantiatedAcyclicTaskGraphEncoding<S, ?> acycItgEnc,
+			InstantiatedAcyclicTaskGraphEncoding<S> acycItgEnc,
 			ITaskAdapter<?> deployableComponent, S entry);
 
 	/**
@@ -561,7 +562,7 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T
 	 * communication, etc.
 	 */
 	protected abstract Apfloat registerIncomingMessagesWithSchedule(T encoding,
-			InstantiatedAcyclicTaskGraphEncoding<S, ?> acycItgEnc, StrictTTSchedule<S, T> schedule,
+			InstantiatedAcyclicTaskGraphEncoding<S> acycItgEnc, StrictTTSchedule<S, T> schedule,
 			Map<S, TimeSlot> mappingEntryToTimeSlot, ITaskAdapter<?> deployableComponent,
 			Apfloat starttime, IExecutionUnitAdapter<?> deploymentTarget, long iteration,
 			TimeSlot slot);
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FailSilentEDFScheduler.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FailSilentEDFScheduler.java
index 6dcfc322b509231a9d621c8f6277ee411df59c5f..fad92e0152096cbb980d94aba1cab2d0ac9887a5 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FailSilentEDFScheduler.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FailSilentEDFScheduler.java
@@ -28,20 +28,14 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.StrictTTSchedu
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.TimeSlot;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter;
-import org.fortiss.af3.exploration.model.ExplorationSpecification;
 
 /**
  * Base class for EDF task schedulers
  * 
  * @author huang, barner
  */
-public class FailSilentEDFScheduler
-		extends EDFSchedulerBase<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> {
-
-	/** Constructs a simple EDF scheduler for a given exploration run */
-	public FailSilentEDFScheduler(ExplorationSpecification expSpec) {
-		super(expSpec);
-	}
+public class FailSilentEDFScheduler extends
+		EDFSchedulerBase<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> {
 
 	/**
 	 * Returns the execution time for the current
@@ -51,17 +45,16 @@ public class FailSilentEDFScheduler
 	@Override
 	protected Apfloat getExecutionTime(
 			TaskMappingEncoding<?, ? extends TaskMappingEntry<?, ?>> encoding,
-			InstantiatedAcyclicTaskGraphEncoding<FailSilentTaskMappingEntry, ?> acycItgEnc,
-			ITaskAdapter<?> deployableComponent, FailSilentTaskMappingEntry entry) {
-		Apfloat executiontime =
-				new Apfloat(deployableComponent.getWcet(entry.getTarget()), DOUBLE_PRECISION);
+			InstantiatedAcyclicTaskGraphEncoding<FailSilentTaskMappingEntry> acycItgEnc,
+			ITaskAdapter<?> task, FailSilentTaskMappingEntry entry) {
+		Apfloat executiontime = new Apfloat(task.getWcet(entry.getTarget()), DOUBLE_PRECISION);
 		return executiontime;
 	}
 
 	/** {@inheritDoc} */
 	@Override
 	protected Apfloat registerIncomingMessagesWithSchedule(FailSilentTaskMappingEncoding encoding,
-			InstantiatedAcyclicTaskGraphEncoding<FailSilentTaskMappingEntry, ?> acycItgEnc,
+			InstantiatedAcyclicTaskGraphEncoding<FailSilentTaskMappingEntry> acycItgEnc,
 			StrictTTSchedule<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> schedule,
 			Map<FailSilentTaskMappingEntry, TimeSlot> mappingEntryToTimeSlot,
 			ITaskAdapter<?> deployableComponent, Apfloat starttime,
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FaultDetectionVotingEDFScheduler.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FaultDetectionVotingEDFScheduler.java
index af93ad1d506c88e5969dfde32523e0bd5956bc2b..e94d4042ebf5f909048e6eabd23eed52b98ad2f1 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FaultDetectionVotingEDFScheduler.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FaultDetectionVotingEDFScheduler.java
@@ -30,21 +30,16 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.AcyclicTaskGraph;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.SignalAdapterWeightedEdge;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.faultmodel.FaultDetector;
-import org.fortiss.af3.exploration.model.ExplorationSpecification;
 
 /**
  * Base class for EDF task schedulers
  * 
  * @author huang, barner
  */
-public class FaultDetectionVotingEDFScheduler extends
+public class FaultDetectionVotingEDFScheduler
+		extends
 		EDFSchedulerBase<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> {
 
-	/** Constructs a simple EDF scheduler for a given exploration run */
-	public FaultDetectionVotingEDFScheduler(ExplorationSpecification expSpec) {
-		super(expSpec);
-	}
-
 	/**
 	 * {@inheritDoc}.
 	 * <p>
@@ -54,13 +49,15 @@ public class FaultDetectionVotingEDFScheduler extends
 	 * </p>
 	 */
 	@Override
-	protected Apfloat registerIncomingMessagesWithSchedule(
-			FaultDetectionVotingTaskMappingEncoding encoding,
-			InstantiatedAcyclicTaskGraphEncoding<FaultDetectionVotingTaskMappingEntry, ?> acycItgEnc,
-			StrictTTSchedule<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> schedule,
-			Map<FaultDetectionVotingTaskMappingEntry, TimeSlot> mappingEntryToTimeSlot,
-			ITaskAdapter<?> receiver, Apfloat deployableComponentStartTime,
-			IExecutionUnitAdapter<?> deploymentTarget, long iteration, TimeSlot slot) {
+	protected
+			Apfloat
+			registerIncomingMessagesWithSchedule(
+					FaultDetectionVotingTaskMappingEncoding encoding,
+					InstantiatedAcyclicTaskGraphEncoding<FaultDetectionVotingTaskMappingEntry> acycItgEnc,
+					StrictTTSchedule<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> schedule,
+					Map<FaultDetectionVotingTaskMappingEntry, TimeSlot> mappingEntryToTimeSlot,
+					ITaskAdapter<?> receiver, Apfloat deployableComponentStartTime,
+					IExecutionUnitAdapter<?> deploymentTarget, long iteration, TimeSlot slot) {
 
 		Apfloat voterDelay = new Apfloat(0, DOUBLE_PRECISION);
 
@@ -91,9 +88,10 @@ public class FaultDetectionVotingEDFScheduler extends
 
 				// TODO: Create a class that represents voters similar to
 				// IDeployableComponentAdapter.
-				@SuppressWarnings("unused") TimeSlot voterSlot = schedule.createVoterSlot(null,
-						deploymentTarget, deployableComponentStartTime.add(voterDelay).floatValue(),
-						tempTimp.floatValue(), iteration);
+				@SuppressWarnings("unused") TimeSlot voterSlot =
+						schedule.createVoterSlot(null, deploymentTarget,
+								deployableComponentStartTime.add(voterDelay).floatValue(),
+								tempTimp.floatValue(), iteration);
 			}
 		}
 		return voterDelay;
@@ -103,7 +101,7 @@ public class FaultDetectionVotingEDFScheduler extends
 	@Override
 	protected Apfloat getExecutionTime(
 			TaskMappingEncoding<?, ? extends TaskMappingEntry<?, ?>> encoding,
-			InstantiatedAcyclicTaskGraphEncoding<FaultDetectionVotingTaskMappingEntry, ?> acycItgEnc,
+			InstantiatedAcyclicTaskGraphEncoding<FaultDetectionVotingTaskMappingEntry> acycItgEnc,
 			ITaskAdapter<?> deployableComponent, FaultDetectionVotingTaskMappingEntry entry) {
 
 		// Base execution time
@@ -111,8 +109,9 @@ public class FaultDetectionVotingEDFScheduler extends
 				new Apfloat(deployableComponent.getWcet(entry.getTarget()), DOUBLE_PRECISION);
 
 		// Scale with fault-detector overhead
-		FaultDetector detector = acycItgEnc.getTaskGraphOf(deployableComponent)
-				.getFaultDetector(deployableComponent, entry.getFaultDetectorID());
+		FaultDetector detector =
+				acycItgEnc.getTaskGraphOf(deployableComponent).getFaultDetector(
+						deployableComponent, entry.getFaultDetectorID());
 		Apfloat overhead = new Apfloat(1.0 + detector.getOverhead(), DOUBLE_PRECISION);
 
 		executionTime = executionTime.multiply(overhead);
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/exception/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/exception/.ratings
index 2bfbaaec8b4619178a6a6ff122570dd2ba230143..76d2a5599469e6686f78b55b34f1db4a005514cd 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/exception/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/exception/.ratings
@@ -1,7 +1,8 @@
 ConstraintGenerationException.java ea88d94abb652ec0c5788cb9f9856b866e7abf09 YELLOW
 ExplorationException.java 34ce8eafde9abc9daa19a102a4015500101e58a1 YELLOW
+ExplorationRuntimeException.java 9c461aa7fe1fdafa3bef739a8025215270e4b34a YELLOW
 ExplorationServiceException.java 94202232e25ac039ebcad0ee977e37c5a317111a YELLOW
-ExplorationServiceRuntimeException.java 05f0851a3a233aeeec551d90b8c8b155daca2781 YELLOW
+ExplorationServiceRuntimeException.java 92e5f474c68852819921a2c4110a13568609f385 YELLOW
 InvalidModelException.java f5ef624ea79418ee5f6bc6acea9126094ec27c49 YELLOW
 InvalidPlatformModelException.java b0e93b8e9b703dc33825c71d7bc542abda83a2ef YELLOW
 InvalidTimingModelException.java 014945b26fffef745844be500ef4c2efe0bc9a27 YELLOW
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchExpSubDecoder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/exception/ExplorationRuntimeException.java
similarity index 67%
rename from org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchExpSubDecoder.java
rename to org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/exception/ExplorationRuntimeException.java
index 8878133e8b65858b4cd7cedd243d49d391066323..9c461aa7fe1fdafa3bef739a8025215270e4b34a 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchExpSubDecoder.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/exception/ExplorationRuntimeException.java
@@ -1,5 +1,5 @@
 /*-------------------------------------------------------------------------+
-| Copyright 2015 fortiss GmbH                                              |
+| Copyright 2016 fortiss GmbH                                              |
 |                                                                          |
 | Licensed under the Apache License, Version 2.0 (the "License");          |
 | you may not use this file except in compliance with the License.         |
@@ -13,17 +13,22 @@
 | See the License for the specific language governing permissions and      |
 | limitations under the License.                                           |
 +--------------------------------------------------------------------------*/
-package org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem;
-
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.ComposableGenotype;
-import org.opt4j.core.problem.Decoder;
+package org.fortiss.af3.exploration.alg.exception;
 
 /**
- * Marker interface for {@link Decoder}s of {@link ComposableGenotype}s of an architectural
- * exploration problem.
+ * General DSE Exception.
  * 
  * @author diewald
  */
-public interface ArchExpSubDecoder {
-	// Marker interface.
+public class ExplorationRuntimeException extends RuntimeException {
+
+	/** General DSE exception taking an error message. */
+	public ExplorationRuntimeException(String message) {
+		super("DSE: " + message);
+	}
+
+	/** General DSE exception taking an error message and an wrapped exception. */
+	public ExplorationRuntimeException(String message, Exception e) {
+		super("DSE: " + message, e);
+	}
 }
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/exception/ExplorationServiceRuntimeException.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/exception/ExplorationServiceRuntimeException.java
index 05f0851a3a233aeeec551d90b8c8b155daca2781..92e5f474c68852819921a2c4110a13568609f385 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/exception/ExplorationServiceRuntimeException.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/exception/ExplorationServiceRuntimeException.java
@@ -23,7 +23,7 @@ import org.fortiss.af3.exploration.alg.service.IExplorationService;
  * 
  * @author diewald
  */
-public class ExplorationServiceRuntimeException extends RuntimeException {
+public class ExplorationServiceRuntimeException extends ExplorationRuntimeException {
 
 	/**
 	 * Constructs an {@link ExplorationServiceRuntimeException} with information about the failed
@@ -31,7 +31,7 @@ public class ExplorationServiceRuntimeException extends RuntimeException {
 	 */
 	public ExplorationServiceRuntimeException(Class<? extends IExplorationService> serviceType,
 			String msg) {
-		super("DSE: " + serviceType.getSimpleName() + " failed: " + msg);
+		super(serviceType.getSimpleName() + " failed: " + msg);
 	}
 
 	/**
@@ -40,6 +40,6 @@ public class ExplorationServiceRuntimeException extends RuntimeException {
 	 */
 	public ExplorationServiceRuntimeException(Class<? extends IExplorationService> serviceType,
 			String msg, Exception e) {
-		super("DSE: " + serviceType.getSimpleName() + " failed: " + msg, e);
+		super(serviceType.getSimpleName() + " failed: " + msg, e);
 	}
 }
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/internal/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/internal/.ratings
index e1f985076793f2b0890aea9f1f5cfe4b28efffbf..69b7bd7cd989e858d6bae5070f8624436c7d6115 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/internal/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/internal/.ratings
@@ -1,5 +1,5 @@
 ExplorationConstraintTransformationService.java 5e7117398827ae129b3c9a8a16457d816ba665a7 RED
 ExplorationEvaluationService.java ed22af146e8230a39a47ba60224b824b6d0ac599 RED
-ExplorationModuleService.java b5a218e998e1827242023d0c6ed9a85f04f5f490 YELLOW
+ExplorationModuleService.java ce426b60fed15b3532f0bfd04d25fb1ec777b93d RED
 ExplorationRepairService.java 940ceda7c8c48f282132355249af1fe0a005c0f5 RED
 ExplorationTransformationService.java 36e2368dd6098e1f3aa210a6defd4f269628e28a RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/internal/ExplorationModuleService.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/internal/ExplorationModuleService.java
index b5a218e998e1827242023d0c6ed9a85f04f5f490..ce426b60fed15b3532f0bfd04d25fb1ec777b93d 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/internal/ExplorationModuleService.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/internal/ExplorationModuleService.java
@@ -32,6 +32,8 @@ import org.fortiss.tooling.kernel.introspection.IIntrospectionItem;
 import org.opt4j.core.Genotype;
 import org.opt4j.core.problem.Decoder;
 
+import com.google.common.collect.ClassToInstanceMap;
+import com.google.common.collect.MutableClassToInstanceMap;
 import com.google.inject.AbstractModule;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
@@ -61,7 +63,8 @@ public class ExplorationModuleService implements IExplorationModuleService {
 	 * References all registered exploration modules. Differing between {@link Genotype}s,
 	 * {@link Decoder}s etc. is currently not needed.
 	 */
-	private Set<AbstractModule> registeredExpModules = new HashSet<>();
+	private ClassToInstanceMap<AbstractModule> registeredExpModules = MutableClassToInstanceMap
+			.create();
 
 	/** Holds the instance of the evaluation service. */
 	private volatile static ExplorationModuleService INSTANCE;
@@ -96,6 +99,7 @@ public class ExplorationModuleService implements IExplorationModuleService {
 	@Override
 	public <G extends Genotype> void registerVariable(Class<G> genotype, CreatorModule<G> creator,
 			OperatorModule<G> operator) {
+		// Input check: Allow only fully specified variable registrations.
 		if(genotype == null) {
 			throw new ExplorationServiceRuntimeException(getClass(), "The passed genotype is null!");
 		} else if(creator == null) {
@@ -104,14 +108,29 @@ public class ExplorationModuleService implements IExplorationModuleService {
 			throw new ExplorationServiceRuntimeException(getClass(), "The passed operator is null!");
 		}
 
+		// Input check: Register modules only once.
+		@SuppressWarnings("unchecked") Class<CreatorModule<G>> creatorClass =
+				(Class<CreatorModule<G>>)creator.getClass();
+		if(registeredExpModules.getInstance(creatorClass) != null) {
+			throw new ExplorationServiceRuntimeException(getClass(), "The module " +
+					creatorClass.getSimpleName() + " has already been registered!");
+		}
+		@SuppressWarnings("unchecked") Class<OperatorModule<G>> operatorClass =
+				(Class<OperatorModule<G>>)operator.getClass();
+		if(registeredExpModules.getInstance(operatorClass) != null) {
+			throw new ExplorationServiceRuntimeException(getClass(), "The module " +
+					operatorClass.getSimpleName() + " has already been registered!");
+		}
+
 		genotypes.add(genotype);
-		registeredExpModules.add(creator);
-		registeredExpModules.add(operator);
+		registeredExpModules.putInstance(creatorClass, creator);
+		registeredExpModules.putInstance(operatorClass, operator);
 	}
 
 	/** {@inheritDoc} */
 	@Override
 	public <P extends Phenotype> void registerProblem(Class<P> phenotype, DecoderModule<P> decoder) {
+		// Input check: Allow only fully specified variable registrations.
 		if(phenotype == null) {
 			throw new ExplorationServiceRuntimeException(getClass(),
 					"The passed phenotype is null!");
@@ -119,46 +138,63 @@ public class ExplorationModuleService implements IExplorationModuleService {
 			throw new ExplorationServiceRuntimeException(getClass(), "The passed decoder is null!");
 		}
 
+		// Input check: Register modules only once.
+		@SuppressWarnings("unchecked") Class<DecoderModule<P>> decoderClass =
+				(Class<DecoderModule<P>>)decoder.getClass();
+		if(registeredExpModules.getInstance(decoderClass) != null) {
+			throw new ExplorationServiceRuntimeException(getClass(), "The module " +
+					decoderClass.getSimpleName() + " has already been registered!");
+		}
+
 		phenotypes.add(phenotype);
-		registeredExpModules.add(decoder);
+		registeredExpModules.putInstance(decoderClass, decoder);
 	}
 
 	/** {@inheritDoc} */
 	@Override
 	public void registerEvaluator(EvaluatorModule<Phenotype> evaluator) {
+		// Input check: Allow only fully specified variable registrations.
 		if(evaluator == null) {
 			throw new ExplorationServiceRuntimeException(getClass(),
 					"The passed evaluator is null!");
 		}
 
-		registeredExpModules.add(evaluator);
+		// Input check: Register modules only once.
+		@SuppressWarnings("unchecked") Class<EvaluatorModule<Phenotype>> evaluatorClass =
+				(Class<EvaluatorModule<Phenotype>>)evaluator.getClass();
+		if(registeredExpModules.getInstance(evaluatorClass) != null) {
+			throw new ExplorationServiceRuntimeException(getClass(), "The module " +
+					evaluatorClass.getSimpleName() + " has already been registered!");
+		}
+
+		registeredExpModules.putInstance(evaluatorClass, evaluator);
 	}
 
 	/** {@inheritDoc} */
 	@Override
 	public Set<CreatorModule<?>> getCreators() {
-		return registeredExpModules.stream().filter(m -> m instanceof CreatorModule)
+		return registeredExpModules.values().stream().filter(m -> m instanceof CreatorModule)
 				.map(CreatorModule.class::cast).collect(Collectors.toSet());
 	}
 
 	/** {@inheritDoc} */
 	@Override
 	public Set<OperatorModule<?>> getOperators() {
-		return registeredExpModules.stream().filter(m -> m instanceof OperatorModule)
+		return registeredExpModules.values().stream().filter(m -> m instanceof OperatorModule)
 				.map(OperatorModule.class::cast).collect(Collectors.toSet());
 	}
 
 	/** {@inheritDoc} */
 	@Override
 	public Set<DecoderModule<?>> getDecoders() {
-		return registeredExpModules.stream().filter(m -> m instanceof DecoderModule)
+		return registeredExpModules.values().stream().filter(m -> m instanceof DecoderModule)
 				.map(DecoderModule.class::cast).collect(Collectors.toSet());
 	}
 
 	/** {@inheritDoc} */
 	@Override
 	public Set<EvaluatorModule<?>> getEvaluators() {
-		return registeredExpModules.stream().filter(m -> m instanceof EvaluatorModule)
+		return registeredExpModules.values().stream().filter(m -> m instanceof EvaluatorModule)
 				.map(EvaluatorModule.class::cast).collect(Collectors.toSet());
 	}
 
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/util/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/util/.ratings
index 2ac7d817f183475be3f7ea759d258d8551be6dbb..707cffe050c98001d35b966799fe1f3c2ac7eee9 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/util/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/util/.ratings
@@ -1,4 +1,4 @@
-AF3Utils.java f372a35e0c0197ba8c18fdef66fe7e5ab468acc0 RED
+AF3Utils.java a7269b4db6db75c4d3332c46fa62b7597711507b RED
 DesignSpaceExplorationModelElementFactory.java bc6a6462bb655f3709afbc6b0c50ccd4f9764b5d RED
 ExplorationAlgDebugUtils.java acdb59e8a413c89e26f91b8829149afcb8328600 RED
 ExplorationAlgUtils.java 3ae0811b433c0be37af094086aff720cb42ea862 RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java
index f372a35e0c0197ba8c18fdef66fe7e5ab468acc0..a7269b4db6db75c4d3332c46fa62b7597711507b 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java
@@ -98,7 +98,7 @@ public class AF3Utils {
 	 *            {@link SafetyFunctionArchEntry} to be translated.
 	 * @return The encoded {@link SafetyArchitecture}, or {@code null} if no matching enum is found.
 	 */
-	public static SafetyArchitecture getSFArchFromEntry(SafetyFunctionArchEntry<?> sfaEntry) {
+	public static SafetyArchitecture getSFArchFromEntry(SafetyFunctionArchEntry sfaEntry) {
 		int channelNum = sfaEntry.getNumChannels();
 		int triggerNum = sfaEntry.getNumTriggerSignal();
 		boolean diagnosisPresent = sfaEntry.isDiagnosicUnitPresent();