From 07a0d8304ad3136b650e85f1915da2cb1569866b Mon Sep 17 00:00:00 2001
From: Alexander Diewald <diewald@fortiss.org>
Date: Mon, 30 Jul 2018 14:05:29 +0200
Subject: [PATCH] DI: Enable DI-based creators.

* Add a mechanism to analyze the Guice dependency graph to
  collect the set of genotypes that is required to obtain a
  requested Phenotype. The code is a modified version of
  the dependency graphs calculated within Guice's Grapher
  extension). The list of required Genotypes determines
  the list of creators to be launched.
* Use OperatorModules from Opt4J to inject them into the fw
  instead of using custom ones (conflicting inheritance
  hierarchy).
* Register Variables at the service level (Genotypes,
  Creators, Operators).

Signed-off-by: Alexander Diewald <diewald@fortiss.org>
---
 .../org/fortiss/af3/exploration/alg/.ratings  |   4 +-
 .../af3/exploration/alg/ExplorationAlg.java   |  40 ++++-
 .../fortiss/af3/exploration/alg/dse/.ratings  |  12 +-
 .../af3/exploration/alg/dse/DSEFactory.java   |  31 ++--
 .../alg/dse/TaskMappingFactory.java           |   2 +-
 .../alg/dse/backend/opt4j/.ratings            |  10 +-
 .../backend/opt4j/Opt4JExplorerBackend.java   |   2 +-
 .../opt4j/create/partitionmapping/.ratings    |   2 +-
 .../PartitionMappingCreator.java              |  45 +++---
 .../opt4j/create/safetyfunctionarch/.ratings  |   2 +-
 .../SafetyFunctionArchCreator.java            |  37 ++---
 .../backend/opt4j/create/taskmapping/.ratings |   8 +-
 .../AbstractTaskMappingCreator.java           |  33 +---
 .../FailSilentTaskMappingCreator.java         |  37 +----
 ...aultDetectionVotingTaskMappingCreator.java |  35 +---
 .../taskmapping/TaskMappingCreator.java       |  13 +-
 .../opt4j/encoding/taskmapping/.ratings       |   4 +-
 .../taskmapping/TaskMappingEncoding.java      |  10 +-
 .../taskmapping/abstractmapping/.ratings      |   4 +-
 .../AbstractTaskMappingEncoding.java          |   3 +-
 .../taskmapping/instantiatedmapping/.ratings  |  12 +-
 .../FailSilentTaskMappingEncoding.java        |  12 +-
 .../InstantiatedTaskMappingEncoding.java      |   9 --
 .../extensions/compositegene/create/.ratings  |  10 +-
 .../compositegene/create/GuiceCreator.java    |  49 +++++-
 .../extensions/compositegene/decode/.ratings  |  16 +-
 .../compositegene/decode/GuiceDecoder.java    |  17 +-
 .../extensions/compositegene/graph/.ratings   |   6 +-
 .../compositegene/graph/GenotypeFinder.java   |  85 ++++++++++
 .../graph/TransitiveDependencyVisitor.java    | 150 ++++++++++++++++++
 .../opt4j/operator/mutate/safetyarch/.ratings |  10 +-
 ...utateSafetyFunctionArchitectureModule.java |   3 +-
 .../alg/dse/backend/opt4j/problem/.ratings    |  14 +-
 .../ArchitectureExplorationProblemModule.java |  33 +++-
 .../af3/exploration/alg/dse/sysmodel/.ratings |   4 +-
 .../sysmodel/FailSilentExecModelFactory.java  |   2 +-
 .../FaultDetectionVotingExecModelFactory.java |   2 +-
 .../alg/dse/sysmodel/arch/.ratings            |  34 ++--
 .../dse/sysmodel/arch/SystemModelAdapter.java |   1 +
 .../af3/exploration/alg/service/.ratings      |  28 ++--
 .../service/IExplorationModuleService.java    |   4 +-
 .../exploration/alg/service/internal/.ratings |  10 +-
 .../internal/ExplorationModuleService.java    |   8 +-
 43 files changed, 552 insertions(+), 301 deletions(-)
 create mode 100644 org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/GenotypeFinder.java
 create mode 100644 org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/TransitiveDependencyVisitor.java

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 fd69979b..6bc68964 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 fbb9547b59a46da10a25bef60a04ef2060d8c277 RED
-ExplorationAlgActivator.java 1970505dc53286fd3752c909abc568e0bf598fe0 RED
+ExplorationAlg.java 213524a903ff48c0b8edcac6819c206440519274 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 fbb9547b..213524a9 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,14 +20,24 @@ 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.create.partitionmapping.PartitionMappingCreator;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.safetyfunctionarch.SafetyFunctionArchCreator;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.taskmapping.AbstractTaskMappingCreator;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.taskmapping.FailSilentTaskMappingCreator;
 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.safetyfunctionarch.SafetyFunctionArchEncoding;
 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.operator.mutate.partitionmapping.PartitionMappingModule;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.safetyarch.MutateSafetyFunctionArchitectureModule;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.taskinstantiation.MutateTaskInstanceModule;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.taskmapping.MutateTaskMappingModule;
 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;
@@ -111,14 +121,13 @@ public final class ExplorationAlg implements IStartup {
 	private static void registerExplorationModules() {
 		// Functional groups of Decoders.
 		registerSafetyFunctionModules();
+		registerPartitionMappingModules();
 		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());
 	}
