diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/.ratings
index a9a36071f285f95e75a8e400ffa5d44bc303c9f0..6278617d23fcaedad5c5f13dc764edf214ef6962 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/.ratings
@@ -1,6 +1,6 @@
 CompositeExplorationSolution.java 528283a3dd57500539b2e11dd3d3eb35512de9b8 RED
-DSEFactory.java 99d95694fc552ded4321753cfe76028650633c98 RED
+DSEFactory.java e8a221bb175a30be7d4e780c58c2ba809980c47b RED
 Explorer.java 367aeeeeb26d22791c640e1b74c0af43277a3037 RED
 ImplicitExplorationTargetFactory.java 7ce651a2161c71a2a90acf0f32b1e50ee23f160f RED
 SolutionQuantification.java efd31f192c3adbf1a4434452a19eb836a17390e2 RED
-TaskMappingFactory.java 046f25f5bc491dd0e775b680fce497b34ddc64e0 RED
+TaskMappingFactory.java f8f5541a563b46050daaf1c6a854c233e90792f7 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java
index cf96120a41a9be8910898f3e09755f24d1414ebe..fae01031651707e756ab95311533ab3f282a4d18 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java
@@ -26,6 +26,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.ArchitectureExpl
 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.TaskMappingCreator;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry;
@@ -274,13 +275,18 @@ public class DSEFactory {
 	 * @throws UnsupportedDataTypeException
 	 *             if the given {@link ExecutionModel} is not "wrapped" to factory in this method.
 	 */
-	public TaskMappingFactory<? extends TaskMappingEntry, ? extends TaskMappingEncoding<?>>
+	public <S extends TaskMappingEntry<?, Partition>>
+			TaskMappingFactory<?, ? extends TaskMappingEncoding<?, S>>
 			createTaskMappingFactory(ExecutionModel execModel) throws UnsupportedDataTypeException {
+		// TODO: Remove the error-prone casting. Remove the differentiation between the failure
+		// modes here as well?
 		switch(execModel) {
 			case TT_FAIL_SILENCE:
-				return FailSilentExecModelFactory.getInstance();
+				return (TaskMappingFactory<?, ? extends TaskMappingEncoding<?, S>>)FailSilentExecModelFactory
+						.getInstance();
 			case TT_FAULT_DETECTION_VOTING:
-				return FaultDetectionVotingExecModelFactory.getInstance();
+				return (TaskMappingFactory<?, ? extends TaskMappingEncoding<?, S>>)FaultDetectionVotingExecModelFactory
+						.getInstance();
 			default:
 				throw new UnsupportedDataTypeException(
 						"Cannot create a factory for the execution model " + execModel.getName() +
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java
index f4da0fa2ad01175a0327bb1752ba31b3b22ed686..0815c8897837e8c5ef154047f1a89b9e85439537 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java
@@ -154,7 +154,7 @@ public abstract class TaskMappingFactory<S extends InstantiatedTaskMappingEntry,
 	 *            the system model deduced from the logical and technical architecture
 	 * @return Mutation Operator for Allocations.
 	 */
-	public MutateAllocation<? extends TaskMappingEntry, ? extends TaskMappingEncoding<?>>
+	public MutateAllocation<? extends TaskMappingEntry<?, ?>, ? extends TaskMappingEncoding<?, ?>>
 			createMutateAllocationOperator(
 					SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter) {
 		throw new UnsupportedOperationException(SCHED_NOT_IMPL_MSG);
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/.ratings
index 1e3974d43d5d7cac142983a44eab7f6fcf2d755c..c7b17b8424252d2ea6d76aeab93acbe35cab06fd 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/.ratings
@@ -1,3 +1,3 @@
 Opt4JExplorationSolutionSet.java fd1ca946198990604ea7a521e9d0335bef4ad8e1 RED
-Opt4JExplorerBackend.java 461b9a02d7549f775c5e44d6c9e804841b0d1b8c RED
+Opt4JExplorerBackend.java b647535f92ebdf1e428757f6fe1e918964feb4f2 RED
 Opt4JSingleExplorationSolution.java 6086e36a5b48b9f3ea68b6e50e2ac20758942d0a RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java
index 4fafb37f95eecf22941d01cd889013cf6a615a37..fcc00dfbc6f79c6629eb77798ded1d80243d4966 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java
@@ -35,6 +35,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.copy.taskmappi
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.crossover.CrossoverAbstractTaskMappingModule;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.crossover.NopCrossoverInstantiatedTaskMappingModule;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.crossover.NopCrossoverSFArchModule;
+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;
@@ -179,6 +180,9 @@ public class Opt4JExplorerBackend extends ExplorerBackendBase<EAOptimizer> {
 			modules.add(sfArchModule);
 		}
 
+		// Partition Exploration
+		modules.add(new PartitionMappingModule(systemModelAdapter));
+
 		// Task instantiation
 		MutateTaskInstanceModule mutateInstanceModule =
 				new MutateTaskInstanceModule(systemModelAdapter);
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/.ratings
new file mode 100644
index 0000000000000000000000000000000000000000..eb213614bbe296005a54e5caad43d3a440dc94c6
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/.ratings
@@ -0,0 +1 @@
+PartitionMappingCreator.java 9c831443bf9cdc547dede8df28dcaf8cfac3ab55 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/PartitionMappingCreator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/PartitionMappingCreator.java
new file mode 100644
index 0000000000000000000000000000000000000000..2e175344ebc6f860f9b2c1b7939477a84d7365e2
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/partitionmapping/PartitionMappingCreator.java
@@ -0,0 +1,67 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2017 fortiss GmbH                                              |
+|                                                                          |
+| Licensed under the Apache License, Version 2.0 (the "License");          |
+| you may not use this file except in compliance with the License.         |
+| You may obtain a copy of the License at                                  |
+|                                                                          |
+|    http://www.apache.org/licenses/LICENSE-2.0                            |
+|                                                                          |
+| Unless required by applicable law or agreed to in writing, software      |
+| distributed under the License is distributed on an "AS IS" BASIS,        |
+| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+| See the License for the specific language governing permissions and      |
+| limitations under the License.                                           |
++--------------------------------------------------------------------------*/
+package org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.partitionmapping;
+
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.MappingEncoding.CREATE_STARTEGY;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
+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.sysmodel.arch.SystemModelAdapter;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.random.RandomExploration;
+import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
+import org.opt4j.core.problem.Creator;
+
+/**
+ * {@link Creator} for {@link PartitionMappingEncoding}s.
+ * 
+ * @author diewald
+ */
+public class PartitionMappingCreator extends ComposableCreatorBase<PartitionMappingEncoding> {
+
+	/** Constructor. */
+	public PartitionMappingCreator(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
+			DecoderDependencyGraph depGraph) {
+		super(systemModelAdapter, depGraph);
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public PartitionMappingEncoding createComposable(FlatGenotypeMap createdGenotypes,
+			FlatPhenotypeMap<Phenotype> decodedPhenotypes) {
+		// TODO In order to correctly choose the create strategy here, we'd need to know the
+		// population size. For now, we assume an initial population size of 25.
+		final int INIT_POP_SIZE = 25;
+		// "Probability distribution" for the strategy selection: | 1 | 23 | 1 | ==> 25
+		int strategySelIdx = RandomExploration.getInstance().nextInt(INIT_POP_SIZE);
+		switch(strategySelIdx) {
+			case 0:
+				return new PartitionMappingEncoding(systemModelAdapter, CREATE_STARTEGY.MIN_SET);
+			case 24:
+				return new PartitionMappingEncoding(systemModelAdapter, CREATE_STARTEGY.MAX_SET);
+			default:
+				return new PartitionMappingEncoding(systemModelAdapter, CREATE_STARTEGY.RANDOM_SET);
+		}
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Class<? extends IExplorationEncoding> getCreatedEncodingType() {
+		return PartitionMappingEncoding.class;
+	}
+}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/.ratings
index 13b6c990bb74ef096ae48cc2814f843a949e27f5..f218e2be02612f87ea97dfa3e69f7fc4d6fbc54b 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/.ratings
@@ -1 +1 @@
-SafetyFunctionArchCreator.java ca96b21266c0b68224256a309d788cbc047c1035 RED
+SafetyFunctionArchCreator.java 8727cb4ecce45135ad5f6815d2dd0cb4c700b1ce RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/SafetyFunctionArchCreator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/SafetyFunctionArchCreator.java
index bd94fc7afca10fa2d24b80eb5361d14c55a07f77..ef4f39b8627fb0269d32a3c1116cfe06d9eff3d0 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/SafetyFunctionArchCreator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/safetyfunctionarch/SafetyFunctionArchCreator.java
@@ -54,7 +54,7 @@ public class SafetyFunctionArchCreator<C>
 
 	/** {@inheritDoc} */
 	@Override
-	public Class<? extends IExplorationEncoding> getCreatedEncoding() {
+	public Class<? extends IExplorationEncoding> getCreatedEncodingType() {
 		return SafetyFunctionArchEncoding.class;
 	}
 }
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/.ratings
index ce09d471115989bce50e17ede1703440edd15ca9..5abce2de645eb8126d7b1f7dbac9d7309191fc6f 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/.ratings
@@ -1,4 +1,4 @@
-AbstractTaskMappingCreator.java 3afa3eb3db97f94f11466f558321350ff960930a RED
-FailSilentTaskMappingCreator.java eff6f7b5161ecfd749b60eab11c96ac6639e79f7 RED
-FaultDetectionVotingTaskMappingCreator.java 2be9871421a7a11d81a628b1ba7215074c5cf955 RED
-TaskMappingCreator.java 956021f12777f0269b87adf762bb06aeb4551e75 RED
+AbstractTaskMappingCreator.java 6c3f2cd98a2d40f6fc0e1dbfca0ce3cddc5a7961 RED
+FailSilentTaskMappingCreator.java 6aa1828a87ab6bdaa8077101e004fe4ddddd8a7f RED
+FaultDetectionVotingTaskMappingCreator.java 2cc96c6197eaafa803b9794246ff40346802342a RED
+TaskMappingCreator.java d39c3554074646dfe9acc343c268baacd2960027 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java
index 130c80c586cdabf852ea22412e7cf6f66a691d14..ec847aee3799ef15d45494ed025c656116b5f296 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java
@@ -15,6 +15,7 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.taskmapping;
 
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEntry;
@@ -38,8 +39,8 @@ import com.google.inject.Inject;
  * 
  * @author diewald
  */
-public class AbstractTaskMappingCreator extends
-		TaskMappingCreator<AbstractTaskMappingEntry, AbstractTaskMappingEncoding> {
+public class AbstractTaskMappingCreator
+		extends TaskMappingCreator<AbstractTaskMappingEntry, AbstractTaskMappingEncoding> {
 
 	/** Constructor */
 	@Inject
@@ -66,12 +67,14 @@ public class AbstractTaskMappingCreator extends
 		// partial mapping.
 		AbstractTaskMappingEncoding atmEnc =
 				createdGenotypes.get(AbstractTaskMappingEncoding.class);
-		return new AbstractTaskMappingEncoding(dse, systemModelAdapter, atgEnc, atmEnc);
+		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(dse, systemModelAdapter, partEnc, atgEnc, atmEnc);
 	}
 
 	/** {@inheritDoc} */
 	@Override
-	public Class<? extends IExplorationEncoding> getCreatedEncoding() {
+	public Class<? extends IExplorationEncoding> getCreatedEncodingType() {
 		return AbstractTaskMappingEncoding.class;
 	}
 }
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java
index 8786f15e0a377b06e6f6d24da8500f7e16300cd3..aff9d2125ef003cf90f6e209030c76e283890c1b 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java
@@ -15,6 +15,7 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.taskmapping;
 
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FailSilentTaskMappingEncoding;
@@ -35,8 +36,8 @@ import com.google.inject.Inject;
  * 
  * @author diewald
  */
-public class FailSilentTaskMappingCreator extends
-		TaskMappingCreator<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> {
+public class FailSilentTaskMappingCreator
+		extends TaskMappingCreator<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> {
 
 	/**
 	 * Constructs a task mapping creator for a given DSE specification and input model
@@ -59,13 +60,15 @@ public class FailSilentTaskMappingCreator extends
 		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.";
-		return new FailSilentTaskMappingEncoding(dse, systemModelAdapter, atgEnc, atmEnc);
+		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 FailSilentTaskMappingEncoding(dse, systemModelAdapter, partEnc, atgEnc, atmEnc);
 	}
 
 	// TODO: remove this method: use the identifier from the encoding, instead.
 	/** {@inheritDoc} */
 	@Override
-	public Class<? extends IExplorationEncoding> getCreatedEncoding() {
+	public Class<? extends IExplorationEncoding> getCreatedEncodingType() {
 		return InstantiatedTaskMappingEncoding.class;
 	}
 }
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java
index a5ef3dba627811d75bf64c67cbd55d698fbecd2c..2181f0737dd920b27bd717b8c002d276c3ccb1a0 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java
@@ -15,6 +15,7 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.create.taskmapping;
 
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.FaultDetectionVotingTaskMappingEncoding;
@@ -35,8 +36,7 @@ import com.google.inject.Inject;
  * 
  * @author diewald
  */
-public class FaultDetectionVotingTaskMappingCreator
-		extends
+public class FaultDetectionVotingTaskMappingCreator extends
 		TaskMappingCreator<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> {
 
 	/**
@@ -60,12 +60,15 @@ public class FaultDetectionVotingTaskMappingCreator
 		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.";
-		return new FaultDetectionVotingTaskMappingEncoding(dse, systemModelAdapter, atgEnc, atmEnc);
+		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 FaultDetectionVotingTaskMappingEncoding(dse, systemModelAdapter, partEnc, atgEnc,
+				atmEnc);
 	}
 
 	/** {@inheritDoc} */
 	@Override
-	public Class<? extends IExplorationEncoding> getCreatedEncoding() {
+	public Class<? extends IExplorationEncoding> getCreatedEncodingType() {
 		return InstantiatedTaskMappingEncoding.class;
 	}
 }
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java
index 2bb56f8330fef36baa95a2813c29a5e415752c1c..1b5994e05159fe718838e3f42e691f80590c3108 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java
@@ -15,10 +15,12 @@
 +--------------------------------------------------------------------------*/
 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.sysmodel.arch.IDeployableComponentAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.moea.model.DseSpecification;
 import org.opt4j.core.Genotype;
@@ -32,7 +34,7 @@ import com.google.inject.Inject;
  * @author huang
  */
 
-public abstract class TaskMappingCreator<S extends TaskMappingEntry, T extends TaskMappingEncoding<?>>
+public abstract class TaskMappingCreator<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>>
 		extends ComposableCreatorBase<T> {
 
 	/** DSE specification. */
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/.ratings
index 98e649ffd4da3b071b68322bf98c9332ff98999c..eb47cb8ca83aad42d5da801e4dcfca05dddee997 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/.ratings
@@ -1,3 +1,4 @@
 ArchExpSubEncoding.java 60e13a2cb13bb36e9f8f7149f322dbed5398eafb RED
 ArchitectureExplorationEncoding.java e7ff265079ae5838bf84abf9d05712409031a970 RED
-MappingEncoding.java 3902cc66c2fe02952ae162cf9f98e4e319922dd0 RED
+MappingEncoding.java f7db94bf2af8dd5817ad564135d226301c6b41d5 RED
+MappingEntryBase.java f173c8ee60dd175e9bc1240d1e1cc14d46d24d69 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/MappingEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/MappingEncoding.java
index 3d961eeac726f26f60b77606d82cb9f6bb22dd59..044eecaf018eda1b5396169559e93f723909a71b 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/MappingEncoding.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/MappingEncoding.java
@@ -15,16 +15,92 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IRequestAdapter;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEncoding;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry;
 import org.opt4j.core.Genotype;
 
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.LinkedListMultimap;
+import com.google.common.collect.ListMultimap;
+
 /**
  * Marker interface for porting: Genotypes which allocate one request to a resource.
  * 
  * @author diewald
  */
-public interface MappingEncoding<G extends Genotype>
-		extends ComposablePhenotype<G>, IMappingEncoding {
-	// Marker interface for porting.
+public abstract class MappingEncoding<G extends Genotype, S extends IRequestAdapter<?>, T extends IResourceAdapter<?>, M extends IMappingEntry<S, T>>
+		implements ComposablePhenotype<G>, IMappingEncoding<S, T, M>, Cloneable {
+
+	/**
+	 * Allocation map
+	 * <ul>
+	 * <li>key: The Requester (e.g., task)</li>
+	 * <li>value: The target resource (e.g., cores)</li>
+	 * <li>Multiple entry in the list represent redundant mapping</li>
+	 */
+	protected ListMultimap<S, M> allocationMap = LinkedListMultimap.create();
+
+	public enum CREATE_STARTEGY {
+		MIN_SET, RANDOM_SET, MAX_SET
+	}
+
+	/**
+	 * Creates a copy of the internal allocation map of {@code this} {@link TaskMappingEncoding}.
+	 */
+	public ListMultimap<S, M> copyAllocationMap(Map<M, M> copyAssocMap) {
+		ListMultimap<S, M> copiedMap = ArrayListMultimap.create();
+		for(Entry<S, M> tmEntry : allocationMap.entries()) {
+			@SuppressWarnings("unchecked") M mappingEntry = (M)tmEntry.getValue().clone();
+			copiedMap.put(tmEntry.getKey(), mappingEntry);
+			copyAssocMap.put(tmEntry.getValue(), mappingEntry);
+		}
+		return copiedMap;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public synchronized Collection<T> getAllocatedResourcesFor(S requester) {
+		Collection<T> allocatedResourcesForRequester = new ArrayList<>();
+		for(IMappingEntry<S, T> currentMappingEntry : allocationMap.get(requester)) {
+			allocatedResourcesForRequester.add(currentMappingEntry.getTarget());
+		}
+		return allocatedResourcesForRequester;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public List<M> getMappingEntriesOf(S source) {
+		return allocationMap.get(source);
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public boolean containsEntry(M entry) {
+		return allocationMap.containsValue(entry);
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Collection<M> getMappingEntries() {
+		return allocationMap.values();
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Collection<S> getRequesters() {
+		return allocationMap.keySet();
+	}
+
+	@Override
+	public abstract MappingEncoding<G, S, T, M> clone();
 }
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/MappingEntryBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/MappingEntryBase.java
new file mode 100644
index 0000000000000000000000000000000000000000..5c618d4eb7e35323bc0b476e140f5b2ea32b43c0
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/MappingEntryBase.java
@@ -0,0 +1,84 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2017 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.encoding;
+
+import java.util.Collection;
+
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IRequestAdapter;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry;
+
+import com.google.common.collect.ClassToInstanceMap;
+import com.google.common.collect.MutableClassToInstanceMap;
+
+/**
+ * 
+ * @author diewald
+ */
+public abstract class MappingEntryBase<S extends IRequestAdapter<?>, T extends IResourceAdapter<?>>
+		implements IMappingEntry<S, T>, Cloneable {
+	/** Deployment target to which task is mapped */
+	protected T target;
+
+	/** {@link IDeployableComponentAdapter} that is "realized" by this {@link TaskMappingEntry}. */
+	protected S source;
+
+	/** Associated {@link IMappingEntry}s that were generated during the DSE process. */
+	protected ClassToInstanceMap<IMappingEntry<S, T>> associatedEntries =
+			MutableClassToInstanceMap.create();
+
+	/** {@inheritDoc} */
+	@Override
+	public S getSource() {
+		return source;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public T getTarget() {
+		return target;
+	}
+
+	/** {@inheritDoc} */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void addAssociatedElement(IMappingEntry<S, T> assocEntry) {
+		associatedEntries.put((Class<IMappingEntry<S, T>>)assocEntry.getClass(), assocEntry);
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public void rmAssociatedElement(IMappingEntry<S, T> entry) {
+		associatedEntries.remove(entry.getClass());
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Collection<IMappingEntry<S, T>> getAssociatedElement() {
+		return associatedEntries.values();
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public <U extends IMappingEntry<S, T>> U getAssociatedElement(Class<U> type) {
+		return associatedEntries.getInstance(type);
+	}
+
+	@Override
+	public abstract IMappingEntry<S, T> clone();
+}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/comm/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/comm/.ratings
index 5e99674e1cc884d11c6c087bc9babe8c8928142f..612a4bf21af6f7983059ffd3f9e82d7067954f04 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/comm/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/comm/.ratings
@@ -1 +1 @@
-MessageEncoding.java 43b80e6e3d26c01f73ac493062a646026279c61d RED
+MessageEncoding.java 07156d0dd672656302f8d1eac27018ed32e718d1 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/comm/MessageEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/comm/MessageEncoding.java
index 2fc244e3795fae220cbdc9a35153ad1f37b6b2fa..f4a8178ebbb12fde9ad3c2b5d1a7191ea388c28b 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/comm/MessageEncoding.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/comm/MessageEncoding.java
@@ -19,9 +19,11 @@ import static org.fortiss.tooling.common.util.LambdaUtils.filterSet;
 
 import java.util.Collection;
 
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.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.phenotype.ComposablePhenotype;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.comm.Message;
 import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
 import org.fortiss.af3.exploration.backend.IDseInputContainer.SignalType;
@@ -32,7 +34,7 @@ import org.fortiss.af3.exploration.backend.IDseInputContainer.SignalType;
  * 
  * @author diewald
  */
-public class MessageEncoding<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>>
+public class MessageEncoding<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>>
 		implements IExplorationEncoding, ComposablePhenotype<T> {
 
 	/** Contains the set of generated messages. */
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/.ratings
new file mode 100644
index 0000000000000000000000000000000000000000..09929aba858e0c92c43b11c0d98276f6fbce63f7
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/.ratings
@@ -0,0 +1,3 @@
+Partition.java 3f643bea0eb26cb7528b7dbcae6b957cac081125 RED
+PartitionMappingEncoding.java 91d0233fc1e2301b40cc955defa82dafadc724df RED
+PartitionMappingEntry.java 16130a3bd2f157c4f5f5ef6cb91d1b72137f0acd RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/Partition.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/Partition.java
new file mode 100644
index 0000000000000000000000000000000000000000..3de4054feb21632b1cc2988b3bb77e2a3bdb14bc
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/Partition.java
@@ -0,0 +1,61 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2017 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.encoding.partitionmapping;
+
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IRequestAdapter;
+
+/**
+ * Represents partitions executed by a hypervisor running on physical execution units.
+ * The current implementation as an IExecutionUnitAdapter is a HACK to make the
+ * PartitionMappingEncoding compatible with the TaskMappingEncoding. This should be refactored ASAP.
+ * 
+ * @author diewald
+ */
+public class Partition implements IExecutionUnitAdapter<Partition>, IRequestAdapter<Partition> {
+
+	/** {@inheritDoc} */
+	@Override
+	public boolean isVirtual() {
+		return true;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Double getFailureRate() {
+		return 0.0;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public String getName() {
+		// No associated Object with a name at the moment.
+		return toString();
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Partition getObject() {
+		// TODO No associated Object with a name at the moment.
+		return null;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public double getSafeFailureFraction() {
+		return 0.0;
+	}
+}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/PartitionMappingEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/PartitionMappingEncoding.java
new file mode 100644
index 0000000000000000000000000000000000000000..fb22cc96b117aa611f718a48b1a57d96d4088699
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/PartitionMappingEncoding.java
@@ -0,0 +1,146 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2017 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.encoding.partitionmapping;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.MappingEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.ComposableGenotype;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype;
+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.SystemModelAdapter;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.random.RandomExploration;
+
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.ListMultimap;
+
+/**
+ * Encoding that maps partition, which host tasks, to execution units. Typically, these are cores.
+ * The encoding is essentially a two-dimensional table.
+ * 
+ * @author diewald
+ */
+public class PartitionMappingEncoding extends
+		MappingEncoding<PartitionMappingEncoding, Partition, IExecutionUnitAdapter<?>, PartitionMappingEntry>
+		implements ComposableGenotype, Cloneable {
+	/** The allocation table. */
+	private ListMultimap<IResourceAdapter<?>, Partition> allocationTable =
+			ArrayListMultimap.create();
+
+	private Collection<? extends IResourceAdapter<?>> targetSet;
+
+	/** Constructor. */
+	// TODO: The strategy can be replaced by lambdas for a cleaner design.
+	public PartitionMappingEncoding(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
+			CREATE_STARTEGY strategy) {
+		// Number of tasks to deploy
+		// TODO: This does not consider task replicas yet.
+		int taskNum = systemModelAdapter.getDeployableComponents().size();
+		targetSet = systemModelAdapter.getDeploymentTargets();
+		if(strategy == CREATE_STARTEGY.MIN_SET) {
+			for(IResourceAdapter<?> target : targetSet) {
+				allocationTable.put(target, new Partition());
+			}
+		} else if(strategy == CREATE_STARTEGY.RANDOM_SET) {
+			for(IResourceAdapter<?> target : targetSet) {
+				int randMaxPartitions = RandomExploration.getInstance().nextInt(taskNum);
+				for(int i = 0; i < randMaxPartitions; ++i) {
+					allocationTable.put(target, new Partition());
+				}
+			}
+		} else if(strategy == CREATE_STARTEGY.MAX_SET) {
+			for(IResourceAdapter<?> target : targetSet) {
+				for(int i = 0; i < taskNum; ++i) {
+					allocationTable.put(target, new Partition());
+				}
+			}
+		}
+	}
+
+	/** Prototype Constructor. */
+	private PartitionMappingEncoding() {
+		// Prototype for newInstance().
+	}
+
+	public Collection<IResourceAdapter<?>> getResources() {
+		return allocationTable.keySet();
+	}
+
+	public List<Partition> getRequesters(IResourceAdapter<?> resource) {
+		return allocationTable.get(resource);
+	}
+
+	/** Creates a {@link Partition} that is allocated to the given {@link IResourceAdapter}. */
+	public void createPartition(IResourceAdapter<?> resource) {
+		allocationTable.put(resource, new Partition());
+	}
+
+	/** Removes a random {@link Partition} allocation to the given {@link IResourceAdapter}. */
+	public void removeRandomPartition(IResourceAdapter<?> resource) {
+		List<Partition> partitions = allocationTable.get(resource);
+		int randIdx = RandomExploration.getInstance().nextInt(partitions.size());
+		Partition rmPartition = partitions.get(randIdx);
+		removePartition(resource, rmPartition);
+	}
+
+	/** Removes the given {@link Partition} allocation to the given {@link IResourceAdapter}. */
+	public void removePartition(IResourceAdapter<?> resource, Partition partition) {
+		allocationTable.remove(resource, partition);
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public int size() {
+		return allocationTable.keySet().size();
+	}
+
+	/** {@inheritDoc} */
+	@SuppressWarnings("unchecked")
+	@Override
+	public PartitionMappingEncoding newInstance() {
+		return new PartitionMappingEncoding();
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Class<? extends ComposableGenotype> getGTypeToRegister() {
+		return getClass();
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Class<? extends ComposablePhenotype<?>> getPTypeToRegister() {
+		return getClass();
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public PartitionMappingEncoding clone() {
+		PartitionMappingEncoding clonedEncoding = new PartitionMappingEncoding();
+
+		Map<PartitionMappingEntry, PartitionMappingEntry> copyAssocMap = new HashMap<>();
+		clonedEncoding.allocationMap = copyAllocationMap(copyAssocMap);
+
+		// TODO: Implement a generic version of the assoc Map copy and call it here.
+		// TODO: Implement a generic clone version, that can be called from here.
+
+		return clonedEncoding;
+	}
+}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/PartitionMappingEntry.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/PartitionMappingEntry.java
new file mode 100644
index 0000000000000000000000000000000000000000..b9a9289f12e0055900ff9e694e46fcd97c72c349
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/partitionmapping/PartitionMappingEntry.java
@@ -0,0 +1,34 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2017 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.encoding.partitionmapping;
+
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.MappingEntryBase;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry;
+
+/**
+ * 
+ * @author diewald
+ */
+public class PartitionMappingEntry extends MappingEntryBase<Partition, IExecutionUnitAdapter<?>> {
+
+	/** {@inheritDoc} */
+	@Override
+	public IMappingEntry<Partition, IExecutionUnitAdapter<?>> clone() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/.ratings
index 9c9a39f76728cfcc1a4e5cdbe12d0a53d5d9b264..d6ba481e3fe673b3ccce8f660295ed8fc493e484 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/.ratings
@@ -1,2 +1,2 @@
-TaskMappingEncoding.java 63e7c46c9e87d75607485c038a334451b3377da8 RED
-TaskMappingEntry.java 85323fa9744439fd16f0cc26f2561240301a294a RED
+TaskMappingEncoding.java f2cc21b6294896288c9bfe70870bf38d0b30cb71 RED
+TaskMappingEntry.java 83535c1ad58bc3016f2d9fe409d5b1f80394b501 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java
index da1abb1b58b03838505806930f6684176e29ef8a..690e2fc5a2f04e8dc85263bb71046f93a32b4e1f 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java
@@ -16,7 +16,6 @@
 
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping;
 
-import static org.fortiss.af3.exploration.alg.util.ExplorationAlgUtils.castToRawColl;
 import static org.fortiss.tooling.kernel.utils.EcoreUtils.getChildrenWithType;
 
 import java.util.ArrayList;
@@ -33,14 +32,16 @@ import org.eclipse.emf.ecore.EObject;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.ArchExpSubEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.MappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.comm.constraint.InternalIsolatedCommunicationSet;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.TaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.constraint.InternalReplicationConstraint;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.constraint.InternalSeparationConstraint;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.ComposableGenotype;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.CompositePhenotype;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.encoding.ConstrainedEncoding;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
-import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IRequestAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.DefaultTaskGraph;
@@ -49,16 +50,14 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.random.RandomExploration;
 import org.fortiss.af3.exploration.alg.exception.ExplorationException;
 import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
-import org.fortiss.af3.exploration.alg.util.ExplorationAlgDebugUtils;
 import org.fortiss.af3.exploration.model.ExplorationConstraint;
 import org.fortiss.af3.exploration.moea.model.DseSpecification;
 import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiAllocationConstraint;
 import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiDislocationConstraint;
 import org.fortiss.af3.platform.model.ExecutionUnit;
+import org.fortiss.tooling.common.util.LambdaUtils;
 
-import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.HashMultimap;
-import com.google.common.collect.ListMultimap;
 import com.google.common.collect.Multimap;
 
 /**
@@ -66,9 +65,13 @@ import com.google.common.collect.Multimap;
  * 
  * @author huang
  */
-public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
-		implements IMappingEncoding, ComposableGenotype, MappingEncoding, ArchExpSubEncoding,
-		IExplorationEncoding, ConstrainedEncoding, Cloneable {
+// TODO: The CompositePhenotype is not typed correctly: An additional Type parameter would be needed
+// for the subclass of TaskMappingEncoding and passed to the CompositePhenotype.
+public abstract class TaskMappingEncoding<S extends IDeployableComponentAdapter<?>, T extends TaskMappingEntry<S, Partition>>
+		extends MappingEncoding<TaskMappingEncoding<S, T>, S, Partition, T>
+		implements IMappingEncoding<S, Partition, T>, ComposableGenotype,
+		CompositePhenotype<TaskMappingEncoding<S, T>>, ArchExpSubEncoding, IExplorationEncoding,
+		ConstrainedEncoding, Cloneable {
 	/** Random generator */
 	private RandomExploration rand = RandomExploration.getInstance();
 
@@ -106,19 +109,13 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
 	 * Collection of deployable {@link IDeployableComponentAdapter}s represented by {@code this}
 	 * mapping.
 	 */
-	protected Collection<IDeployableComponentAdapter<?>> deployableComponents;
+	protected Collection<S> deployableComponents;
 
 	/** The input {@link TaskGraphEncoding} that contains the tasks and their signals. */
 	protected TaskGraphEncoding<?, ?, ?> tgEncoding;
 
-	/**
-	 * Allocation map
-	 * <ul>
-	 * <li>key: the software component (task)</li>
-	 * <li>value: the set of hardware components (cores)</li>
-	 * <li>Multiple entry in the list represent redundant mapping</li>
-	 */
-	protected ListMultimap<IDeployableComponentAdapter<?>, T> allocationMap;
+	/** The input {@link PartitionMappingEncoding}: Targets to deploy tasks. */
+	protected PartitionMappingEncoding partMappingEncoding;
 
 	/** Ratio between the generation of RoundRobin based and pure random mapping generation. */
 	private final double fixToRandomRatio = 0.25;
@@ -129,12 +126,12 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
 	 */
 	public TaskMappingEncoding(DseSpecification dse,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-			TaskGraphEncoding<?, ?, ?> tgEncoding) {
+			PartitionMappingEncoding partMappingEncoding, TaskGraphEncoding<?, ?, ?> tgEncoding) {
 		this.dse = dse;
 		this.systemModelAdapter = systemModelAdapter;
 		this.tgEncoding = tgEncoding;
-		this.deployableComponents = castToRawColl(tgEncoding.getDeployableComponents());
-		allocationMap = ArrayListMultimap.create();
+		this.partMappingEncoding = partMappingEncoding;
+		this.deployableComponents = (Collection<S>)tgEncoding.getDeployableComponents();
 
 		disallowedAllocations = createDisallowedAllocationMap();
 		allowedAllocations = createAllowedAllocationMap();
@@ -151,7 +148,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
 	public TaskMappingEncoding(DseSpecification dse,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, boolean initialize)
 			throws ExplorationException {
-		this(dse, systemModelAdapter, new TaskGraphEncoding<>(systemModelAdapter));
+		this(dse, systemModelAdapter, null, new TaskGraphEncoding<>(systemModelAdapter));
 		if(initialize) {
 			resetEncoding();
 		}
@@ -166,8 +163,9 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
 	 */
 	public TaskMappingEncoding(DseSpecification dse,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-			TaskGraphEncoding<?, ?, ?> tgEncoding, boolean initialize) throws ExplorationException {
-		this(dse, systemModelAdapter, tgEncoding);
+			PartitionMappingEncoding partMappingEncoding, TaskGraphEncoding<?, ?, ?> tgEncoding,
+			boolean initialize) throws ExplorationException {
+		this(dse, systemModelAdapter, partMappingEncoding, tgEncoding);
 		if(initialize) {
 			resetEncoding();
 		}
@@ -182,9 +180,10 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
 	 */
 	public TaskMappingEncoding(DseSpecification dse,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-			TaskGraphEncoding<?, ?, ?> tgEncoding, TaskMappingEncoding<?> incompleteEncoding)
+			PartitionMappingEncoding partMappingEncoding, TaskGraphEncoding<?, ?, ?> tgEncoding,
+			TaskMappingEncoding<IDeployableComponentAdapter<?>, ?> incompleteEncoding)
 			throws ExplorationException {
-		this(dse, systemModelAdapter, tgEncoding);
+		this(dse, systemModelAdapter, partMappingEncoding, tgEncoding);
 		completeEncoding(incompleteEncoding);
 	}
 
@@ -196,7 +195,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
 	 *            {@link TaskMappingEntry} to be added to the allocation table.
 	 */
 	protected void addAllocation(T entry) {
-		allocationMap.put(entry.getDeployableComponent(), entry);
+		allocationMap.put(entry.getSource(), entry);
 		referencedByMap.putAll(entry, entry.getAssociatedElement());
 	}
 
@@ -382,16 +381,16 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
 	 * @throws ExplorationException
 	 *             if no valid allocation targets can be identified.
 	 */
-	public void completeEncoding(TaskMappingEncoding<?> incompleteEncoding)
+	public void completeEncoding(TaskMappingEncoding<?, ?> incompleteEncoding)
 			throws ExplorationException {
-		ArrayList<IDeployableComponentAdapter<?>> allocComponents = new ArrayList<>();
+		ArrayList<S> allocComponents = new ArrayList<>();
 		allocComponents.addAll(deployableComponents);
 
 		if(incompleteEncoding != null) {
-			allocComponents.removeAll(incompleteEncoding.getDeployedComponents());
+			allocComponents.removeAll(incompleteEncoding.getRequesters());
 
-			incompleteEncoding.getMappingEntries().forEach(
-					e -> addAllocation(createEntry(e.getDeployableComponent(), e.getTarget())));
+			incompleteEncoding.getMappingEntries()
+					.forEach(e -> addAllocation(createEntry(e.getSource(), e.getTarget())));
 		}
 
 		createEncoding(allocComponents);
@@ -419,23 +418,25 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
 	 * @throws ExplorationException
 	 *             if no valid allocation targets can be identified.
 	 */
-	protected void createEncoding(Collection<IDeployableComponentAdapter<?>> allocatableComponents)
-			throws ExplorationException {
+	protected void createEncoding(Collection<S> allocatableComponents) throws ExplorationException {
 		double selRandOrFixedInit = rand.nextDouble();
 		List<IExecutionUnitAdapter<?>> execTargets =
 				new ArrayList<>(systemModelAdapter.getDeploymentTargets());
 		int roundRobinAllocIdx = rand.nextInt(execTargets.size());
 
-		List<IDeployableComponentAdapter<?>> compColl = new ArrayList<>(allocatableComponents);
+		List<S> compColl = new ArrayList<>(allocatableComponents);
 		if(selRandOrFixedInit < fixToRandomRatio) {
 			Collections.shuffle(compColl);
 		}
 
-		for(IDeployableComponentAdapter<?> deployableComponent : compColl) {
-			List<IExecutionUnitAdapter<?>> validExecTargets = execTargets;
+		for(S deployableComponent : compColl) {
+			List<Partition> validExecTargets = new ArrayList<>();
 			if(allowedAllocations.containsKey(deployableComponent)) {
-				validExecTargets = allowedAllocations.get(deployableComponent).stream()
-						.collect(Collectors.toList());
+				List<IExecutionUnitAdapter<?>> physicalExecTargets = allowedAllocations
+						.get(deployableComponent).stream().collect(Collectors.toList());
+				for(IExecutionUnitAdapter<?> physExecUnit : physicalExecTargets) {
+					validExecTargets.addAll(partMappingEncoding.getRequesters(physExecUnit));
+				}
 			}
 
 			if(selRandOrFixedInit < fixToRandomRatio) {
@@ -453,9 +454,10 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
 			}
 		}
 
-		if(!ExplorationAlgDebugUtils.checkTaskMappingForSFConsistency(this)) {
-			System.out.println("Error.");
-		}
+		// TODO: Readd check with flag.
+		// if(!ExplorationAlgDebugUtils.checkTaskMappingForSFConsistency(this)) {
+		// System.out.println("Error.");
+		// }
 	}
 
 	/**
@@ -463,7 +465,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
 	 * is mapped to a deployment target.
 	 */
 	protected abstract T createEntry(IDeployableComponentAdapter<?> deployableComponent,
-			IExecutionUnitAdapter<?> deploymentTarget);
+			Partition deploymentTarget);
 
 	/**
 	 * Creates a {@link TaskMappingEntry} and adds it to {@code this} mapping. The given
@@ -475,7 +477,8 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
 	 *            {@link TaskMappingEntry}.
 	 * @return The created {@link TaskMappingEntry}.
 	 */
-	public <S extends TaskMappingEntry> T createAndAddEntry(S allocEntry) {
+	public <S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>> T
+			createAndAddEntry(S allocEntry) {
 		T newEntry = createEntry(allocEntry);
 		addAllocation(newEntry);
 		return newEntry;
@@ -500,18 +503,16 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
 	 * @throws ExplorationException
 	 *             if no valid allocation targets can be identified.
 	 */
-	public T createRandomEntry(IDeployableComponentAdapter<?> deployableComponent,
-			List<IExecutionUnitAdapter<?>> deploymentTargets) throws ExplorationException {
-		IExecutionUnitAdapter<?> target = null;
+	public T createRandomEntry(S deployableComponent, List<Partition> deploymentTargets)
+			throws ExplorationException {
+		Partition target = null;
 
 		// Select from remaining allowed deployment targets if no set of desired deployment targets
 		// is given
 		if(deploymentTargets == null || deploymentTargets.isEmpty()) {
-			deploymentTargets = new ArrayList<IExecutionUnitAdapter<?>>();
-			if(allowedAllocations.containsKey(deployableComponent)) {
-				deploymentTargets.addAll(allowedAllocations.get(deployableComponent));
-			} else {
-				deploymentTargets.addAll(systemModelAdapter.getDeploymentTargets());
+			deploymentTargets = new ArrayList<Partition>();
+			for(IResourceAdapter<?> physResource : allowedAllocations.get(deployableComponent)) {
+				deploymentTargets.addAll(partMappingEncoding.getRequesters(physResource));
 			}
 		}
 
@@ -545,8 +546,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
 	 * @throws ExplorationException
 	 *             if no valid allocation targets can be identified.
 	 */
-	public T createRandomEntry(IDeployableComponentAdapter<?> deployableComponent)
-			throws ExplorationException {
+	public T createRandomEntry(S deployableComponent) throws ExplorationException {
 		return createRandomEntry(deployableComponent, null);
 	}
 
@@ -558,8 +558,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
 	 * @throws ExplorationException
 	 *             if no valid allocation targets can be identified.
 	 */
-	public T createAndAddRandomEntry(IDeployableComponentAdapter<?> deployableComponent)
-			throws ExplorationException {
+	public T createAndAddRandomEntry(S deployableComponent) throws ExplorationException {
 		T entry = createRandomEntry(deployableComponent, null);
 		addAllocation(entry);
 		return entry;
@@ -567,7 +566,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
 
 	/** Removes the given {@code entry} of the given {@code task} from the mapping. */
 	public void removeEntry(T entry) {
-		allocationMap.remove(entry.getDeployableComponent(), entry);
+		allocationMap.remove(entry.getSource(), entry);
 		referencedByMap.get(entry).forEach(e -> e.rmAssociatedElement(entry));
 	}
 
@@ -575,9 +574,9 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
 	 * Removes a randomly selected entry of the given {@link IDeployableComponentAdapter} from the
 	 * mapping.
 	 */
-	public T removeRandomEntry(IDeployableComponentAdapter<?> deployableComponent) {
+	public T removeRandomEntry(S deployableComponent) {
 		List<T> entries = new ArrayList<>();
-		entries.addAll(allocationMap.get(deployableComponent));
+		entries.addAll((Collection<? extends T>)allocationMap.get(deployableComponent));
 		int idx = rand.nextInt(entries.size());
 		T rmEntry = entries.get(idx);
 		removeEntry(rmEntry);
@@ -588,7 +587,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
 	 * Removes the given {@link IDeployableComponentAdapter} and, consequently, all associated
 	 * entries from the mapping.
 	 */
-	public Collection<T> removeTask(IDeployableComponentAdapter<?> deployableComponent) {
+	public Collection<T> removeTask(S deployableComponent) {
 		for(T entry : allocationMap.get(deployableComponent)) {
 			referencedByMap.get(entry).forEach(e -> e.rmAssociatedElement(entry));
 		}
@@ -612,7 +611,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
 	 * @param deployableComponent
 	 *            Deployable component for which fixed deployment is to be generated for
 	 */
-	public void generateFixedDeployment(IDeployableComponentAdapter<?> deployableComponent) {
+	public void generateFixedDeployment(S deployableComponent) {
 		Collection<ComponentMultiAllocationConstraint> constraints = dse.getTargetSpecification()
 				.getTargets().stream()
 				.filter(t -> (t instanceof ComponentMultiAllocationConstraint))
@@ -620,11 +619,11 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
 		for(ComponentMultiAllocationConstraint cons : constraints) {
 			if(cons.getComponent() == deployableComponent.getObject()) {
 				removeTask(deployableComponent);
-				List<IExecutionUnitAdapter<?>> execList =
+				List<IExecutionUnitAdapter<?>> physExecList =
 						new ArrayList<>(systemModelAdapter.getDeploymentTargets());
-				execList = execList.stream()
-						.filter(e -> cons.getExecutionUnits().contains(e.getObject()))
-						.collect(Collectors.toList());
+				List<Partition> execList = new ArrayList<>();
+				LambdaUtils.forEach(physExecList, e -> execList
+						.addAll(partMappingEncoding.getRequesters((IResourceAdapter<?>)e)));
 				int allocIdx = 0;
 				for(int i = 0; i < deployableComponent.getMaxReplication(); i++) {
 					allocIdx = rand.nextInt(execList.size());
@@ -643,8 +642,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
 	 * @throws ExplorationException
 	 *             if no valid allocation targets can be identified.
 	 */
-	private void generateRandomDeployment(IDeployableComponentAdapter<?> deployableComponent)
-			throws ExplorationException {
+	private void generateRandomDeployment(S deployableComponent) throws ExplorationException {
 		// TODO: Model degree of admissible redundancy as a constraint?
 		int min = deployableComponent.getMinReplication();
 		int max = deployableComponent.getMaxReplication();
@@ -672,115 +670,22 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
 		Optional<InternalSeparationConstraint> relevantSepConstraint = sepConstraints.stream()
 				.filter(c -> c.getRequesterSet().contains(deployableComponent)).findAny();
 
-		if(relevantSepConstraint.isPresent()) {
-			// TODO: consider the separation level in the selection of forbidden deployment targets.
-			Collection<IMappingEntry> existingEntries = getIMappingEntriesOf(deployableComponent);
-			existingEntries.forEach(e -> rval.add(e.getTarget()));
-		}
-
-		if(rval != null) {
-			return rval;
-		}
-		return Collections.emptySet();
-	}
-
-	/** Returns the deployable components that are mapped in this {@link TaskMappingEncoding} */
-	@Override
-	public Collection<IDeployableComponentAdapter<?>> getDeployedComponents() {
-		return allocationMap.keySet();
-	}
-
-	/** {@inheritDoc} */
-	@SuppressWarnings("unchecked")
-	@Override
-	public Collection<IMappingEntry>
-			getIMappingEntriesOf(IDeployableComponentAdapter<?> deployableComponent) {
-		return (Collection<IMappingEntry>)allocationMap.get(deployableComponent);
-	}
+		// TODO: Reinclude for the safety exploration.
+		// if(relevantSepConstraint.isPresent()) {
+		// // TODO: consider the separation level in the selection of forbidden deployment targets.
+		// Collection<IMappingEntry> existingEntries = getIMappingEntriesOf(deployableComponent);
+		// existingEntries.forEach(e -> rval.add(e.getTarget()));
+		// }
 
-	/** Returns the deployment target to which a given deployable component has been assigned */
-	@SuppressWarnings("unchecked")
-	@Override
-	public Collection<IMappingEntry> getIMappingEntries() {
-		return (Collection<IMappingEntry>)allocationMap.values();
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public boolean containsEntry(IMappingEntry entry) {
-		return allocationMap.containsValue(entry);
-	}
-
-	/** Returns the deployment target to which a given deployable component has been assigned */
-	public Collection<T> getMappingEntries() {
-		return allocationMap.values();
-	}
-
-	/**
-	 * Returns the deployment target to which a given deployable component has been assigned.
-	 * 
-	 * @returns {@code null} if no entry in the allocation table is found.
-	 */
-	public List<T> getMappingEntriesOf(IDeployableComponentAdapter<?> deployableComponent) {
-		return allocationMap.get(deployableComponent);
-	}
-
-	/**
-	 * Returns the collection of {@link IExecutionUnitAdapter}s onto which the given
-	 * {@link IDeployableComponentAdapter} is allocated to.
-	 */
-	public Collection<IExecutionUnitAdapter<?>>
-			getMappingTargetsOf(IDeployableComponentAdapter<?> deployableComponent) {
-		Collection<IExecutionUnitAdapter<?>> executionTargets =
-				new HashSet<IExecutionUnitAdapter<?>>();
-		for(IMappingEntry currentEntry : getMappingEntriesOf(deployableComponent)) {
-			executionTargets.add(currentEntry.getTarget());
-		}
-		return executionTargets;
-	}
-
-	/**
-	 * Returns the deployment targets to which a given deployable component has been assigned
-	 * (similar to {#link getAssignedDeploymentTargets(
-	 * IDeployableComponentAdapter)}
-	 */
-	@Override
-	public synchronized Collection<IResourceAdapter<?>>
-			getAllocatedResourcesFor(IRequestAdapter<?> deployableComponent) {
-		if(!(deployableComponent instanceof IDeployableComponentAdapter<?>)) {
-			return null;
-		}
-
-		Collection<IResourceAdapter<?>> allocatedResourcesForRequester =
-				new ArrayList<IResourceAdapter<?>>();
-		for(IMappingEntry currentMappingEntry : allocationMap
-				.get((IDeployableComponentAdapter<?>)deployableComponent)) {
-			allocatedResourcesForRequester.add(currentMappingEntry.getTarget());
-		}
-		return allocatedResourcesForRequester;
+		return rval;
 	}
 
 	/** Assigns deployment targets to a deployable component */
-	public void setAssignedResources(IDeployableComponentAdapter<?> deployableComponent,
-			List<T> deploymentTargets) {
+	public void setAssignedResources(S deployableComponent, List<T> deploymentTargets) {
 		removeTask(deployableComponent);
 		deploymentTargets.forEach(e -> addAllocation(e));
 	}
 
-	/**
-	 * Creates a copy of the internal allocation map of {@code this} {@link TaskMappingEncoding}.
-	 */
-	public ListMultimap<IDeployableComponentAdapter<?>, T>
-			copyAllocationMap(Map<T, T> copyAssocMap) {
-		ListMultimap<IDeployableComponentAdapter<?>, T> copiedMap = ArrayListMultimap.create();
-		for(Entry<IDeployableComponentAdapter<?>, T> tmEntry : allocationMap.entries()) {
-			@SuppressWarnings("unchecked") T mappingEntry = (T)tmEntry.getValue().clone();
-			copiedMap.put(tmEntry.getKey(), mappingEntry);
-			copyAssocMap.put(tmEntry.getValue(), mappingEntry);
-		}
-		return copiedMap;
-	}
-
 	/**
 	 * Creates a copy of the internal constraint map of {@code this} {@link TaskMappingEncoding}.
 	 */
@@ -819,7 +724,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
 	public String toString() {
 		String str = "";
 
-		for(IDeployableComponentAdapter<?> deployableComponent : allocationMap.keySet()) {
+		for(S deployableComponent : allocationMap.keySet()) {
 			str += "Mapping: " + deployableComponent.getName() + " -> " + "{";
 
 			if(allocationMap.get(deployableComponent) != null) {
@@ -840,18 +745,12 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
 		return tgEncoding;
 	}
 
-	/**
-	 * Returns the task allocation map
-	 */
-	public Map<IDeployableComponentAdapter<?>, Collection<T>> getAllocationMap() {
-		return allocationMap.asMap();
-	}
-
-	/**
-	 * Returns the task allocation multimap.
-	 */
-	public Multimap<IDeployableComponentAdapter<?>, T> getAllocationMultiMap() {
-		return allocationMap;
+	public List<Partition>
+			getAllowedPartitionTargets(List<IExecutionUnitAdapter<?>> physExecUnits) {
+		List<Partition> execList = new ArrayList<>();
+		LambdaUtils.forEach(physExecUnits,
+				e -> execList.addAll(partMappingEncoding.getRequesters((IResourceAdapter<?>)e)));
+		return execList;
 	}
 
 	/**
@@ -861,11 +760,4 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry>
 	public int size() {
 		return allocationMap.size();
 	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Object clone() {
-		throw new UnsupportedOperationException(
-				"The clone operation MUST be implemented in the concrete classes of the TaskMappingEncoding. Otherwise, the algorithm does not operate as expected!");
-	}
 }
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEntry.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEntry.java
index 94c9390e2348736516e3008878b5201687241b51..4f4ca6345654759a9f18718e2f33db422fa55cbe 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEntry.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEntry.java
@@ -15,14 +15,11 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping;
 
-import java.util.Collection;
-
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.MappingEntryBase;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
-import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry;
-
-import com.google.common.collect.ClassToInstanceMap;
-import com.google.common.collect.MutableClassToInstanceMap;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IRequestAdapter;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter;
 
 /**
  * Base class for {@link TaskMappingEntry}s representing the one allocation of an
@@ -30,27 +27,18 @@ import com.google.common.collect.MutableClassToInstanceMap;
  * 
  * @author barner
  */
-public abstract class TaskMappingEntry implements IMappingEntry {
-	/** Deployment target to which task is mapped */
-	private IExecutionUnitAdapter<?> target;
-
-	/** {@link IDeployableComponentAdapter} that is "realized" by this {@link TaskMappingEntry}. */
-	protected IDeployableComponentAdapter<?> deploymentSource;
-
-	/** Associated {@link IMappingEntry}s that were generated during the DSE process. */
-	private ClassToInstanceMap<IMappingEntry> associatedEntries =
-			MutableClassToInstanceMap.create();
+public abstract class TaskMappingEntry<S extends IRequestAdapter<?>, T extends IResourceAdapter<?>>
+		extends MappingEntryBase<S, T> {
 
 	/** Constructs a mapping entry the represents the mapping to a given deployment target. */
-	protected TaskMappingEntry(IDeployableComponentAdapter<?> deployableComponent,
-			IExecutionUnitAdapter<?> target) {
-		this.deploymentSource = deployableComponent;
+	protected TaskMappingEntry(S deployableComponent, T target) {
+		this.source = deployableComponent;
 		this.target = target;
 	}
 
 	/** {@inheritDoc} */
 	@Override
-	public IExecutionUnitAdapter<?> getTarget() {
+	public T getTarget() {
 		return target;
 	}
 
@@ -61,41 +49,17 @@ public abstract class TaskMappingEntry implements IMappingEntry {
 	 * @param target
 	 *            {@link IExecutionUnitAdapter} defining the allocation target.
 	 */
-	public void resetTarget(IExecutionUnitAdapter<?> target) {
+	public void resetTarget(T target) {
 		this.target = target;
 	}
 
 	/** {@inheritDoc} */
 	@Override
-	public IDeployableComponentAdapter<?> getDeployableComponent() {
-		return deploymentSource;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public void addAssociatedElement(IMappingEntry assocEntry) {
-		associatedEntries.put(assocEntry.getClass(), assocEntry);
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public void rmAssociatedElement(IMappingEntry entry) {
-		associatedEntries.remove(entry.getClass());
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Collection<IMappingEntry> getAssociatedElement() {
-		return associatedEntries.values();
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public <T extends IMappingEntry> T getAssociatedElement(Class<T> type) {
-		return associatedEntries.getInstance(type);
+	public S getSource() {
+		return source;
 	}
 
 	/** {@inheritDoc} */
 	@Override
-	public abstract TaskMappingEntry clone();
+	public abstract TaskMappingEntry<S, T> clone();
 }
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/.ratings
index fb1f1ae776596b80c6d8c29067a6c81bb291c942..df46f858d95e1c2ac5f040af713dfbb6c0392d8c 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/.ratings
@@ -1,2 +1,2 @@
-AbstractTaskMappingEncoding.java 3c2bb2a8862aa9db67d83ec7b1372a580a087a4e RED
-AbstractTaskMappingEntry.java cdaa531e62a88ccbd0644e2737b71526fde682d1 RED
+AbstractTaskMappingEncoding.java 08b8a85ba4b9bf9a375f80c7852a3d2e9990c1e7 RED
+AbstractTaskMappingEntry.java b039009446aa861a4a13fa4ceb479a4ca9818045 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java
index d5cef0b5237562068e149eda07296a563d430da7..b2ae690110e9261733592a4e04a7f9ac28a83237 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java
@@ -16,8 +16,14 @@
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping;
 
 import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
 
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.SafeTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding;
@@ -25,7 +31,6 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.Ta
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.ComposableGenotype;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
-import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.alg.exception.ExplorationException;
 import org.fortiss.af3.exploration.moea.model.DseSpecification;
@@ -37,7 +42,8 @@ import org.opt4j.core.Genotype;
  * 
  * @author diewald
  */
-public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTaskMappingEntry> {
+public class AbstractTaskMappingEncoding
+		extends TaskMappingEncoding<IDeployableComponentAdapter<?>, AbstractTaskMappingEntry> {
 
 	/**
 	 * Constructor that is initialized with a reference to the DSE specification and the input
@@ -45,8 +51,8 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas
 	 */
 	AbstractTaskMappingEncoding(DseSpecification dse,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-			SafeTaskGraphEncoding<?> tgEncoding) {
-		super(dse, systemModelAdapter, tgEncoding);
+			PartitionMappingEncoding partEnc, SafeTaskGraphEncoding<?> tgEncoding) {
+		super(dse, systemModelAdapter, partEnc, tgEncoding);
 	}
 
 	/**
@@ -58,8 +64,9 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas
 	 */
 	public AbstractTaskMappingEncoding(DseSpecification dse,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-			SafeTaskGraphEncoding<?> tgEncoding, boolean initialize) throws ExplorationException {
-		super(dse, systemModelAdapter, tgEncoding, initialize);
+			PartitionMappingEncoding partEnc, SafeTaskGraphEncoding<?> tgEncoding,
+			boolean initialize) throws ExplorationException {
+		super(dse, systemModelAdapter, partEnc, tgEncoding, initialize);
 	}
 
 	/**
@@ -76,7 +83,7 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas
 	}
 
 	/**
-	 * Constructor that optionally initializes the encoding to a random encoding
+	 * Constructor for UPDATES.
 	 * 
 	 * @throws ExplorationException
 	 *             if no valid allocation targets can be identified for one
@@ -84,30 +91,32 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas
 	 */
 	public AbstractTaskMappingEncoding(DseSpecification dse,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-			AbstractTaskGraphEncoding<?, ?> atgEnc, boolean initialize)
-			throws ExplorationException {
-		super(dse, systemModelAdapter, atgEnc, initialize);
+			PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> atgEnc,
+			boolean initialize) throws ExplorationException {
+		super(dse, systemModelAdapter, partEnc, atgEnc, initialize);
 	}
 
 	/**
 	 * Constructor that generated a new {@link AbstractTaskMappingEncoding} preserving the
 	 * allocations from the given {@code partialEncoding}.
 	 * 
+	 * Constructor for UPDATES.
+	 * 
 	 * @throws ExplorationException
 	 *             if no valid allocation targets can be identified for one
 	 *             {@link IDeployableComponentAdapter}.
 	 */
 	public AbstractTaskMappingEncoding(DseSpecification dse,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-			AbstractTaskGraphEncoding<?, ?> atgEnc, AbstractTaskMappingEncoding partialEncoding)
-			throws ExplorationException {
-		super(dse, systemModelAdapter, atgEnc, partialEncoding);
+			PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> atgEnc,
+			AbstractTaskMappingEncoding partialEncoding) throws ExplorationException {
+		super(dse, systemModelAdapter, partEnc, atgEnc, partialEncoding);
 	}
 
 	/** {@inheritDoc} */
 	@Override
 	public AbstractTaskMappingEntry createEntry(IDeployableComponentAdapter<?> deployableComponent,
-			IExecutionUnitAdapter<?> deploymentTarget) {
+			Partition deploymentTarget) {
 		// Request not needed to construct a {@link FailSilentTaskMappingEncoding}
 		if(deploymentTarget == null) {
 			return null;
@@ -119,8 +128,9 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas
 	/** {@inheritDoc} */
 	@Override
 	protected <S extends TaskMappingEntry> AbstractTaskMappingEntry createEntry(S allocEntry) {
-		return new AbstractTaskMappingEntry(allocEntry.getDeployableComponent(),
-				allocEntry.getTarget());
+		// TODO: Remove the ugly casts.
+		return new AbstractTaskMappingEntry((IDeployableComponentAdapter<?>)allocEntry.getSource(),
+				(Partition)allocEntry.getTarget());
 	}
 
 	/** {@inheritDoc} */
@@ -137,7 +147,7 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas
 
 	/** {@inheritDoc} */
 	@Override
-	public Object clone() {
+	public AbstractTaskMappingEncoding clone() {
 		AbstractTaskMappingEncoding clonedEncoding;
 		try {
 			clonedEncoding = new AbstractTaskMappingEncoding(dse, systemModelAdapter, false);
@@ -150,7 +160,7 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas
 
 		clonedEncoding.allocationMap = copyAllocationMap(copyAssocMap);
 		clonedEncoding.constraintMap = copyConstraintMap(copyAssocMap);
-		clonedEncoding.getDeployedComponents().forEach(c -> c.updateInstatiationData());
+		clonedEncoding.getRequesters().forEach(c -> c.updateInstatiationData());
 		return clonedEncoding;
 	}
 
@@ -164,6 +174,44 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas
 	@SuppressWarnings("unchecked")
 	@Override
 	public Class<? extends ComposablePhenotype<?>> getPTypeToRegister() {
-		return (Class<? extends ComposablePhenotype<?>>)AbstractTaskMappingEncoding.class;
+		return AbstractTaskMappingEncoding.class;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public <GT extends Genotype, CP extends ComposablePhenotype<GT>> CP
+			getSubPhenotype(Class<CP> subPhenotype) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public <GT extends Genotype, CP extends ComposablePhenotype<GT>> void
+			putSubPhenotype(Class<CP> subGenotype, CP curPhenotype) {
+		// TODO Auto-generated method stub
+
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public List<ComposablePhenotype<? extends Genotype>> getSubPhenotypes() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Set<Class<? extends ComposablePhenotype<? extends Genotype>>> keySet() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Iterator<Entry<Class<? extends ComposablePhenotype<? extends Genotype>>, ComposablePhenotype<? extends Genotype>>>
+			iterator() {
+		// TODO Auto-generated method stub
+		return null;
 	}
 }
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEntry.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEntry.java
index a2443fb8c55f21baded28b124b7cd4b36a5e0c09..1cbda8460312a423b0740a7a73c12af511b7088c 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEntry.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEntry.java
@@ -15,9 +15,9 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping;
 
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
-import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
 
 /**
  * {@link TaskMappingEntry} whose referenced {@link IDeployableComponentAdapter} may require
@@ -25,18 +25,19 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
  * 
  * @author diewald
  */
-public class AbstractTaskMappingEntry extends TaskMappingEntry implements Cloneable {
+public class AbstractTaskMappingEntry
+		extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition> implements Cloneable {
 
 	/** Constructs a mapping entry the represents the mapping to a given deployment target. */
 	public AbstractTaskMappingEntry(IDeployableComponentAdapter<?> deployableComponent,
-			IExecutionUnitAdapter<?> deploymentTarget) {
+			Partition deploymentTarget) {
 		super(deployableComponent, deploymentTarget);
 	}
 
 	/** {@inheritDoc} */
 	@Override
 	public AbstractTaskMappingEntry clone() {
-		return new AbstractTaskMappingEntry(getDeployableComponent(), getTarget());
+		return new AbstractTaskMappingEntry(getSource(), getTarget());
 	}
 
 	/** {@inheritDoc} */
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/.ratings
index c81decb01a476760d239fba71bd2c4b0255813cf..c529c99bdd9f0e7f58d07675e69732c47b23fdc9 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/.ratings
@@ -1,6 +1,6 @@
-FailSilentTaskMappingEncoding.java ad1c0eb9db77712128aa47a2ecc8a90721f099a1 RED
-FailSilentTaskMappingEntry.java 435b3a8b9ae5cf180707958aa5df81d74a7d6f2f RED
-FaultDetectionVotingTaskMappingEncoding.java 1f6f2cfc1382d054c022a607e88e9471893a7121 RED
-FaultDetectionVotingTaskMappingEntry.java 6e0e0bb80e3ee225cfb8e50bb212ebbfdd9cbd0f RED
-InstantiatedTaskMappingEncoding.java 88862b6e5960cbd5be316d409621ac22c288ed78 RED
-InstantiatedTaskMappingEntry.java d0d09aaeffabbeede9424e1eaad94dac43e345da RED
+FailSilentTaskMappingEncoding.java a792b00025cd97aaef95e76c79563240df23ae00 RED
+FailSilentTaskMappingEntry.java 61bdca6fdc8f36e3e82755af639fc27ab83b2ec6 RED
+FaultDetectionVotingTaskMappingEncoding.java 8fb17ee77def5375fdc2630b7a28cf2b8fbf55ed RED
+FaultDetectionVotingTaskMappingEntry.java bb0c1531a1173c58f07e67c41de8919fb9ad55f8 RED
+InstantiatedTaskMappingEncoding.java 5b91552c0185414270ad0993dac1aac68834399f RED
+InstantiatedTaskMappingEntry.java 1bb380c1f473bb9d8db1b831037e5185818bd74e RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java
index 63988fe914cbe094540fb67be793ed1a1b09caa3..dcfe74af5ccdd9b02a394e8b438cba3b0583e4a5 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java
@@ -16,15 +16,23 @@
 
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping;
 
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEntry;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
-import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.alg.exception.ExplorationException;
 import org.fortiss.af3.exploration.moea.model.DseSpecification;
+import org.opt4j.core.Genotype;
 
 /**
  * Problem encoding consisting of redundant {@link TaskMappingEntry}s with fail-silent assumption.
@@ -40,8 +48,8 @@ public class FailSilentTaskMappingEncoding
 	 */
 	FailSilentTaskMappingEncoding(DseSpecification dse,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-			AbstractTaskGraphEncoding<?, ?> tgEncoding) {
-		super(dse, systemModelAdapter, tgEncoding);
+			PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding) {
+		super(dse, systemModelAdapter, partEnc, tgEncoding);
 	}
 
 	// TODO: Check whether the two constructors below are actually needed.
@@ -54,9 +62,9 @@ public class FailSilentTaskMappingEncoding
 	 */
 	public FailSilentTaskMappingEncoding(DseSpecification dse,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-			AbstractTaskGraphEncoding<?, ?> tgEncoding, boolean initialize)
-			throws ExplorationException {
-		super(dse, systemModelAdapter, tgEncoding, initialize);
+			PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding,
+			boolean initialize) throws ExplorationException {
+		super(dse, systemModelAdapter, partEnc, tgEncoding, initialize);
 	}
 
 	/**
@@ -78,16 +86,15 @@ public class FailSilentTaskMappingEncoding
 	 */
 	public FailSilentTaskMappingEncoding(DseSpecification dse,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-			AbstractTaskGraphEncoding<?, ?> tgEncoding,
+			PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding,
 			AbstractTaskMappingEncoding abstractEncoding) {
-		super(dse, systemModelAdapter, tgEncoding, abstractEncoding);
+		super(dse, systemModelAdapter, partEnc, tgEncoding, abstractEncoding);
 	}
 
 	/** {@inheritDoc} */
 	@Override
 	public FailSilentTaskMappingEntry createEntry(
-			IDeployableComponentAdapter<?> deployableComponent,
-			IExecutionUnitAdapter<?> deploymentTarget) {
+			IDeployableComponentAdapter<?> deployableComponent, Partition deploymentTarget) {
 		// Request not needed to construct a {@link FailSilentTaskMappingEncoding}
 		if(deploymentTarget == null) {
 			return null;
@@ -116,7 +123,7 @@ public class FailSilentTaskMappingEncoding
 
 	/** {@inheritDoc} */
 	@Override
-	public Object clone() {
+	public FailSilentTaskMappingEncoding clone() {
 		// TODO: Here, we should maintain the mapping.
 		FailSilentTaskMappingEncoding clonedEncoding;
 		try {
@@ -127,4 +134,42 @@ public class FailSilentTaskMappingEncoding
 		}
 		return clonedEncoding;
 	}
+
+	/** {@inheritDoc} */
+	@Override
+	public <GT extends Genotype, CP extends ComposablePhenotype<GT>> CP
+			getSubPhenotype(Class<CP> subPhenotype) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public <GT extends Genotype, CP extends ComposablePhenotype<GT>> void
+			putSubPhenotype(Class<CP> subGenotype, CP curPhenotype) {
+		// TODO Auto-generated method stub
+
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public List<ComposablePhenotype<? extends Genotype>> getSubPhenotypes() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Set<Class<? extends ComposablePhenotype<? extends Genotype>>> keySet() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Iterator<Entry<Class<? extends ComposablePhenotype<? extends Genotype>>, ComposablePhenotype<? extends Genotype>>>
+			iterator() {
+		// TODO Auto-generated method stub
+		return null;
+	}
 }
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEntry.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEntry.java
index f8f68a0c8789187aef12cb378fcc5e205826fa71..0244614dfe9f3b82398a969ee9c8b804620bfe7e 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEntry.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEntry.java
@@ -15,11 +15,11 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping;
 
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
-import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
 
 /**
  * {@link TaskMappingEntry} used for encoding redundant {@link FailSilentTaskMappingEncoding}s (with
@@ -31,7 +31,7 @@ public class FailSilentTaskMappingEntry extends InstantiatedTaskMappingEntry imp
 
 	/** Constructs a mapping entry the represents the mapping to a given deployment target. */
 	FailSilentTaskMappingEntry(IDeployableComponentAdapter<?> deployableComponent,
-			IExecutionUnitAdapter<?> deploymentTarget) {
+			Partition deploymentTarget) {
 		super(deployableComponent, deploymentTarget);
 	}
 
@@ -47,7 +47,7 @@ public class FailSilentTaskMappingEntry extends InstantiatedTaskMappingEntry imp
 	/** {@inheritDoc} */
 	@Override
 	public FailSilentTaskMappingEntry clone() {
-		return new FailSilentTaskMappingEntry(getDeployableComponent(), getTarget());
+		return new FailSilentTaskMappingEntry(getSource(), getTarget());
 	}
 
 	/** {@inheritDoc} */
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java
index 628291ac421ae5382ef1b18e2cd4dd207379c193..a6f89aae97ccc08a7136035a664fd239af80d100 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java
@@ -15,16 +15,24 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping;
 
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEntry;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
-import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.alg.exception.ExplorationException;
 import org.fortiss.af3.exploration.moea.model.DseSpecification;
+import org.opt4j.core.Genotype;
 
 /**
  * Problem encoding of redundant {@link TaskMappingEncoding}s with fault detection and voting.
@@ -40,8 +48,8 @@ public class FaultDetectionVotingTaskMappingEncoding extends
 	 */
 	FaultDetectionVotingTaskMappingEncoding(DseSpecification dse,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-			AbstractTaskGraphEncoding<?, ?> tgEncoding) {
-		super(dse, systemModelAdapter, tgEncoding);
+			PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding) {
+		super(dse, systemModelAdapter, partEnc, tgEncoding);
 	}
 
 	// TODO: Check whether the two constructors below are actually needed.
@@ -54,9 +62,9 @@ public class FaultDetectionVotingTaskMappingEncoding extends
 	 */
 	public FaultDetectionVotingTaskMappingEncoding(DseSpecification dse,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-			AbstractTaskGraphEncoding<?, ?> tgEncoding, boolean initialize)
-			throws ExplorationException {
-		super(dse, systemModelAdapter, tgEncoding, initialize);
+			PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding,
+			boolean initialize) throws ExplorationException {
+		super(dse, systemModelAdapter, partEnc, tgEncoding, initialize);
 		assert (false) : "Never here any more.";
 	}
 
@@ -80,16 +88,15 @@ public class FaultDetectionVotingTaskMappingEncoding extends
 	 */
 	public FaultDetectionVotingTaskMappingEncoding(DseSpecification dse,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-			AbstractTaskGraphEncoding<?, ?> tgEncoding,
+			PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding,
 			AbstractTaskMappingEncoding abstractEncoding) {
-		super(dse, systemModelAdapter, tgEncoding, abstractEncoding);
+		super(dse, systemModelAdapter, partEnc, tgEncoding, abstractEncoding);
 	}
 
 	/** {@inheritDoc} */
 	@Override
 	public FaultDetectionVotingTaskMappingEntry createEntry(
-			IDeployableComponentAdapter<?> deployableComponent,
-			IExecutionUnitAdapter<?> deploymentTarget) {
+			IDeployableComponentAdapter<?> deployableComponent, Partition deploymentTarget) {
 		if(deployableComponent == null || deploymentTarget == null) {
 			return null;
 		}
@@ -123,7 +130,7 @@ public class FaultDetectionVotingTaskMappingEncoding extends
 	 * {@inheritDoc}
 	 */
 	@Override
-	public Object clone() {
+	public FaultDetectionVotingTaskMappingEncoding clone() {
 		// TODO: Here, we should maintain the mapping.
 		FaultDetectionVotingTaskMappingEncoding clonedEncoding = null;
 		try {
@@ -135,4 +142,42 @@ public class FaultDetectionVotingTaskMappingEncoding extends
 		}
 		return clonedEncoding;
 	}
+
+	/** {@inheritDoc} */
+	@Override
+	public <GT extends Genotype, CP extends ComposablePhenotype<GT>> CP
+			getSubPhenotype(Class<CP> subPhenotype) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public <GT extends Genotype, CP extends ComposablePhenotype<GT>> void
+			putSubPhenotype(Class<CP> subGenotype, CP curPhenotype) {
+		// TODO Auto-generated method stub
+
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public List<ComposablePhenotype<? extends Genotype>> getSubPhenotypes() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Set<Class<? extends ComposablePhenotype<? extends Genotype>>> keySet() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Iterator<Entry<Class<? extends ComposablePhenotype<? extends Genotype>>, ComposablePhenotype<? extends Genotype>>>
+			iterator() {
+		// TODO Auto-generated method stub
+		return null;
+	}
 }
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEntry.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEntry.java
index 4eba3d336081d18c0b62c1867a4e6c31b29b45d7..1c12e844ed7304450f704e92e0d97815b725c579 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEntry.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEntry.java
@@ -15,11 +15,11 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping;
 
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
-import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
 
 /**
  * {@link TaskMappingEntry} used for encoding redundant
@@ -27,8 +27,8 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
  * 
  * @author barner
  */
-public class FaultDetectionVotingTaskMappingEntry extends InstantiatedTaskMappingEntry implements
-		Cloneable {
+public class FaultDetectionVotingTaskMappingEntry extends InstantiatedTaskMappingEntry
+		implements Cloneable {
 	/** Fault detector ID */
 	// TODO: Investigate use of IDs in reliability analysis.
 	private int faultDetectorID;
@@ -38,7 +38,7 @@ public class FaultDetectionVotingTaskMappingEntry extends InstantiatedTaskMappin
 	 * specifies the ID of the used fault detector
 	 */
 	public FaultDetectionVotingTaskMappingEntry(IDeployableComponentAdapter<?> deployableComponent,
-			IExecutionUnitAdapter<?> target, int i) {
+			Partition target, int i) {
 		super(deployableComponent, target);
 		faultDetectorID = i;
 	}
@@ -63,8 +63,7 @@ public class FaultDetectionVotingTaskMappingEntry extends InstantiatedTaskMappin
 	/** {@inheritDoc} */
 	@Override
 	public FaultDetectionVotingTaskMappingEntry clone() {
-		return new FaultDetectionVotingTaskMappingEntry(getDeployableComponent(), getTarget(),
-				faultDetectorID);
+		return new FaultDetectionVotingTaskMappingEntry(getSource(), getTarget(), faultDetectorID);
 	}
 
 	/** {@inheritDoc} */
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java
index 1158d1f3002e38c24ea37623d07fa246d7647186..d89ea96309f76aefaa9bada3421fe78360e215d8 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java
@@ -17,6 +17,7 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.i
 
 import java.util.Collection;
 
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
@@ -39,7 +40,7 @@ import org.opt4j.core.Genotype;
  * @author diewald
  */
 public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTaskMappingEntry>
-		extends TaskMappingEncoding<T> {
+		extends TaskMappingEncoding<IDeployableComponentAdapter<?>, T> {
 
 	/**
 	 * Constructor that is initialized with a reference to the DSE specification and the input
@@ -47,8 +48,8 @@ public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTask
 	 */
 	protected InstantiatedTaskMappingEncoding(DseSpecification dse,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-			AbstractTaskGraphEncoding<?, ?> tgEncoding) {
-		super(dse, systemModelAdapter, tgEncoding);
+			PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding) {
+		super(dse, systemModelAdapter, partEnc, tgEncoding);
 	}
 
 	// TODO: Check whether the two constructors below are actually needed.
@@ -61,9 +62,9 @@ public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTask
 	 */
 	public InstantiatedTaskMappingEncoding(DseSpecification dse,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-			AbstractTaskGraphEncoding<?, ?> tgEncoding, boolean initialize)
-			throws ExplorationException {
-		super(dse, systemModelAdapter, tgEncoding, initialize);
+			PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding,
+			boolean initialize) throws ExplorationException {
+		super(dse, systemModelAdapter, partEnc, tgEncoding, initialize);
 	}
 
 	/**
@@ -85,9 +86,9 @@ public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTask
 	 */
 	public InstantiatedTaskMappingEncoding(DseSpecification dse,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-			AbstractTaskGraphEncoding<?, ?> tgEncoding,
+			PartitionMappingEncoding partEnc, AbstractTaskGraphEncoding<?, ?> tgEncoding,
 			AbstractTaskMappingEncoding abstractEncoding) {
-		super(dse, systemModelAdapter, tgEncoding);
+		super(dse, systemModelAdapter, partEnc, tgEncoding);
 		this.constraintMap = abstractEncoding.copyConstraintMap(null);
 		instantiateAbstractEntries(abstractEncoding);
 	}
@@ -127,13 +128,6 @@ public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTask
 		return super.getDisAllowedAllocations(deployableComponent);
 	}
 
-	/** {@inheritDoc} */
-	@Override
-	public Object clone() {
-		throw new UnsupportedOperationException(
-				"The clone operation MUST be implemented in the concrete classes of the InstantiatedTaskMappingEncoding. Otherwise, the algorithm does not operate as expected!");
-	}
-
 	/** {@inheritDoc} */
 	@Override
 	public Class<? extends ComposableGenotype> getGTypeToRegister() {
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEntry.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEntry.java
index 2880eef93ce40a9b29b9324459048812f26a5978..66230a4d6ea6fe48eb9ca5f291358ac10ee0f104 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEntry.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEntry.java
@@ -18,11 +18,11 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.i
 import java.util.ArrayList;
 import java.util.Collection;
 
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
-import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.random.RandomExploration;
 
 /**
@@ -31,11 +31,12 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.random.RandomExploration;
  * 
  * @author diewald
  */
-public abstract class InstantiatedTaskMappingEntry extends TaskMappingEntry implements Cloneable {
+public abstract class InstantiatedTaskMappingEntry
+		extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition> implements Cloneable {
 
 	/** Constructs a mapping entry the represents the mapping to a given deployment target. */
 	public InstantiatedTaskMappingEntry(IDeployableComponentAdapter<?> deployableComponent,
-			IExecutionUnitAdapter<?> deploymentTarget) {
+			Partition deploymentTarget) {
 		super(deployableComponent, deploymentTarget);
 	}
 
@@ -47,13 +48,13 @@ public abstract class InstantiatedTaskMappingEntry extends TaskMappingEntry impl
 	 * {@link IDeployableComponentAdapter}.
 	 */
 	public InstantiatedTaskMappingEntry(AbstractTaskMappingEntry abstractEntry) {
-		this(abstractEntry.getDeployableComponent(), abstractEntry.getTarget());
+		this(abstractEntry.getSource(), abstractEntry.getTarget());
 		addAssociatedElement(abstractEntry);
 		abstractEntry.addAssociatedElement(this);
-		if(deploymentSource.isInstantiationRequired()) {
-			IDeployableComponentAdapter<?> abstractComponent = deploymentSource;
-			deploymentSource = pickRandomReplacementComponent(deploymentSource);
-			deploymentSource.setReplacedComponent(abstractComponent);
+		if(source.isInstantiationRequired()) {
+			IDeployableComponentAdapter<?> abstractComponent = source;
+			source = pickRandomReplacementComponent(source);
+			source.setReplacedComponent(abstractComponent);
 		}
 	}
 
@@ -67,9 +68,9 @@ public abstract class InstantiatedTaskMappingEntry extends TaskMappingEntry impl
 	 * {@code null} is returned if the given {@link IDeployableComponentAdapter} does not require
 	 * instantiation or no "replacement components were defined.
 	 */
-	public IDeployableComponentAdapter<?> pickRandomReplacementComponent(
-			IDeployableComponentAdapter<?> abstractComponent) {
-		if(!deploymentSource.isInstantiationRequired()) {
+	public IDeployableComponentAdapter<?>
+			pickRandomReplacementComponent(IDeployableComponentAdapter<?> abstractComponent) {
+		if(!source.isInstantiationRequired()) {
 			return null;
 		}
 
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/.ratings
index 470021b4abddf0e7e065902ad154eb2b7957a93e..a3edbd75730efdfb5b1005aa9bcd260353d8c693 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/.ratings
@@ -1,4 +1,4 @@
-ComposableCreator.java cd9c6cb7087d42e8b24ad53601e683f0d557d56f RED
-ComposableCreatorBase.java 5b3e9f56d5be8108c461df516cbe55a0b332c42c RED
+ComposableCreator.java 14cb174847cd3a0882bc4fd17cf8cbe18b2b7f36 RED
+ComposableCreatorBase.java 0364eb1b0251e1548111be3d24207f21e92d0ea6 RED
 CompositeCreator.java 65ab9f283191b081e40e8587431fd0a95f1daca6 RED
-CompositeCreatorBase.java 9745357269c56c95fed0b92b8eb702f0834fe3fa RED
+CompositeCreatorBase.java ce0a74a4b8acf68069534443468f4995a091139e RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/ComposableCreator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/ComposableCreator.java
index 9a3919f4f00f78fd7335859ef5db8d5f02239821..5b5a4e83dad89aae34cb00fc89904c8bd955e101 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/ComposableCreator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/ComposableCreator.java
@@ -116,5 +116,5 @@ public interface ComposableCreator<G extends ComposableGenotype> {
 			G genotype, FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException;
 
 	/** Returns the type of the created {@link IExplorationEncoding} / {@link Genotype}. */
-	Class<? extends IExplorationEncoding> getCreatedEncoding();
+	Class<? extends IExplorationEncoding> getCreatedEncodingType();
 }
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/ComposableCreatorBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/ComposableCreatorBase.java
index a8c656768facb11a1aa86ff328c6ec2a18eb6be7..f9c8b7b5cbb1bd827c44a2da87655cf768b334d2 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/ComposableCreatorBase.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/ComposableCreatorBase.java
@@ -33,6 +33,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.decode.ConstraintGenerationDecoder;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
 import org.fortiss.af3.exploration.alg.util.ExplorationAlgDebugUtils;
@@ -45,8 +46,8 @@ import org.opt4j.core.problem.Decoder;
  * 
  * @author diewald
  */
-public abstract class ComposableCreatorBase<G extends ComposableGenotype> implements
-		ComposableCreator<G> {
+public abstract class ComposableCreatorBase<G extends ComposableGenotype>
+		implements ComposableCreator<G> {
 
 	/** References the input models */
 	protected SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter;
@@ -113,13 +114,13 @@ public abstract class ComposableCreatorBase<G extends ComposableGenotype> implem
 		intermediatePhenos.addAll(decodedPhenotypes);
 
 		@SuppressWarnings("unchecked") Optional<? extends ComposableDecoder<G, P>> idDecoder =
-				(Optional<? extends ComposableDecoder<G, P>>)subDecoders
-						.stream()
-						.filter(d -> Arrays.asList(genotype.getClass()).containsAll(
-								d.getRequiredTypes())).findAny();
+				(Optional<? extends ComposableDecoder<G, P>>)subDecoders.stream().filter(
+						d -> Arrays.asList(genotype.getClass()).containsAll(d.getRequiredTypes()))
+						.findAny();
 
 		for(ComposableDecoder<G, ? extends ComposablePhenotype<G>> decoder : subDecoders) {
-			if(!isHybridPhenoRequiredAndCreated(createdGenotypeTypeSet, decoder.getRequiredTypes()) ||
+			if(!isHybridPhenoRequiredAndCreated(createdGenotypeTypeSet,
+					decoder.getRequiredTypes()) ||
 					Genotype.class.isAssignableFrom(decoder.getOutputType())) {
 				continue;
 			}
@@ -144,8 +145,8 @@ public abstract class ComposableCreatorBase<G extends ComposableGenotype> implem
 
 				if(decPhenotype != null) {
 					if(decPhenotype instanceof TaskMappingEncoding &&
-							!ExplorationAlgDebugUtils
-									.checkTaskMappingForSFConsistency((TaskMappingEncoding<?>)decPhenotype)) {
+							!ExplorationAlgDebugUtils.checkTaskMappingForSFConsistency(
+									(TaskMappingEncoding<IDeployableComponentAdapter<?>, ?>)decPhenotype)) {
 						// TODO: Remove this debug code. Is an Exception required instead?
 						System.out.println("Error.");
 					}
@@ -175,9 +176,7 @@ public abstract class ComposableCreatorBase<G extends ComposableGenotype> implem
 
 	/** {@inheritDoc} */
 	@Override
-	public
-			<P extends ComposablePhenotype<G>>
-			FlatPhenotypeMap<Phenotype>
+	public <P extends ComposablePhenotype<G>> FlatPhenotypeMap<Phenotype>
 			identityDecodeCreatedGenotype(G genotype, FlatPhenotypeMap<Phenotype> decodedPhenotypes)
 					throws DecodingException {
 		FlatPhenotypeMap<Phenotype> phenotypes =
@@ -189,10 +188,9 @@ public abstract class ComposableCreatorBase<G extends ComposableGenotype> implem
 		// If an identity decoder is present, execute it before any other decoder to ensure all
 		// required data is available to the decoders.
 		@SuppressWarnings("unchecked") Optional<? extends ComposableDecoder<G, P>> idDecoder =
-				(Optional<? extends ComposableDecoder<G, P>>)subDecoders
-						.stream()
-						.filter(d -> Arrays.asList(genotype.getClass()).containsAll(
-								d.getRequiredTypes())).findAny();
+				(Optional<? extends ComposableDecoder<G, P>>)subDecoders.stream().filter(
+						d -> Arrays.asList(genotype.getClass()).containsAll(d.getRequiredTypes()))
+						.findAny();
 		if(idDecoder.isPresent()) {
 			P decPhenotype = idDecoder.get().decodeComposable(genotype, intermediatePhenos);
 			if(decPhenotype == null) {
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/CompositeCreatorBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/CompositeCreatorBase.java
index 7fd8c53d3ad44c5e20b52040cb03c60a96fc13a7..afe74ae692324b190a3db4bd0a5efc6a2f4cdb0e 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/CompositeCreatorBase.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/create/CompositeCreatorBase.java
@@ -113,7 +113,7 @@ public abstract class CompositeCreatorBase<G extends CompositeGenotype<Class<? e
 				@SuppressWarnings("unchecked") ComposableCreator<N> curCastedCreator =
 						(ComposableCreator<N>)curCreator;
 				@SuppressWarnings("unchecked") Class<P> createdType =
-						(Class<P>)curCreator.getCreatedEncoding();
+						(Class<P>)curCreator.getCreatedEncodingType();
 				N curGenotype = subGenotype;
 				if(!subGenotypeClass.equals(createdType)) {
 					@SuppressWarnings("unchecked") N castedCurGenotype =
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/.ratings
index f1c3df36900c49a2c88cee40d96b52969b591826..f66a02fd4ada571cf38f2fbc510c312e3720a7cf 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/.ratings
@@ -1,2 +1,2 @@
-DecoderDependencyGraph.java 6fb00c0c57d1da052b5193f029408c561fc1e2a6 RED
+DecoderDependencyGraph.java 9d2cb0db817f2372d675caba7e2e3128ded00b45 RED
 DecoderEdge.java 364767c6d4b15b02830e1c58a47f28f6e3bf3fcb RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/DecoderDependencyGraph.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/DecoderDependencyGraph.java
index aed571b32bde74eba331e43d12ca24853dd68fd1..bcfe90be039864e74690a21b9d2d6a4dea872d84 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/DecoderDependencyGraph.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/graph/DecoderDependencyGraph.java
@@ -64,7 +64,7 @@ public class DecoderDependencyGraph
 				if(!dependencyDagGraph
 						.containsVertex((Class<? extends IExplorationEncoding>)reqEnc) &&
 						!registeredCreators.stream().anyMatch(
-								c -> c.getCreatedEncoding().equals(reqEnc)) &&
+								c -> c.getCreatedEncodingType().equals(reqEnc)) &&
 						!sysModelEncodings.contains(reqEnc)) {
 					throw new MissingDependencyException(dec,
 							(Class<? extends IExplorationEncoding>)reqEnc, "");
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/partitionmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/partitionmapping/.ratings
new file mode 100644
index 0000000000000000000000000000000000000000..de77162afd62be1bd2ae76dda7e228d9bb0a19eb
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/partitionmapping/.ratings
@@ -0,0 +1,2 @@
+CopyPartitionMapping.java d70d75d2c4ad2e31461d3735ccb12087aa9eff10 RED
+CopyPartitionMappingModule.java 679212216ca3f9ae3fbeeaeeeeb5813dc762952d RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/partitionmapping/CopyPartitionMapping.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/partitionmapping/CopyPartitionMapping.java
new file mode 100644
index 0000000000000000000000000000000000000000..2a5e12e6093bcc4e25ad8c3a32a7abd2ce72bc40
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/partitionmapping/CopyPartitionMapping.java
@@ -0,0 +1,33 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2014 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.operator.copy.partitionmapping;
+
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding;
+import org.opt4j.operators.copy.Copy;
+
+/**
+ * Operator that creates copies of a {@link TaskMappingEncoding}s.
+ * 
+ * @author huang
+ */
+public class CopyPartitionMapping implements Copy<PartitionMappingEncoding> {
+	/** {@inheritDoc} */
+	@Override
+	public PartitionMappingEncoding copy(PartitionMappingEncoding other) {
+		return ((PartitionMappingEncoding)other).clone();
+	}
+}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/partitionmapping/CopyPartitionMappingModule.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/partitionmapping/CopyPartitionMappingModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..3e2539c219d0ec618ee4b155bbcb910e48520672
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/partitionmapping/CopyPartitionMappingModule.java
@@ -0,0 +1,32 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2014 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.operator.copy.partitionmapping;
+
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding;
+import org.opt4j.operators.copy.CopyModule;
+
+/**
+ * Opt4J module for the general copy operator of {@link TaskMappingEncoding}s.
+ * 
+ * @author huang
+ */
+public class CopyPartitionMappingModule extends CopyModule {
+	/** {@inheritDoc} */
+	@Override
+	protected void config() {
+		addOperator(CopyPartitionMapping.class);
+	}
+}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/taskmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/taskmapping/.ratings
index 3bdeb5b8664327cc0b1af51385535bd9ee3374d9..5ed817869cd8b641af62643740f1aa8d71f60754 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/taskmapping/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/taskmapping/.ratings
@@ -1,3 +1,3 @@
 CopyAbstractTaskMapping.java edbd8e4cc926cf2e055e024011ce67c009fe0d8b RED
-CopyInstanceTaskMapping.java 2a29909a2c3d4130a9b5ed7dabc23804267effaf RED
+CopyInstanceTaskMapping.java 902538ef9927500d5e16ff8b50364560bed10a6b RED
 CopyTaskMappingModule.java 4904f2062265901c4a9d070449a06d40f6c054a4 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/taskmapping/CopyInstanceTaskMapping.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/taskmapping/CopyInstanceTaskMapping.java
index 70370a580f690be95ed7f4329bffcb3b2ab99087..9a7cf966b8b63ff2f82131ac803ce604564722b2 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/taskmapping/CopyInstanceTaskMapping.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/copy/taskmapping/CopyInstanceTaskMapping.java
@@ -26,8 +26,9 @@ import org.opt4j.operators.copy.Copy;
  */
 public class CopyInstanceTaskMapping implements Copy<InstantiatedTaskMappingEncoding<?>> {
 	/** {@inheritDoc} */
+	@SuppressWarnings("rawtypes")
 	@Override
 	public InstantiatedTaskMappingEncoding<?> copy(InstantiatedTaskMappingEncoding<?> other) {
-		return (InstantiatedTaskMappingEncoding<?>)other.clone();
+		return (InstantiatedTaskMappingEncoding)other.clone();
 	}
 }
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/.ratings
index 548fa1707d186ff5aa038a632eda35d7780fc576..dbbda0b305935adb5022caa17ddb9d4365f7ae50 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/.ratings
@@ -1,8 +1,8 @@
 CrossoverAbstractTaskMappingModule.java db35eba8d31ba9c7054174d97990a70fdef2e8ab RED
-CrossoverAllocationBase.java a50c7c5d81ae8ce4f548ac022a8222e1fb89c0d6 RED
+CrossoverAllocationBase.java f4253fb477d11ef8071ded1084b3ba4a8536a71d RED
 CrossoverOperatorModuleBase.java 03f237eba55f15043082bb1f5cc47f052cb24d33 RED
-CrossoverRandManyAllocation.java 0b6dca5762d61d9beb4d51874a54f4d6a363318a RED
-CrossoverSingleAllocation.java ab5f486daba37ba00da19756806ab6e257982546 RED
+CrossoverRandManyAllocation.java b24cef44f25dfed6429e933281b8da3be681580c RED
+CrossoverSingleAllocation.java 1f4607e9a03f9627b56d4a04b7dcde0c37bf460f RED
 NopCrossover.java 70500c9db651250298c97e261e4f8a0d8b6941e3 RED
 NopCrossoverInstantiatedTaskMappingModule.java 95156489b862633b428a87df2ae51aa304c7f6f1 RED
 NopCrossoverSFArchModule.java 65379d3a5e26993de3cb72856e0e66b645e8b064 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/CrossoverAllocationBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/CrossoverAllocationBase.java
index 97f9450507b099398ae0e8850fa8ad953bfe9faa..3aeb5e2b704b6bb53758ff77fe19b2dd36788985 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/CrossoverAllocationBase.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/CrossoverAllocationBase.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.comm.constraint.InternalIsolatedCommunicationSet;
+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.sysmodel.arch.IDeployableComponentAdapter;
@@ -41,7 +42,7 @@ import com.google.common.collect.HashBiMap;
  * @author huang
  * @author diewald
  */
-public abstract class CrossoverAllocationBase<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>>
+public abstract class CrossoverAllocationBase<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>>
 		implements Crossover<T> {
 
 	/** Reference to the {@link SystemModelAdapter} which handles the input models. */
@@ -80,12 +81,10 @@ public abstract class CrossoverAllocationBase<S extends TaskMappingEntry, T exte
 		int sizeDiff = max(size1, size2) - min(size1, size2);
 		int offset = rand.nextInt(sizeDiff + 1);
 		for(int i = 0; i < min(size1, size2); i++) {
-			S elem1 =
-					size1 > size2 ? newAssignedResources1.get(i + offset) : newAssignedResources1
-							.get(i);
-			S elem2 =
-					size2 > size1 ? newAssignedResources2.get(i + offset) : newAssignedResources2
-							.get(i);
+			S elem1 = size1 > size2 ? newAssignedResources1.get(i + offset)
+					: newAssignedResources1.get(i);
+			S elem2 = size2 > size1 ? newAssignedResources2.get(i + offset)
+					: newAssignedResources2.get(i);
 			swapMap.put(elem1, elem2);
 			if(size1 > size2) {
 				newAssignedResources1.set(i + offset, elem2);
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/CrossoverRandManyAllocation.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/CrossoverRandManyAllocation.java
index 6b4704ac9773d0c1d8f7b8286316621064f10630..e5dd97810201b81a0acf7477fea33b23bec60e44 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/CrossoverRandManyAllocation.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/CrossoverRandManyAllocation.java
@@ -15,6 +15,7 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.crossover;
 
+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.sysmodel.arch.IDeployableComponentAdapter;
@@ -30,7 +31,7 @@ import org.opt4j.operators.crossover.Pair;
  * @author huang
  * @author diewald
  */
-public class CrossoverRandManyAllocation<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>>
+public class CrossoverRandManyAllocation<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>>
 		extends CrossoverAllocationBase<S, T> {
 
 	/** Constructor that allows to set the cross-over rate */
@@ -45,7 +46,7 @@ public class CrossoverRandManyAllocation<S extends TaskMappingEntry, T extends T
 		@SuppressWarnings("unchecked") T newEncoding1 = (T)encoding1.clone();
 		@SuppressWarnings("unchecked") T newEncoding2 = (T)encoding2.clone();
 
-		for(IDeployableComponentAdapter<?> deployableComponent : encoding1.getDeployedComponents()) {
+		for(IDeployableComponentAdapter<?> deployableComponent : encoding1.getRequesters()) {
 			if(rand.nextDouble() < rate) {
 				crossoverAllocation(deployableComponent, newEncoding1, newEncoding2);
 			}
@@ -53,9 +54,9 @@ public class CrossoverRandManyAllocation<S extends TaskMappingEntry, T extends T
 
 		// Check whether the a modification happened, if not enforce one.
 		if(newEncoding1 == encoding1 || newEncoding1 == encoding2) {
-			int randomIdx = encoding1.getDeployedComponents().toArray().length - 1;
+			int randomIdx = encoding1.getRequesters().toArray().length - 1;
 			IDeployableComponentAdapter<?> randomlySelectedComponent =
-					(IDeployableComponentAdapter<?>)encoding1.getDeployedComponents().toArray()[randomIdx];
+					(IDeployableComponentAdapter<?>)encoding1.getRequesters().toArray()[randomIdx];
 			crossoverAllocation(randomlySelectedComponent, newEncoding1, newEncoding2);
 		}
 
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/CrossoverSingleAllocation.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/CrossoverSingleAllocation.java
index fdeba39511bda1c8148e4db53d3d61d836d35bca..6def3c5e6dbde476501a42d8bb145f1bdd122054 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/CrossoverSingleAllocation.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/crossover/CrossoverSingleAllocation.java
@@ -15,6 +15,7 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.crossover;
 
+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.sysmodel.arch.IDeployableComponentAdapter;
@@ -29,7 +30,7 @@ import org.opt4j.operators.crossover.Pair;
  * 
  * @author diewald
  */
-public class CrossoverSingleAllocation<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>>
+public class CrossoverSingleAllocation<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>>
 		extends CrossoverAllocationBase<S, T> {
 
 	/** Constructor that allows to set the cross-over rate */
@@ -44,10 +45,10 @@ public class CrossoverSingleAllocation<S extends TaskMappingEntry, T extends Tas
 		@SuppressWarnings("unchecked") T newEncoding1 = (T)encoding1.clone();
 		@SuppressWarnings("unchecked") T newEncoding2 = (T)encoding2.clone();
 
-		int deplCompSize = encoding1.getDeployedComponents().toArray().length;
+		int deplCompSize = encoding1.getRequesters().toArray().length;
 		int randomIdx = rand.nextInt(deplCompSize - 1);
 		IDeployableComponentAdapter<?> randomlySelectedComponent =
-				(IDeployableComponentAdapter<?>)encoding1.getDeployedComponents().toArray()[randomIdx];
+				(IDeployableComponentAdapter<?>)encoding1.getRequesters().toArray()[randomIdx];
 
 		// TODO: Improve Crossover operator to respect allocation constraints.
 		// boolean didCrossover = false;
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/.ratings
new file mode 100644
index 0000000000000000000000000000000000000000..19f115e01bff1ba36421ed45ccc9b6602cac8447
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/.ratings
@@ -0,0 +1,4 @@
+MutatePartitionBase.java 739af618e683706a4550a162813a987219176a11 RED
+MutatePartitionDecrement.java 741a0280e5e65d5360dba834e926cc879b9bd94a RED
+MutatePartitionIncrement.java e550d00c767f2350b7b6f7d664d3b7766e71059c RED
+PartitionMappingModule.java 379d07cd5495d4ddc657269a85962d95fde1287c RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/MutatePartitionBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/MutatePartitionBase.java
new file mode 100644
index 0000000000000000000000000000000000000000..e983d69f5a64ac1d0eacb9d9d8d13ba332fa8aaa
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/MutatePartitionBase.java
@@ -0,0 +1,56 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2017 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.operator.mutate.partitionmapping;
+
+import java.util.Collection;
+import java.util.function.Consumer;
+import java.util.function.Function;
+
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.MutateBase;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
+
+/**
+ * Base class for the mutation functions operating on the Partition to ExecutionUnit mapping, e.g.
+ * cores.
+ * 
+ * @author diewald
+ */
+public abstract class MutatePartitionBase extends MutateBase<PartitionMappingEncoding> {
+	/** Elements to which other elements may be allocated. */
+	private Collection<IResourceAdapter<?>> allocationTargets;
+
+	/** Defines the rate at which mutations shall happen: Typically 1 / size of the gene. */
+	private double rate;
+
+	/** Constructor. */
+	public MutatePartitionBase(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter) {
+		super(systemModelAdapter);
+		// TODO: The statement below hard-wires the module.
+		this.allocationTargets.addAll(systemModelAdapter.getDeploymentTargets());
+		this.rate = 1 / allocationTargets.size();
+	}
+
+	/** Applies the given mutation {@link Function} to the allocation targets. */
+	protected <R> void mutate(Consumer<IResourceAdapter<?>> manipulationFct) {
+		for(IResourceAdapter<?> resource : allocationTargets) {
+			if(rand.nextDouble() < rate) {
+				manipulationFct.accept(resource);
+			}
+		}
+	}
+}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/MutatePartitionDecrement.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/MutatePartitionDecrement.java
new file mode 100644
index 0000000000000000000000000000000000000000..a22acd63fb772a2454c285f1200a7491789fd6f5
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/MutatePartitionDecrement.java
@@ -0,0 +1,46 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2017 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.operator.mutate.partitionmapping;
+
+import java.util.function.Consumer;
+import java.util.stream.Stream;
+
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
+
+/**
+ * Mutation operator that randomly selects resources from which to remove a random partition. The
+ * rate is designed such that one resource is selected in average.
+ * 
+ * @author diewald
+ */
+public class MutatePartitionDecrement extends MutatePartitionBase {
+
+	/** Constructor. */
+	public MutatePartitionDecrement(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter) {
+		super(systemModelAdapter);
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public void mutate(PartitionMappingEncoding genotype, double p) {
+		Consumer<IResourceAdapter<?>> remove = (res) -> genotype.removeRandomPartition(res);
+		Stream<IResourceAdapter<?>> resStream = genotype.getResources().stream();
+		resStream.filter((res) -> rand.nextDouble() < p).forEach(remove);
+	}
+
+}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/MutatePartitionIncrement.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/MutatePartitionIncrement.java
new file mode 100644
index 0000000000000000000000000000000000000000..e1625d6f521f03547b4e13d972b8708547446010
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/MutatePartitionIncrement.java
@@ -0,0 +1,46 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2017 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.operator.mutate.partitionmapping;
+
+import java.util.function.Consumer;
+import java.util.stream.Stream;
+
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
+
+/**
+ * Mutation operator that randomly selects resources for which to create a partition. The
+ * rate is designed such that one resource is selected in average.
+ * 
+ * @author diewald
+ */
+public class MutatePartitionIncrement extends MutatePartitionBase {
+
+	/** Constructor. */
+	public MutatePartitionIncrement(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter) {
+		super(systemModelAdapter);
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public void mutate(PartitionMappingEncoding genotype, double p) {
+		Consumer<IResourceAdapter<?>> create = (res) -> genotype.createPartition(res);
+		Stream<IResourceAdapter<?>> resStream = genotype.getResources().stream();
+		resStream.filter((res) -> rand.nextDouble() < p).forEach(create);
+	}
+
+}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/PartitionMappingModule.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/PartitionMappingModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..186360b7d693cd3097558391f3f67128be9af278
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/partitionmapping/PartitionMappingModule.java
@@ -0,0 +1,45 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2017 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.operator.mutate.partitionmapping;
+
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.MutateOperatorModuleBase;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
+
+/**
+ * 
+ * @author diewald
+ */
+public class PartitionMappingModule extends MutateOperatorModuleBase {
+	/** Representation of input system */
+	private SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter;
+
+	/** Constructor where the input system model has to be specified. */
+	public PartitionMappingModule(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter) {
+		this.systemModelAdapter = systemModelAdapter;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public void config() {
+		super.config();
+
+		addOperatorInstance(PartitionMappingEncoding.class,
+				new MutatePartitionDecrement(systemModelAdapter));
+		addOperatorInstance(PartitionMappingEncoding.class,
+				new MutatePartitionIncrement(systemModelAdapter));
+	}
+}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/.ratings
index 8854afbbb26255b45933f2bf6e09b7030eb55405..a638b0cb36dee4c365cdb4f3c67c6c6163b40006 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/.ratings
@@ -1,6 +1,6 @@
-MutateAllocation.java 61d5e7d78fe5e140364273f1384278fb37ad7896 RED
-MutateRedundancy.java 14b611eef209bbee745f888fa57fad0284acb2be RED
-MutateRedundancyDecrement.java 72e48041593f80558be59c43da0a80b87d65df45 RED
-MutateRedundancyIncrement.java b25ce62578f289b9496a60d45c9f59217a99b248 RED
-MutateTaskMappingModule.java f83c4c5526781cfd40442c697e8125b1d1dd2a9e RED
-MutateTasksBase.java 3f76321cad681dc48632aff0ed206857e8a86441 RED
+MutateAllocation.java 4be3752ce942ef18fdf362d8b96b5947a0edc68a RED
+MutateRedundancy.java 05466c1910bdf50c849cf22f8e668426e6fad0d3 RED
+MutateRedundancyDecrement.java 3a000150f2e86902b9ce85c7672884e94fa19cc4 RED
+MutateRedundancyIncrement.java f6093ed138ecc6a6cd3282df8440f8fcdb40aa53 RED
+MutateTaskMappingModule.java 22c97eb8bd2dbf8a5a9eae145010f4fa14932c8c RED
+MutateTasksBase.java f0d224a24113d04b3f60a749f74b8aa5a9349204 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateAllocation.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateAllocation.java
index 03089666593b0b017e7ef44b584a67a5dae2f201..e596d41f721615f4c99b43c32c64ba866e700d48 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateAllocation.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateAllocation.java
@@ -21,6 +21,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
+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.sysmodel.arch.IDeployableComponentAdapter;
@@ -34,7 +35,7 @@ import org.fortiss.af3.exploration.alg.exception.ExplorationException;
  * 
  * @author huang
  */
-public class MutateAllocation<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>>
+public class MutateAllocation<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>>
 		extends MutateTasksBase<S, T> {
 
 	/** Constructs a new allocation mutation operator for a given exploration run */
@@ -51,7 +52,7 @@ public class MutateAllocation<S extends TaskMappingEntry, T extends TaskMappingE
 		checkReplicationCount(encoding);
 
 		Collection<IDeployableComponentAdapter<?>> encDeplComponents =
-				new ArrayList<>(encoding.getDeployedComponents());
+				new ArrayList<>(encoding.getRequesters());
 		for(IDeployableComponentAdapter<?> deployableComponent : encDeplComponents) {
 			if(rand.nextDouble() < rate) {
 				Collection<S> assignedResources = encoding.getMappingEntriesOf(deployableComponent);
@@ -95,7 +96,8 @@ public class MutateAllocation<S extends TaskMappingEntry, T extends TaskMappingE
 			IDeployableComponentAdapter<?> deployableComponent) throws ExplorationException {
 		// The assigned resources must be an indexed list, such that randomly determined allocations
 		// can be directly removed using a random number generator.
-		List<S> assignedResources = encoding.getMappingEntriesOf(deployableComponent);
+		List<S> assignedResources =
+				new ArrayList<>(encoding.getMappingEntriesOf(deployableComponent));
 		if(assignedResources.isEmpty()) {
 			return;
 		}
@@ -107,13 +109,15 @@ public class MutateAllocation<S extends TaskMappingEntry, T extends TaskMappingE
 
 		// This respects {@link ExcludeDeploymentConstraint}s.
 		if(encoding.hasLimitedDeployment(deployableComponent)) {
-			List<IExecutionUnitAdapter<?>> targets =
+			List<IExecutionUnitAdapter<?>> physExecUnits =
 					new ArrayList<>(encoding.getAllowedAllocations(deployableComponent));
+			List<Partition> targets = encoding.getAllowedPartitionTargets(physExecUnits);
 			int selExecU = max(0, rand.nextInt(targets.size()) - 1);
 			selectedEntry.resetTarget(targets.get(selExecU));
 		} else {
-			List<IExecutionUnitAdapter<?>> targets =
+			List<IExecutionUnitAdapter<?>> physExecUnits =
 					new ArrayList<>(systemModelAdapter.getDeploymentTargets());
+			List<Partition> targets = encoding.getAllowedPartitionTargets(physExecUnits);
 			int selExecU = max(0, rand.nextInt(targets.size()) - 1);
 			selectedEntry.resetTarget(targets.get(selExecU));
 		}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateRedundancy.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateRedundancy.java
index cdca219977907049f34885a0591d765cc6fa7109..1bd4f9bf7a61675a3c90a50b081c7905ae8a3313 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateRedundancy.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateRedundancy.java
@@ -18,6 +18,7 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.taskma
 import java.util.Collection;
 import java.util.Optional;
 
+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.encoding.taskmapping.constraint.InternalReplicationConstraint;
@@ -30,7 +31,7 @@ import org.fortiss.af3.exploration.alg.exception.ExplorationException;
  * 
  * @author huang
  */
-public abstract class MutateRedundancy<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>>
+public abstract class MutateRedundancy<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>>
 		extends MutateTasksBase<S, T> {
 
 	/** Constructs a new redundancy mutation operator for a given exploration run */
@@ -41,13 +42,13 @@ public abstract class MutateRedundancy<S extends TaskMappingEntry, T extends Tas
 	/** {@inheritDoc} */
 	@Override
 	public void mutate(T encoding, double rate) {
-		for(IDeployableComponentAdapter<?> deployableComponent : encoding.getDeployedComponents()) {
+		for(IDeployableComponentAdapter<?> deployableComponent : encoding.getRequesters()) {
 			if(rand.nextDouble() < rate) {
 				// TODO: remove filter for fixed Deployment: It is not needed.
 				// No replication for Components with a fixed Deployment & Components which shall
 				// not be replicated (see the SystemModelAdapter).
-				if(!encoding.hasLimitedDeployment(deployableComponent) &&
-						systemModelAdapter.getReplicableComponents().contains(deployableComponent)) {
+				if(!encoding.hasLimitedDeployment(deployableComponent) && systemModelAdapter
+						.getReplicableComponents().contains(deployableComponent)) {
 
 					// TODO: Model minimum and maximum replication count as constraint?
 					// Do the actual mutation of the allocation of the current request
@@ -56,11 +57,10 @@ public abstract class MutateRedundancy<S extends TaskMappingEntry, T extends Tas
 						int maxReplication = deployableComponent.getMaxReplication();
 						Collection<InternalReplicationConstraint> replConstraints =
 								encoding.getConstraintsOf(InternalReplicationConstraint.class);
-						Optional<InternalReplicationConstraint> curReplConstraint =
-								replConstraints
-										.stream()
-										.filter(c -> c.getReplicationObject() == deployableComponent)
-										.findAny();
+						Optional<InternalReplicationConstraint> curReplConstraint = replConstraints
+								.stream()
+								.filter(c -> c.getReplicationObject() == deployableComponent)
+								.findAny();
 						if(curReplConstraint.isPresent()) {
 							minReplication = curReplConstraint.get().getMin();
 							maxReplication = curReplConstraint.get().getMax();
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateRedundancyDecrement.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateRedundancyDecrement.java
index 008fd31d1657a8f4dd2716c1fabdcf830275bf58..83d53e4638959e764d12d18242c87ef01198bd0a 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateRedundancyDecrement.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateRedundancyDecrement.java
@@ -17,6 +17,7 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.taskma
 
 import java.util.List;
 
+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.sysmodel.arch.IDeployableComponentAdapter;
@@ -27,7 +28,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
  * 
  * @author huang
  */
-public class MutateRedundancyDecrement<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>>
+public class MutateRedundancyDecrement<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>>
 		extends MutateRedundancy<S, T> {
 
 	/** Constructs a new decrement redundancy mutation operator for a given exploration run */
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateRedundancyIncrement.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateRedundancyIncrement.java
index 80a06ea7528c68e73552f553ef9f2bba7d350ea2..a19a8eecf21575eb5b1c45b5725ee285900c8326 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateRedundancyIncrement.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateRedundancyIncrement.java
@@ -18,6 +18,7 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.taskma
 import java.util.Collection;
 
 import org.conqat.lib.commons.collections.CollectionUtils;
+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.sysmodel.arch.IDeployableComponentAdapter;
@@ -29,7 +30,7 @@ import org.fortiss.af3.exploration.alg.exception.ExplorationException;
  * 
  * @author huang
  */
-public class MutateRedundancyIncrement<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>>
+public class MutateRedundancyIncrement<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>>
 		extends MutateRedundancy<S, T> {
 	/** Constructs a new increment redundancy mutation operator for a given exploration run */
 	public MutateRedundancyIncrement(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter) {
@@ -53,8 +54,8 @@ public class MutateRedundancyIncrement<S extends TaskMappingEntry, T extends Tas
 			// The following code ensures an equal distribution of temporal and spatial replication
 			if(rand.nextBoolean()) {
 				assignedResources.add(encoding.createRandomEntry(deployableComponent,
-						CollectionUtils.asRandomAccessList(encoding
-								.getMappingTargetsOf(deployableComponent))));
+						CollectionUtils.asRandomAccessList(
+								encoding.getAllocatedResourcesFor(deployableComponent))));
 			} else {
 				assignedResources.add(encoding.createRandomEntry(deployableComponent));
 			}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateTaskMappingModule.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateTaskMappingModule.java
index 5d83b0c6fac342a53dc97daebef4fb88ddd39e54..ffa7e5af48040496e6822dd50319a53f153cf398 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateTaskMappingModule.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateTaskMappingModule.java
@@ -44,7 +44,7 @@ public class MutateTaskMappingModule extends MutateOperatorModuleBase {
 	@Override
 	public void config() {
 		super.config();
-		TaskMappingFactory<? extends TaskMappingEntry, ? extends TaskMappingEncoding<?>> tmFactory =
+		TaskMappingFactory<? extends TaskMappingEntry<?, ?>, ? extends TaskMappingEncoding<?, ?>> tmFactory =
 				TaskMappingFactory.getInstance();
 
 		addOperatorInstance(AbstractTaskMappingEncoding.class,
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateTasksBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateTasksBase.java
index 98e1c8e707ed28bc2316310d5f37125f5b616af6..10598f170088f7981f759094515235f97d5b6b18 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateTasksBase.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/operator/mutate/taskmapping/MutateTasksBase.java
@@ -15,9 +15,11 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.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.operator.mutate.MutateBase;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 
 /**
@@ -25,7 +27,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
  * 
  * @author huang
  */
-public abstract class MutateTasksBase<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>>
+public abstract class MutateTasksBase<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>>
 		extends MutateBase<T> {
 
 	/** Constructor. */
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings
index 82ac342f2de4604ad3a0599ab3940fe8b87a9278..10249da84343948cbd87a101f5c968dbf4c5dd42 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings
@@ -1 +1 @@
-MessageDecoder.java 576270e33f07854bfd8b4a9395c1e4407aec0ca7 RED
+MessageDecoder.java e893d02f24db27df9752ee65e19dcf8f135f5d56 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java
index 252c55fcb2871f6398ad6b4d5d8066aa17b309db..b1128015052d2b98a348f80f3614c444ba16c052 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java
@@ -22,6 +22,7 @@ import java.util.Map;
 
 import org.fortiss.af3.exploration.alg.dse.TaskMappingFactory;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.comm.MessageEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.InstantiatedTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEntry;
@@ -31,6 +32,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.exception.DecodingException;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.comm.Message;
@@ -48,8 +50,8 @@ import com.google.inject.Inject;
  * 
  * @author diewald
  */
-public class MessageDecoder<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>> extends
-		ComposableDecoderBase<T, MessageEncoding<S, T>> {
+public class MessageDecoder<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>>
+		extends ComposableDecoderBase<T, MessageEncoding<S, T>> {
 
 	/** References the input system models. */
 	protected SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter;
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/.ratings
index 62d65f2ed78edb973eeb30ca63c9b68052d4733e..c3a5110277a1a8b8ff773a4e9b33772d862c2f9c 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/.ratings
@@ -1,3 +1,3 @@
-AbstractTaskMappingDecoder.java 952c7d51b051e6b44186368cca8941b511fd321c RED
-FailSilentAbstractTaskMappingDecoder.java 340c2875b24b70e3a45691dde3d4f24119b9b31c RED
-FaultDetectionVotingAbstractTaskMappingDecoder.java 25ca678adeb9acfb20dda931c763c89a8145f153 RED
+AbstractTaskMappingDecoder.java 56d2d2f6edc999d0e802bc5f4e7e470307456a08 RED
+FailSilentAbstractTaskMappingDecoder.java f1a6618527b827342f4886e685a5abbb898eb205 RED
+FaultDetectionVotingAbstractTaskMappingDecoder.java cf6444e5c9ccf0b20365a2b55774d932a881712a RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/AbstractTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/AbstractTaskMappingDecoder.java
index a4ceca52c9a1dca6e4e0a288f359e5877838c3b0..2eb9f2fbb3c5fbc6537d069af86e138ea46bf8ea 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/AbstractTaskMappingDecoder.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/AbstractTaskMappingDecoder.java
@@ -18,6 +18,7 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.instantiatemap
 import java.util.ArrayList;
 import java.util.Collection;
 
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding;
@@ -59,6 +60,7 @@ public abstract class AbstractTaskMappingDecoder<S extends InstantiatedTaskMappi
 		Collection<Class<?>> reqTypes = new ArrayList<>();
 		reqTypes.add(AbstractTaskMappingEncoding.class);
 		reqTypes.add(AbstractTaskGraphEncoding.class);
+		reqTypes.add(PartitionMappingEncoding.class);
 
 		return reqTypes;
 	}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FailSilentAbstractTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FailSilentAbstractTaskMappingDecoder.java
index 0877622e393d63e8af2e35ed9fe6fd98bf15a810..897e427645239764a01a35b63e31162551523fd8 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FailSilentAbstractTaskMappingDecoder.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FailSilentAbstractTaskMappingDecoder.java
@@ -20,6 +20,7 @@ import static org.fortiss.tooling.common.util.LambdaUtils.filterSet;
 import java.util.ArrayList;
 import java.util.Collection;
 
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEntry;
@@ -57,8 +58,11 @@ public class FailSilentAbstractTaskMappingDecoder extends
 		AbstractTaskGraphEncoding<?, ?> atgEnc =
 				phenotypeTypeMap.getEncoding(AbstractTaskGraphEncoding.class);
 		assert (atgEnc != null) : "The required abstract task graph encoding could not be found in the map of already decoded phenotypes.";
-		return new FailSilentTaskMappingEncoding(explorationDefinition, systemModelAdapter, atgEnc,
-				genotype);
+		PartitionMappingEncoding partEnc =
+				phenotypeTypeMap.getEncoding(PartitionMappingEncoding.class);
+		assert (partEnc != null) : "The required partition mapping encoding could not be found in the map of already decoded phenotypes.";
+		return new FailSilentTaskMappingEncoding(explorationDefinition, systemModelAdapter, partEnc,
+				atgEnc, genotype);
 	}
 
 	// TODO: Abstract to the AbstractTaskMappingDecoder.
@@ -69,20 +73,18 @@ public class FailSilentAbstractTaskMappingDecoder extends
 	 *             see {@link ComposableDecoder}.
 	 */
 	@Override
-	public FailSilentTaskMappingEncoding
-			updateComposable(AbstractTaskMappingEncoding inGenotype,
-					FailSilentTaskMappingEncoding outGenotype,
-					FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException {
+	public FailSilentTaskMappingEncoding updateComposable(AbstractTaskMappingEncoding inGenotype,
+			FailSilentTaskMappingEncoding outGenotype,
+			FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException {
 		outGenotype.replaceConstraints(inGenotype.getConstraints());
 
-		for(IDeployableComponentAdapter<?> comp : inGenotype.getDeployedComponents()) {
+		for(IDeployableComponentAdapter<?> comp : inGenotype.getRequesters()) {
 			Collection<AbstractTaskMappingEntry> abstrEntries =
 					inGenotype.getMappingEntriesOf(comp);
 			Collection<FailSilentTaskMappingEntry> instEntries;
 			if(comp.isInstantiationRequired()) {
-				instEntries =
-						filterSet(outGenotype.getMappingEntries(), e -> e.getDeployableComponent()
-								.getReplacedComponent() == comp);
+				instEntries = filterSet(outGenotype.getMappingEntries(),
+						e -> e.getSource().getReplacedComponent() == comp);
 			} else {
 				instEntries = outGenotype.getMappingEntriesOf(comp);
 			}
@@ -106,20 +108,20 @@ public class FailSilentAbstractTaskMappingDecoder extends
 
 		// Remove all tasks that are present in the output encoding but not in the input encoding.
 		Collection<IDeployableComponentAdapter<?>> rmTasks = new ArrayList<>();
-		for(IDeployableComponentAdapter<?> comp : outGenotype.getDeployedComponents()) {
+		for(IDeployableComponentAdapter<?> comp : outGenotype.getRequesters()) {
 			IDeployableComponentAdapter<?> rmComponent = comp;
 			if(comp.isInstantiation()) {
 				comp = comp.getReplacedComponent();
 			}
-			if(!inGenotype.getDeployedComponents().contains(comp)) {
+			if(!inGenotype.getRequesters().contains(comp)) {
 				rmTasks.add(rmComponent);
 			}
 		}
 		rmTasks.forEach(e -> outGenotype.removeTask(e));
 
 		for(FailSilentTaskMappingEntry entry : outGenotype.getMappingEntries()) {
-			entry.resetTarget(entry.getAssociatedElement(AbstractTaskMappingEntry.class)
-					.getTarget());
+			entry.resetTarget(
+					entry.getAssociatedElement(AbstractTaskMappingEntry.class).getTarget());
 		}
 
 		return outGenotype;
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FaultDetectionVotingAbstractTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FaultDetectionVotingAbstractTaskMappingDecoder.java
index 9eebfa441b36961189e8085466d6f3e1e52fe5c8..66bab92a69e3bd41fc8c14794cb72a8a6b9308fd 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FaultDetectionVotingAbstractTaskMappingDecoder.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FaultDetectionVotingAbstractTaskMappingDecoder.java
@@ -20,6 +20,7 @@ import static org.fortiss.tooling.common.util.LambdaUtils.filterSet;
 import java.util.ArrayList;
 import java.util.Collection;
 
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.AbstractTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEntry;
@@ -39,8 +40,7 @@ import org.opt4j.core.problem.Decoder;
  * 
  * @author diewald
  */
-public class FaultDetectionVotingAbstractTaskMappingDecoder
-		extends
+public class FaultDetectionVotingAbstractTaskMappingDecoder extends
 		AbstractTaskMappingDecoder<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> {
 
 	/** Constructor. */
@@ -58,8 +58,11 @@ public class FaultDetectionVotingAbstractTaskMappingDecoder
 		AbstractTaskGraphEncoding<?, ?> atgEnc =
 				phenotypeTypeMap.getEncoding(AbstractTaskGraphEncoding.class);
 		assert (atgEnc != null) : "The required abstract task graph encoding could not be found in the map of already decoded phenotypes.";
+		PartitionMappingEncoding partEnc =
+				phenotypeTypeMap.getEncoding(PartitionMappingEncoding.class);
+		assert (partEnc != null) : "The required partition mapping encoding could not be found in the map of already decoded phenotypes.";
 		return new FaultDetectionVotingTaskMappingEncoding(explorationDefinition,
-				systemModelAdapter, atgEnc, genotype);
+				systemModelAdapter, partEnc, atgEnc, genotype);
 	}
 
 	/**
@@ -75,14 +78,13 @@ public class FaultDetectionVotingAbstractTaskMappingDecoder
 			FlatPhenotypeMap<Phenotype> decodedPhenotypes) throws DecodingException {
 		outGenotype.replaceConstraints(inGenotype.getConstraints());
 
-		for(IDeployableComponentAdapter<?> comp : inGenotype.getDeployedComponents()) {
+		for(IDeployableComponentAdapter<?> comp : inGenotype.getRequesters()) {
 			Collection<AbstractTaskMappingEntry> abstrEntries =
 					inGenotype.getMappingEntriesOf(comp);
 			Collection<FaultDetectionVotingTaskMappingEntry> instEntries;
 			if(comp.isInstantiationRequired()) {
-				instEntries =
-						filterSet(outGenotype.getMappingEntries(), e -> e.getDeployableComponent()
-								.getReplacedComponent() == comp);
+				instEntries = filterSet(outGenotype.getMappingEntries(),
+						e -> e.getSource().getReplacedComponent() == comp);
 			} else {
 				instEntries = outGenotype.getMappingEntriesOf(comp);
 			}
@@ -106,20 +108,20 @@ public class FaultDetectionVotingAbstractTaskMappingDecoder
 
 		// Remove all tasks that are present in the output encoding but not in the input encoding.
 		Collection<IDeployableComponentAdapter<?>> rmTasks = new ArrayList<>();
-		for(IDeployableComponentAdapter<?> comp : outGenotype.getDeployedComponents()) {
+		for(IDeployableComponentAdapter<?> comp : outGenotype.getRequesters()) {
 			IDeployableComponentAdapter<?> rmComponent = comp;
 			if(comp.isInstantiation()) {
 				comp = comp.getReplacedComponent();
 			}
-			if(!inGenotype.getDeployedComponents().contains(comp)) {
+			if(!inGenotype.getRequesters().contains(comp)) {
 				rmTasks.add(rmComponent);
 			}
 		}
 		rmTasks.forEach(e -> outGenotype.removeTask(e));
 
 		for(FaultDetectionVotingTaskMappingEntry entry : outGenotype.getMappingEntries()) {
-			entry.resetTarget(entry.getAssociatedElement(AbstractTaskMappingEntry.class)
-					.getTarget());
+			entry.resetTarget(
+					entry.getAssociatedElement(AbstractTaskMappingEntry.class).getTarget());
 		}
 
 		return outGenotype;
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/.ratings
index 116e19453bd0c115ca0115e452d432cba5cd97ca..52d49b4dd86fc166dc3aac105730f6c4a030d942 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/.ratings
@@ -1 +1 @@
-AbstractTaskMappingIdentityDecoder.java 26751f010c5b011dcf5822fcdd790eff4143189d RED
+AbstractTaskMappingIdentityDecoder.java 4b452975b3da72fb535a9e67013d45f9494e9203 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/AbstractTaskMappingIdentityDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/AbstractTaskMappingIdentityDecoder.java
index 4dc933fb54001dab2eece3d35415cd426556a8fd..1726e6d8ddc8f3a56df166f9814b3f06c9100857 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/AbstractTaskMappingIdentityDecoder.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/AbstractTaskMappingIdentityDecoder.java
@@ -18,6 +18,7 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.taskmapping;
 import java.util.ArrayList;
 import java.util.Collection;
 
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoder;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoderBase;
@@ -32,9 +33,9 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.ArchExpSubDecod
  * 
  * @author diewald
  */
-public class AbstractTaskMappingIdentityDecoder extends
-		ComposableDecoderBase<AbstractTaskMappingEncoding, AbstractTaskMappingEncoding> implements
-		ArchExpSubDecoder {
+public class AbstractTaskMappingIdentityDecoder
+		extends ComposableDecoderBase<AbstractTaskMappingEncoding, AbstractTaskMappingEncoding>
+		implements ArchExpSubDecoder {
 
 	/** {@inheritDoc} */
 	@Override
@@ -46,7 +47,8 @@ public class AbstractTaskMappingIdentityDecoder extends
 	/** {@inheritDoc} */
 	@Override
 	public AbstractTaskMappingEncoding updateComposable(AbstractTaskMappingEncoding inGenotype,
-			AbstractTaskMappingEncoding outGenotype, FlatPhenotypeMap<Phenotype> decodedPhenotypes) {
+			AbstractTaskMappingEncoding outGenotype,
+			FlatPhenotypeMap<Phenotype> decodedPhenotypes) {
 		return inGenotype;
 	}
 
@@ -62,6 +64,7 @@ public class AbstractTaskMappingIdentityDecoder extends
 	@Override
 	public Collection<Class<?>> getOptionalTypes() {
 		Collection<Class<?>> optTypes = new ArrayList<>();
+		optTypes.add(PartitionMappingEncoding.class);
 		return optTypes;
 	}
 
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/.ratings
index ba9a1d830baecfdcb26d1baa36d0645fff9c87d0..9537295392acfaf402279e213ce562cc68ef0ef5 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/.ratings
@@ -2,5 +2,5 @@ ArchExpSubSolution.java 3bb56206fe70f19f7cb6aee575eba552ce9bbc4e RED
 ArchitectureSolution.java 8ba40ce339c4195641ed1b67c79718e297d66e4c RED
 IExplorationSolution.java a6153937197358907ceec46606a7f28620c26f2b RED
 IScheduleSolution.java 989614e232dcc1d4ade33ea2a76e90b514f175d7 RED
-StrictTTSchedule.java 04bf3217ff1a5a75e8f3581dacf3aabebaffc428 RED
-TimeSlot.java 572449f7241b83c846716aaf225e17a4f21c35d5 RED
+StrictTTSchedule.java 65d194e0783917ecd6f103c8997ab65e88ef0c4a RED
+TimeSlot.java a394badca1460454c91e0d82b0d124f8b2a2ebcf RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/StrictTTSchedule.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/StrictTTSchedule.java
index a0aaf87deaace639d05c570b2a76aa3246ab09b5..db33fd924c23136b7b9402a94e1db3f7b689431a 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/StrictTTSchedule.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/StrictTTSchedule.java
@@ -22,6 +22,7 @@ import java.util.Map.Entry;
 import java.util.Set;
 import java.util.TreeMap;
 
+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.phenotype.ComposablePhenotype;
@@ -45,7 +46,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.ScheduleRuntimeExcepti
  * @author huang
  */
 
-public class StrictTTSchedule<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>>
+public class StrictTTSchedule<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>>
 		implements IScheduleSolution<StrictTTSchedule<S, T>>, ComposablePhenotype<T>,
 		ArchExpSubSolution<T> {
 	/**
@@ -127,8 +128,10 @@ public class StrictTTSchedule<S extends TaskMappingEntry, T extends TaskMappingE
 
 	/**
 	 * Performs a validation of this schedule. Returns {@code true} if the following conditions
-	 * hold: <li>The number of allocations defined in the mapping matches the number of scheduled
-	 * components.</li> <li>No overlap of {@link TimeSlot}s within the schedule of each
+	 * hold:
+	 * <li>The number of allocations defined in the mapping matches the number of scheduled
+	 * components.</li>
+	 * <li>No overlap of {@link TimeSlot}s within the schedule of each
 	 * {@link IResourceAdapter}.</li>
 	 */
 	public boolean validateSchedule(boolean enableScheduleException) {
@@ -149,7 +152,7 @@ public class StrictTTSchedule<S extends TaskMappingEntry, T extends TaskMappingE
 	 * {@link IMappingEncoding}.
 	 */
 	private boolean validateAllocationNumberInSchedule(boolean enableScheduleException) {
-		for(IDeployableComponentAdapter<?> comp : encoding.getDeployedComponents()) {
+		for(IDeployableComponentAdapter<?> comp : encoding.getRequesters()) {
 			int compEncNum = encoding.getMappingEntriesOf(comp).size();
 			int compSchedNum = 0;
 			for(IResourceAdapter<?> resourceAdapter : getResources()) {
@@ -161,9 +164,8 @@ public class StrictTTSchedule<S extends TaskMappingEntry, T extends TaskMappingE
 			}
 			if(compEncNum != compSchedNum &&
 					systemModelAdapter.getScheduleableComponents().contains(comp)) {
-				System.out
-						.println("The number of scheduled Components of " + comp.getName() +
-								" does not match the number defined in the Component->ExecutionUnit mapping.");
+				System.out.println("The number of scheduled Components of " + comp.getName() +
+						" does not match the number defined in the Component->ExecutionUnit mapping.");
 				if(enableScheduleException) {
 					throw new ScheduleRuntimeException(this);
 				}
@@ -178,7 +180,8 @@ public class StrictTTSchedule<S extends TaskMappingEntry, T extends TaskMappingE
 	 * with another {@link TimeSlot} of that {@link ResourceSchedule}.
 	 */
 	private boolean validateNoTimeSlotOverlaps(boolean enableScheduleException) {
-		for(Map.Entry<IResourceAdapter<?>, ResourceSchedule> resourceSchedule : schedule.entrySet()) {
+		for(Map.Entry<IResourceAdapter<?>, ResourceSchedule> resourceSchedule : schedule
+				.entrySet()) {
 			for(TimeSlot currentTimeSlot : resourceSchedule.getValue().keySet()) {
 				TimeSlot nextTimeSlot = resourceSchedule.getValue().higherKey(currentTimeSlot);
 				if(nextTimeSlot != null &&
@@ -206,7 +209,8 @@ public class StrictTTSchedule<S extends TaskMappingEntry, T extends TaskMappingE
 	 * validated.
 	 */
 	private boolean validateCausalityOfTasks(boolean enableScheduleException) {
-		for(Map.Entry<IResourceAdapter<?>, ResourceSchedule> resourceSchedule : schedule.entrySet()) {
+		for(Map.Entry<IResourceAdapter<?>, ResourceSchedule> resourceSchedule : schedule
+				.entrySet()) {
 			for(TimeSlot currentTimeSlot : resourceSchedule.getValue().keySet()) {
 				for(TimeSlot predecessorSlot : currentTimeSlot.getPredecessors()) {
 					if(currentTimeSlot.getStartTime() < predecessorSlot.getEndTime() -
@@ -241,8 +245,8 @@ public class StrictTTSchedule<S extends TaskMappingEntry, T extends TaskMappingE
 	}
 
 	/** Registers a {@link TimeSlot} with the appropriate schedule. */
-	public TimeSlot
-			registerTimeSlot(TimeSlot slot, S deployedRequest, IResourceAdapter<?> resource) {
+	public TimeSlot registerTimeSlot(TimeSlot slot, S deployedRequest,
+			IResourceAdapter<?> resource) {
 		// Create a new TimeSlot and eventually add a new ResourceSchedule, if none exists yet for
 		// the deployment target.
 		if(schedule.get(resource) == null) {
@@ -256,7 +260,7 @@ public class StrictTTSchedule<S extends TaskMappingEntry, T extends TaskMappingE
 		// time slot with no associated deployable Component within the appropriate
 		// ReosurceSchedule; it is most likely a communication resource allocated to a message.
 		if(deployedRequest != null) {
-			schedule.get(resource).put(slot, deployedRequest.getDeployableComponent());
+			schedule.get(resource).put(slot, deployedRequest.getSource());
 			timeSlotsOfMappingEntries.put(deployedRequest, slot);
 		} else {
 			schedule.get(resource).put(slot, null);
@@ -282,9 +286,8 @@ public class StrictTTSchedule<S extends TaskMappingEntry, T extends TaskMappingE
 	 */
 	public TimeSlot createTimeSlot(S deployedRequest, IResourceAdapter<?> resource,
 			Collection<TimeSlot> predessorSlots, double start, double end, long iteration) {
-		TimeSlot slot =
-				new TimeSlot(deployedRequest, resource, predessorSlots, start, end, (int)iteration,
-						false);
+		TimeSlot slot = new TimeSlot(deployedRequest, resource, predessorSlots, start, end,
+				(int)iteration, false);
 		return registerTimeSlot(slot, deployedRequest, resource);
 	}
 
@@ -353,7 +356,8 @@ public class StrictTTSchedule<S extends TaskMappingEntry, T extends TaskMappingE
 	/** Formats the string representation of a resource */
 	private String getResourceName(IResourceAdapter<?> resource) {
 		String str = resource.getName();
-		if(!(resource instanceof ITransmissionUnitAdapter || resource instanceof IGatewayUnitAdapter) &&
+		if(!(resource instanceof ITransmissionUnitAdapter ||
+				resource instanceof IGatewayUnitAdapter) &&
 				resource != systemModelAdapter.getHardwareResource(resource)) {
 			str += "@" + systemModelAdapter.getHardwareResource(resource).getName();
 		}
@@ -372,7 +376,7 @@ public class StrictTTSchedule<S extends TaskMappingEntry, T extends TaskMappingE
 				if(slot.isVoter()) {
 					str += "voter";
 				} else if(slot.getDeployedRequester() != null) {
-					str += slot.getDeployedRequester().getDeployableComponent().getName();
+					str += slot.getDeployedRequester().getSource().getName();
 				} else if(slot.getDeployedMessage() != null) {
 					str += slot.getDeployedMessage().getSignalAdapter().getName();
 				} else {
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/TimeSlot.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/TimeSlot.java
index 0d1310fc0b50112bad79d602165033da94658e89..459ac9a3de7118972c3479e5bc113b8dda6502c8 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/TimeSlot.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/TimeSlot.java
@@ -20,6 +20,7 @@ import java.util.Comparator;
 import java.util.HashSet;
 
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ICommunicationResourceAdapter;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
 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.comm.Message;
@@ -41,7 +42,7 @@ public class TimeSlot implements java.lang.Comparable<TimeSlot> {
 	private IResourceAdapter<?> resource;
 
 	/** The {@link IMappingEntry} that is represented by this {@link TimeSlot}. */
-	private IMappingEntry deployedRequester;
+	private IMappingEntry<IDeployableComponentAdapter<?>, ?> deployedRequester;
 
 	/** The {@link Message} reserving this {@link TimeSlot} of a communication resource. */
 	private Message deployedMessage;
@@ -72,8 +73,9 @@ public class TimeSlot implements java.lang.Comparable<TimeSlot> {
 	 * Constructs a time slot for a given resource, and enables to specify if the slot has been
 	 * allocated for a voter.
 	 */
-	public TimeSlot(IMappingEntry deployedRequest, IResourceAdapter<?> resource, double startTime,
-			double endTime, int iteration, boolean isVoterSlot) {
+	public TimeSlot(IMappingEntry<IDeployableComponentAdapter<?>, ?> deployedRequest,
+			IResourceAdapter<?> resource, double startTime, double endTime, int iteration,
+			boolean isVoterSlot) {
 		this.deployedRequester = deployedRequest;
 		this.startTime = startTime;
 		this.endTime = endTime;
@@ -89,16 +91,17 @@ public class TimeSlot implements java.lang.Comparable<TimeSlot> {
 	 * Constructs a time slot for a given resource, and enables to specify if the slot has been
 	 * allocated for a voter. Furthermore, the collection of predecessors is defined.
 	 */
-	public TimeSlot(IMappingEntry deployedRequest, IResourceAdapter<?> resource,
-			Collection<TimeSlot> predecessorSlots, double startTime, double endTime, int iteration,
-			boolean isVoterSlot) {
+	public TimeSlot(IMappingEntry<IDeployableComponentAdapter<?>, ?> deployedRequest,
+			IResourceAdapter<?> resource, Collection<TimeSlot> predecessorSlots, double startTime,
+			double endTime, int iteration, boolean isVoterSlot) {
 		this(deployedRequest, resource, startTime, endTime, iteration, isVoterSlot);
 
 		this.predecessorSlots.addAll(predecessorSlots);
 	}
 
 	/** Constructs a time slot for a given mappingEntry. */
-	public TimeSlot(IMappingEntry deployedRequest, double startTime, double endTime) {
+	public TimeSlot(IMappingEntry<IDeployableComponentAdapter<?>, ?> deployedRequest,
+			double startTime, double endTime) {
 		this(deployedRequest, deployedRequest.getTarget(), startTime, endTime, 0, false);
 	}
 
@@ -113,7 +116,7 @@ public class TimeSlot implements java.lang.Comparable<TimeSlot> {
 	}
 
 	/** Returns deployedRequester. */
-	public IMappingEntry getDeployedRequester() {
+	public IMappingEntry<IDeployableComponentAdapter<?>, ?> getDeployedRequester() {
 		return deployedRequester;
 	}
 
@@ -241,7 +244,7 @@ public class TimeSlot implements java.lang.Comparable<TimeSlot> {
 	 * NO LONGER VALID!:1) if the two slot belong to different resources, compare the resources
 	 * names
 	 * if the two slot belong to the same resources, compare the start time
-	 * */
+	 */
 	// TODO: re-implement this compareTo method, it is a complete mess (refs #6262)
 	@Override
 	public int compareTo(TimeSlot slot) {
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/.ratings
index 38c6cbcbc65127c285c6789a87f6f30ea14dfda5..39a274fa3cd24c6d5a93ca2f822cc301a46d8502 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/.ratings
@@ -1,8 +1,8 @@
-ComponentMultiAllocationConstraintEvaluator.java 86be4263501af119e3ea4571514aa8dab8d985b8 RED
+ComponentMultiAllocationConstraintEvaluator.java 1f3c1c96391de15f5b21377f52dde183b16428cc RED
 ComponentMultiDislocationConstraintEvaluator.java e63169976a3075d5d9ac62767bf6c17bc4ddfe07 RED
 ConstraintEvaluatorBase.java f42f71e64d32201b232c24542a2c0367a6293942 RED
 DeadlineConstraintEvaluator.java a023d233a2ee768cef573a67e06ae1fe0b53ddbe RED
 IConstraintEvaluator.java bca49bbdea5e089b0d045fc356ceedcb466df55e RED
 MappingEvaluatorConstraint.java fec8cf995cbafa433235f8f6715bc5183c2f8ba3 RED
-PeriodConstraintEvaluator.java bd551f4988be3f115e76aad2654043093ce64e52 RED
-SafetyIntegrityLevelConstraintEvaluator.java 7ed6d6950d915066bf1510717dfe371c102cb2ea RED
+PeriodConstraintEvaluator.java 52dc75180579f154a514816223461e27cb9ca84d RED
+SafetyIntegrityLevelConstraintEvaluator.java 74260b0b2b1c5a2f4a0de41d24a993a8e0dca65d RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiAllocationConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiAllocationConstraintEvaluator.java
index 9d1a649db067067b49e397331f3303daf339b6a3..86018dea5015731dec99a9f2b452ab17e673bb07 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiAllocationConstraintEvaluator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiAllocationConstraintEvaluator.java
@@ -61,9 +61,9 @@ public class ComponentMultiAllocationConstraintEvaluator<S extends InstantiatedT
 	@Override
 	public DoubleValue evaluateGoal(T phenotype, FlatPhenotypeMap<Phenotype> phenotypeTypeMap,
 			ClassToInstanceMap<EObject> transformedModels) {
-		for(IMappingEntry mappingEntry : phenotype.getIMappingEntries()) {
+		for(InstantiatedTaskMappingEntry mappingEntry : phenotype.getMappingEntries()) {
 			if(explorationTarget.getAllRightMultiLocationModelElements()
-					.contains(mappingEntry.getDeployableComponent().getObject())) {
+					.contains(mappingEntry.getSource().getObject())) {
 				return new DoubleValue(Double.MAX_VALUE);
 			}
 		}
@@ -106,9 +106,9 @@ public class ComponentMultiAllocationConstraintEvaluator<S extends InstantiatedT
 			Value<?> value) {
 		Component constrComp = ((ComponentMultiAllocationConstraint)expTarget).getComponent();
 
-		Collection<IMappingEntry> entries = new ArrayList<>();
-		for(IMappingEntry mappingEntry : solution.getIMappingEntries()) {
-			IDeployableComponentAdapter<?> compAdp = mappingEntry.getDeployableComponent();
+		Collection<InstantiatedTaskMappingEntry> entries = new ArrayList<>();
+		for(InstantiatedTaskMappingEntry mappingEntry : solution.getMappingEntries()) {
+			IDeployableComponentAdapter<?> compAdp = mappingEntry.getSource();
 			if(compAdp.getObject() == constrComp) {
 				entries.add(mappingEntry);
 			} else if(compAdp.isInstantiation() &&
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/PeriodConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/PeriodConstraintEvaluator.java
index 51dc70a19fd5945a9a979513aa58c4f1de13442c..419a0327b2a4a4f2625653d9de65d3ad5671947a 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/PeriodConstraintEvaluator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/PeriodConstraintEvaluator.java
@@ -76,7 +76,7 @@ public class PeriodConstraintEvaluator<S extends InstantiatedTaskMappingEntry, T
 
 		// we evaluate if all tasks are within the period. we want everything to be
 		// finished within the period
-		for(IDeployableComponentAdapter<?> deployableComponent : itmEnc.getDeployedComponents()) {
+		for(IDeployableComponentAdapter<?> deployableComponent : itmEnc.getRequesters()) {
 			TaskGraph taskGraph = itgEnc.getTaskGraphOf(deployableComponent);
 			// we need to check each iteration in the hyper period
 			if(taskGraph != null) {
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/SafetyIntegrityLevelConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/SafetyIntegrityLevelConstraintEvaluator.java
index 15b12efbdb0407628208ce5e9a2e747a44b1c6a9..1f7e60ef77508bf2fd75e286cbea883e584eb125 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/SafetyIntegrityLevelConstraintEvaluator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/SafetyIntegrityLevelConstraintEvaluator.java
@@ -22,7 +22,6 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Map;
 import java.util.stream.Collectors;
 
 import org.eclipse.emf.common.util.Enumerator;
@@ -76,12 +75,11 @@ public class SafetyIntegrityLevelConstraintEvaluator<S extends InstantiatedTaskM
 	/** {@inheritDoc} */
 	@Override
 	public boolean validateInternal(ExplorationConstraint<?> expTarget, T mapping, Value<?> value) {
-		Map<IDeployableComponentAdapter<?>, Collection<S>> allocationMap =
-				mapping.getAllocationMap();
 		List<IDeployableComponentAdapter<?>> silComponents = getSILComponentAdapters();
 		List<SIL> silBounds = explorationTarget.getLimitation();
 		for(int idx = 0; idx < silComponents.size(); idx++) {
-			SIL actualSIL = detectSIL(silComponents.get(idx), allocationMap);
+			IDeployableComponentAdapter<?> silComponent = silComponents.get(idx);
+			SIL actualSIL = detectSIL(silComponent, mapping.getMappingEntriesOf(silComponent));
 			if(actualSIL.getValue() < silBounds.get(idx).getValue()) {
 				return false;
 			}
@@ -116,12 +114,11 @@ public class SafetyIntegrityLevelConstraintEvaluator<S extends InstantiatedTaskM
 	 */
 	private List<SIL> getSILViolations(T mapping) {
 		List<SIL> silViolations = new ArrayList<>();
-		Map<IDeployableComponentAdapter<?>, Collection<S>> allocationMap =
-				mapping.getAllocationMap();
 		List<IDeployableComponentAdapter<?>> silComponents = getSILComponentAdapters();
 		List<SIL> silBounds = explorationTarget.getLimitation();
 		for(int idx = 0; idx < silComponents.size(); idx++) {
-			SIL actualSIL = detectSIL(silComponents.get(idx), allocationMap);
+			IDeployableComponentAdapter<?> silComponent = silComponents.get(idx);
+			SIL actualSIL = detectSIL(silComponent, mapping.getMappingEntriesOf(silComponent));
 			silViolations.add(calculateSILViolation(silBounds.get(idx), actualSIL));
 		}
 		return silViolations;
@@ -130,14 +127,11 @@ public class SafetyIntegrityLevelConstraintEvaluator<S extends InstantiatedTaskM
 	// TODO: Port to org.fortiss.af3.safety
 	/** Helper function for the calculation of the actual SIL of a deployed component. */
 	private SIL detectSIL(IDeployableComponentAdapter<?> deployableComponent,
-			Map<IDeployableComponentAdapter<?>, Collection<S>> allocationMap) {
-		// Note: real hw replication is not meant here, just the allocation to different cores/ecus
-		Collection<S> replica = allocationMap.get(deployableComponent);
-
+			Collection<S> allEntries) {
 		// Determine the number of replications onto different execution units. This separation is
 		// yet very primitive.
 		Collection<IExecutionUnitAdapter<?>> hwReplica = new HashSet<IExecutionUnitAdapter<?>>();
-		for(S currentTaskReplic : replica) {
+		for(S currentTaskReplic : allEntries) {
 			hwReplica.add(currentTaskReplic.getTarget());
 		}
 		int silTypeToInt = 0;
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/.ratings
index e8b65da6498ee202bbecd4d20d9198aac745c4ee..b3af968cfd7fe8bd3cb875086f8e9989e520d686 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/.ratings
@@ -1,5 +1,5 @@
-EnergyObjectiveEvaluator.java 66b7823301607d90622fdd978ce5da1caa647cfd RED
-FailSilentReliabilityEvaluator.java e01e4f5fe39ecabc3d1a4ba3ca38568b0096d8d4 RED
+EnergyObjectiveEvaluator.java 02220e3d8cee11e21c0107d27d0e559b038471f3 RED
+FailSilentReliabilityEvaluator.java 4971dc34163580168686c3db9c0216defaa19631 RED
 FaultDetectionVotingReliabilityEvaluator.java 519228a5192f9e70c088e101dd766767f10dda1f RED
 MappingEvaluatorObjective.java 9a07bad8acb0b63e9798097435bdaed7a0ddf09b RED
 ReliabilityEvaluatorBase.java baea1cb7dc9f90e4bf763ef542c182aa497d1057 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/EnergyObjectiveEvaluator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/EnergyObjectiveEvaluator.java
index 0b9d4ef2b76e348f3734844d9a1afd806ee730e1..d554da612cb158538edfa6c3fb422611fb745695 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/EnergyObjectiveEvaluator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/EnergyObjectiveEvaluator.java
@@ -19,6 +19,7 @@ import java.util.Collection;
 import java.util.HashSet;
 
 import org.eclipse.emf.ecore.EObject;
+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.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding;
@@ -45,7 +46,7 @@ import com.google.common.collect.ClassToInstanceMap;
  * 
  * @author huang
  */
-public class EnergyObjectiveEvaluator<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>>
+public class EnergyObjectiveEvaluator<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>>
 		extends ExplorationTargetEvaluatorBase<StrictTTSchedule<S, T>, Double, EnergyMinObjective> {
 
 	/** Creates a template energy objective evaluator */
@@ -86,8 +87,10 @@ public class EnergyObjectiveEvaluator<S extends TaskMappingEntry, T extends Task
 					if(deploymentTarget instanceof IExecutionUnitAdapter) {
 						IExecutionUnitAdapter<?> executionUnit =
 								(IExecutionUnitAdapter<?>)deploymentTarget;
+						// TODO: Rework Schedule to avoid casting.
 						IDeployableComponentAdapter<?> deployedComponent =
-								t.getDeployedRequester().getDeployableComponent();
+								(IDeployableComponentAdapter<?>)t.getDeployedRequester()
+										.getSource();
 
 						energy += deployedComponent.getEnergyConsumption(executionUnit);
 					} else if(deploymentTarget instanceof ICommunicationResourceAdapter) {
@@ -111,7 +114,8 @@ public class EnergyObjectiveEvaluator<S extends TaskMappingEntry, T extends Task
 	public boolean validateInputs() throws Exception {
 		// TODO: If constraints exist for the allocation, only consider component / execution unit
 		// allocations that are valid acc. to these constraints.
-		for(IDeployableComponentAdapter<?> component : systemModelAdapter.getDeployableComponents()) {
+		for(IDeployableComponentAdapter<?> component : systemModelAdapter
+				.getDeployableComponents()) {
 			for(IExecutionUnitAdapter<?> execUnit : systemModelAdapter.getDeploymentTargets()) {
 				if(component.getEnergyConsumption(execUnit) == null) {
 					throw new Exception(
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/FailSilentReliabilityEvaluator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/FailSilentReliabilityEvaluator.java
index 3d0ad6d1b738228a01dfe3b5e6018e878d5b3338..0f022d9fbdc884ab29d841415d8afefd09611975 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/FailSilentReliabilityEvaluator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/FailSilentReliabilityEvaluator.java
@@ -58,7 +58,7 @@ public class FailSilentReliabilityEvaluator extends
 		Apfloat overallSuccRate = new Apfloat(1, FP_PRECISION);
 		Apfloat one = new Apfloat(1, FP_PRECISION);
 
-		for(IDeployableComponentAdapter<?> deployableComponent : itmEnc.getDeployedComponents()) {
+		for(IDeployableComponentAdapter<?> deployableComponent : itmEnc.getRequesters()) {
 			// TODO: Check if this correctly determines the taskFailureRate
 
 			// only software tasks are considered
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/.ratings
index 9997cd325dacdd957cd0a7da451123ee0232dce2..2106354e6a5edec580d21df79cd6ba52f2c4c7ef 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/.ratings
@@ -1,6 +1,6 @@
-ComponentArchitectureFinalizer.java 2d372a2ba5d7da467c4e9d658cb2efef818c7108 RED
-ComponentArchitectureInitializer.java ad1f5c1e59fd8642a07160a216d8f9fc8e53821c RED
+ComponentArchitectureFinalizer.java ec0e29b2ed27aecccae28bab0253b8e068276a17 RED
+ComponentArchitectureInitializer.java 4b1e1f03b6205b91e6a9dae5ae5f77ad5ef9ed78 RED
 ComponentArchitectureInserter.java 9ab94811d460d06fa1ce2f72e40911beb7982e94 RED
-ComponentArchitectureInstantiator.java bef63f3fb89a2462781f715cca2b76909d774d30 RED
-ComponentArchitectureReplicator.java 82e8bc13a80c99b21b85de9e1f0da8c0496e74e2 RED
+ComponentArchitectureInstantiator.java 9258569c6b1a43bcdde104fc133d444f6ae5d002 RED
+ComponentArchitectureReplicator.java cbf6fcc9c69b4833664fe10dc5eac0941f014870 RED
 ComponentArchitectureTransformer.java 9eded58c64a6077a3a5cb13cf3d7d78779b70a49 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureFinalizer.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureFinalizer.java
index 3b38ddd4d91d4498997dd982f396a0297acc26e2..d319d3c53606b4856bcf67ea8ab5c2ecad6a1bca 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureFinalizer.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureFinalizer.java
@@ -42,7 +42,8 @@ import org.fortiss.tooling.base.model.element.IModelElementSpecification;
  * 
  * @author diewald
  */
-public class ComponentArchitectureFinalizer extends TransformationModuleBase<ComponentArchitecture> {
+public class ComponentArchitectureFinalizer
+		extends TransformationModuleBase<ComponentArchitecture> {
 
 	/** {@inheritDoc} */
 	@Override
@@ -100,8 +101,8 @@ public class ComponentArchitectureFinalizer extends TransformationModuleBase<Com
 			throws TransformationModuleException {
 		// Install the back reference specification to the components in the "150%/125% model".
 		try {
-			createImplementsComponentSpecifications(((ComponentArchitecture)outputModel)
-					.getTopComponent());
+			createImplementsComponentSpecifications(
+					((ComponentArchitecture)outputModel).getTopComponent());
 		} catch(InvalidTimingModelException e) {
 			throw new TransformationModuleException(this,
 					"Could not identify the relevant components, probably due to an inconsistent timing specification.");
@@ -130,12 +131,11 @@ public class ComponentArchitectureFinalizer extends TransformationModuleBase<Com
 
 			InstantiatedTaskMappingEntry entry = null;
 			if(originalComponent instanceof Component) {
-				entry =
-						(InstantiatedTaskMappingEntry)encEntryModelElemAssoc.inverse().get(
-								originalComponent, InstantiatedTaskMappingEntry.class);
+				entry = (InstantiatedTaskMappingEntry)encEntryModelElemAssoc.inverse()
+						.get(originalComponent, InstantiatedTaskMappingEntry.class);
 			}
 
-			if(entry != null && entry.getDeployableComponent().isInstantiation()) {
+			if(entry != null && entry.getSource().isInstantiation()) {
 				addImplementsComponentRefSpec(curComp, (Component)originalComponent);
 			} else {
 				createImplementsComponentSpecifications(curComp);
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureInitializer.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureInitializer.java
index 1fc824b54dba6819e402a005b8bcb2800ceac752..98e07a27bda9e5fd57290fba524daa3880fc6a2b 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureInitializer.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureInitializer.java
@@ -29,7 +29,6 @@ import org.fortiss.af3.exploration.alg.dse.modeltransformation.ITransformationMo
 import org.fortiss.af3.exploration.alg.dse.modeltransformation.base.TransformationModuleBase;
 import org.fortiss.af3.exploration.alg.dse.modeltransformation.element.M2MCopier;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
-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.exception.TransformationModuleException;
 import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap;
@@ -46,8 +45,8 @@ import com.google.common.collect.Multimap;
  * 
  * @author diewald
  */
-public class ComponentArchitectureInitializer extends
-		TransformationModuleBase<ComponentArchitecture> {
+public class ComponentArchitectureInitializer
+		extends TransformationModuleBase<ComponentArchitecture> {
 
 	/** {@inheritDoc} */
 	@Override
@@ -110,7 +109,7 @@ public class ComponentArchitectureInitializer extends
 					"Could not retrieve the original Component Architecture from the set of base models.");
 		}
 
-		IMappingEncoding mapping =
+		AbstractTaskMappingEncoding mapping =
 				explorationEncodings.getEncoding(AbstractTaskMappingEncoding.class);
 		if(mapping == null) {
 			throw new TransformationModuleException(this,
@@ -157,10 +156,10 @@ public class ComponentArchitectureInitializer extends
 	 * transformation process is capable of establishing a unique link between entries and model
 	 * elements.
 	 */
-	private void updateEncodingAssociations(IMappingEncoding mapping) {
+	private void updateEncodingAssociations(AbstractTaskMappingEncoding mapping) {
 		Multimap<Component, Component> processedElements = HashMultimap.create();
-		for(IMappingEntry entry : mapping.getIMappingEntries()) {
-			IDeployableComponentAdapter<?> compAdp = entry.getDeployableComponent();
+		for(AbstractTaskMappingEntry entry : mapping.getMappingEntries()) {
+			IDeployableComponentAdapter<?> compAdp = entry.getSource();
 			Component origAF3Component = (Component)compAdp.getObject();
 			Component genAF3Component = null;
 
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureInstantiator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureInstantiator.java
index b1a037e433a9f07a7cd70fdf78459097a619b461..f548e095bf5e4034a9d606f59be7cf3ce872e957 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureInstantiator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureInstantiator.java
@@ -41,7 +41,6 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.in
 import org.fortiss.af3.exploration.alg.dse.modeltransformation.ITransformationModule;
 import org.fortiss.af3.exploration.alg.dse.modeltransformation.base.TransformationModuleBase;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
-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.exception.TransformationModuleException;
 import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap;
@@ -58,11 +57,11 @@ import org.fortiss.tooling.kernel.utils.EcoreUtils;
  * 
  * @author diewald
  */
-public class ComponentArchitectureInstantiator extends
-		TransformationModuleBase<ComponentArchitecture> {
+public class ComponentArchitectureInstantiator
+		extends TransformationModuleBase<ComponentArchitecture> {
 
 	/** References the {@link Component} to {@link ExecutionUnit} mapping calculated by the DSE. */
-	IMappingEncoding mapping;
+	InstantiatedTaskMappingEncoding<?> mapping;
 
 	/** {@inheritDoc} */
 	@Override
@@ -139,7 +138,7 @@ public class ComponentArchitectureInstantiator extends
 		Collection<Component> instantiatedComponents = new HashSet<>();
 		Collection<EObject> preCleanupElementsCollection = new HashSet<>();
 
-		for(IDeployableComponentAdapter<?> comp : mapping.getDeployedComponents()) {
+		for(IDeployableComponentAdapter<?> comp : mapping.getRequesters()) {
 			if(comp.isInstantiation()) {
 				Component origComp = (Component)comp.getReplacedComponent().getObject();
 				preCleanupElementsCollection.addAll(getChildrenWithType(origComp, EObject.class));
@@ -150,9 +149,9 @@ public class ComponentArchitectureInstantiator extends
 
 		Collection<Component> abstrCompRemovalList = new ArrayList<>();
 
-		for(IMappingEntry entry : mapping.getIMappingEntries()) {
+		for(InstantiatedTaskMappingEntry entry : mapping.getMappingEntries()) {
 			@SuppressWarnings("unchecked") IDeployableComponentAdapter<Component> compAdp =
-					(IDeployableComponentAdapter<Component>)entry.getDeployableComponent();
+					(IDeployableComponentAdapter<Component>)entry.getSource();
 			if(compAdp.isInstantiation()) {
 				// Randomly take one replicated generated Component that belongs to the
 				// corresponding adapter.
@@ -180,9 +179,8 @@ public class ComponentArchitectureInstantiator extends
 						instantiatedComponent);
 				instantiatedComponents.add(instantiatedComponent);
 			} else {
-				IMappingEntry abstrEntr =
-						pickFirstInstanceOf(AbstractTaskMappingEntry.class,
-								entry.getAssociatedElement());
+				IMappingEntry abstrEntr = pickFirstInstanceOf(AbstractTaskMappingEntry.class,
+						entry.getAssociatedElement());
 				Component genComp =
 						(Component)encEntryModelElemAssoc.get(abstrEntr, Component.class);
 				genToGenAssocMap.put(genComp, genComp);
@@ -199,8 +197,8 @@ public class ComponentArchitectureInstantiator extends
 	 * This method is intended to replace "abstract" {@link Component} with their instances from the
 	 * "Component Pool".
 	 */
-	private Component
-			instantiateComponent(Component abstrComponent, Component replacementComponent) {
+	private Component instantiateComponent(Component abstrComponent,
+			Component replacementComponent) {
 		Component instantiatedComponent = EcoreUtils.copy(replacementComponent);
 		instantiatedComponent.setContainer(abstrComponent.getContainer());
 
@@ -209,8 +207,8 @@ public class ComponentArchitectureInstantiator extends
 			// Rewire Channels.
 			// TODO: Possible NPE if optional is empty. Throw an exception about non-found port name
 			// here.
-			Collection<Port> matchingPorts =
-					filterSet(instantiatedConnectors, p -> movingPort.getName().equals(p.getName()));
+			Collection<Port> matchingPorts = filterSet(instantiatedConnectors,
+					p -> movingPort.getName().equals(p.getName()));
 			Port matchInstantatedConnector = matchingPorts.stream().findAny().get();
 
 			genToOrigAssocMap.put(matchInstantatedConnector, movingPort);
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureReplicator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureReplicator.java
index 168c6eadb6f72334129b62dc599acb65f6e5281b..2f731c353e33c96c0d62da2319febd74a9c3e316 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureReplicator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureReplicator.java
@@ -51,6 +51,7 @@ import org.fortiss.af3.component.model.InputPort;
 import org.fortiss.af3.component.model.OutputPort;
 import org.fortiss.af3.component.model.Port;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.comm.constraint.InternalIsolatedCommunicationSet;
+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.abstractmapping.AbstractTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEntry;
@@ -171,11 +172,12 @@ public class ComponentArchitectureReplicator
 		for(Entry<IDeployableComponentAdapter<Component>, Component> deployedComponentPair : genCompAssoc
 				.entrySet()) {
 			Component currentDeployableAf3Component = deployedComponentPair.getValue();
+			// TODO: This part needs to be updated to match the new Allocation Models.
 			Collection<ExecutionUnit> allocatedExecutionUnits =
 					getExecutionUnitAllocationsFromMapping(
 							mapping.getAllocatedResourcesFor(deployedComponentPair.getKey()));
-			Collection<IMappingEntry> currentMappingEntries =
-					mapping.getIMappingEntriesOf(deployedComponentPair.getKey());
+			Collection<AbstractTaskMappingEntry> currentMappingEntries =
+					mapping.getMappingEntriesOf(deployedComponentPair.getKey());
 			List<Component> generatedAndReplicatedComponents = new ArrayList<Component>();
 			generatedAndReplicatedComponents.add(currentDeployableAf3Component);
 
@@ -185,8 +187,8 @@ public class ComponentArchitectureReplicator
 			// components.
 			assert (!allocatedExecutionUnits
 					.isEmpty()) : "Each Component must be allocated to at least one ExecutionUnit.";
-			Iterator<IMappingEntry> mappingEntryIt = currentMappingEntries.iterator();
-			IMappingEntry mappingEntry = mappingEntryIt.next();
+			Iterator<AbstractTaskMappingEntry> mappingEntryIt = currentMappingEntries.iterator();
+			AbstractTaskMappingEntry mappingEntry = mappingEntryIt.next();
 			deploymentComponents.put(currentDeployableAf3Component,
 					(ExecutionUnit)mappingEntry.getTarget().getObject());
 			encEntryModelElemAssoc.put(mappingEntry, Component.class, currentDeployableAf3Component,
@@ -272,8 +274,8 @@ public class ComponentArchitectureReplicator
 	 * Returns a collection of all {@link InternalIsolatedCommunicationSet} constraints that do not
 	 * include the given {@link IMappingEntry}.
 	 */
-	private static Collection<InternalIsolatedCommunicationSet>
-			getOtherIsolationCommConstraints(TaskMappingEncoding<?> encoding, IMappingEntry entry) {
+	private static Collection<InternalIsolatedCommunicationSet> getOtherIsolationCommConstraints(
+			TaskMappingEncoding<?, ?> encoding, IMappingEntry entry) {
 		Collection<InternalIsolatedCommunicationSet> otherConstraints = new HashSet<>();
 		Collection<InternalIsolatedCommunicationSet> isoComm =
 				encoding.getConstraintsOf(InternalIsolatedCommunicationSet.class);
@@ -306,7 +308,7 @@ public class ComponentArchitectureReplicator
 	 * of a single {@link Component} into a {@link Collection} of {@link ExecutionUnit}s.
 	 */
 	private static Collection<ExecutionUnit> getExecutionUnitAllocationsFromMapping(
-			Collection<IResourceAdapter<?>> mappingEntriesOfRequester) {
+			Collection<Partition> mappingEntriesOfRequester) {
 		Collection<ExecutionUnit> allocatedExecutionUnits = new ArrayList<ExecutionUnit>();
 		for(IResourceAdapter<?> currentAllocationTarget : mappingEntriesOfRequester) {
 			assert (currentAllocationTarget
@@ -471,10 +473,9 @@ public class ComponentArchitectureReplicator
 	 * stored in the given {@code deployableComponent} Map.
 	 */
 	private void allocateReplicatedComponent(Map<Component, IPlatformResource> deploymentComponents,
-			Iterator<IMappingEntry> mappingEntryIt, Component replicatedComponent) {
-		IMappingEntry mappingEntry;
+			Iterator<AbstractTaskMappingEntry> mappingEntryIt, Component replicatedComponent) {
 		// Allocate the replica of the original component to the ExecutionUnits.
-		mappingEntry = mappingEntryIt.next();
+		AbstractTaskMappingEntry mappingEntry = mappingEntryIt.next();
 		deploymentComponents.put(replicatedComponent,
 				(ExecutionUnit)mappingEntry.getTarget().getObject());
 		encEntryModelElemAssoc.put(mappingEntry, Component.class, replicatedComponent,
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/.ratings
index d1738339ea1047ccafef862e8c1a357190c0e4fb..7d01ed135cf726233d25ed3f1478d7df8ed66f9d 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/.ratings
@@ -1,4 +1,4 @@
-DeploymentFinalizer.java 8ca42bc6095e7754fe14c244a708e160afaeb8f7 RED
+DeploymentFinalizer.java 39bb5a9d1953ca96b4713fa34a72a7c3e3d54e08 RED
 DeploymentInitializer.java 9d5023ee12fc92185bb418c735f1d6c5196dcab8 RED
 DeploymentReplicator.java 7c65dd646ca37477be592bb620536f15c48fa1f8 RED
-ExplorationSolutionToDeployment.java d95c338d700335be6d917057e0983ab1a4c4eedc RED
+ExplorationSolutionToDeployment.java 2013adebdac360e8113acb05e640661c484a0a8a RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/DeploymentFinalizer.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/DeploymentFinalizer.java
index 1f4f214ac7118620338b9097e44b6a24123b4555..8202d405e0e98d2485aa8a63739073955239a27e 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/DeploymentFinalizer.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/DeploymentFinalizer.java
@@ -42,6 +42,8 @@ import org.fortiss.af3.deployment.utils.DeploymentModelElementFactory;
 import org.fortiss.af3.exploration.alg.dse.modeltransformation.EMFModelConcurrencyHandler;
 import org.fortiss.af3.exploration.alg.dse.modeltransformation.ITransformationModule;
 import org.fortiss.af3.exploration.alg.dse.modeltransformation.base.TransformationModuleBase;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
 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.exception.TransformationModuleException;
@@ -163,11 +165,12 @@ public class DeploymentFinalizer extends TransformationModuleBase<Deployment> {
 	 * methods uses the DeploymentUtils and returns a {@link ComponentAllocation} that can be
 	 * processed in an AF3 compatible {@link Deployment}.
 	 */
-	private List<ComponentAllocation>
-			allocateComponentsToExecutionUnits(IMappingEncoding mappingEncoding) {
+	private List<ComponentAllocation> allocateComponentsToExecutionUnits(
+			IMappingEncoding<IDeployableComponentAdapter<?>, IExecutionUnitAdapter<?>, IMappingEntry<IDeployableComponentAdapter<?>, IExecutionUnitAdapter<?>>> mappingEncoding) {
 		List<ComponentAllocation> componentToExecutionUnitAllocations =
 				new ArrayList<ComponentAllocation>();
-		for(IMappingEntry curEntry : mappingEncoding.getIMappingEntries()) {
+		for(IMappingEntry<IDeployableComponentAdapter<?>, IExecutionUnitAdapter<?>> curEntry : mappingEncoding
+				.getMappingEntries()) {
 			Component curComponent =
 					(Component)encEntryModelElemAssoc.get(curEntry, Component.class);
 			// If the given entry is unknown, we examine the associated entries since the
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/ExplorationSolutionToDeployment.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/ExplorationSolutionToDeployment.java
index 033fee219d0fcdda8b5aeed5bf510b85371bc475..6ed5053b10106f33657f700839d5268e777648bb 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/ExplorationSolutionToDeployment.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/ExplorationSolutionToDeployment.java
@@ -32,6 +32,7 @@ import org.fortiss.af3.exploration.alg.dse.modeltransformation.base.Transformati
 import org.fortiss.af3.exploration.alg.dse.modeltransformation.comparch.ComponentArchitectureTransformer;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
 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.exception.TransformationModuleException;
 import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap;
 import org.fortiss.af3.exploration.alg.service.ExplorationEncodingMap;
@@ -114,8 +115,9 @@ public class ExplorationSolutionToDeployment extends TransformationStrategyBase<
 	 * be generated that is shipped with the generated {@link Deployment}.
 	 */
 	// TODO: Use "Component" as Generic.
-	private boolean isAdditionalArchRequiredByReplication(IMappingEncoding mapping) {
-		for(IDeployableComponentAdapter<?> deployedComponent : mapping.getDeployedComponents()) {
+	private boolean isAdditionalArchRequiredByReplication(
+			IMappingEncoding<IDeployableComponentAdapter<?>, ?, IMappingEntry<IDeployableComponentAdapter<?>, ?>> mapping) {
+		for(IDeployableComponentAdapter<?> deployedComponent : mapping.getRequesters()) {
 			if(mapping.getAllocatedResourcesFor(deployedComponent).size() > 1) {
 				return true;
 			}
@@ -129,8 +131,9 @@ public class ExplorationSolutionToDeployment extends TransformationStrategyBase<
 	 * {@link Deployment}.
 	 */
 	// TODO: Use "Component" as Generic.
-	private boolean isAdditionalArchRequiredByInstantiation(IMappingEncoding mapping) {
-		for(IDeployableComponentAdapter<?> deployedComponent : mapping.getDeployedComponents()) {
+	private boolean isAdditionalArchRequiredByInstantiation(
+			IMappingEncoding<IDeployableComponentAdapter<?>, ?, IMappingEntry<IDeployableComponentAdapter<?>, ?>> mapping) {
+		for(IDeployableComponentAdapter<?> deployedComponent : mapping.getRequesters()) {
 			if(deployedComponent.isInstantiation()) {
 				return true;
 			}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/.ratings
index 6ad16535713029635daddc5db050139da06ce4a9..9857a36f4e3eb903e3043531ea59426a83b96ee3 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/.ratings
@@ -1,5 +1,5 @@
-AcyclicTaskGraph.java d0fd0fec8e300d012327915742c0572b52f8a6f5 RED
+AcyclicTaskGraph.java 5a4c07640b15eff2da05b8054547d2ad03704ed9 RED
 ChannelAdapterWeightedEdge.java ef160bea5d74f09617388767313657dd76283f61 RED
 DefaultTaskGraph.java 51fc0ef55ba32b59c95feb6989be1ecb32b5334e RED
 TaskGraph.java 4a22a1beb6129396b7b478624bf1df2540598504 RED
-TaskGraphInstantiator.java 4484d226bc1240c37762a35dd6c3aab0287507af RED
+TaskGraphInstantiator.java fe92d5016c6c5b901c20ab418566286ef58d5a9c RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/TaskGraphInstantiator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/TaskGraphInstantiator.java
index df48da72eac0580bc91f1b985908e7cab69a6485..61a55ff76ad3727bed085854c4d967581e854dcf 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/TaskGraphInstantiator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/taskgraph/TaskGraphInstantiator.java
@@ -119,10 +119,9 @@ public class TaskGraphInstantiator<T extends TaskGraph> {
 	 * Replaces the given {#link abstractNode} with the given {#link instanceNode} in the {#link
 	 * instanceTaskGraph}.
 	 */
-	public void
-			insertInstanceComponent(T instanceTaskGraph,
-					IDeployableComponentAdapter<?> abstractNode,
-					IDeployableComponentAdapter<?> instanceNode) {
+	public void insertInstanceComponent(T instanceTaskGraph,
+			IDeployableComponentAdapter<?> abstractNode,
+			IDeployableComponentAdapter<?> instanceNode) {
 		ListenableDirectedWeightedGraph<IDeployableComponentAdapter<?>, ChannelAdapterWeightedEdge> graph =
 				instanceTaskGraph.getGraph();
 		instanceTaskGraph.addTask(instanceNode, abstractNode);
@@ -150,13 +149,12 @@ public class TaskGraphInstantiator<T extends TaskGraph> {
 	 * {@link IDeployableComponentAdapter} instantiating the "abstract"
 	 * {@link IDeployableComponentAdapter}.
 	 */
-	private
-			Map<IDeployableComponentAdapter<?>, IDeployableComponentAdapter<?>>
+	private Map<IDeployableComponentAdapter<?>, IDeployableComponentAdapter<?>>
 			createAbstractInstantiatedNodeAssociations(
 					InstantiatedTaskMappingEncoding<? extends InstantiatedTaskMappingEntry> encoding) {
 		Map<IDeployableComponentAdapter<?>, IDeployableComponentAdapter<?>> instanceToAbstractNodeMap =
 				new HashMap<IDeployableComponentAdapter<?>, IDeployableComponentAdapter<?>>();
-		for(IDeployableComponentAdapter<?> instantiatedComponent : encoding.getDeployedComponents()) {
+		for(IDeployableComponentAdapter<?> instantiatedComponent : encoding.getRequesters()) {
 			if(instantiatedComponent.isInstantiation()) {
 				instanceToAbstractNodeMap.put(instantiatedComponent,
 						instantiatedComponent.getReplacedComponent());
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/.ratings
index 7c950170160d3d7db83f527121bd12c89d69e4ee..fa19520a017a5d6c105704f400ad72371f8a6c84 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/.ratings
@@ -1,2 +1,2 @@
-Message.java a34de478e107ce70b0b4cc8e7def31620dd2d7be RED
-MessageGenerator.java 489284914093d21ee57fbc08220b5e928c560b22 RED
+Message.java 6c99d518bfc9e31bb174c299017b561ec69314aa RED
+MessageGenerator.java 4d7b8bb7d59a10129c686a344241701f9b0fd376 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/Message.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/Message.java
index 5b07c57d4729ac366bc30e1d62f61741589323a3..7f8b1c9f0472a7b635a9bf971d47c4f56f657233 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/Message.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/Message.java
@@ -19,6 +19,7 @@ import java.util.Collection;
 import java.util.HashSet;
 
 import org.fortiss.af3.component.model.Channel;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.StrictTTSchedule;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.TimeSlot;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter;
@@ -48,10 +49,10 @@ import org.jgrapht.graph.DefaultEdge;
 public class Message implements Comparable<Message> {
 
 	/** References the sender of this {@link Message}, i.e. a deployed component/task. */
-	private IMappingEntry sender;
+	private InstantiatedTaskMappingEntry sender;
 
 	/** References the {@link IMappingEntry}s that are receivers of this {@link Message}. */
-	private Collection<IMappingEntry> receiverMappingEntries;
+	private Collection<InstantiatedTaskMappingEntry> receiverMappingEntries;
 
 	/** References the receiver of this {@link Message}, i.e. a deployed component/task. */
 	private Collection<IResourceAdapter<?>> receiverResources;
@@ -81,8 +82,8 @@ public class Message implements Comparable<Message> {
 	 * Constructs a new {@link Message} between a sender and a receiver (identified by their
 	 * respective {@link IMappingEntry}s in the {@link IMappingEncoding}).
 	 */
-	public Message(ISignalAdapter<?> channelAdapter, IMappingEntry deployedSender,
-			Collection<? extends IMappingEntry> receiverEntries) {
+	public Message(ISignalAdapter<?> channelAdapter, InstantiatedTaskMappingEntry deployedSender,
+			Collection<? extends InstantiatedTaskMappingEntry> receiverEntries) {
 		this.messageAdapter = channelAdapter;
 		this.sender = deployedSender;
 		if(sender != null && sender.getTarget() != null) {
@@ -90,8 +91,8 @@ public class Message implements Comparable<Message> {
 		}
 
 		this.receiverResources = new HashSet<IResourceAdapter<?>>();
-		this.receiverMappingEntries = new HashSet<IMappingEntry>();
-		for(IMappingEntry receiver : receiverEntries) {
+		this.receiverMappingEntries = new HashSet<InstantiatedTaskMappingEntry>();
+		for(InstantiatedTaskMappingEntry receiver : receiverEntries) {
 			addReceiver(receiver);
 		}
 
@@ -148,7 +149,7 @@ public class Message implements Comparable<Message> {
 	}
 
 	/** Adds an {@link IMappingEntry} as a receiver of this message. */
-	public void addReceiver(IMappingEntry receiver) {
+	public void addReceiver(InstantiatedTaskMappingEntry receiver) {
 		receiverMappingEntries.add(receiver);
 		receiverResources.add(receiver.getTarget());
 	}
@@ -177,7 +178,7 @@ public class Message implements Comparable<Message> {
 	}
 
 	/** Returns the {@link IMappingEntry}s that receive this message. */
-	public Collection<IMappingEntry> getReceiverMappingEntries() {
+	public Collection<InstantiatedTaskMappingEntry> getReceiverMappingEntries() {
 		return receiverMappingEntries;
 	}
 
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/MessageGenerator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/MessageGenerator.java
index 1b987cb4535849f292b1e11ae5aac520e46e1074..d8d5c45482f03ad8fd27641bb5cd95839b023463 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/MessageGenerator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/comm/MessageGenerator.java
@@ -22,9 +22,11 @@ import java.util.Collection;
 import java.util.HashSet;
 
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.comm.constraint.InternalIsolatedCommunicationSet;
+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.encoding.taskmapping.abstractmapping.AbstractTaskMappingEntry;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ISignalAdapter;
@@ -38,7 +40,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry;
  * 
  * @author diewald
  */
-public class MessageGenerator<S extends TaskMappingEntry, T extends TaskMappingEncoding<S>> {
+public class MessageGenerator<S extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>, T extends TaskMappingEncoding<IDeployableComponentAdapter<?>, S>> {
 
 	/** Reference to the systemModel. */
 	private SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter;
@@ -58,7 +60,7 @@ public class MessageGenerator<S extends TaskMappingEntry, T extends TaskMappingE
 		// TODO: represent the signals in the task graph: do not use the systemModelAdapter here.
 		// Consequence: there may be multiple edges between two vertices (tasks).
 		for(S entry : encoding.getMappingEntries()) {
-			IDeployableComponentAdapter<?> senderComponent = entry.getDeployableComponent();
+			IDeployableComponentAdapter<?> senderComponent = entry.getSource();
 			if(senderComponent.isInstantiation()) {
 				senderComponent = senderComponent.getReplacedComponent();
 			}
@@ -74,11 +76,13 @@ public class MessageGenerator<S extends TaskMappingEntry, T extends TaskMappingE
 			for(ISignalAdapter<?> currentMessageAdapter : emittedMessages) {
 				// Create a Collection of dependent MappingEntries, for which messages are generated
 				// (if required).
+				// TODO: Get rid of the AbstractTaskMappingEntry(s) and use S only. Note that guava
+				// generic type reflection will be required!
 				Collection<S> mappingEntriesOfSuccesors =
 						getSuccessorMappingEntries(encoding, currentMessageAdapter);
-				Message generatedMessage =
-						generateMessageForSenderEntry(currentMessageAdapter, entry,
-								mappingEntriesOfSuccesors, allIsoCommConstr, otherIsoCommConstr);
+				Message generatedMessage = generateMessageForSenderEntry(currentMessageAdapter,
+						(InstantiatedTaskMappingEntry)entry, mappingEntriesOfSuccesors,
+						allIsoCommConstr, otherIsoCommConstr);
 				if(generatedMessage != null) {
 					generatedMessages.add(generatedMessage);
 				}
@@ -108,9 +112,8 @@ public class MessageGenerator<S extends TaskMappingEntry, T extends TaskMappingE
 		}
 
 		for(IDeployableComponentAdapter<?> successorComponent : realSuccessorComponents) {
-			Collection<IDeployableComponentAdapter<?>> encComps =
-					filterSet(encoding.getDeployedComponents(),
-							c -> c.getObject() == successorComponent.getObject());
+			Collection<IDeployableComponentAdapter<?>> encComps = filterSet(
+					encoding.getRequesters(), c -> c.getObject() == successorComponent.getObject());
 			for(IDeployableComponentAdapter<?> encComp : encComps) {
 				mappingEntriesOfSuccesors.addAll(encoding.getMappingEntriesOf(encComp));
 			}
@@ -124,14 +127,15 @@ public class MessageGenerator<S extends TaskMappingEntry, T extends TaskMappingE
 	 * {@link IExecutionUnitAdapter}.
 	 */
 	private Message generateMessageForSenderEntry(ISignalAdapter<?> senderChannel,
-			S senderMappingEntry, Collection<S> mappingEntriesOfSuccesors,
+			InstantiatedTaskMappingEntry senderMappingEntry,
+			Collection<S> mappingEntriesOfSuccesors,
 			Collection<InternalIsolatedCommunicationSet> allConstraints,
 			Collection<InternalIsolatedCommunicationSet> otherConstraints) {
 
 		Collection<S> receiverEntries = new HashSet<S>();
 		for(S mappingEntryReceiver : mappingEntriesOfSuccesors) {
 			// TODO: knowledge about prev steps.
-			IMappingEntry constrEntry =
+			AbstractTaskMappingEntry constrEntry =
 					mappingEntryReceiver.getAssociatedElement(AbstractTaskMappingEntry.class);
 			if((senderMappingEntry.getTarget() != mappingEntryReceiver.getTarget())) {
 				if(isPartOfIsolationCommConstraint(allConstraints, senderMappingEntry) &&
@@ -144,7 +148,8 @@ public class MessageGenerator<S extends TaskMappingEntry, T extends TaskMappingE
 		}
 
 		if(!receiverEntries.isEmpty()) {
-			return new Message(senderChannel, senderMappingEntry, receiverEntries);
+			return new Message(senderChannel, senderMappingEntry,
+					(Collection<? extends InstantiatedTaskMappingEntry>)receiverEntries);
 		}
 		return null;
 	}
@@ -154,8 +159,10 @@ public class MessageGenerator<S extends TaskMappingEntry, T extends TaskMappingE
 	 * {@link InternalIsolatedCommunicationSet}s.
 	 */
 	private boolean isPartOfIsolationCommConstraint(
-			Collection<InternalIsolatedCommunicationSet> isoComm, IMappingEntry entry) {
-		IMappingEntry actualEntry = entry.getAssociatedElement(AbstractTaskMappingEntry.class);
+			Collection<InternalIsolatedCommunicationSet> isoComm,
+			InstantiatedTaskMappingEntry entry) {
+		AbstractTaskMappingEntry actualEntry =
+				entry.getAssociatedElement(AbstractTaskMappingEntry.class);
 
 		for(InternalIsolatedCommunicationSet constr : isoComm) {
 			if(constr.contains(actualEntry)) {
@@ -170,8 +177,8 @@ public class MessageGenerator<S extends TaskMappingEntry, T extends TaskMappingE
 	 * Returns a collection of all {@link InternalIsolatedCommunicationSet} constraints that do not
 	 * include the given {@link IMappingEntry}.
 	 */
-	private Collection<InternalIsolatedCommunicationSet> getOtherIsolationCommConstraints(
-			T outGenotype, S entry) {
+	private Collection<InternalIsolatedCommunicationSet>
+			getOtherIsolationCommConstraints(T outGenotype, S entry) {
 		// TODO: here we use the knowledge that we have instantiated task mapping entries.
 		IMappingEntry actualEntry = entry.getAssociatedElement(AbstractTaskMappingEntry.class);
 
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/.ratings
index d1b082be04609dd57c253f46d68ff6c1432ba946..82094e2594f7b8d73581e1e994671a05c0fe0d8a 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/.ratings
@@ -1,2 +1,2 @@
-IMappingEncoding.java da6260fd43483f23c18d3331d8b5ac3953cae161 RED
-IMappingEntry.java 739ac3c6b20c1ce617e9a742e79482aee92ddc61 RED
+IMappingEncoding.java cd427e08588b59de29490c75c8a07947a115d4d7 RED
+IMappingEntry.java eba204428624604d850b3656ff58d56fb0c69591 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/IMappingEncoding.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/IMappingEncoding.java
index 64d62acc92c31a906c16e8ebe696c9982934077a..ac16e64e722e997c21f49b7110009c30f50c301c 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/IMappingEncoding.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/IMappingEncoding.java
@@ -17,8 +17,6 @@ package org.fortiss.af3.exploration.alg.dse.sysmodel.mapping;
 
 import java.util.Collection;
 
-import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
-import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IRequestAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter;
 import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
@@ -28,31 +26,32 @@ import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
  * 
  * @author diewald
  */
-public interface IMappingEncoding extends IExplorationEncoding {
+public interface IMappingEncoding<S extends IRequestAdapter<?>, T extends IResourceAdapter<?>, M extends IMappingEntry<S, T>>
+		extends IExplorationEncoding {
 
 	/**
 	 * Returns the allocation of a specific {@link IRequestAdapter} to its {@link IMappingEntry}s.
 	 */
-	public Collection<IResourceAdapter<?>> getAllocatedResourcesFor(IRequestAdapter<?> request);
+	public Collection<T> getAllocatedResourcesFor(S source);
 
 	/**
 	 * Returns the collection of {@link IMappingEntry}s which represent the (multi-)allocation of
-	 * the given {@link IDeployableComponentAdapter}s to {@link IExecutionUnitAdapter}s.
+	 * the given {@link IRequestAdapter}s to {@link IResourceAdapter}s.
 	 */
-	public Collection<IMappingEntry> getIMappingEntriesOf(IDeployableComponentAdapter<?> component);
+	public Collection<M> getMappingEntriesOf(S source);
 
 	/**
 	 * Returns whether {@code this} {@link IMappingEncoding} contains the given
 	 * {@link IMappingEntry}.
 	 */
-	public boolean containsEntry(IMappingEntry entry);
+	public boolean containsEntry(M entry);
 
 	/**
 	 * Returns the collection of {@link IMappingEntry}s contained in {@code this}
 	 * {@link IMappingEncoding}.
 	 */
-	public Collection<IMappingEntry> getIMappingEntries();
+	public Collection<M> getMappingEntries();
 
-	/** Returns the collection of deployed {@link IDeployableComponentAdapter}s. */
-	public Collection<IDeployableComponentAdapter<?>> getDeployedComponents();
+	/** Returns the collection of resource requesters. */
+	public Collection<S> getRequesters();
 }
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/IMappingEntry.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/IMappingEntry.java
index 0d6d7f3ba7cb2a4df360f59777373167d7cd27bf..a667682d10863655d6318083ce485fa2c0c64370 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/IMappingEntry.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/mapping/IMappingEntry.java
@@ -15,8 +15,8 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.sysmodel.mapping;
 
-import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
-import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IRequestAdapter;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter;
 import org.fortiss.af3.exploration.alg.guava.IAssociativeElement;
 
 /**
@@ -24,14 +24,14 @@ import org.fortiss.af3.exploration.alg.guava.IAssociativeElement;
  * 
  * @author diewald
  */
-public interface IMappingEntry extends IAssociativeElement<IMappingEntry> {
+public interface IMappingEntry<S extends IRequestAdapter<?>, T extends IResourceAdapter<?>>
+		extends IAssociativeElement<IMappingEntry<S, T>>, Cloneable {
+
+	/** Returns the {@link IRequestAdapter} that is represented by this {@link IMappingEntry}. */
+	S getSource();
 
 	/** Return target resource to which the request is mapped. */
-	IExecutionUnitAdapter<?> getTarget();
+	T getTarget();
 
-	/**
-	 * Returns the {@link IDeployableComponentAdapter} that is represented by this
-	 * {@link IMappingEntry}.
-	 */
-	IDeployableComponentAdapter<?> getDeployableComponent();
+	IMappingEntry<S, T> clone();
 }
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/.ratings
index 431a7b6cfb101ae13932aa42649aeeff097c9c3e..3efff2ade4bf2b5fdaa9423ef52725e80eca961b 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/.ratings
@@ -1 +1 @@
-TDMABusScheduler.java bcfa9f046e3e620650cb199af79ed2fa274fcc6e RED
+TDMABusScheduler.java f25bcd63b0a8dd2f5e72c72261246286bf48c841 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/TDMABusScheduler.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/TDMABusScheduler.java
index e7e09dbe4fc8f884724a0ba888917b898204f133..67f5294c40f046b6b595a3171139b15e9f7e82f7 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/TDMABusScheduler.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/comm/TDMABusScheduler.java
@@ -45,7 +45,6 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITransmissionUnitAdapte
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.AcyclicTaskGraph;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.comm.Message;
-import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.comm.IMessageRouter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.comm.ShortestPathRouter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.SchedulerBase;
@@ -97,17 +96,16 @@ public class TDMABusScheduler<S extends InstantiatedTaskMappingEntry, T extends
 				continue;
 			}
 			IDeployableComponentAdapter<?> senderComponent =
-					senderSlot.getDeployedRequester().getDeployableComponent();
+					senderSlot.getDeployedRequester().getSource();
 			message.addMessageSenderTimeSlot(senderSlot);
 			emitableMessagesPerSlot.put(senderSlot, message);
 
-			for(IMappingEntry receiverEntry : message.getReceiverMappingEntries()) {
+			for(InstantiatedTaskMappingEntry receiverEntry : message.getReceiverMappingEntries()) {
 				// If the receiver entry is only executed during the next hyperperiod, do not
 				// consider this receiver here.
 				AcyclicTaskGraph correspondingTaskGraph =
 						acycItgEnc.getTaskGraphOf(senderComponent);
-				IDeployableComponentAdapter<?> receiverComponent =
-						receiverEntry.getDeployableComponent();
+				IDeployableComponentAdapter<?> receiverComponent = receiverEntry.getSource();
 				if(correspondingTaskGraph.getGraph().containsEdge(senderComponent,
 						receiverComponent)) {
 					TimeSlot recvTimeSlot = schedule.getTimeSlotOf(receiverEntry);
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/.ratings
index 92bd89493ae1b864c0e9f752fd6a91c926616a60..4a6e0c7660f06a6622635db0a2a094882957aa26 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/.ratings
@@ -1,3 +1,3 @@
-EDFSchedulerBase.java d74d55b7702799f70dcc2eb8bd438e5a6fe1570d RED
-FailSilentEDFScheduler.java 8b39db36e35eecf724f47cc4b148d83430103e0e RED
-FaultDetectionVotingEDFScheduler.java 725aab1c5f631299229daa5b4e9dba036d212007 RED
+EDFSchedulerBase.java ccef414626ed16974de7a2524cf68fcef718fcb8 RED
+FailSilentEDFScheduler.java 121a3f20080cf87677e4cb6c695751ee7cf70cc9 RED
+FaultDetectionVotingEDFScheduler.java 01c337cc9870e7ccdf9adf69a61474b0e8f13196 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/EDFSchedulerBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/EDFSchedulerBase.java
index d5b4a5a269deed70e7a4dbf18aec1f6fb4490d94..45bb7e32734fac8f3eab946fb4ac9e3d42fa0a0b 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/EDFSchedulerBase.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/EDFSchedulerBase.java
@@ -544,7 +544,7 @@ public abstract class EDFSchedulerBase<S extends InstantiatedTaskMappingEntry, T
 
 	/** Returns the execution time for the given {@link IDeployableComponentAdapter}. */
 	protected abstract Apfloat getExecutionTime(
-			TaskMappingEncoding<? extends TaskMappingEntry> encoding,
+			TaskMappingEncoding<?, ? extends TaskMappingEntry<?, ?>> encoding,
 			InstantiatedAcyclicTaskGraphEncoding<S, ?> acycItgEnc,
 			IDeployableComponentAdapter<?> deployableComponent, S entry);
 
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FailSilentEDFScheduler.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FailSilentEDFScheduler.java
index 834b0b8ca54bebc24a15cc4f3990093ff068e19f..71163898a768f252caac895d5310f8711e1d029f 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FailSilentEDFScheduler.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FailSilentEDFScheduler.java
@@ -36,8 +36,8 @@ import org.fortiss.af3.exploration.model.ExplorationSpecification;
  * 
  * @author huang, barner
  */
-public class FailSilentEDFScheduler extends
-		EDFSchedulerBase<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> {
+public class FailSilentEDFScheduler
+		extends EDFSchedulerBase<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> {
 
 	/** Constructs a simple EDF scheduler for a given exploration run */
 	public FailSilentEDFScheduler(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
@@ -51,7 +51,8 @@ public class FailSilentEDFScheduler extends
 	 * .
 	 */
 	@Override
-	protected Apfloat getExecutionTime(TaskMappingEncoding<? extends TaskMappingEntry> encoding,
+	protected Apfloat getExecutionTime(
+			TaskMappingEncoding<?, ? extends TaskMappingEntry<?, ?>> encoding,
 			InstantiatedAcyclicTaskGraphEncoding<FailSilentTaskMappingEntry, ?> acycItgEnc,
 			IDeployableComponentAdapter<?> deployableComponent, FailSilentTaskMappingEntry entry) {
 		Apfloat executiontime =
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FaultDetectionVotingEDFScheduler.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FaultDetectionVotingEDFScheduler.java
index 7372b2ecab9cb41fb10b91294112aeb9112063fb..382b708f21a8f23da602ea57ce05f18ab0055af1 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FaultDetectionVotingEDFScheduler.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/sched/proc/FaultDetectionVotingEDFScheduler.java
@@ -103,7 +103,8 @@ public class FaultDetectionVotingEDFScheduler extends
 
 	/** {@inheritDoc} */
 	@Override
-	protected Apfloat getExecutionTime(TaskMappingEncoding<? extends TaskMappingEntry> encoding,
+	protected Apfloat getExecutionTime(
+			TaskMappingEncoding<?, ? extends TaskMappingEntry<?, ?>> encoding,
 			InstantiatedAcyclicTaskGraphEncoding<FaultDetectionVotingTaskMappingEntry, ?> acycItgEnc,
 			IDeployableComponentAdapter<?> deployableComponent,
 			FaultDetectionVotingTaskMappingEntry entry) {
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/port/plot/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/port/plot/.ratings
index e1415c754536dbb3aae9c11bb638cb584eb3ae25..1004ef811f494c83a6ab94bbb6882329aa35057c 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/port/plot/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/port/plot/.ratings
@@ -1,8 +1,7 @@
-DO_NOT_REVIEW_PACKAGE 02c34aff0e3b2b626d26b371e356c47f780dff35 RED
 MessagePathOnClicked.java 985f075fabbd5e6aa796e5ef0c0e6a976a9e8571 RED
 ScheduleGanttRenderer.java 8c481d56ca65d6074f0340f2c7789bbe6e3a48e6 RED
-ScheduleLabelGenerator.java ef0e34779ad78357756600b321e21bd3118f7632 RED
+ScheduleLabelGenerator.java 595273570eef7ef53ba5a9efd4ab25133aded3a8 RED
 SchedulePlotter.java 71570960426800c1e2589dd05e538e9abb69f126 RED
-ScheduleToolTipGenerator.java 150838f3e0af1206c166cfecf2baade5c563b33b RED
+ScheduleToolTipGenerator.java 5265f9a8edb405ecc5959d54deee293d4897fc52 RED
 TaskSeriesCollectionFromSchedule.java a945f60435ee3bfa908db211a4924963a6dcdfb2 RED
 XYPlotter.java 67d288da8431677636f08dbd2c19cbb6a40aeabe RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/port/plot/ScheduleLabelGenerator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/port/plot/ScheduleLabelGenerator.java
index 2dacbe718587b136c5feb4a9cab337f851a7bbb0..faa3f972c33dbce3d5678e6222aa1f7f0f195d5d 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/port/plot/ScheduleLabelGenerator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/port/plot/ScheduleLabelGenerator.java
@@ -94,8 +94,7 @@ public class ScheduleLabelGenerator implements CategoryItemLabelGenerator {
 						} else if(resource instanceof IGatewayUnitAdapter) {
 							retName = "G";
 						} else {
-							retName =
-									slot.getDeployedRequester().getDeployableComponent().getName();
+							retName = slot.getDeployedRequester().getSource().getName();
 						}
 					}
 				}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/port/plot/ScheduleToolTipGenerator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/port/plot/ScheduleToolTipGenerator.java
index 45c1d03d88c67c95ab6ca8f990c2ca2d8f4eedaf..99109c6076edd0a4e56d17673a0ab96bdcb3f957 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/port/plot/ScheduleToolTipGenerator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/port/plot/ScheduleToolTipGenerator.java
@@ -90,10 +90,10 @@ public class ScheduleToolTipGenerator extends StandardCategoryToolTipGenerator {
 
 				if(resource instanceof IExecutionUnitAdapter) {
 					if(currentSlot != null) {
-						IMappingEntry mappingEntry = currentSlot.getDeployedRequester();
+						IMappingEntry<IDeployableComponentAdapter<?>, ?> mappingEntry =
+								currentSlot.getDeployedRequester();
 						if(mappingEntry != null) {
-							IDeployableComponentAdapter<?> component =
-									mappingEntry.getDeployableComponent();
+							IDeployableComponentAdapter<?> component = mappingEntry.getSource();
 							if(component != null) {
 								prevSlot.put(resource, currentSlot);
 								taskAndResourceName =
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/.ratings
index 6a70053692d76730ccd08a7cea821a5517007c5f..e03bb0c00ce50d3a412aa846fc5fcc09cd40e03a 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/.ratings
@@ -1,7 +1,7 @@
-AF3Utils.java 1d6c8987cce3b5c43cb1ae2c77586877db38183b RED
+AF3Utils.java ae4bb78f77989e3a5689bfff80298c1bdeccdb3a RED
 DesignSpaceExplorationModelElementFactory.java 9dc330973f132c4b936e4dc7ee8407614faf2ff6 RED
-ExplorationAlgDebugUtils.java 1c963913e2c82df7369415d348a860f489fe0628 RED
+ExplorationAlgDebugUtils.java ff9feee46a3d00dd21d007a53f71f2de1ce10a94 RED
 ExplorationAlgUtils.java 5915fd72f26cf5d7ef49e62a8e304a63da71d8dc RED
 ExplorationEcoreUtils.java 48ed07aec3cd93e66d37abc10d50636d591f1c71 RED
 GraphUtils.java a1cec037a4d54bcf196dc5eebddc72b033993d6f RED
-TransformationUtils.java e10cc863c134ada43e71854a427e96fc019462de RED
+TransformationUtils.java b077f7a695cecd66bfdb5c265e8875900bee137c RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java
index 14ee010495b5afbf28c869d38c10488c87f34aea..18fff4f9cdf8e8508b060f1cd297960394673bac 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java
@@ -603,8 +603,9 @@ public class AF3Utils {
 	 * @return The {@link ComponentArchitecture} identified as the <i>Component Pool</i> or
 	 *         {@code null} if none is found.
 	 */
-	public static ComponentArchitecture getFirstComponentPool(IMappingEncoding mapping) {
-		for(IDeployableComponentAdapter<?> deployableComponent : mapping.getDeployedComponents()) {
+	public static ComponentArchitecture getFirstComponentPool(
+			IMappingEncoding<IDeployableComponentAdapter<?>, ?, IMappingEntry<IDeployableComponentAdapter<?>, ?>> mapping) {
+		for(IDeployableComponentAdapter<?> deployableComponent : mapping.getRequesters()) {
 			if(deployableComponent.isInstantiation()) {
 				// TODO: Avoid casting: Parameterize the IModelElementAdapter to use EObject-derived
 				// generics?
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/ExplorationAlgDebugUtils.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/ExplorationAlgDebugUtils.java
index d67eb8c92fcdc16be6c5669ed8b8f5721a99bea1..2ce3105a7cabe1af2c8259abbe768941ef8816af 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/ExplorationAlgDebugUtils.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/ExplorationAlgDebugUtils.java
@@ -21,12 +21,15 @@ import java.util.Collection;
 import java.util.stream.Collectors;
 
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.comm.constraint.InternalIsolatedCommunicationSet;
+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.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.ComposableGenotype;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.CompositePhenotype;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry;
 import org.opt4j.core.genotype.CompositeGenotype;
 
@@ -41,19 +44,17 @@ public class ExplorationAlgDebugUtils {
 	/**
 	 * TBD.
 	 */
-	public static <E extends TaskMappingEntry> boolean checkTaskMappingForSFConsistency(
-			TaskMappingEncoding<E> encoding) {
+	public static <E extends TaskMappingEntry<IDeployableComponentAdapter<?>, Partition>> boolean
+			checkTaskMappingForSFConsistency(
+					TaskMappingEncoding<IDeployableComponentAdapter<?>, E> encoding) {
 		// TODO #checking: Implement this method in a generic manner to check the number of channels
 		// of safety functions with the entry number in the allocation encodings.
-		Collection<E> sfEs =
-				encoding.getMappingEntries()
-						.stream()
-						.filter(e -> e.getDeployableComponent().getName()
-								.contains("SafetyProtection")).collect(Collectors.toList());
-		Collection<E> ioEs =
-				encoding.getMappingEntries().stream()
-						.filter(e -> e.getDeployableComponent().getName().contains("IOServer"))
-						.collect(Collectors.toList());
+		Collection<E> sfEs = encoding.getMappingEntries().stream()
+				.filter(e -> e.getSource().getName().contains("SafetyProtection"))
+				.collect(Collectors.toList());
+		Collection<E> ioEs = encoding.getMappingEntries().stream()
+				.filter(e -> e.getSource().getName().contains("IOServer"))
+				.collect(Collectors.toList());
 
 		return sfEs.size() == ioEs.size();
 	}
@@ -67,11 +68,11 @@ public class ExplorationAlgDebugUtils {
 	 *            identified.
 	 * @return Set of <i>all</i> child {@link ComposablePhenotype}s.
 	 */
-	public static Collection<ComposablePhenotype<?>> getAllSubPhenotypes(
-			CompositePhenotype<?> compositePhenotype) {
+	public static Collection<ComposablePhenotype<?>>
+			getAllSubPhenotypes(CompositePhenotype<?> compositePhenotype) {
 		Collection<ComposablePhenotype<?>> allSubPhenotypes = compositePhenotype.getSubPhenotypes();
-		pickInstanceOf(CompositePhenotype.class, allSubPhenotypes).forEach(
-				p -> allSubPhenotypes.addAll(getAllSubPhenotypes(p)));
+		pickInstanceOf(CompositePhenotype.class, allSubPhenotypes)
+				.forEach(p -> allSubPhenotypes.addAll(getAllSubPhenotypes(p)));
 		return allSubPhenotypes;
 	}
 
@@ -84,12 +85,12 @@ public class ExplorationAlgDebugUtils {
 	 *            identified.
 	 * @return Set of <i>all</i> child {@link ComposableGenotype}s.
 	 */
-	public static Collection<ComposableGenotype> getAllSubGenotypes(
-			CompositeGenotype<?, ?> compositeGenotype) {
+	public static Collection<ComposableGenotype>
+			getAllSubGenotypes(CompositeGenotype<?, ?> compositeGenotype) {
 		@SuppressWarnings("unchecked") Collection<ComposableGenotype> allSubGenotypes =
 				(Collection<ComposableGenotype>)compositeGenotype.values();
-		pickInstanceOf(CompositeGenotype.class, allSubGenotypes).forEach(
-				p -> allSubGenotypes.addAll(getAllSubGenotypes(p)));
+		pickInstanceOf(CompositeGenotype.class, allSubGenotypes)
+				.forEach(p -> allSubGenotypes.addAll(getAllSubGenotypes(p)));
 		return allSubGenotypes;
 	}
 
@@ -102,13 +103,14 @@ public class ExplorationAlgDebugUtils {
 	 *            {@link AbstractTaskMappingEncoding} to examine for consistency.
 	 * @return If the mapping is consistent w.r.t. the {@link InternalIsolatedCommunicationSet}.
 	 */
-	public static boolean mappingContainsAllIsolationCommEntries(
-			AbstractTaskMappingEncoding encoding) {
+	public static boolean
+			mappingContainsAllIsolationCommEntries(AbstractTaskMappingEncoding encoding) {
 		Collection<InternalIsolatedCommunicationSet> constrs =
 				encoding.getConstraintsOf(InternalIsolatedCommunicationSet.class);
+		// TODO: Remove the ugly casting when converting the internal constraints into "real" ones.
 		for(InternalIsolatedCommunicationSet curConstr : constrs) {
 			for(IMappingEntry entry : curConstr.getIsolatedCommunicationSet()) {
-				if(!encoding.containsEntry(entry)) {
+				if(!encoding.containsEntry((AbstractTaskMappingEntry)entry)) {
 					return false;
 				}
 			}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/TransformationUtils.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/TransformationUtils.java
index d6471f1356c863eb1baeab3a5a30174d22cb3d06..3354cb95319d036eaa040fdac2f7359b16752117 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/TransformationUtils.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/TransformationUtils.java
@@ -38,6 +38,7 @@ import org.fortiss.af3.component.model.OutputPort;
 import org.fortiss.af3.component.model.Port;
 import org.fortiss.af3.component.utils.ComponentModelElementFactory;
 import org.fortiss.af3.deployment.model.Deployment;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.abstractmapping.AbstractTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.modeltransformation.EMFModelConcurrencyHandler;
 import org.fortiss.af3.exploration.alg.dse.modeltransformation.ITransformationModule;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
@@ -256,11 +257,11 @@ public class TransformationUtils {
 	 *             If one {@link IDeployableComponentAdapter} of the mapping does not wrap an AF3
 	 *             {@link Component} but any other object.
 	 */
-	public static Collection<IDeployableComponentAdapter<Component>>
-			retrieveDeployableComponents(ITransformationModule<?> tModule, IMappingEncoding mapping)
-					throws TransformationModuleException {
+	public static Collection<IDeployableComponentAdapter<Component>> retrieveDeployableComponents(
+			ITransformationModule<?> tModule, AbstractTaskMappingEncoding mapping)
+			throws TransformationModuleException {
 		Collection<IDeployableComponentAdapter<Component>> deplCompAdps = new ArrayList<>();
-		for(IDeployableComponentAdapter<?> comp : mapping.getDeployedComponents()) {
+		for(IDeployableComponentAdapter<?> comp : mapping.getRequesters()) {
 			if(comp.getObject() instanceof Component) {
 				@SuppressWarnings("unchecked") IDeployableComponentAdapter<Component> castComp =
 						(IDeployableComponentAdapter<Component>)comp;