@@ -126,6 +135,12 @@ public final class ExplorationAlg implements IStartup {
 	/** Registers problem modules related to safety functions. */
 	@SuppressWarnings("unchecked")
 	private static void registerSafetyFunctionModules() {
+		// Variables
+		getService(IExplorationModuleService.class).registerVariable(
+				SafetyFunctionArchEncoding.class, new SafetyFunctionArchCreator(),
+				new MutateSafetyFunctionArchitectureModule());
+
+		// Decoding
 		getService(IExplorationModuleService.class).registerProblem(
 				AbstractTaskMappingEncoding.class, new SFMappingDecoder());
 		// TODO: ConstraintDecoder
@@ -135,8 +150,29 @@ public final class ExplorationAlg implements IStartup {
 				new SFGraphDecoder());
 	}
 
+	/** Registers problem modules related to safety functions. */
+	private static void registerPartitionMappingModules() {
+		// Variables
+		getService(IExplorationModuleService.class).registerVariable(
+				PartitionMappingEncoding.class, new PartitionMappingCreator(),
+				new PartitionMappingModule());
+
+		// Decoding
+		getService(IExplorationModuleService.class).registerProblem(
+				PlatformCommunicationGraphEncoding.class, new PartitionMappingDecoderGraph());
+	}
+
 	/** Registers all problem modules related to task mapping. */
 	private static void registerTaskMappingModules() {
+		// Variables
+		getService(IExplorationModuleService.class).registerVariable(
+				AbstractTaskMappingEncoding.class, new AbstractTaskMappingCreator(),
+				new MutateTaskMappingModule());
+		getService(IExplorationModuleService.class).registerVariable(
+				FailSilentTaskMappingEncoding.class, new FailSilentTaskMappingCreator(),
+				new MutateTaskInstanceModule());
+
+		// Decoding
 		getService(IExplorationModuleService.class).registerProblem(
 				AbstractTaskMappingEncoding.class, new AbstractTaskMappingIdentityDecoder());
 		getService(IExplorationModuleService.class).registerProblem(
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 80924703..95c9ceba 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 c033d4fb34746a0f712be1d99e648d3c95623497 RED
-Explorer.java 48ce78929632a9b78b4c809c7719eb5aa46d21df RED
-ImplicitExplorationTargetFactory.java 25c3c668ed268843f8af7e37eb03370ed513b482 RED
-SolutionQuantification.java 19cd7caa721bbca3112af7825c7fb20a96a4a799 RED
-TaskMappingFactory.java 88a64fe8b56faad869ccc5cb9111cee6e90d32d3 RED
+CompositeExplorationSolution.java db9dadb94e6696cddaf12f0c5238fecfc4348afc RED
+DSEFactory.java a4afb8c8c2ab23258ca13083c58b9d8ea766eed2 RED
+Explorer.java 48ce78929632a9b78b4c809c7719eb5aa46d21df RED
+ImplicitExplorationTargetFactory.java 25c3c668ed268843f8af7e37eb03370ed513b482 RED
+SolutionQuantification.java 19cd7caa721bbca3112af7825c7fb20a96a4a799 RED
+TaskMappingFactory.java 13f4e8104769a1592050ebb6e23d6fbcf864d1d2 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 c033d4fb..a4afb8c8 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
@@ -146,15 +146,13 @@ public class DSEFactory {
 			DecoderDependencyGraph execDepGraph) throws Exception {
 		// These suppress warnings are required since type erasure in Java does not allow to pass
 		// XY<Z>.class.
-		SafetyFunctionArchCreator sfCreator =
-				new SafetyFunctionArchCreator(systemModelAdapter.getSafetyFunctionAdapters(),
-						execDepGraph);
+		SafetyFunctionArchCreator sfCreator = new SafetyFunctionArchCreator();
 
 		@SuppressWarnings("rawtypes") List<ComposableDecoder> sfDecoders = new ArrayList<>();
 
-		execDepGraph.addCreatedEncoding(sfCreator.getCreatedEncodingType());
-		archExpProblemModule.registerSubProblem(SafetyFunctionArchEncoding.class, sfCreator,
-				sfDecoders);
+		// execDepGraph.addCreatedEncoding(sfCreator.getCreatedEncodingType());
+		// archExpProblemModule.registerSubProblem(SafetyFunctionArchEncoding.class, sfCreator,
+		// sfDecoders);
 	}
 
 	/**
@@ -170,20 +168,15 @@ public class DSEFactory {
 	 * @throws CycleFoundException
 	 *             if a cyclic dependency is discovered when registering the problem.
 	 */
-	@SuppressWarnings("unchecked")
 	private void createPartitionMappingProblem(
 			ArchitectureExplorationProblemModule archExpProblemModule, DseSpecification dse,
 			DecoderDependencyGraph execDepGraph) throws CycleFoundException {
 		Class<PartitionMappingEncoding> pmEnodingClass = PartitionMappingEncoding.class;
-		PartitionMappingCreator pmCreator =
-				new PartitionMappingCreator(execDepGraph,
-						(Collection<IExecutionUnitAdapter<?>>)(Collection<?>)systemModelAdapter
-								.getDeploymentTargets(), systemModelAdapter
-								.getDeployableComponents().size());
+		PartitionMappingCreator pmCreator = new PartitionMappingCreator();
 
 		@SuppressWarnings("rawtypes") List<ComposableDecoder> pmDecoders = new ArrayList<>();
-		execDepGraph.addCreatedEncoding(pmCreator.getCreatedEncodingType());
-		archExpProblemModule.registerSubProblem(pmEnodingClass, pmCreator, pmDecoders);
+		// execDepGraph.addCreatedEncoding(pmCreator.getCreatedEncodingType());
+		// archExpProblemModule.registerSubProblem(pmEnodingClass, pmCreator, pmDecoders);
 	}
 
 	/**
@@ -243,8 +236,8 @@ public class DSEFactory {
 		@SuppressWarnings("rawtypes") List<ComposableDecoder> abstrTaskDecoders = new ArrayList<>();
 		// AbstractTaskMappingIdentityDecoder idtDecoder = new AbstractTaskMappingIdentityDecoder();
 
-		execDepGraph.addCreatedEncoding(tmCreator.getCreatedEncodingType());
-		archExpProblemModule.registerSubProblem(tmEnodingClass, tmCreator, abstrTaskDecoders);
+		// execDepGraph.addCreatedEncoding(tmCreator.getCreatedEncodingType());
+		// archExpProblemModule.registerSubProblem(tmEnodingClass, tmCreator, abstrTaskDecoders);
 	}
 
 	/**
@@ -276,9 +269,9 @@ public class DSEFactory {
 		@SuppressWarnings("rawtypes") TaskMappingCreator tmCreator =
 				tmFactory.createTaskMappingCreator(execDepGraph);
 
-		execDepGraph.addCreatedEncoding(tmCreator.getCreatedEncodingType());
-		archExpProblemModule.registerSubProblem(InstantiatedTaskMappingEncoding.class, tmCreator,
-				new ArrayList<>());
+		// execDepGraph.addCreatedEncoding(tmCreator.getCreatedEncodingType());
+		// archExpProblemModule.registerSubProblem(InstantiatedTaskMappingEncoding.class, tmCreator,
+		// 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 88a64fe8..13f4e810 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
@@ -101,7 +101,7 @@ public abstract class TaskMappingFactory<S extends InstantiatedTaskMappingEntry,
 	 */
 	public AbstractTaskMappingCreator createAbstractTaskMappingCreator(
 			DecoderDependencyGraph execDepGraph) {
-		return new AbstractTaskMappingCreator(execDepGraph);
+		return new AbstractTaskMappingCreator();
 	}
 
 	/**
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 9f36a7a7..8861e953 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,5 +1,5 @@
-Opt4JDseTask.java b5cb9e664e7a8fc2b5157bcdcaca740c2fa85336 YELLOW
-Opt4JDseTaskProvider.java ff2bbc6da2b21bd0bc64c3fa77dc8fa9939d10af RED
-Opt4JExplorationSolutionSet.java 8578ee9c438bc3327a64172e996306a89606c782 RED
-Opt4JExplorerBackend.java efa271f055e57df194e24f4bb7e94a00d252f3bb RED
-Opt4JSingleExplorationSolution.java 41ce92d11b2e7a6a8c39bffa990c691160c36c8d RED
+Opt4JDseTask.java b5cb9e664e7a8fc2b5157bcdcaca740c2fa85336 YELLOW
+Opt4JDseTaskProvider.java ff2bbc6da2b21bd0bc64c3fa77dc8fa9939d10af RED
+Opt4JExplorationSolutionSet.java 8578ee9c438bc3327a64172e996306a89606c782 RED
+Opt4JExplorerBackend.java 143812e08f4ef9a803e0e24dc32612007c98cbd2 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 efa271f0..143812e0 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
@@ -158,7 +158,7 @@ public class Opt4JExplorerBackend extends ExplorerBackendBase<EAOptimizer> {
 		// modules.add(multiEvaluatorModule);
 
 		archExplorationProblemModule =
-				new ArchitectureExplorationProblemModule(dse, requestedSolutions);
+				new ArchitectureExplorationProblemModule(dse, dseInjector, requestedSolutions);
 		modules.add(archExplorationProblemModule);
 
 		// Configure operators
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/.ratings
index 4f0e777b..66bdddf5 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/.ratings
@@ -1 +1 @@
-PartitionMappingCreator.java 6c83f8a857b0fa1e1bf90121a91d58038ed5d9d0 RED
+PartitionMappingCreator.java 087de657669392f17b1bd3c84de4fb794d2f4da5 RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/PartitionMappingCreator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/PartitionMappingCreator.java
index 6c83f8a8..087de657 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/PartitionMappingCreator.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/PartitionMappingCreator.java
@@ -19,40 +19,33 @@ 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.partitionmapping.PartitionMappingEncoding.CREATE_STARTEGY;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.create.ComposableCreatorBase;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.FlatGenotypeMap;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.graph.DecoderDependencyGraph;
-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.CreatorModule;
 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.alg.dse.sysmodel.random.RandomExploration;
-import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
 import org.opt4j.core.problem.Creator;
 
+import com.google.inject.Provides;
+
 /**
  * {@link Creator} for {@link PartitionMappingEncoding}s.
  * 
  * @author diewald
  */
-public class PartitionMappingCreator extends ComposableCreatorBase<PartitionMappingEncoding> {
-	/** Physical execution units. */
-	private Collection<IExecutionUnitAdapter<?>> execUnits;
-
-	/** Number of tasks to allocate to partitions. */
-	int numTasks;
+public class PartitionMappingCreator extends CreatorModule<PartitionMappingEncoding> {
 
-	/** Constructor. */
-	public PartitionMappingCreator(DecoderDependencyGraph depGraph,
-			Collection<IExecutionUnitAdapter<?>> execUnits, int numTasks) {
-		super(depGraph);
-		this.execUnits = execUnits;
-		this.numTasks = numTasks;
-	}
+	// /** Constructor. */
+	// public PartitionMappingCreator(Collection<IExecutionUnitAdapter<?>> execUnits, int numTasks)
+	// {
+	// this.execUnits = execUnits;
+	// this.numTasks = numTasks;
+	// }
 
 	/** {@inheritDoc} */
-	@Override
-	public PartitionMappingEncoding createComposable(FlatGenotypeMap createdGenotypes,
-			FlatPhenotypeMap<Phenotype> decodedPhenotypes) {
+	@Provides
+	public PartitionMappingEncoding create(Collection<IExecutionUnitAdapter<?>> execUnits,
+			Collection<ITaskAdapter<?>> tasks) {
+		int numTasks = tasks.size();
 		// "Probability distribution" for the strategy selection: |1|numTasks - 2|1| ==> numTasks
 		int strategySelIdx = RandomExploration.getInstance().nextInt(numTasks);
 		switch(strategySelIdx) {
@@ -61,14 +54,14 @@ public class PartitionMappingCreator extends ComposableCreatorBase<PartitionMapp
 			case 24:
 				return new PartitionMappingEncoding(execUnits, numTasks, CREATE_STARTEGY.MAX_SET);
 			default:
-				return new PartitionMappingEncoding(execUnits, numTasks,
-						CREATE_STARTEGY.RANDOM_SET);
+				return new PartitionMappingEncoding(execUnits, numTasks, CREATE_STARTEGY.RANDOM_SET);
 		}
 	}
 
 	/** {@inheritDoc} */
 	@Override
-	public Class<? extends IExplorationEncoding> getCreatedEncodingType() {
-		return PartitionMappingEncoding.class;
+	public PartitionMappingEncoding create() {
+		// TODO Auto-generated method stub
+		return null;
 	}
 }
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 74e85e0a..851a8d5f 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 3eace15fd28f2c6ad20090306a3e35641f35e5c7 RED
+SafetyFunctionArchCreator.java 987b9a91b5dc0062486af2304ffa9a8986759a49 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 3eace15f..987b9a91 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
@@ -18,14 +18,10 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.safetyfunctiona
 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.create.ComposableCreatorBase;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.FlatGenotypeMap;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.graph.DecoderDependencyGraph;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap;
+import org.fortiss.af3.exploration.alg.dse.module.CreatorModule;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ISafetyFunctionAdapter;
-import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
 
-import com.google.inject.Inject;
+import com.google.inject.Provides;
 
 /**
  * Creator for the {@link SafetyFunctionArchEncoding} that provides a standard encoding for the
@@ -33,23 +29,19 @@ import com.google.inject.Inject;
  * 
  * @author diewald
  */
-public class SafetyFunctionArchCreator extends ComposableCreatorBase<SafetyFunctionArchEncoding> {
-	/** Collection of safety functions present in the system. */
-	Collection<ISafetyFunctionAdapter<?>> sfAdapters;
+public class SafetyFunctionArchCreator extends CreatorModule<SafetyFunctionArchEncoding> {
 
-	/** Constructor. */
-	@Inject
-	public SafetyFunctionArchCreator(Collection<ISafetyFunctionAdapter<?>> sfAdapters,
-			DecoderDependencyGraph execDepGraph) {
-		super(execDepGraph);
-		this.sfAdapters = sfAdapters;
-	}
+	// /** Constructor. */
+	// @Inject
+	// public SafetyFunctionArchCreator(Collection<ISafetyFunctionAdapter<?>> sfAdapters,
+	// DecoderDependencyGraph execDepGraph) {
+	// super(execDepGraph);
+	// this.sfAdapters = sfAdapters;
+	// }
 
 	/** {@inheritDoc} */
-	@SuppressWarnings({"rawtypes"})
-	@Override
-	public SafetyFunctionArchEncoding createComposable(FlatGenotypeMap createdGenotypes,
-			FlatPhenotypeMap decodedPhenotypes) {
+	@Provides
+	public SafetyFunctionArchEncoding create(Collection<ISafetyFunctionAdapter<?>> sfAdapters) {
 		// It is clear that the generic is right. However, the compiler does not get it. Thus,
 		// suppress the corresponding Warnings.
 		return new SafetyFunctionArchEncoding(sfAdapters, true, true);
@@ -57,7 +49,8 @@ public class SafetyFunctionArchCreator extends ComposableCreatorBase<SafetyFunct
 
 	/** {@inheritDoc} */
 	@Override
-	public Class<? extends IExplorationEncoding> getCreatedEncodingType() {
-		return SafetyFunctionArchEncoding.class;
+	public SafetyFunctionArchEncoding create() {
+		// TODO Auto-generated method stub
+		return null;
 	}
 }
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 d2b47b8a..622950fe 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 481bf7cebf384ba705cd5b099c7a3a63878bf3a5 RED
-FailSilentTaskMappingCreator.java 76afb8716f870091dc962dcca267665db31dc81d RED
-FaultDetectionVotingTaskMappingCreator.java fd0059619804d5e8e07f81fc97e9ba637b42d925 RED
-TaskMappingCreator.java da026f6e18b7220ccc1acb2ecb640d7ffcd488ea RED
+AbstractTaskMappingCreator.java 4e9f7e693743ccdc133bc25ea9ae09b68c79fa0e RED
+FailSilentTaskMappingCreator.java 398ceee31ebb494723f9d11dd6987a782495812d RED
+FaultDetectionVotingTaskMappingCreator.java 4759ac9bae1a4504591872ca871ff75fe7c7bfb3 RED
+TaskMappingCreator.java e5bdf7ae7faad15d7d7a87ae72d882901bf72a34 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 481bf7ce..4e9f7e69 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
@@ -19,17 +19,12 @@ 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.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.genotype.FlatGenotypeMap;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.graph.DecoderDependencyGraph;
-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.sysmodel.arch.ITaskAdapter;
 import org.fortiss.af3.exploration.alg.exception.ExplorationException;
-import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
 import org.opt4j.core.Genotype;
 import org.opt4j.core.problem.Creator;
 
-import com.google.inject.Inject;
+import com.google.inject.Provides;
 
 /**
  * {@link Creator} for an {@link AbstractTaskMappingEncoding}, i.e. a {@link Genotype} that may
@@ -40,36 +35,24 @@ import com.google.inject.Inject;
 public class AbstractTaskMappingCreator extends
 		TaskMappingCreator<AbstractTaskMappingEntry, AbstractTaskMappingEncoding> {
 
-	/** Constructor */
-	@Inject
-	public AbstractTaskMappingCreator(DecoderDependencyGraph execDepGraph) {
-		super(execDepGraph);
-	}
-
 	/**
 	 * {@inheritDoc}
 	 * 
 	 * @throws ExplorationException
 	 *             if no valid allocation targets can be identified for one {@link ITaskAdapter}.
 	 */
-	@Override
-	public AbstractTaskMappingEncoding createComposable(FlatGenotypeMap createdGenotypes,
-			FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws ExplorationException {
-		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.";
+	@Provides
+	public AbstractTaskMappingEncoding create(PartitionMappingEncoding partEnc,
+			AbstractTaskGraphEncoding atgEnc) throws ExplorationException {
 		// The AbstractTaskMappingEncoding may be NULL to indicate that no previous step produced a
 		// partial mapping.
-		AbstractTaskMappingEncoding atmEnc =
-				createdGenotypes.get(AbstractTaskMappingEncoding.class);
-		PartitionMappingEncoding partEnc = createdGenotypes.get(PartitionMappingEncoding.class);
-		assert (partEnc != null) : "The required partition mapping encoding could not be found in the map of already decoded phenotypes.";
-		return new AbstractTaskMappingEncoding(partEnc, atgEnc, atmEnc);
+		return new AbstractTaskMappingEncoding(partEnc, atgEnc/* , atmEnc */);
 	}
 
 	/** {@inheritDoc} */
 	@Override
-	public Class<? extends IExplorationEncoding> getCreatedEncodingType() {
-		return AbstractTaskMappingEncoding.class;
+	public AbstractTaskMappingEncoding create() {
+		// TODO Auto-generated method stub
+		return null;
 	}
 }
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 76afb871..398ceee3 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
@@ -20,14 +20,8 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.Abst
 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.genotype.FlatGenotypeMap;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.graph.DecoderDependencyGraph;
-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.service.IExplorationEncoding;
 
-import com.google.inject.Inject;
+import com.google.inject.Provides;
 
 /**
  * Creator of random task mappings for fail-silent execution model
@@ -37,34 +31,17 @@ import com.google.inject.Inject;
 public class FailSilentTaskMappingCreator extends
 		TaskMappingCreator<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> {
 
-	/**
-	 * Constructs a task mapping creator for a given DSE specification and input model
-	 * (execution model = fail-silent)
-	 */
-	@Inject
-	public FailSilentTaskMappingCreator(DecoderDependencyGraph execDepGraph) {
-		super(execDepGraph);
-	}
-
 	/** {@inheritDoc} */
-	@Override
-	public FailSilentTaskMappingEncoding createComposable(FlatGenotypeMap createdGenotypes,
-			FlatPhenotypeMap<Phenotype> decodedPhenotypes) {
-		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 =
-				createdGenotypes.get(AbstractTaskMappingEncoding.class);
-		assert (atmEnc != null) : "The required abstract task mapping encoding could not be found in the map of already decoded phenotypes.";
-		PartitionMappingEncoding partEnc = createdGenotypes.get(PartitionMappingEncoding.class);
-		assert (partEnc != null) : "The required partition mapping encoding could not be found in the map of already decoded phenotypes.";
+	@Provides
+	public FailSilentTaskMappingEncoding create(AbstractTaskGraphEncoding atgEnc,
+			AbstractTaskMappingEncoding atmEnc, PartitionMappingEncoding partEnc) {
 		return new FailSilentTaskMappingEncoding(partEnc, atgEnc, atmEnc);
 	}
 
-	// TODO: remove this method: use the identifier from the encoding, instead.
 	/** {@inheritDoc} */
 	@Override
-	public Class<? extends IExplorationEncoding> getCreatedEncodingType() {
-		return InstantiatedTaskMappingEncoding.class;
+	public FailSilentTaskMappingEncoding create() {
+		// TODO Auto-generated method stub
+		return null;
 	}
 }
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 fd005961..4759ac9b 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
@@ -20,14 +20,8 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.Abst
 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.FaultDetectionVotingTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FaultDetectionVotingTaskMappingEntry;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.FlatGenotypeMap;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.graph.DecoderDependencyGraph;
-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.service.IExplorationEncoding;
 
-import com.google.inject.Inject;
+import com.google.inject.Provides;
 
 /**
  * Creator of random task mappings for fail-silent execution model
@@ -38,33 +32,18 @@ public class FaultDetectionVotingTaskMappingCreator
 		extends
 		TaskMappingCreator<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> {
 
-	/**
-	 * Constructs a task mapping creator for a given DSE specification and input model
-	 * (execution model = fault-detection and voting)
-	 */
-	@Inject
-	public FaultDetectionVotingTaskMappingCreator(DecoderDependencyGraph execDepGraph) {
-		super(execDepGraph);
-	}
-
 	/** {@inheritDoc} */
-	@Override
+	@Provides
 	public FaultDetectionVotingTaskMappingEncoding createComposable(
-			FlatGenotypeMap createdGenotypes, FlatPhenotypeMap<Phenotype> decodedPhenotypes) {
-		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 =
-				createdGenotypes.get(AbstractTaskMappingEncoding.class);
-		assert (atmEnc != null) : "The required abstract task mapping encoding could not be found in the map of already decoded phenotypes.";
-		PartitionMappingEncoding partEnc = createdGenotypes.get(PartitionMappingEncoding.class);
-		assert (partEnc != null) : "The required partition mapping encoding could not be found in the map of already decoded phenotypes.";
+			AbstractTaskGraphEncoding atgEnc, AbstractTaskMappingEncoding atmEnc,
+			PartitionMappingEncoding partEnc) {
 		return new FaultDetectionVotingTaskMappingEncoding(partEnc, atgEnc, atmEnc);
 	}
 
 	/** {@inheritDoc} */
 	@Override
-	public Class<? extends IExplorationEncoding> getCreatedEncodingType() {
-		return InstantiatedTaskMappingEncoding.class;
+	public FaultDetectionVotingTaskMappingEncoding create() {
+		// TODO Auto-generated method stub
+		return null;
 	}
 }
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java
index da026f6e..e5bdf7ae 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java
@@ -18,14 +18,11 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.taskmapping;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition;
 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.create.ComposableCreatorBase;
-import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.graph.DecoderDependencyGraph;
+import org.fortiss.af3.exploration.alg.dse.module.CreatorModule;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter;
 import org.opt4j.core.Genotype;
 import org.opt4j.core.problem.Creator;
 
-import com.google.inject.Inject;
-
 /**
  * {@link Creator} module for general {@link TaskMappingEncoding}s {@link Genotype}s.
  * 
@@ -33,11 +30,5 @@ import com.google.inject.Inject;
  */
 
 public abstract class TaskMappingCreator<S extends TaskMappingEntry<ITaskAdapter<?>, Partition>, T extends TaskMappingEncoding<ITaskAdapter<?>, S>>
-		extends ComposableCreatorBase<T> {
-
-	/** Constructor. */
-	@Inject
-	public TaskMappingCreator(DecoderDependencyGraph execDepGraph) {
-		super(execDepGraph);
-	}
+		extends CreatorModule<T> {
 }
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 ab8a8b6c..98342aae 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 b944240cb5e8ab19fc773d85e652f2d880d8361f RED
-TaskMappingEntry.java 407c9065007f8cd4adc8b64eea13a837bba581ae RED
+TaskMappingEncoding.java 9f1f50a21bfb70f9a40b3530af76f0457211f8ab 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 b944240c..9f1f50a2 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
@@ -37,7 +37,6 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.encoding.Con
 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.taskgraph.DefaultTaskGraph;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.random.RandomExploration;
@@ -113,7 +112,6 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T
 	@SuppressWarnings("unchecked")
 	public TaskMappingEncoding(PartitionMappingEncoding partMappingEncoding,
 			TaskGraphEncoding<?> tgEncoding) {
-		this.tgEncoding = tgEncoding;
 		this.partMappingEncoding = partMappingEncoding;
 		this.tasks = (Collection<S>)tgEncoding.getTasks();
 		this.partitions = partMappingEncoding.getRequesters();
@@ -724,10 +722,10 @@ public abstract class TaskMappingEncoding<S extends ITaskAdapter<?>, T extends T
 		return str;
 	}
 
-	/** Returns all independent {@link DefaultTaskGraph}s contained in this encoding. */
-	public TaskGraphEncoding<?> getTaskGraphEncoding() {
-		return tgEncoding;
-	}
+	// /** Returns all independent {@link DefaultTaskGraph}s contained in this encoding. */
+	// public TaskGraphEncoding<?> getTaskGraphEncoding() {
+	// return tgEncoding;
+	// }
 
 	/**
 	 * Returns the list of Partitions that are allocated to the given list of physical execution
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 0b39ca83..ca902f8c 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 fa5ec76217a920b514c7ee255f3ca0b3f0360ae0 RED
-AbstractTaskMappingEntry.java 5a402c12dbf882f6c6f19146a66f837764f50e1f RED
+AbstractTaskMappingEncoding.java 091831363b6f9f40c17ad9ea28440da62130e44a 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 fa5ec762..09183136 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,7 +44,8 @@ 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) {
+	public AbstractTaskMappingEncoding(PartitionMappingEncoding partEnc,
+			SafeTaskGraphEncoding tgEncoding) {
 		super(partEnc, tgEncoding);
 	}
 
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 bbd58aa1..180424a9 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 cbd5546ce9cb78fd284464ea07d9be4a68a96006 RED
-FailSilentTaskMappingEntry.java 6cc36c6e47786732ffc71c636820a44659917886 RED
-FaultDetectionVotingTaskMappingEncoding.java 247891eb76b773dca87017b293fa7f0711781ad1 RED
-FaultDetectionVotingTaskMappingEntry.java ae401b16a2098ee85809f895c2469f494b6fc279 RED
-InstantiatedTaskMappingEncoding.java 0900e95fdc40241738762b84810a194ace305da7 RED
-InstantiatedTaskMappingEntry.java ffac1e77d53b2a9253b864b876aae18b6820f1f0 RED
+FailSilentTaskMappingEncoding.java 95cbf3617edc9d57359fcad05d87833f3657aeb0 RED
+FailSilentTaskMappingEntry.java 6cc36c6e47786732ffc71c636820a44659917886 RED
+FaultDetectionVotingTaskMappingEncoding.java 247891eb76b773dca87017b293fa7f0711781ad1 RED
+FaultDetectionVotingTaskMappingEntry.java ae401b16a2098ee85809f895c2469f494b6fc279 RED
+InstantiatedTaskMappingEncoding.java 989bd16a2f534d941a458e13cc76408626f31faf 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 cbd5546c..95cbf361 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
@@ -34,17 +34,9 @@ import org.fortiss.af3.exploration.alg.exception.ExplorationException;
 public class FailSilentTaskMappingEncoding extends
 		InstantiatedTaskMappingEncoding<FailSilentTaskMappingEntry> {
 
-	/**
-	 * Constructor that is initialized with a reference to the DSE specification and the input
-	 * system model.
-	 */
-	FailSilentTaskMappingEncoding(PartitionMappingEncoding partEnc,
-			AbstractTaskGraphEncoding tgEncoding) {
-		super(partEnc, tgEncoding);
-	}
-
 	/** Copy Constructor. */
-	FailSilentTaskMappingEncoding(PartitionMappingEncoding partEnc, TaskGraphEncoding<?> tgEncoding) {
+	public FailSilentTaskMappingEncoding(PartitionMappingEncoding partEnc,
+			TaskGraphEncoding<?> tgEncoding) {
 		super(partEnc, tgEncoding);
 	}
 
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 0900e95f..989bd16a 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
@@ -41,15 +41,6 @@ import org.opt4j.core.Genotype;
 public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTaskMappingEntry>
 		extends TaskMappingEncoding<ITaskAdapter<?>, T> {
 
-	/**
-	 * Constructor that is initialized with a reference to the DSE specification and the input
-	 * system model.
-	 */
-	protected InstantiatedTaskMappingEncoding(PartitionMappingEncoding partEnc,
-			AbstractTaskGraphEncoding tgEncoding) {
-		super(partEnc, tgEncoding);
-	}
-
 	/** Copy Constructor. */
 	protected InstantiatedTaskMappingEncoding(PartitionMappingEncoding partEnc,
 			TaskGraphEncoding<?> tgEncoding) {
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 04d9ec76..dfd93834 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
@@ -1,5 +1,5 @@
-ComposableCreator.java 6d2d61205890a2b0b99f41d2caa4debc511c8b4a RED
-ComposableCreatorBase.java e1a898541dd2b480e6c345ad2429bf93393957e6 RED
-CompositeCreator.java bb054d281931f461ca67def20360cc767940e204 RED
-CompositeCreatorBase.java d897947ff0db02ea1cac4034a4912f9afce283ec RED
-GuiceCreator.java 0a5a0c771346775ba21a739ebf8761c17bd78b13 RED
+ComposableCreator.java 6d2d61205890a2b0b99f41d2caa4debc511c8b4a RED
+ComposableCreatorBase.java e1a898541dd2b480e6c345ad2429bf93393957e6 RED
+CompositeCreator.java bb054d281931f461ca67def20360cc767940e204 RED
+CompositeCreatorBase.java d897947ff0db02ea1cac4034a4912f9afce283ec RED
+GuiceCreator.java d97b10032981b574922d292afd9306a55df351bb 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 0a5a0c77..d97b1003 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,21 +15,66 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.create;
 
+import static org.fortiss.af3.exploration.alg.service.ExplorationServiceManager.getService;
+
+import java.util.Collection;
+
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.Opt4JDseTaskProvider;
+import org.fortiss.af3.exploration.alg.dse.module.CreatorModule;
+import org.fortiss.af3.exploration.alg.service.IExplorationModuleService;
 import org.opt4j.core.Genotype;
 import org.opt4j.core.genotype.CompositeGenotype;
 import org.opt4j.core.problem.Creator;
+import org.opt4j.core.start.Opt4JTask;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
 
 /**
  * Dummy creator to allow registering the Guice Decoder.
  * 
  * @author diewald
  */
-public class GuiceCreator implements
+public class GuiceCreator extends AbstractModule implements
 		Creator<CompositeGenotype<Class<? extends Genotype>, ? extends Genotype>> {
 
+	/** Set of {@link Genotype}-Types for which instances shall be created. */
+	private Collection<Class<? extends Genotype>> requiredGenotypes;
+
+	/** {@link Opt4JTask} provider used to obtain the opt4j injector. */
+	@Inject
+	protected Opt4JDseTaskProvider opt4JProvider;
+
+	/** Child {@link Injector} for creating the required {@link Genotype}s in the creation phase. */
+	protected Injector createInjector;
+
+	/** Constructor. */
+	public GuiceCreator(Collection<Class<? extends Genotype>> requiredGenotypes) {
+		this.requiredGenotypes = requiredGenotypes;
+	}
+
 	/** {@inheritDoc} */
 	@Override
 	public CompositeGenotype<Class<? extends Genotype>, ? extends Genotype> create() {
-		return new CompositeGenotype();
+		createInjector = opt4JProvider.get().get().createChildInjector(this);
+
+		CompositeGenotype<Class<? extends Genotype>, Genotype> compGenotype =
+				new CompositeGenotype<>();
+		for(Class<? extends Genotype> requiredGenotype : requiredGenotypes) {
+			compGenotype.put(requiredGenotype, createInjector.getInstance(requiredGenotype));
+		}
+
+		return compGenotype;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	protected void configure() {
+		// bindScope(ThreadScoped.class, new ThreadScope());
+
+		for(CreatorModule<?> module : getService(IExplorationModuleService.class).getCreators()) {
+			install(module);
+		}
 	}
 }
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 ae7800cd..63f97eac 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
@@ -1,8 +1,8 @@
-ComposableDecoder.java 0ef247e0e8424968cd8dab8317df0e504c5018d4 RED
-ComposableDecoderBase.java 7c47b41e609b6911128efa469c2dd65122276bcc RED
-CompositeDecoder.java 68864146cbd7b0d1444d4157cf88023deb4a21ea RED
-CompositeDecoderBase.java cc878483ec3dcf3afd60509579c7c17a3433893c RED
-GuiceDecoder.java 40fe6757b224ffc399ef14e5b60a36775edffe3c RED
-PhenotypeDecoder.java 042d35c9bcba9a2cddc5e82ca5abe6f52438d1c3 RED
-ThreadScope.java f3a2b90fdbf0b2aabde4112c94623da5c262952b RED
-ThreadScoped.java a8335b0831586ea6ced17a5e7adf2952b72957d9 RED
+ComposableDecoder.java 0ef247e0e8424968cd8dab8317df0e504c5018d4 RED
+ComposableDecoderBase.java 7c47b41e609b6911128efa469c2dd65122276bcc RED
+CompositeDecoder.java 68864146cbd7b0d1444d4157cf88023deb4a21ea RED
+CompositeDecoderBase.java cc878483ec3dcf3afd60509579c7c17a3433893c RED
+GuiceDecoder.java e118048ae4abd7dedc858845cda9bc67e7565835 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 40fe6757..e118048a 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,10 +17,12 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositege
 
 import static org.fortiss.af3.exploration.alg.service.ExplorationServiceManager.getService;
 
+import java.util.Set;
+
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.Opt4JDseTaskProvider;
 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.graph.GenotypeFinder;
 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.service.IExplorationModuleService;
@@ -29,6 +31,7 @@ import org.opt4j.core.genotype.CompositeGenotype;
 import org.opt4j.core.problem.Decoder;
 import org.opt4j.core.start.Opt4JTask;
 
+import com.google.common.collect.Sets;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
@@ -47,13 +50,13 @@ public class GuiceDecoder extends AbstractModule implements Decoder<Genotype, Ph
 
 	/** Defines the desired exploration result type. */
 	// TODO: Remove this hard coded line and get the desired result from the backend interface.
-	protected Class<? extends Phenotype> resultType = FailSilentTaskMappingEncoding.class;
+	protected Class<? extends Phenotype> resultType;
 
 	/** {@link Opt4JTask} provider used to obtain the opt4j injector. */
 	@Inject
 	protected Opt4JDseTaskProvider opt4JProvider;
 
-	/** Child injector for the dependency management of the decode phase. */
+	/** Child {@link Injector} for the dependency management of the decode phase. */
 	protected Injector decodingInjector;
 
 	/** Reference to the input {@link Genotype}. */
@@ -61,6 +64,11 @@ public class GuiceDecoder extends AbstractModule implements Decoder<Genotype, Ph
 	protected ThreadLocal<CompositeGenotype<Class<? extends Genotype>, ? extends Genotype>> genotype =
 			new ThreadLocal<>();
 
+	/** Constructor. Remembers the demanded {@link Phenotype}ss to be produced. */
+	public GuiceDecoder(Class<? extends Phenotype> resultType) {
+		this.resultType = resultType;
+	}
+
 	// To be used later: Constructor injection is favorable.
 	// /** Constructor. Gets the Opt4J injector by Guice. */
 	// @Inject
@@ -83,6 +91,9 @@ public class GuiceDecoder extends AbstractModule implements Decoder<Genotype, Ph
 		// TODO(AD): See configure(): We need a service machenism and user configuration to select
 		// the desired set of activated decoders.
 		decodingInjector = opt4JProvider.get().get().createChildInjector(this);
+		GenotypeFinder genotypeFinder = new GenotypeFinder();
+		@SuppressWarnings("unused") Set<Class<? extends Genotype>> reqGenotypes =
+				genotypeFinder.getGenotypesFor(Sets.newHashSet(resultType), decodingInjector);
 		decodingInjector.getInstance(resultType);
 		return composedPhenotype;
 	}
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/.ratings
index 5bf819a7..3c95bb39 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/.ratings
@@ -1,2 +1,4 @@
-DecoderDependencyGraph.java c2d1a8d6c86002c4faea11b6ab822b0d1bef408b RED
-DecoderEdge.java b72d75a14a0cf4b7fd7c632951b6d88474a1ba56 RED
+DecoderDependencyGraph.java c2d1a8d6c86002c4faea11b6ab822b0d1bef408b RED
+DecoderEdge.java b72d75a14a0cf4b7fd7c632951b6d88474a1ba56 RED
+GenotypeFinder.java 675edad7a91117ef3df77cde2b48f769c02f707f YELLOW
+TransitiveDependencyVisitor.java ecb9b5c57877654e45e0392d6532e8d7a0a8b6e6 YELLOW
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/GenotypeFinder.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/GenotypeFinder.java
new file mode 100644
index 00000000..675edad7
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/GenotypeFinder.java
@@ -0,0 +1,85 @@
+/*-------------------------------------------------------------------------+
+| 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.graph;
+
+import java.util.Base64.Decoder;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
+import org.opt4j.core.Genotype;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import com.google.inject.Binding;
+import com.google.inject.Injector;
+import com.google.inject.Key;
+
+/**
+ * Allows to retrieve the set of required {@link Genotype} that is needed to construct a given set
+ * of {@link Phenotype}. Therefore, a visitor is constructed that remembers the bindings to
+ * {@link Genotype}s in decode methods. The visitor traverses the dse-wide {@link Injector} (that
+ * includes the decoding {@link Injector}) to capture the dependencies of the decoding phase.
+ * This class is inspired by the InjectorGrapher of the Guice Grapher extension.
+ * 
+ * @author diewald
+ */
+public class GenotypeFinder {
+
+	/** Dependency tree visitor that remembers the visited {@link Genotype} bindings. */
+	@SuppressWarnings("unchecked")
+	private TransitiveDependencyVisitor<Genotype> keyVisitor = new TransitiveDependencyVisitor<>(
+			Sets.newHashSet(Genotype.class));
+
+	/**
+	 * Collects the set of {@link Genotype}s that is required to construct the set of given
+	 * {@link Phenotype}s.
+	 * 
+	 * @param phenotypes
+	 *            Set of requested {@link Phenotype}s (e.g., a schedule).
+	 * @param injector
+	 *            DSE-wide inector to analyze the {@link Decoder} dependencies.
+	 * @return Set of required {@link Genotype}s.
+	 */
+	public Set<Class<? extends Genotype>> getGenotypesFor(
+			Set<Class<? extends Phenotype>> phenotypes, Injector injector) {
+		Set<Key<?>> phenotypeKeys = Sets.newHashSet();
+		phenotypes.forEach(p -> phenotypeKeys.add(Key.get(p)));
+		iterateBindings(injector, phenotypeKeys);
+		return keyVisitor.getFoundSubTypes();
+	}
+
+	/** Iterates over the bindings for the root keys and their transitive dependencies. */
+	private void iterateBindings(Injector injector, Set<Key<?>> phenotypeKeys) {
+		Set<Key<?>> keys = Sets.newHashSet(phenotypeKeys);
+		Set<Key<?>> visitedKeys = Sets.newHashSet();
+		List<Binding<?>> bindings = Lists.newArrayList();
+
+		while(!keys.isEmpty()) {
+			Iterator<Key<?>> iterator = keys.iterator();
+			Key<?> key = iterator.next();
+			iterator.remove();
+
+			if(!visitedKeys.contains(key)) {
+				Binding<?> binding = injector.getBinding(key);
+				bindings.add(binding);
+				visitedKeys.add(key);
+				keys.addAll(binding.acceptTargetVisitor(keyVisitor));
+			}
+		}
+	}
+}
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/TransitiveDependencyVisitor.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/TransitiveDependencyVisitor.java
new file mode 100644
index 00000000..ecb9b5c5
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/TransitiveDependencyVisitor.java
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 2008 Google Inc.
+ * Copyright (C) 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.graph;
+
+import java.util.Collection;
+import java.util.Set;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
+import com.google.inject.Binder;
+import com.google.inject.Binding;
+import com.google.inject.Key;
+import com.google.inject.spi.ConstructorBinding;
+import com.google.inject.spi.ConvertedConstantBinding;
+import com.google.inject.spi.DefaultBindingTargetVisitor;
+import com.google.inject.spi.Dependency;
+import com.google.inject.spi.HasDependencies;
+import com.google.inject.spi.InstanceBinding;
+import com.google.inject.spi.LinkedKeyBinding;
+import com.google.inject.spi.ProviderBinding;
+import com.google.inject.spi.ProviderInstanceBinding;
+import com.google.inject.spi.ProviderKeyBinding;
+
+/**
+ * Walks the dependency graph from a given type that must have a Guice binding to obtain a list of
+ * relevant dependent types. These types have to be given at construction time. All dependent types
+ * bound in the graph that are a subtype of the given list is returned by
+ * {@link #getFoundSubTypes()}.
+ * This class is a modified version of the TransitiveDependencyVisitor class of the Grapher
+ * extension of google Guice.
+ *
+ * @author phopkins@gmail.com (Pete Hopkins)
+ * @author diewald@fortiss.org (Alexander Diewald)
+ */
+public class TransitiveDependencyVisitor<G> extends
+		DefaultBindingTargetVisitor<Object, Collection<Key<?>>> {
+
+	/**
+	 * Set of found types to which a dependency exists and which is compatible with any of the
+	 * initially given type-set.
+	 */
+	private Set<Class<? extends G>> foundSubTypes = Sets.newHashSet();
+
+	/** Type set to filter while iterating over the graph. */
+	private Collection<Class<?>> seekTypes = Sets.newHashSet();
+
+	/** Constructor. */
+	public TransitiveDependencyVisitor(Collection<Class<?>> seekTypes) {
+		this.seekTypes = seekTypes;
+	}
+
+	/**
+	 * Iterates over the dependency tree spanned by the {@link Binder} and remembers every
+	 * encountered type binding if it is a sub-type of the initially given set of types.
+	 */
+	private Collection<Key<?>> visitHasDependencies(HasDependencies hasDependencies) {
+		Set<Key<?>> dependencies = Sets.newHashSet();
+
+		for(Dependency<?> dependency : hasDependencies.getDependencies()) {
+			Key<?> key = dependency.getKey();
+			addIfSubType(key);
+			dependencies.add(key);
+		}
+
+		return dependencies;
+	}
+
+	/**
+	 * Adds the type wrapped by the given {@link Key} to the set of found types if it is a subtype
+	 * of any of the initially given type set.
+	 */
+	@SuppressWarnings("unchecked")
+	private void addIfSubType(Key<?> key) {
+		Class<?> depClass = key.getTypeLiteral().getRawType();
+		if(seekTypes.stream().anyMatch(c -> c.isAssignableFrom(depClass))) {
+			foundSubTypes.add((Class<? extends G>)depClass);
+		}
+	}
+
+	/** Visits a {@link ConstructorBinding}. */
+	@Override
+	public Collection<Key<?>> visit(ConstructorBinding<?> binding) {
+		return visitHasDependencies(binding);
+	}
+
+	/** Visits a {@link ConvertedConstantBinding}. */
+	@Override
+	public Collection<Key<?>> visit(ConvertedConstantBinding<?> binding) {
+		return visitHasDependencies(binding);
+	}
+
+	/** Visits a {@link InstanceBinding}. */
+	@Override
+	public Collection<Key<?>> visit(InstanceBinding<?> binding) {
+		return visitHasDependencies(binding);
+	}
+
+	/** Visits a {@link LinkedKeyBinding}. */
+	@Override
+	public Collection<Key<?>> visit(LinkedKeyBinding<?> binding) {
+		return ImmutableSet.<Key<?>>of(binding.getLinkedKey());
+	}
+
+	/** Visits a {@link ProviderBinding}. */
+	@Override
+	public Collection<Key<?>> visit(ProviderBinding<?> binding) {
+		return ImmutableSet.<Key<?>>of(binding.getProvidedKey());
+	}
+
+	/** Visits a {@link ProviderInstanceBinding}. */
+	@Override
+	public Collection<Key<?>> visit(ProviderInstanceBinding<?> binding) {
+		return visitHasDependencies(binding);
+	}
+
+	/** Visits a {@link ProviderKeyBinding}. */
+	@Override
+	public Collection<Key<?>> visit(ProviderKeyBinding<?> binding) {
+		return ImmutableSet.<Key<?>>of(binding.getProviderKey());
+	}
+
+	/** @since 4.0 */
+	@Override
+	public Collection<Key<?>> visitOther(Binding<?> binding) {
+		return ImmutableSet.of();
+	}
+
+	/**
+	 * Returns the set of types that are subtypes of the initial set of given types and to which a
+	 * dependency exits.
+	 */
+	public Set<Class<? extends G>> getFoundSubTypes() {
+		return foundSubTypes;
+	}
+}
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 91fd6866..6ef94c63 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 f616faa5824fbfef7856192c8d5bd7c389eeb978 RED
-MutateConnectedDiagnosisPresent.java 0156e6fbb1774823a5c8a3ee24dea809fd5e44a6 RED
-MutateSafetyArchBase.java 29c91b28d8f1bb2e65add4525c6027942fc59a33 RED
-MutateSafetyFunctionArchitectureModule.java bb771ba71ab6788b2b6bbf462a7a8da65cab5328 RED
-MutateSafetyTriggerSignalNumber.java f3dbe9689e96ae5d8d4934f41123ab2af8d5183f RED
+MutateChannelNumber.java f616faa5824fbfef7856192c8d5bd7c389eeb978 RED
+MutateConnectedDiagnosisPresent.java 0156e6fbb1774823a5c8a3ee24dea809fd5e44a6 RED
+MutateSafetyArchBase.java 29c91b28d8f1bb2e65add4525c6027942fc59a33 RED
+MutateSafetyFunctionArchitectureModule.java b393d52af8444286b403b91221eb15cd9ee8511e 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/MutateSafetyFunctionArchitectureModule.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/safetyarch/MutateSafetyFunctionArchitectureModule.java
index bb771ba7..b393d52a 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
@@ -28,7 +28,8 @@ import com.google.inject.Module;
  * 
  * @author diewald
  */
-public class MutateSafetyFunctionArchitectureModule extends MutateOperatorModuleBase {
+public class MutateSafetyFunctionArchitectureModule extends MutateOperatorModuleBase implements
+		Module {
 	/** {@inheritDoc} */
 	@SuppressWarnings({"rawtypes"})
 	@Override
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 a869f32a..135c19b0 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,7 +1,7 @@
-ArchitectureDecoder.java d067dc995e0895860d98d717647c0f7b061f5908 RED
-ArchitectureExplorationProblemModule.java 12878158971065df3395a6474ca86b785e667f52 RED
-DseProblemModuleBase.java 0eba41852529e92e7255c7a7d8fce18354facbca RED
-EvaluatorWrapper.java 3747e5b78b1dcef8e1595c1ae9354e8ef2738e79 RED
-ExplorationGoalPriorityMultiEvaluator.java 1f6d2aa6ece8acdf4f57face0439f3429ab87329 RED
-ProblemModuleBase.java 460f7a8a07435eb13634caa9072e425bdf20e399 RED
-StrictTTDecoder.java d55ece0076bec24d74fd18dae3e33aaa9d2ac854 RED
+ArchitectureDecoder.java d067dc995e0895860d98d717647c0f7b061f5908 RED
+ArchitectureExplorationProblemModule.java a856314dfb6f0b4e3a0f7af28fcede66563dac74 RED
+DseProblemModuleBase.java 0eba41852529e92e7255c7a7d8fce18354facbca RED
+EvaluatorWrapper.java 3747e5b78b1dcef8e1595c1ae9354e8ef2738e79 RED
+ExplorationGoalPriorityMultiEvaluator.java 1f6d2aa6ece8acdf4f57face0439f3429ab87329 RED
+ProblemModuleBase.java 460f7a8a07435eb13634caa9072e425bdf20e399 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 12878158..a856314d 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
@@ -15,18 +15,26 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem;
 
+import static com.google.common.collect.Sets.newHashSet;
 import static org.fortiss.af3.exploration.alg.util.ExplorationAlgUtils.rethrow;
 
+import java.util.Collection;
 import java.util.Set;
 
 import org.fortiss.af3.exploration.alg.dse.DSEFactory;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.ArchitectureExplorationEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.create.GuiceCreator;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.GuiceDecoder;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.graph.GenotypeFinder;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.ArchitectureSolution;
 import org.fortiss.af3.exploration.alg.dse.evaluator.ArchitectureEvaluator;
 import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
 import org.fortiss.af3.exploration.moea.model.DseSpecification;
+import org.opt4j.core.Genotype;
+
+import com.google.inject.Injector;
 
 /**
  * Problem module for fail-silent execution model, that encapsulates a creator, a decoder and
@@ -41,10 +49,14 @@ public class ArchitectureExplorationProblemModule
 	/** To be removed. */
 	DSEFactory dseFactory = DSEFactory.getInstance();
 
+	/** Reference to the DSE-wide {@link Injector} to allow access to the system model parameters. */
+	private Injector dseInjector;
+
 	/** Constructor. */
-	public ArchitectureExplorationProblemModule(DseSpecification dse,
+	public ArchitectureExplorationProblemModule(DseSpecification dse, Injector dseInjector,
 			Set<Class<? extends IExplorationEncoding>> requestedSolutions) {
 		super(dse, null, requestedSolutions);
+		this.dseInjector = dseInjector;
 		dseFactory.init(null);
 	}
 
@@ -66,7 +78,12 @@ public class ArchitectureExplorationProblemModule
 		// bindProblem(dseFactory.createArchitectureExplorationCreator(),
 		// dseFactory.createArchitectureDecoder(execDepGraph), archEvaluator);
 
-		bindProblem(new GuiceCreator(), new GuiceDecoder(), archEvaluator);
+		Class<? extends Phenotype> resultType = FailSilentTaskMappingEncoding.class;
+		GuiceDecoder guiceDecoder = new GuiceDecoder(resultType);
+		Collection<Class<? extends Genotype>> requiredGenotypes =
+				findRequiredGenotypes(resultType, guiceDecoder);
+		bindProblem(new GuiceCreator(requiredGenotypes), new GuiceDecoder(resultType),
+				archEvaluator);
 
 		// Create/Bind the subproblems of the architectural exploration problem.
 		try {
@@ -84,4 +101,16 @@ public class ArchitectureExplorationProblemModule
 			throw rethrow(e);
 		}
 	}
+
+	/**
+	 * Returns the collection of {@link Genotype}s that are required as inputs to decoders to obtain
+	 * the requested {@link Phenotype}.
+	 */
+	@SuppressWarnings("unchecked")
+	private Collection<Class<? extends Genotype>> findRequiredGenotypes(
+			Class<? extends Phenotype> resultType, GuiceDecoder guiceDecoder) {
+		Injector decodingInjector = dseInjector.createChildInjector(guiceDecoder);
+		GenotypeFinder genotypeFinder = new GenotypeFinder();
+		return genotypeFinder.getGenotypesFor(newHashSet(resultType), decodingInjector);
+	}
 }
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 3d0f9a8a..59176915 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 5811c8cba759f3e7ca5809e6021a64f4a5188788 RED
-FaultDetectionVotingExecModelFactory.java 0d0d9cf608f95f1dfe3afd653049ae2f3bb19d5a RED
+FailSilentExecModelFactory.java ef5705dced9c886160ad0e0bf6288f3c207c9b91 RED
+FaultDetectionVotingExecModelFactory.java 27c16654d0be4a31c80801ce2af1cb73ecc23b0b 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 5811c8cb..ef5705dc 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
@@ -84,7 +84,7 @@ public class FailSilentExecModelFactory extends
 	@Override
 	public TaskMappingCreator<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding>
 			createTaskMappingCreator(DecoderDependencyGraph execDepGraph) {
-		return new FailSilentTaskMappingCreator(execDepGraph);
+		return new FailSilentTaskMappingCreator();
 	}
 
 	/* Construct execution model specific operators. */
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 0d0d9cf6..27c16654 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
@@ -89,7 +89,7 @@ public class FaultDetectionVotingExecModelFactory
 	public
 			TaskMappingCreator<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding>
 			createTaskMappingCreator(DecoderDependencyGraph execDepGraph) {
-		return new FaultDetectionVotingTaskMappingCreator(execDepGraph);
+		return new FaultDetectionVotingTaskMappingCreator();
 	}
 
 	/* Construct execution model specific operators. */
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 262a281c..8b4bf19d 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
@@ -1,17 +1,17 @@
-ICommunicationResourceAdapter.java 05fba6a2c158545f28393eb4c845b2ace86eb99d RED
-IComponentAdapter.java 2dfb64428d4edc278e6b5f7c3f21e44d07196917 RED
-IExecutionUnitAdapter.java a73348f4bff9a9c8f4a3f0e60177490e2e228388 RED
-IGatewayUnitAdapter.java dcf6aa0afcb20d3035b3034e2183c5dfc867e9b9 RED
-ILogicalArchitectureAdapter.java 2dea1c829c1542ffa788b669ae979854ae7e8480 RED
-IMemoryUnitAdapter.java c4093302720e21dec978479051184c842f1061d4 RED
-IModelElementAdapter.java a7620a897eb9ebfdcaf869ebb25e112d900b5622 RED
-IPlatformArchitectureAdapter.java 399d3cdff468c5ac95ca4cf6f17caabdeb2fef16 RED
-IRequestAdapter.java d9298837caf9e15971471aae0bb567e416e82a41 RED
-IResourceAdapter.java 4d41218b96f25daedad66098250baf622a3f89b3 RED
-IResourceConnectionAdapter.java 67d0a7f54de3e3fe21532fc33f6b853eb844b993 RED
-ISafetyFunctionAdapter.java 6a16258729ba9dff91c35285d18bc06cc99a713a RED
-ISignalAdapter.java 2bdb578564cf1d3351c99811c9090e2e9bd70715 RED
-ITaskAdapter.java 0f8c8699bb48e609211713aef6a7e1e82a00c963 RED
-ITransmissionUnitAdapter.java 217aca158641261dc8035805f341fe4c4c527a36 RED
-InternalComponentParameters.java cd5eea4ddf104c4cb3c4521d3256566812876027 RED
-SystemModelAdapter.java 4c99efd7137bcef08924bf6c5d28d35bab722676 RED
+ICommunicationResourceAdapter.java 05fba6a2c158545f28393eb4c845b2ace86eb99d RED
+IComponentAdapter.java 2dfb64428d4edc278e6b5f7c3f21e44d07196917 RED
+IExecutionUnitAdapter.java a73348f4bff9a9c8f4a3f0e60177490e2e228388 RED
+IGatewayUnitAdapter.java dcf6aa0afcb20d3035b3034e2183c5dfc867e9b9 RED
+ILogicalArchitectureAdapter.java 2dea1c829c1542ffa788b669ae979854ae7e8480 RED
+IMemoryUnitAdapter.java c4093302720e21dec978479051184c842f1061d4 RED
+IModelElementAdapter.java a7620a897eb9ebfdcaf869ebb25e112d900b5622 RED
+IPlatformArchitectureAdapter.java 399d3cdff468c5ac95ca4cf6f17caabdeb2fef16 RED
+IRequestAdapter.java d9298837caf9e15971471aae0bb567e416e82a41 RED
+IResourceAdapter.java 4d41218b96f25daedad66098250baf622a3f89b3 RED
+IResourceConnectionAdapter.java 67d0a7f54de3e3fe21532fc33f6b853eb844b993 RED
+ISafetyFunctionAdapter.java 6a16258729ba9dff91c35285d18bc06cc99a713a RED
+ISignalAdapter.java 2bdb578564cf1d3351c99811c9090e2e9bd70715 RED
+ITaskAdapter.java 0f8c8699bb48e609211713aef6a7e1e82a00c963 RED
+ITransmissionUnitAdapter.java 217aca158641261dc8035805f341fe4c4c527a36 RED
+InternalComponentParameters.java cd5eea4ddf104c4cb3c4521d3256566812876027 RED
+SystemModelAdapter.java 2927e62f6642b78e9caf6bb61f8b0d39f93f7e87 RED
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 4c99efd7..2927e62f 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
@@ -536,6 +536,7 @@ public class SystemModelAdapter<C, E, SO, SI, G, TR, M> extends AbstractModule {
 	 * present in the input models.
 	 */
 	@SuppressWarnings("unchecked")
+	@Provides
 	public Collection<ISafetyFunctionAdapter<?>> getSafetyFunctionAdapters() {
 		if(safetyFunctionAdapters != null) {
 			return (Collection<ISafetyFunctionAdapter<?>>)(Collection<?>)safetyFunctionAdapters;
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/.ratings b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/.ratings
index d759d1d4..4072df2b 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/.ratings
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/.ratings
@@ -1,14 +1,14 @@
-ExplorationEncodingMap.java aaea06f5731018d159a04266c92f1a701e461323 RED
-ExplorationServiceManager.java 6b15f230dd0cac5f3a9b954da805526da7358ad1 RED
-ExplorationTransformationInputs.java 3374ce609b50e69c3c29f1eb79bee25cd06b181d RED
-IExplorationConstraintTransformationService.java 48b673e1fb69c05e35c4e60ecf73b8f708cfcf0e RED
-IExplorationContraintTransformationModule.java 1d3560401275f719e2b9901d1639a6be6bd7c169 RED
-IExplorationEncoding.java f58adbcf840af521333c2777f50041a60548bff3 RED
-IExplorationEvaluatationService.java c79cd47a3eac58d56071e51bb5465efefa226fc5 RED
-IExplorationExtension.java c2a148e18c580d2432357e93da45e7bf7df8eb0c RED
-IExplorationModuleService.java 91a12b02e4c5a4a94b5e1dd644fe357f96ca7814 YELLOW
-IExplorationRepairService.java 879d73fce129cd3c4c6fd2819a5c4ed0a625c55b RED
-IExplorationService.java 5aaf2b75e88e4ee1b1a206c00e77dd173a5cdeb5 RED
-IExplorationTargetEvaluator.java 99c27a053a123462b8a4faadc9c3530fe6bc0c67 RED
-IExplorationTransformationService.java eed8f4a86eda433c2fc0af00fbef31dbd942c9f0 RED
-IRepairModule.java 0cca5fea3835e4fccc151eec42232ad0e6c88e66 RED
+ExplorationEncodingMap.java aaea06f5731018d159a04266c92f1a701e461323 RED
+ExplorationServiceManager.java 6b15f230dd0cac5f3a9b954da805526da7358ad1 RED
+ExplorationTransformationInputs.java 3374ce609b50e69c3c29f1eb79bee25cd06b181d RED
+IExplorationConstraintTransformationService.java 48b673e1fb69c05e35c4e60ecf73b8f708cfcf0e RED
+IExplorationContraintTransformationModule.java 1d3560401275f719e2b9901d1639a6be6bd7c169 RED
+IExplorationEncoding.java f58adbcf840af521333c2777f50041a60548bff3 RED
+IExplorationEvaluatationService.java c79cd47a3eac58d56071e51bb5465efefa226fc5 RED
+IExplorationExtension.java c2a148e18c580d2432357e93da45e7bf7df8eb0c RED
+IExplorationModuleService.java 55f602c4ba4cb80de3d249e1722819482828a471 RED
+IExplorationRepairService.java 879d73fce129cd3c4c6fd2819a5c4ed0a625c55b RED
+IExplorationService.java 5aaf2b75e88e4ee1b1a206c00e77dd173a5cdeb5 RED
+IExplorationTargetEvaluator.java 99c27a053a123462b8a4faadc9c3530fe6bc0c67 RED
+IExplorationTransformationService.java eed8f4a86eda433c2fc0af00fbef31dbd942c9f0 RED
+IRepairModule.java 0cca5fea3835e4fccc151eec42232ad0e6c88e66 RED
diff --git a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/IExplorationModuleService.java b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/IExplorationModuleService.java
index 91a12b02..55f602c4 100644
--- a/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/IExplorationModuleService.java
+++ b/org.fortiss.af3.exploration.alg/src/org/fortiss/af3/exploration/alg/service/IExplorationModuleService.java
@@ -21,12 +21,12 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen
 import org.fortiss.af3.exploration.alg.dse.module.CreatorModule;
 import org.fortiss.af3.exploration.alg.dse.module.DecoderModule;
 import org.fortiss.af3.exploration.alg.dse.module.EvaluatorModule;
-import org.fortiss.af3.exploration.alg.dse.module.OperatorModule;
 import org.opt4j.core.Genotype;
 import org.opt4j.core.optimizer.Operator;
 import org.opt4j.core.problem.Creator;
 import org.opt4j.core.problem.Decoder;
 import org.opt4j.core.problem.Evaluator;
+import org.opt4j.operators.OperatorModule;
 
 import com.google.inject.AbstractModule;
 
@@ -65,7 +65,7 @@ public interface IExplorationModuleService extends IExplorationService {
 	 *            modifications applied during the process iterations.
 	 */
 	<G extends Genotype> void registerVariable(Class<G> genotype, CreatorModule<G> creator,
-			OperatorModule<G> operator);
+			OperatorModule<?> operator);
 
 	/**
 	 * Registers a problem definition with the DSE process. The {@code phenotype} is equivalent to
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 f42c4ba7..78a31166 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 18799dc62ecdfccfe635d9a168f6c22e0e662a0b YELLOW
-ExplorationRepairService.java 940ceda7c8c48f282132355249af1fe0a005c0f5 RED
-ExplorationTransformationService.java 36e2368dd6098e1f3aa210a6defd4f269628e28a RED
+ExplorationConstraintTransformationService.java 5e7117398827ae129b3c9a8a16457d816ba665a7 RED
+ExplorationEvaluationService.java ed22af146e8230a39a47ba60224b824b6d0ac599 RED
+ExplorationModuleService.java c3ae40f2c20e38c7aa7a3f24a9ace41b59e421d3 YELLOW
+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 18799dc6..c3ae40f2 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
@@ -24,13 +24,13 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen
 import org.fortiss.af3.exploration.alg.dse.module.CreatorModule;
 import org.fortiss.af3.exploration.alg.dse.module.DecoderModule;
 import org.fortiss.af3.exploration.alg.dse.module.EvaluatorModule;
-import org.fortiss.af3.exploration.alg.dse.module.OperatorModule;
 import org.fortiss.af3.exploration.alg.exception.ExplorationServiceRuntimeException;
 import org.fortiss.af3.exploration.alg.service.IExplorationModuleService;
 import org.fortiss.tooling.kernel.introspection.IIntrospectionDetailsItem;
 import org.fortiss.tooling.kernel.introspection.IIntrospectionItem;
 import org.opt4j.core.Genotype;
 import org.opt4j.core.problem.Decoder;
+import org.opt4j.operators.OperatorModule;
 
 import com.google.common.collect.ClassToInstanceMap;
 import com.google.common.collect.MutableClassToInstanceMap;
@@ -88,7 +88,7 @@ public class ExplorationModuleService implements IExplorationModuleService {
 	/** {@inheritDoc} */
 	@Override
 	public <G extends Genotype> void registerVariable(Class<G> genotype, CreatorModule<G> creator,
-			OperatorModule<G> operator) {
+			OperatorModule<?> operator) {
 		// Input check: Allow only fully specified variable registrations.
 		if(genotype == null) {
 			throw new ExplorationServiceRuntimeException(getClass(), "The passed genotype is null!");
@@ -105,8 +105,8 @@ public class ExplorationModuleService implements IExplorationModuleService {
 			throw new ExplorationServiceRuntimeException(getClass(), "The module " +
 					creatorClass.getSimpleName() + " has already been registered!");
 		}
-		@SuppressWarnings("unchecked") Class<OperatorModule<G>> operatorClass =
-				(Class<OperatorModule<G>>)operator.getClass();
+		@SuppressWarnings("unchecked") Class<OperatorModule<?>> operatorClass =
+				(Class<OperatorModule<?>>)operator.getClass();
 		if(registeredExpModules.getInstance(operatorClass) != null) {
 			throw new ExplorationServiceRuntimeException(getClass(), "The module " +
 					operatorClass.getSimpleName() + " has already been registered!");
-- 
GitLab