From 572cc85ddd9ce2e71ec151943913afb5a8ae272c Mon Sep 17 00:00:00 2001
From: Alexander Diewald <diewald@fortiss.org>
Date: Thu, 8 Mar 2018 16:43:59 +0000
Subject: [PATCH] Exploration.alg: Implement the SuperSet export in the
 Transformation framework.

* Simplify the Transformation Service interface.
* Clean and simplify the base implementation of the Transformation Framework.
* Introduce a container element that makes the Transformation almost agnostic to the fact if the inputs stem form DSE-internals or SuperSets.
* Add a SuperSetMap transformation strategy.
---
 .../trunk/plugin.xml                          |  34 +++-
 .../alg/dse/CompositeExplorationSolution.java |  59 ++++--
 .../problem/taskmapping/instantiate/.ratings  |   4 +-
 .../FailSilentAbstractTaskMappingDecoder.java |   1 +
 ...ctionVotingAbstractTaskMappingDecoder.java |   1 +
 .../alg/dse/backend/opt4j/solution/.ratings   |   2 +-
 .../opt4j/solution/ArchitectureSolution.java  |  12 +-
 .../alg/dse/modeltransformation/.ratings      |   2 +-
 .../ITransformationModule.java                |  34 +---
 .../alg/dse/modeltransformation/base/.ratings |   8 +-
 .../base/ElementTransformationModuleBase.java |  11 +-
 .../ElementTransformationStrategyBase.java    |  34 ++--
 .../base/TransformationModuleBase.java        |  12 --
 .../base/TransformationStrategyBase.java      |  59 ++----
 .../dse/modeltransformation/comparch/.ratings |  10 +-
 .../ComponentArchitectureFinalizer.java       |   9 +-
 .../ComponentArchitectureInitializer.java     |  19 +-
 .../ComponentArchitectureInserter.java        |   9 +-
 .../ComponentArchitectureInstantiator.java    |  12 +-
 .../ComponentArchitectureReplicator.java      |  17 +-
 .../modeltransformation/deployment/.ratings   |   8 +-
 .../deployment/DeploymentFinalizer.java       |  24 +--
 .../deployment/DeploymentInitializer.java     |  18 +-
 .../deployment/DeploymentReplicator.java      |  18 +-
 .../ExplorationSolutionToDeployment.java      |  27 ++-
 .../modeltransformation/dseinternal/.ratings  |   6 +
 .../ComponentExecutionUnitTransformation.java |  89 ++++++++
 ...artitionToExecutionUnitTransformation.java |  80 ++++++++
 .../dseinternal/PartitionTransformation.java  |  73 +++++++
 .../SuperSetTransformationBase.java           |  68 +++++++
 .../SuperSetTransformationStrategy.java       | 121 +++++++++++
 .../TaskToPartitionTransformation.java        |  82 ++++++++
 .../dse/modeltransformation/element/.ratings  |   2 +-
 .../element/IElementTransformationModule.java |  13 +-
 .../modeltransformation/partition/.ratings    |   2 +-
 .../partition/PartitionTransformer.java       |  23 +--
 .../dse/modeltransformation/safety/.ratings   |   4 +-
 .../safety/SafetyChannelPortReplicator.java   |  11 +-
 .../safety/SafetyDiagUnitRemover.java         |  12 +-
 .../alg/graph/IDependencyModule.java          |   2 +-
 .../af3/exploration/alg/plot/XYPlotter.java   |  18 +-
 .../af3/exploration/alg/service/.ratings      |   2 +-
 .../ExplorationTransformationInputs.java      |  95 +++++++++
 .../IExplorationTransformationService.java    | 112 +----------
 .../exploration/alg/service/internal/.ratings |   2 +-
 .../ExplorationTransformationService.java     | 190 ++++--------------
 46 files changed, 908 insertions(+), 543 deletions(-)
 create mode 100644 org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/.ratings
 create mode 100644 org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/ComponentExecutionUnitTransformation.java
 create mode 100644 org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/PartitionToExecutionUnitTransformation.java
 create mode 100644 org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/PartitionTransformation.java
 create mode 100644 org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/SuperSetTransformationBase.java
 create mode 100644 org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/SuperSetTransformationStrategy.java
 create mode 100644 org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/TaskToPartitionTransformation.java
 create mode 100644 org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/ExplorationTransformationInputs.java

diff --git a/org.fortiss.af3.exploration.alg/trunk/plugin.xml b/org.fortiss.af3.exploration.alg/trunk/plugin.xml
index bca0988c..1aa145dc 100644
--- a/org.fortiss.af3.exploration.alg/trunk/plugin.xml
+++ b/org.fortiss.af3.exploration.alg/trunk/plugin.xml
@@ -203,17 +203,47 @@
          </modelElementClass>
       </transformationModule>
       <transformationModule
-            module="org.fortiss.af3.exploration.alg.dse.modeltransformation.partition.PartitionTransformer">
+            module="org.fortiss.af3.exploration.alg.dse.modeltransformation.partition.PartitionTransformationStrategy">
          <modelElementClass
                modelElementClass="org.fortiss.af3.allocation.model.AllocationTableCollection">
          </modelElementClass>
       </transformationModule>
       <transformationModule
-            module="org.fortiss.af3.exploration.alg.dse.modeltransformation.partition.PartitionTransformationStrategy">
+            module="org.fortiss.af3.exploration.alg.dse.modeltransformation.partition.PartitionTransformer">
          <modelElementClass
                modelElementClass="org.fortiss.af3.allocation.model.AllocationTableCollection">
          </modelElementClass>
       </transformationModule>
+      <transformationModule
+            module="org.fortiss.af3.exploration.alg.dse.modeltransformation.dseinternal.SuperSetTransformationStrategy">
+         <modelElementClass
+               modelElementClass="org.fortiss.af3.exploration.model.SuperSetMap">
+         </modelElementClass>
+      </transformationModule>
+      <transformationModule
+            module="org.fortiss.af3.exploration.alg.dse.modeltransformation.dseinternal.ComponentExecutionUnitTransformation">
+         <modelElementClass
+               modelElementClass="org.fortiss.af3.platform.model.allocation.ComponentToExecutionUnitAllocationEntry">
+         </modelElementClass>
+      </transformationModule>
+      <transformationModule
+            module="org.fortiss.af3.exploration.alg.dse.modeltransformation.dseinternal.PartitionToExecutionUnitTransformation">
+         <modelElementClass
+               modelElementClass="org.fortiss.af3.partition.model.allocation.PartitionToExecutionUnitAllocationEntry">
+         </modelElementClass>
+      </transformationModule>
+      <transformationModule
+            module="org.fortiss.af3.exploration.alg.dse.modeltransformation.dseinternal.PartitionTransformation">
+         <modelElementClass
+               modelElementClass="org.fortiss.af3.partition.model.Partition">
+         </modelElementClass>
+      </transformationModule>
+      <transformationModule
+            module="org.fortiss.af3.exploration.alg.dse.modeltransformation.dseinternal.TaskToPartitionTransformation">
+         <modelElementClass
+               modelElementClass="org.fortiss.af3.partition.model.allocation.TaskToPartitionAllocationEntry">
+         </modelElementClass>
+      </transformationModule>
    </extension>
    <extension
          id="org.fortiss.af3.exploration.alg.transformationModule"
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/CompositeExplorationSolution.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/CompositeExplorationSolution.java
index b03ba997..8e2d1728 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/CompositeExplorationSolution.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/CompositeExplorationSolution.java
@@ -16,15 +16,20 @@
 package org.fortiss.af3.exploration.alg.dse;
 
 import static org.fortiss.af3.allocation.utils.AllocationModelElementFactory.createAllocationEntry;
+import static org.fortiss.af3.exploration.alg.service.ExplorationService.getService;
+import static org.fortiss.af3.exploration.alg.service.IExplorationTransformationService.TransformationContext.DSE_INTERNAL;
 import static org.fortiss.af3.exploration.util.DSMLModelElementFactory.createSuperSet;
 import static org.fortiss.af3.exploration.util.DesignSpaceExplorationModelElementFactory.createSingleExplorationSolution;
 import static org.fortiss.af3.partition.util.PartitionModelElementFactory.createPartition;
 import static org.fortiss.tooling.common.util.LambdaUtils.getFirst;
 
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
 
+import org.eclipse.emf.ecore.EObject;
 import org.fortiss.af3.component.model.Component;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEncoding;
@@ -36,8 +41,11 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.IExplorationSo
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.IScheduleSolution;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.StrictTTSchedule;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
+import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService;
 import org.fortiss.af3.exploration.dsl_v2.model.expression.SuperSet;
 import org.fortiss.af3.exploration.model.ExplorationTarget;
+import org.fortiss.af3.exploration.model.SuperSetMap;
 import org.fortiss.af3.exploration.model.solutions.ExplorationResult;
 import org.fortiss.af3.exploration.model.solutions.ExplorationSolution;
 import org.fortiss.af3.exploration.model.solutions.SingleExplorationSolution;
@@ -51,6 +59,9 @@ import org.fortiss.af3.task.model.Task;
 import org.fortiss.tooling.base.model.element.IModelElement;
 import org.opt4j.core.Value;
 
+import com.google.common.collect.ClassToInstanceMap;
+import com.google.common.collect.MutableClassToInstanceMap;
+
 /**
  * Result of a DSE run, i.e. the {@link IExplorationSolution}s and {@link SolutionQuantification}s
  * for all pareto-optimal {@link IExplorationSolution}s.
@@ -147,7 +158,8 @@ public class CompositeExplorationSolution<P extends Phenotype> {
 	 * .
 	 */
 	@SuppressWarnings("unchecked")
-	public <T> ExplorationSolution convertToExplorationSolution() throws Exception {
+	public <T, S extends IModelElement> ExplorationSolution convertToExplorationSolution()
+			throws Exception {
 		ExplorationSolution expSol =
 				org.fortiss.af3.exploration.util.DesignSpaceExplorationModelElementFactory
 						.createExplorationSolution();
@@ -173,20 +185,41 @@ public class CompositeExplorationSolution<P extends Phenotype> {
 				singleExpSolution.put((ExplorationTarget<?>)solEntry.getKey(), res);
 			}
 
+			ClassToInstanceMap<Phenotype> internalSolutions = MutableClassToInstanceMap.create();
+			for(Class<? extends Phenotype> solutionType : singleSolution
+					.getAllSubSolutionClasses()) {
+				internalSolutions.put(solutionType, singleSolution.getSubSolution(solutionType));
+			}
+
 			// FIXME: HACK: Currently, only the Deployment exploration is used, whereas the solution
 			// transformation framework is non-functional at the moment.
-			InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry> tm =
-					singleSolution.getSubSolution(InstantiatedTaskMappingEncoding.class);
-			PartitionMappingEncoding pmEncoding =
-					singleSolution.getSubSolution(PartitionMappingEncoding.class);
-			singleExpSolution.getSolutionSets().put(ComponentToExecutionUnitAllocationEntry.class,
-					createCompExecUnitAllocs(tm, pmEncoding));
-			singleExpSolution.getSolutionSets().put(org.fortiss.af3.partition.model.Partition.class,
-					createPartitions(pmEncoding));
-			singleExpSolution.getSolutionSets().put(PartitionToExecutionUnitAllocationEntry.class,
-					createPartitionToExecutionUnitAllocations(pmEncoding));
-			singleExpSolution.getSolutionSets().put(TaskToPartitionAllocationEntry.class,
-					createTaskToExecutionUnitAllocations(tm));
+			Collection<Class<?>> outputTypes = new ArrayList<>();
+			// In a later stage, we would pass a list of generated "generatable" SuperSets derived
+			// from the Phenotypes. This is the inverse setup of the model-oriented transformations
+			// where we request desired types. Here, we'd calculate all types that can be produced.
+			outputTypes.add(SuperSetMap.class);
+			// outputTypes.add(org.fortiss.af3.partition.model.Partition.class);
+			// outputTypes.add(ComponentToExecutionUnitAllocationEntry.class);
+			// outputTypes.add(TaskToPartitionAllocationEntry.class);
+			// outputTypes.add(PartitionToExecutionUnitAllocationEntry.class);
+			ExplorationTransformationInputs inputs =
+					new ExplorationTransformationInputs(null, internalSolutions);
+			Map<Class<EObject>, ?> solutionModels =
+					getService(IExplorationTransformationService.class)
+							.getTransformedModels(DSE_INTERNAL, null, inputs, outputTypes, "");
+			singleExpSolution.setSolutionSets((SuperSetMap)solutionModels.get(SuperSetMap.class));
+			// InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry> tm =
+			// singleSolution.getSubSolution(InstantiatedTaskMappingEncoding.class);
+			// PartitionMappingEncoding pmEncoding =
+			// singleSolution.getSubSolution(PartitionMappingEncoding.class);
+			// singleExpSolution.getSolutionSets().put(ComponentToExecutionUnitAllocationEntry.class,
+			// createCompExecUnitAllocs(tm, pmEncoding));
+			// singleExpSolution.getSolutionSets().put(org.fortiss.af3.partition.model.Partition.class,
+			// createPartitions(pmEncoding));
+			// singleExpSolution.getSolutionSets().put(PartitionToExecutionUnitAllocationEntry.class,
+			// createPartitionToExecutionUnitAllocations(pmEncoding));
+			// singleExpSolution.getSolutionSets().put(TaskToPartitionAllocationEntry.class,
+			// createTaskToExecutionUnitAllocations(tm));
 
 			// Invalid solutions are filtered before.
 			singleExpSolution.setSolutionState(SolutionState.OPTIMIZED);
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/.ratings
index 85f637ba..01dfb3ae 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/.ratings
@@ -1,4 +1,4 @@
 AbstractTaskMappingDecoder.java 2f3aa1860a3f10224bd8f5eab4ee07f136f44065 RED
-FailSilentAbstractTaskMappingDecoder.java 5e93b07f400d697f318d029d00c674c715513422 RED
-FaultDetectionVotingAbstractTaskMappingDecoder.java 8d3613f856787bf667ef2bcdae441375cdb9e989 RED
+FailSilentAbstractTaskMappingDecoder.java 737f312502e0e41eb7de9e78985572436ec95ce9 RED
+FaultDetectionVotingAbstractTaskMappingDecoder.java bf75917b2a858e77feb677957a6eb9333bf099d9 RED
 TaskInstanceResourceAlignmentDecoder.java 4e9e61817df2e869ef84b67943c4e9874bbd4f37 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FailSilentAbstractTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FailSilentAbstractTaskMappingDecoder.java
index 2abf74f9..0d68a832 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FailSilentAbstractTaskMappingDecoder.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FailSilentAbstractTaskMappingDecoder.java
@@ -39,6 +39,7 @@ import org.fortiss.af3.exploration.moea.model.DseSpecification;
  * 
  * @author diewald
  */
+// FIXME: The type hierarchy and naming of the classes is extremely confusing. FIX ASAP!
 public class FailSilentAbstractTaskMappingDecoder extends
 		AbstractTaskMappingDecoder<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding> {
 
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FaultDetectionVotingAbstractTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FaultDetectionVotingAbstractTaskMappingDecoder.java
index c8ec4052..91ad4881 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FaultDetectionVotingAbstractTaskMappingDecoder.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/FaultDetectionVotingAbstractTaskMappingDecoder.java
@@ -39,6 +39,7 @@ import org.opt4j.core.problem.Decoder;
  * 
  * @author diewald
  */
+// FIXME: The type hierarchy and naming of the classes is extremely confusing. FIX ASAP!
 public class FaultDetectionVotingAbstractTaskMappingDecoder extends
 		AbstractTaskMappingDecoder<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding> {
 
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 de60db13..2d79db22 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
@@ -1,5 +1,5 @@
 ArchExpSubSolution.java 3bb56206fe70f19f7cb6aee575eba552ce9bbc4e RED
-ArchitectureSolution.java 8ba40ce339c4195641ed1b67c79718e297d66e4c RED
+ArchitectureSolution.java 4403246ed4c40e907e5def4ff503001081f0f47d YELLOW
 IExplorationSolution.java a6153937197358907ceec46606a7f28620c26f2b RED
 IScheduleSolution.java 8a2959147bdca874fd43b1591bc5471b68c04333 RED
 StrictTTSchedule.java eec7ffce1047cec7b869a938fd428e56cd705163 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/ArchitectureSolution.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/ArchitectureSolution.java
index 890be805..3e476e72 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/ArchitectureSolution.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/solution/ArchitectureSolution.java
@@ -21,6 +21,7 @@ import java.util.LinkedList;
 import java.util.Queue;
 
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.ArchitectureExplorationEncoding;
+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.backend.opt4j.extensions.compositegene.phenotype.CompositePhenotypeBase;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
@@ -40,11 +41,14 @@ public class ArchitectureSolution extends CompositePhenotypeBase<ArchitectureExp
 	@Override
 	public Collection<Class<? extends ArchExpSubSolution<?>>> getAllSubSolutionClasses() {
 		Collection<Class<? extends ArchExpSubSolution<?>>> subSolutionClasses = new ArrayList<>();
-		Queue<Phenotype> traversalList = new LinkedList<>();
-		traversalList.addAll(subPhenotypes.values());
+		Queue<ComposablePhenotype<?>> traversalList = new LinkedList<>();
+		traversalList
+				.addAll((Collection<? extends ComposablePhenotype<?>>)(Collection<?>)subPhenotypes
+						.values());
 		while(!traversalList.isEmpty()) {
-			Phenotype phenotype = traversalList.poll();
-			subSolutionClasses.add((Class<? extends ArchExpSubSolution<?>>)phenotype.getClass());
+			ComposablePhenotype<?> phenotype = traversalList.poll();
+			subSolutionClasses
+					.add((Class<? extends ArchExpSubSolution<?>>)phenotype.getPTypeToRegister());
 			if(phenotype instanceof CompositePhenotype) {
 				traversalList.addAll(((CompositePhenotype<?>)phenotype).getSubPhenotypes());
 			}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/.ratings
index 137f111a..8b4b45e1 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/.ratings
@@ -1,4 +1,4 @@
 DeprecatedModelGeneratorBase.java 653a6413139120d4e8949880c6b951aad09fbeaf RED
 EMFModelConcurrencyHandler.java b488636059888b61c2b4af974c1752be1d5f3d3b RED
-ITransformationModule.java 3ca96726e0eb6f4541be95cb9453d2de2ab99799 RED
+ITransformationModule.java 5277a9d1fd452835dbe3fe8b7182bb83edd4c0e9 YELLOW
 ITransformationStrategy.java eb72568e6df58b44ac96418c8d59c3a98715dc5c RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/ITransformationModule.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/ITransformationModule.java
index b541848e..f995cf6c 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/ITransformationModule.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/ITransformationModule.java
@@ -24,11 +24,10 @@ import org.fortiss.af3.exploration.alg.exception.TransformationModuleException;
 import org.fortiss.af3.exploration.alg.graph.IDependencyModule;
 import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap;
 import org.fortiss.af3.exploration.alg.guava.TypedBiMap;
-import org.fortiss.af3.exploration.alg.service.ExplorationEncodingMap;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
 import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
 import org.fortiss.af3.exploration.alg.service.IExplorationModule;
 import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService.TransformationContext;
-import org.fortiss.af3.exploration.model.SuperSetMap;
 import org.fortiss.tooling.kernel.service.base.IEObjectAware;
 
 import com.google.common.collect.Multimap;
@@ -43,7 +42,7 @@ import com.google.common.collect.Multimap;
  * when being launched as a submodule if the required inputs are not available.
  * 
  * The method
- * {@link #transform(TransformationState, TransformationContext, SubClassToInstanceMap, ExplorationEncodingMap, SubClassToInstanceMap, EObject)}
+ * {@link #transform(TransformationState, TransformationContext, ExplorationTransformationInputs, SubClassToInstanceMap, EObject)}
  * actually triggers the
  * transformation using the
  * module itself and its submodules.
@@ -179,25 +178,6 @@ public interface ITransformationModule<T extends EObject>
 	/** Predicates whether the execution of is required or optional. */
 	boolean isOptional();
 
-	/**
-	 * Loads the given association maps into {@code this} {@link ITransformationModule}. Typically,
-	 * these maps are passed from the parent {@link ITransformationModule}.
-	 * 
-	 * @param encEntryToGenElemAssocs
-	 *            Associates entries of {@link IExplorationEncoding}s with model elements.
-	 * @param origToGenElemAssocs
-	 *            Associates original input model elements with generated ones.
-	 * @param genToOrigElemAssocs
-	 *            Associates generated model elements with those provided by the input models.
-	 * @param genToGenElemAssocs
-	 *            Map that defines which elements from previous steps are related to which elements
-	 *            from one of the successor steps (1:n relation).
-	 */
-	void loadElementAssociations(TypedBiMap<Object, EObject> encEntryToGenElemAssocs,
-			Multimap<EObject, EObject> origToGenElemAssocs,
-			Map<EObject, EObject> genToOrigElemAssocs,
-			Multimap<EObject, EObject> genToGenElemAssocs);
-
 	/**
 	 * Updates the given associative maps that allow to trace objects between the original and the
 	 * transformed model, and between the entries of and exploration encoding and the elements of
@@ -260,10 +240,8 @@ public interface ITransformationModule<T extends EObject>
 	 *            The state of the transformation engine, e.g., replication.
 	 * @param context
 	 *            The model context.
-	 * @param baseModels
-	 *            Input EMF models.
-	 * @param explorationEncodings
-	 *            {@link IExplorationEncoding}s resulting from the DSE.
+	 * @param inputs
+	 *            Input types.
 	 * @param transformedModels
 	 *            Container map of all the transformed models.
 	 * @param outputModel
@@ -275,9 +253,7 @@ public interface ITransformationModule<T extends EObject>
 	 *             If the transformation fails at {@code this} {@link ITransformationModule}.
 	 */
 	<N extends EObject, S extends EObject> T transform(TransformationState state,
-			TransformationContext context, SubClassToInstanceMap<S> baseModels,
-			SuperSetMap superSets,
-			ExplorationEncodingMap<IExplorationEncoding> explorationEncodings,
+			TransformationContext context, ExplorationTransformationInputs inputs,
 			SubClassToInstanceMap<N> transformedModels, EObject outputModel)
 			throws TransformationModuleException;
 
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/base/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/base/.ratings
index 71fb71cb..9139ba4a 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/base/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/base/.ratings
@@ -1,4 +1,4 @@
-ElementTransformationModuleBase.java c533bd1998cfef5926e1e7be47611701f9e538bc RED
-ElementTransformationStrategyBase.java 24c08064677ec7f793e6dda8ec329dbce7b8a443 RED
-TransformationModuleBase.java 31eb1ab26b606a8416f69203a0bfb6fd54450c66 RED
-TransformationStrategyBase.java 1b2ef090b47d89e2109d16dc16bfbf8e54123d72 YELLOW
+ElementTransformationModuleBase.java 812658d8643df59a7ebd799c85085d762ed8cfde RED
+ElementTransformationStrategyBase.java 468380f3421f4e0e39ddfa1f8ac6138b07baf1cc RED
+TransformationModuleBase.java 62c310e26a9933b668f99c657aef250bffc5fe10 RED
+TransformationStrategyBase.java 4d042b75cbdd0d2f79b0cec79e627c0e9630e512 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/base/ElementTransformationModuleBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/base/ElementTransformationModuleBase.java
index 2a0cebe8..bc5f586f 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/base/ElementTransformationModuleBase.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/base/ElementTransformationModuleBase.java
@@ -24,10 +24,8 @@ import org.fortiss.af3.exploration.alg.dse.modeltransformation.ITransformationMo
 import org.fortiss.af3.exploration.alg.dse.modeltransformation.element.IElementTransformationModule;
 import org.fortiss.af3.exploration.alg.exception.TransformationModuleException;
 import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap;
-import org.fortiss.af3.exploration.alg.service.ExplorationEncodingMap;
-import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
 import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService.TransformationContext;
-import org.fortiss.af3.exploration.model.SuperSetMap;
 import org.fortiss.tooling.base.model.element.IModelElement;
 
 /**
@@ -41,9 +39,7 @@ public abstract class ElementTransformationModuleBase<T extends EObject, O exten
 	/** {@inheritDoc} */
 	@Override
 	public <N extends EObject, S extends EObject> T transform(TransformationState state,
-			TransformationContext context, SubClassToInstanceMap<S> baseModels,
-			SuperSetMap superSets,
-			ExplorationEncodingMap<IExplorationEncoding> explorationEncodings,
+			TransformationContext context, ExplorationTransformationInputs inputs,
 			SubClassToInstanceMap<N> transformedModels, EObject outputModel)
 			throws TransformationModuleException {
 		if(outputModel == null) {
@@ -55,8 +51,7 @@ public abstract class ElementTransformationModuleBase<T extends EObject, O exten
 		@SuppressWarnings("unchecked") O tempCastedOutputModel = (O)outputModel;
 		Collection<T> elements = getChildrenWithType(outputModel, getElementClass());
 		for(T currElement : elements) {
-			transformElement(currElement, baseModels, explorationEncodings, transformedModels,
-					tempCastedOutputModel);
+			transformElement(currElement, inputs, transformedModels, tempCastedOutputModel);
 		}
 
 		@SuppressWarnings("unchecked") T castedOutputModel = (T)outputModel;
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/base/ElementTransformationStrategyBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/base/ElementTransformationStrategyBase.java
index b292bbf0..1dc8dc3a 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/base/ElementTransformationStrategyBase.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/base/ElementTransformationStrategyBase.java
@@ -31,10 +31,8 @@ import org.fortiss.af3.exploration.alg.dse.modeltransformation.ITransformationSt
 import org.fortiss.af3.exploration.alg.dse.modeltransformation.element.IElementTransformationModule;
 import org.fortiss.af3.exploration.alg.exception.TransformationModuleException;
 import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap;
-import org.fortiss.af3.exploration.alg.service.ExplorationEncodingMap;
-import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
 import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService.TransformationContext;
-import org.fortiss.af3.exploration.model.SuperSetMap;
 import org.fortiss.af3.project.model.FileProject;
 import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
 
@@ -51,9 +49,7 @@ public abstract class ElementTransformationStrategyBase<T extends EObject, O ext
 	/** {@inheritDoc} */
 	@Override
 	public <N extends EObject, S extends EObject> T transform(TransformationState state,
-			TransformationContext context, SubClassToInstanceMap<S> baseModels,
-			SuperSetMap superSets,
-			ExplorationEncodingMap<IExplorationEncoding> explorationEncodings,
+			TransformationContext context, ExplorationTransformationInputs inputs,
 			SubClassToInstanceMap<N> transformedModels, EObject outputModel)
 			throws TransformationModuleException {
 		// TODO: Consider using generics to define the allowed sub-module types.
@@ -69,8 +65,8 @@ public abstract class ElementTransformationStrategyBase<T extends EObject, O ext
 		for(IElementTransformationModule<? extends EObject, O> subModule : execOrder) {
 			if(subModule.getActivationStage() == state ||
 					subModule instanceof ElementTransformationStrategyBase) {
-				if(subModule.isOptional() && !canExecuteModule(baseModels, transformedModels,
-						explorationEncodings, subModule)) {
+				if(subModule.isOptional() &&
+						!canExecuteModule(inputs, transformedModels, subModule)) {
 					break;
 				}
 
@@ -83,10 +79,9 @@ public abstract class ElementTransformationStrategyBase<T extends EObject, O ext
 				@SuppressWarnings("unchecked") O tempCastedOutputModel =
 						(O)transformedModels.get(subModule.getElementContainerType());
 
-				subModule.loadElementAssociations(encEntryModelElemAssoc, origToGenAssocMap,
-						genToOrigAssocMap, genToGenAssocMap);
-				T transformedModel = transformElements(subModule, baseModels, explorationEncodings,
-						transformedModels, tempCastedOutputModel);
+				subModule.applyAssociationUpdates(this);
+				T transformedModel = transformElements(subModule, inputs, transformedModels,
+						tempCastedOutputModel);
 				if(transformedModel == null) {
 					throw new TransformationModuleException(subModule,
 							"The submodule did not return the transformed model. It is required by the framework.");
@@ -106,7 +101,7 @@ public abstract class ElementTransformationStrategyBase<T extends EObject, O ext
 
 		executeSubModules(
 				filterSet(getSubModules(), e -> !(e instanceof IElementTransformationModule<?, ?>)),
-				context, baseModels, superSets, explorationEncodings, transformedModels, state);
+				context, inputs, transformedModels, state);
 
 		@SuppressWarnings("unchecked") Class<N> tempTransformedModelType =
 				(Class<N>)transformedModel.getClass().getInterfaces()[0];
@@ -178,10 +173,8 @@ public abstract class ElementTransformationStrategyBase<T extends EObject, O ext
 	 * 
 	 * @param subModule
 	 *            {@link IElementTransformationModule} implementing the element-wise transformation.
-	 * @param baseModels
+	 * @param inputs
 	 *            Original input models containing information for the transformation.
-	 * @param explorationEncodings
-	 *            Original (DSE) encodings containing information for the transformation.
 	 * @param transformedModels
 	 *            Optional map of transformed/generated models in the transformation process.
 	 * @param outputModel
@@ -192,15 +185,12 @@ public abstract class ElementTransformationStrategyBase<T extends EObject, O ext
 	 */
 	protected <N extends EObject, S extends EObject> T transformElements(
 			IElementTransformationModule<? extends EObject, O> subModule,
-			Map<Class<? extends S>, S> baseModels,
-			ExplorationEncodingMap<IExplorationEncoding> explorationEncodings,
-			Map<Class<? extends N>, N> transformedModels, O outputModel)
-			throws TransformationModuleException {
+			ExplorationTransformationInputs inputs, Map<Class<? extends N>, N> transformedModels,
+			O outputModel) throws TransformationModuleException {
 		Collection<? extends EObject> typedElements =
 				getChildrenWithType(outputModel, subModule.getElementClass());
 		for(EObject element : typedElements) {
-			subModule.transformElement(element, baseModels, explorationEncodings, transformedModels,
-					outputModel);
+			subModule.transformElement(element, inputs, transformedModels, outputModel);
 		}
 
 		@SuppressWarnings("unchecked") T castedOutputModel = (T)outputModel;
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/base/TransformationModuleBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/base/TransformationModuleBase.java
index bf7cb5f6..0142ab07 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/base/TransformationModuleBase.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/base/TransformationModuleBase.java
@@ -118,18 +118,6 @@ public abstract class TransformationModuleBase<T extends EObject>
 		return moduleInstance;
 	}
 
-	/** {@inheritDoc} */
-	@Override
-	public void loadElementAssociations(TypedBiMap<Object, EObject> encEntryToGenElemAssocs,
-			Multimap<EObject, EObject> origToGenElemAssocs,
-			Map<EObject, EObject> genToOrigElemAssocs,
-			Multimap<EObject, EObject> genToGenElemAssocs) {
-		this.encEntryModelElemAssoc = encEntryToGenElemAssocs;
-		this.genToOrigAssocMap = genToOrigElemAssocs;
-		this.origToGenAssocMap = origToGenElemAssocs;
-		this.genToGenAssocMap = genToGenElemAssocs;
-	}
-
 	/** {@inheritDoc} */
 	@Override
 	public void applyAssociationUpdates(ITransformationModule<?> subModule) {
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/base/TransformationStrategyBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/base/TransformationStrategyBase.java
index a4ac3536..5d9fe2c8 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/base/TransformationStrategyBase.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/base/TransformationStrategyBase.java
@@ -34,13 +34,9 @@ import org.fortiss.af3.exploration.alg.dse.modeltransformation.ITransformationSt
 import org.fortiss.af3.exploration.alg.dse.modeltransformation.element.IElementTransformationModule;
 import org.fortiss.af3.exploration.alg.exception.TransformationModuleException;
 import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap;
-import org.fortiss.af3.exploration.alg.service.ExplorationEncodingMap;
-import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
 import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService.TransformationContext;
 import org.fortiss.af3.exploration.alg.service.internal.ExplorationTransformationService;
-import org.fortiss.af3.exploration.dsl_v2.model.expression.SuperSet;
-import org.fortiss.af3.exploration.model.SuperSetMap;
-import org.fortiss.af3.exploration.model.solutions.SingleExplorationSolution;
 import org.fortiss.af3.project.model.FileProject;
 import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
 import org.fortiss.tooling.kernel.introspection.IIntrospectionItem;
@@ -98,9 +94,7 @@ public abstract class TransformationStrategyBase<T extends EObject>
 	 */
 	@Override
 	public <N extends EObject, S extends EObject> T transform(TransformationState state,
-			TransformationContext context, SubClassToInstanceMap<S> baseModels,
-			SuperSetMap superSets,
-			ExplorationEncodingMap<IExplorationEncoding> explorationEncodings,
+			TransformationContext context, ExplorationTransformationInputs inputs,
 			SubClassToInstanceMap<N> transformedModels, EObject outputModel)
 			throws TransformationModuleException {
 		if(transformedModels == null) {
@@ -108,8 +102,7 @@ public abstract class TransformationStrategyBase<T extends EObject>
 					"The map which will contain all transformed models must be passed.");
 		}
 
-		transformedModel = transformInternal(state, context, baseModels, superSets,
-				explorationEncodings, transformedModels);
+		transformedModel = transformInternal(state, context, inputs, transformedModels);
 
 		if(launchedAsSubModule) {
 			doSetModelName();
@@ -151,8 +144,7 @@ public abstract class TransformationStrategyBase<T extends EObject>
 	 * s.
 	 * <p/>
 	 * Parameters are detailed in
-	 * {@link ExplorationTransformationService#getTransformedModel(TransformationContext, ITopLevelElement, SingleExplorationSolution, SubClassToInstanceMap,
-	 * SuperSetMap , Class , String )}
+	 * {@link ExplorationTransformationService#getTransformedModels(TransformationContext, ITopLevelElement, ExplorationTransformationInputs, Collection, String)}
 	 * .
 	 * 
 	 * @throws TransformationModuleException
@@ -161,9 +153,8 @@ public abstract class TransformationStrategyBase<T extends EObject>
 	// TODO update doc "state"
 	protected <N extends EObject, S extends EObject> T transformInternal(
 			@SuppressWarnings("unused") TransformationState state, TransformationContext context,
-			SubClassToInstanceMap<S> baseModels, SuperSetMap superSets,
-			ExplorationEncodingMap<IExplorationEncoding> explorationEncodings,
-			SubClassToInstanceMap<N> transformedModels) throws TransformationModuleException {
+			ExplorationTransformationInputs inputs, SubClassToInstanceMap<N> transformedModels)
+			throws TransformationModuleException {
 		@SuppressWarnings("unchecked") T castedTransformedBaseModel =
 				(T)transformedModels.get(getOutputType());
 		this.transformedModel = castedTransformedBaseModel;
@@ -179,8 +170,7 @@ public abstract class TransformationStrategyBase<T extends EObject>
 				genToGenAssocMap.clear();
 			}
 
-			executeSubModules(getSubModules(), context, baseModels, superSets, explorationEncodings,
-					transformedModels, currentState);
+			executeSubModules(getSubModules(), context, inputs, transformedModels, currentState);
 		}
 
 		// Suppressed warnings: Generics are used here to ensure compatibility between the type
@@ -202,12 +192,8 @@ public abstract class TransformationStrategyBase<T extends EObject>
 	 *            Collection of {@link ITransformationModule}s to (possibly) execute.
 	 * @param context
 	 *            Whether or not to export the resulting models into the corresponding project.
-	 * @param baseModels
+	 * @param inputs
 	 *            Input set of original models.
-	 * @param superSets
-	 *            Map of {@link SuperSet}s generated by the DSE.
-	 * @param explorationEncodings
-	 *            DSE internal encoding inputs for the transformation.
 	 * @param transformedModels
 	 *            Set of models that result from the transformation (output).
 	 * @param currentState
@@ -218,9 +204,7 @@ public abstract class TransformationStrategyBase<T extends EObject>
 	 */
 	protected <N extends EObject, S extends EObject> void executeSubModules(
 			Collection<ITransformationModule<? extends EObject>> subModules,
-			TransformationContext context, SubClassToInstanceMap<S> baseModels,
-			SuperSetMap superSets,
-			ExplorationEncodingMap<IExplorationEncoding> explorationEncodings,
+			TransformationContext context, ExplorationTransformationInputs inputs,
 			SubClassToInstanceMap<N> transformedModels, TransformationState currentState)
 			throws TransformationModuleException {
 
@@ -234,8 +218,8 @@ public abstract class TransformationStrategyBase<T extends EObject>
 			if(subModule.getActivationStage() == currentState ||
 					(currentState.ordinal() >= subModule.getActivationStage().ordinal() &&
 							subModule instanceof ElementTransformationStrategyBase)) {
-				if(subModule.isOptional() && !canExecuteModule(baseModels, transformedModels,
-						explorationEncodings, subModule)) {
+				if(subModule.isOptional() &&
+						!canExecuteModule(inputs, transformedModels, subModule)) {
 					continue;
 				}
 
@@ -244,11 +228,10 @@ public abstract class TransformationStrategyBase<T extends EObject>
 					((ITransformationStrategy<?>)subModule).setModelName(transformedModelName);
 					((ITransformationStrategy<?>)subModule).setLaunchedAsSubModule(true);
 				}
-				subModule.loadElementAssociations(encEntryModelElemAssoc, origToGenAssocMap,
-						genToOrigAssocMap, genToGenAssocMap);
+				subModule.applyAssociationUpdates(this);
 				@SuppressWarnings("unchecked") T transformedModel =
-						(T)subModule.transform(currentState, context, baseModels, superSets,
-								explorationEncodings, transformedModels, this.transformedModel);
+						(T)subModule.transform(currentState, context, inputs, transformedModels,
+								this.transformedModel);
 				if(transformedModel == null) {
 					throw new TransformationModuleException(subModule,
 							"The submodule did not return the transformed model. It is required by the framework.");
@@ -273,19 +256,13 @@ public abstract class TransformationStrategyBase<T extends EObject>
 	 * input set.
 	 */
 	protected <N extends EObject, S extends EObject> boolean canExecuteModule(
-			Map<Class<? extends S>, S> baseModels, Map<Class<? extends N>, N> transformedModels,
-			ExplorationEncodingMap<IExplorationEncoding> explorationEncodings,
+			ExplorationTransformationInputs inputs, Map<Class<? extends N>, N> transformedModels,
 			ITransformationModule<? extends EObject> subModule) {
 		for(Class<?> reqInput : subModule.getRequiredTypes()) {
-			// This cast is required since the explorationEncodings only accept
-			// exploration types -> it is just used for presence checking of a
-			// corresponding type. During runtime, the type is erased anyway.
-			@SuppressWarnings("unchecked") Class<? extends IExplorationEncoding> explReqInput =
-					(Class<? extends IExplorationEncoding>)reqInput;
-			if(!(baseModels.keySet().stream().anyMatch(m -> m.isAssignableFrom(reqInput))) &&
+			if(!(inputs.keySet().stream()
+					.anyMatch(m -> ((Class<?>)m).isAssignableFrom(reqInput))) &&
 					!(transformedModels.keySet().stream()
-							.anyMatch(m -> m.isAssignableFrom(reqInput))) &&
-					!(explorationEncodings.containsEncoding(explReqInput))) {
+							.anyMatch(m -> m.isAssignableFrom(reqInput)))) {
 				return false;
 			}
 		}
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 06e0097b..b6753592 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 ec0e29b2ed27aecccae28bab0253b8e068276a17 RED
-ComponentArchitectureInitializer.java 52d1f756c194774a4ac5b96ac4f2014dc9b5a6b7 RED
-ComponentArchitectureInserter.java 9ab94811d460d06fa1ce2f72e40911beb7982e94 RED
-ComponentArchitectureInstantiator.java 41fddd490e8b45b39bb3725d1e2a93a63b737169 RED
-ComponentArchitectureReplicator.java 59ee5ee2ad6331150b53293e1a549b788a52ee00 RED
+ComponentArchitectureFinalizer.java dc9aaaa71d783537cd7ea9c0b2521932b3a5d95c RED
+ComponentArchitectureInitializer.java b3bdadb89c08659b5892564a4d37d682bb3bb23f RED
+ComponentArchitectureInserter.java 5ffe3b556a71e15b562a8a28694da830dc269b5e RED
+ComponentArchitectureInstantiator.java 0acdb5c6039f53fa01446da5af6c5bb50a854e80 RED
+ComponentArchitectureReplicator.java 72ca8f9428506f489be79b980a0c966a7b388d71 RED
 ComponentArchitectureTransformer.java f4a1ea1337dcb3aeaa99900034dd9ada9b9ee5a7 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 8c7f511c..8aa3c64b 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
@@ -31,10 +31,8 @@ import org.fortiss.af3.exploration.alg.dse.modeltransformation.base.Transformati
 import org.fortiss.af3.exploration.alg.exception.InvalidTimingModelException;
 import org.fortiss.af3.exploration.alg.exception.TransformationModuleException;
 import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap;
-import org.fortiss.af3.exploration.alg.service.ExplorationEncodingMap;
-import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
 import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService.TransformationContext;
-import org.fortiss.af3.exploration.model.SuperSetMap;
 import org.fortiss.af3.exploration.moea.model.ImplementsComponentRef;
 import org.fortiss.af3.exploration.moea.model.MoeaFactory;
 import org.fortiss.tooling.base.model.element.IModelElementSpecification;
@@ -96,9 +94,8 @@ public class ComponentArchitectureFinalizer
 	@Override
 	public <N extends EObject, S extends EObject> ComponentArchitecture transform(
 			TransformationState state, TransformationContext context,
-			SubClassToInstanceMap<S> baseModels, SuperSetMap superSets,
-			ExplorationEncodingMap<IExplorationEncoding> explorationEncodings,
-			SubClassToInstanceMap<N> transformedModels, EObject outputModel)
+			ExplorationTransformationInputs baseModels, SubClassToInstanceMap<N> transformedModels,
+			EObject outputModel)
 			throws TransformationModuleException {
 		// Install the back reference specification to the components in the "150%/125% model".
 		try {
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 e2374411..5a005c23 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
@@ -32,11 +32,9 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry;
 import org.fortiss.af3.exploration.alg.exception.TransformationModuleException;
 import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap;
-import org.fortiss.af3.exploration.alg.service.ExplorationEncodingMap;
-import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
 import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService.TransformationContext;
 import org.fortiss.af3.exploration.alg.util.ExplorationEcoreUtils;
-import org.fortiss.af3.exploration.model.SuperSetMap;
 import org.fortiss.af3.project.model.FileProject;
 
 import com.google.common.collect.HashMultimap;
@@ -99,19 +97,18 @@ public class ComponentArchitectureInitializer
 	@Override
 	public <N extends EObject, S extends EObject> ComponentArchitecture transform(
 			TransformationState state, TransformationContext context,
-			SubClassToInstanceMap<S> baseModels, SuperSetMap superSets,
-			ExplorationEncodingMap<IExplorationEncoding> explorationEncodings,
-			SubClassToInstanceMap<N> transformedModels, EObject outputModel)
-			throws TransformationModuleException {
-		ComponentArchitecture origCA =
-				(ComponentArchitecture)baseModels.get(ComponentArchitecture.class);
+			ExplorationTransformationInputs inputs, SubClassToInstanceMap<N> transformedModels,
+			EObject outputModel) throws TransformationModuleException {
+		// FIXME: Non-functional, since complete architectures are not referenced by the input set
+		// any more.
+		ComponentArchitecture origCA = null;// inputs.getEncoding(ComponentArchitecture.class);
 		if(origCA == null) {
 			throw new TransformationModuleException(this,
 					"Could not retrieve the original Component Architecture from the set of base models.");
 		}
 
-		AbstractTaskMappingEncoding mapping =
-				explorationEncodings.getEncoding(AbstractTaskMappingEncoding.class);
+		AbstractTaskMappingEncoding mapping = null;
+		// inputs.getEncoding(AbstractTaskMappingEncoding.class);
 		if(mapping == null) {
 			throw new TransformationModuleException(this,
 					"An IMappingEncoding is required for this module to operate properly.");
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureInserter.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureInserter.java
index 7f6a18f2..3ecef8e8 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureInserter.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/comparch/ComponentArchitectureInserter.java
@@ -44,10 +44,8 @@ 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.exception.TransformationModuleException;
 import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap;
-import org.fortiss.af3.exploration.alg.service.ExplorationEncodingMap;
-import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
 import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService.TransformationContext;
-import org.fortiss.af3.exploration.model.SuperSetMap;
 import org.fortiss.af3.platform.model.IPlatformResource;
 import org.fortiss.tooling.base.model.layout.Point;
 
@@ -106,9 +104,8 @@ public class ComponentArchitectureInserter extends TransformationModuleBase<Comp
 	@Override
 	public <N extends EObject, S extends EObject> ComponentArchitecture transform(
 			TransformationState state, TransformationContext context,
-			SubClassToInstanceMap<S> baseModels, SuperSetMap superSets,
-			ExplorationEncodingMap<IExplorationEncoding> explorationEncodings,
-			SubClassToInstanceMap<N> transformedModels, EObject outputModel)
+			ExplorationTransformationInputs baseModels, SubClassToInstanceMap<N> transformedModels,
+			EObject outputModel)
 			throws TransformationModuleException {
 		ComponentArchitecture genCA = (ComponentArchitecture)outputModel;
 		if(genCA == 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 7f30c41e..15a4c9ca 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
@@ -44,10 +44,8 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry;
 import org.fortiss.af3.exploration.alg.exception.TransformationModuleException;
 import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap;
-import org.fortiss.af3.exploration.alg.service.ExplorationEncodingMap;
-import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
 import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService.TransformationContext;
-import org.fortiss.af3.exploration.model.SuperSetMap;
 import org.fortiss.af3.platform.model.ExecutionUnit;
 import org.fortiss.tooling.base.model.element.IConnector;
 import org.fortiss.tooling.kernel.utils.EcoreUtils;
@@ -108,12 +106,10 @@ public class ComponentArchitectureInstantiator
 	@Override
 	public <N extends EObject, S extends EObject> ComponentArchitecture transform(
 			TransformationState state, TransformationContext context,
-			SubClassToInstanceMap<S> baseModels, SuperSetMap superSets,
-			ExplorationEncodingMap<IExplorationEncoding> explorationEncodings,
-			SubClassToInstanceMap<N> transformedModels, EObject outputModel)
-			throws TransformationModuleException {
+			ExplorationTransformationInputs inputs, SubClassToInstanceMap<N> transformedModels,
+			EObject outputModel) throws TransformationModuleException {
 
-		mapping = explorationEncodings.getEncoding(InstantiatedTaskMappingEncoding.class);
+		mapping = null;// inputs.getEncoding(InstantiatedTaskMappingEncoding.class);
 		if(mapping == null) {
 			throw new TransformationModuleException(this,
 					"An IMappingEncoding is required for this module to operate properly.");
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 af050af0..704781b1 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
@@ -64,10 +64,8 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry;
 import org.fortiss.af3.exploration.alg.exception.InvalidTimingModelException;
 import org.fortiss.af3.exploration.alg.exception.TransformationModuleException;
 import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap;
-import org.fortiss.af3.exploration.alg.service.ExplorationEncodingMap;
-import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
 import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService.TransformationContext;
-import org.fortiss.af3.exploration.model.SuperSetMap;
 import org.fortiss.af3.platform.model.ExecutionUnit;
 import org.fortiss.af3.platform.model.IPlatformResource;
 import org.fortiss.tooling.kernel.model.INamedElement;
@@ -143,23 +141,22 @@ public class ComponentArchitectureReplicator
 	@Override
 	public <N extends EObject, S extends EObject> ComponentArchitecture transform(
 			TransformationState state, TransformationContext context,
-			SubClassToInstanceMap<S> baseModels, SuperSetMap superSets,
-			ExplorationEncodingMap<IExplorationEncoding> explorationEncodings,
-			SubClassToInstanceMap<N> transformedModels, EObject outputModel)
-			throws TransformationModuleException {
+			ExplorationTransformationInputs inputs, SubClassToInstanceMap<N> transformedModels,
+			EObject outputModel) throws TransformationModuleException {
 		ComponentArchitecture genCA = (ComponentArchitecture)outputModel;
 		if(genCA == null) {
 			throw new TransformationModuleException(this,
 					"Could not retrieve the generated Component Architecture.");
 		}
-		originalCA = (ComponentArchitecture)baseModels.get(ComponentArchitecture.class);
+		// FIXME: Currently broken functionality, as the input set does not contain full
+		// architecture models.
+		originalCA = null;// inputs.getEncoding(ComponentArchitecture.class);
 		if(originalCA == null) {
 			throw new TransformationModuleException(this,
 					"Could not retrieve the original Component Architecture from the set of base models.");
 		}
 
-		AbstractTaskMappingEncoding mapping =
-				explorationEncodings.getEncoding(AbstractTaskMappingEncoding.class);
+		AbstractTaskMappingEncoding mapping = null;// inputs.getEncoding(AbstractTaskMappingEncoding.class);
 		if(mapping == null) {
 			throw new TransformationModuleException(this,
 					"An IMappingEncoding is required for this module to operate properly.");
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 593fb265..e55b25f7 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 af4b595914e455ac80b12561ec2d3c5147ede8c8 RED
-DeploymentInitializer.java 9d5023ee12fc92185bb418c735f1d6c5196dcab8 RED
-DeploymentReplicator.java 7c65dd646ca37477be592bb620536f15c48fa1f8 RED
-ExplorationSolutionToDeployment.java 6fb7c9bcdaf4371a2251193fad66aa61c7e511d2 RED
+DeploymentFinalizer.java ce2c53558f008636c3c9f3bddd8432518c0545f1 RED
+DeploymentInitializer.java e190b0fe5af29c887ed59e011d68cdda5f59cf1d RED
+DeploymentReplicator.java 6877c3626ef0ee56db14b0af8688e7ec107290bb RED
+ExplorationSolutionToDeployment.java 157b59dd1ae63fb4b51738a013945e055bbfaa4f 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 6631dae7..23dceff0 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
@@ -48,10 +48,8 @@ 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;
-import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
 import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService.TransformationContext;
-import org.fortiss.af3.exploration.model.SuperSetMap;
 import org.fortiss.af3.platform.model.ExecutionUnit;
 import org.fortiss.af3.platform.model.PlatformArchitecture;
 import org.fortiss.af3.project.model.FileProject;
@@ -110,13 +108,11 @@ public class DeploymentFinalizer extends TransformationModuleBase<Deployment> {
 	/** {@inheritDoc} */
 	@Override
 	public <N extends EObject, S extends EObject> Deployment transform(TransformationState state,
-			TransformationContext context, SubClassToInstanceMap<S> baseModels,
-			SuperSetMap superSets,
-			ExplorationEncodingMap<IExplorationEncoding> explorationEncodings,
+			TransformationContext context, ExplorationTransformationInputs inputs,
 			SubClassToInstanceMap<N> transformedModels, EObject outputModel)
 			throws TransformationModuleException {
 		@SuppressWarnings("unchecked") IMappingEncoding<ITaskAdapter<?>, IExecutionUnitAdapter<?>, IMappingEntry<ITaskAdapter<?>, IExecutionUnitAdapter<?>>> mapping =
-				explorationEncodings.getEncoding(IMappingEncoding.class);
+				null;// inputs.getEncoding(IMappingEncoding.class);
 		if(mapping == null) {
 			throw new TransformationModuleException(this,
 					"An IMappingEncoding is required for this module to operate properly.");
@@ -125,22 +121,26 @@ public class DeploymentFinalizer extends TransformationModuleBase<Deployment> {
 		ComponentArchitecture transformedCA =
 				(ComponentArchitecture)transformedModels.get(ComponentArchitecture.class);
 		if(transformedCA == null) {
-			transformedCA = (ComponentArchitecture)baseModels.get(ComponentArchitecture.class);
+			// FIXME: Currently broken functionality, as the input set does not contain full
+			// architecture models.
+			transformedCA = null;// inputs.getEncoding(ComponentArchitecture.class);
 			if(transformedCA == null) {
 				throw new TransformationModuleException(this,
 						"Neither a transformed, nor an input component architecture has been found that shall be referenced by the transformed deployment.");
 			}
 		}
 
-		ComponentArchitecture originalCA =
-				(ComponentArchitecture)baseModels.get(ComponentArchitecture.class);
+		// FIXME: Currently broken functionality, as the input set does not contain full
+		// architecture models.
+		ComponentArchitecture originalCA = null;// inputs.getEncoding(ComponentArchitecture.class);
 		if(originalCA == null) {
 			throw new TransformationModuleException(this,
 					"Could not retrieve the original component architecture from the set of base models. Be sure to add it to the required input types.");
 		}
 
-		PlatformArchitecture originalPA =
-				(PlatformArchitecture)baseModels.get(PlatformArchitecture.class);
+		// FIXME: Currently broken functionality, as the input set does not contain full
+		// architecture models.
+		PlatformArchitecture originalPA = null;// inputs.getEncoding(PlatformArchitecture.class);
 		if(originalPA == null) {
 			throw new TransformationModuleException(this,
 					"Could not retrieve the original platform architecture from the set of base models. Be sure to add it to the required input types.");
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/DeploymentInitializer.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/DeploymentInitializer.java
index 79cbba58..b776e12b 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/DeploymentInitializer.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/DeploymentInitializer.java
@@ -32,10 +32,8 @@ 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.exception.TransformationModuleException;
 import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap;
-import org.fortiss.af3.exploration.alg.service.ExplorationEncodingMap;
-import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
 import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService.TransformationContext;
-import org.fortiss.af3.exploration.model.SuperSetMap;
 import org.fortiss.af3.platform.model.PlatformArchitecture;
 
 /**
@@ -90,20 +88,20 @@ public class DeploymentInitializer extends TransformationModuleBase<Deployment>
 	/** {@inheritDoc} */
 	@Override
 	public <N extends EObject, S extends EObject> Deployment transform(TransformationState state,
-			TransformationContext context, SubClassToInstanceMap<S> baseModels,
-			SuperSetMap superSets,
-			ExplorationEncodingMap<IExplorationEncoding> explorationEncodings,
+			TransformationContext context, ExplorationTransformationInputs inputs,
 			SubClassToInstanceMap<N> transformedModels, EObject outputModel)
 			throws TransformationModuleException {
-		ComponentArchitecture originalCA =
-				(ComponentArchitecture)baseModels.get(ComponentArchitecture.class);
+		// FIXME: Currently broken functionality, as the input set does not contain full
+		// architecture models.
+		ComponentArchitecture originalCA = null;// inputs.getEncoding(ComponentArchitecture.class);
 		if(originalCA == null) {
 			throw new TransformationModuleException(this,
 					"Could not retrieve the original component architecture from the set of base models. Be sure to add it to the required input types.");
 		}
 
-		PlatformArchitecture originalPA =
-				(PlatformArchitecture)baseModels.get(PlatformArchitecture.class);
+		// FIXME: Currently broken functionality, as the input set does not contain full
+		// architecture models.
+		PlatformArchitecture originalPA = null;// inputs.getEncoding(PlatformArchitecture.class);
 		if(originalPA == null) {
 			throw new TransformationModuleException(this,
 					"Could not retrieve the original platform architecture from the set of base models. Be sure to add it to the required input types.");
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/DeploymentReplicator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/DeploymentReplicator.java
index 11babfd6..d717aabf 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/DeploymentReplicator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/deployment/DeploymentReplicator.java
@@ -28,10 +28,8 @@ import org.fortiss.af3.exploration.alg.dse.modeltransformation.base.Transformati
 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;
-import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
 import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService.TransformationContext;
-import org.fortiss.af3.exploration.model.SuperSetMap;
 import org.fortiss.af3.platform.model.PlatformArchitecture;
 
 /**
@@ -87,20 +85,20 @@ public class DeploymentReplicator extends TransformationModuleBase<Deployment> {
 	/** {@inheritDoc} */
 	@Override
 	public <N extends EObject, S extends EObject> Deployment transform(TransformationState state,
-			TransformationContext context, SubClassToInstanceMap<S> baseModels,
-			SuperSetMap superSets,
-			ExplorationEncodingMap<IExplorationEncoding> explorationEncodings,
+			TransformationContext context, ExplorationTransformationInputs inputs,
 			SubClassToInstanceMap<N> transformedModels, EObject outputModel)
 			throws TransformationModuleException {
-		ComponentArchitecture originalCA =
-				(ComponentArchitecture)baseModels.get(ComponentArchitecture.class);
+		// FIXME: Currently broken functionality, as the input set does not contain full
+		// architecture models.
+		ComponentArchitecture originalCA = null;// inputs.getEncoding(ComponentArchitecture.class);
 		if(originalCA == null) {
 			throw new TransformationModuleException(this,
 					"Could not retrieve the original component architecture from the set of base models. Be sure to add it to the required input types.");
 		}
 
-		PlatformArchitecture originalPA =
-				(PlatformArchitecture)baseModels.get(PlatformArchitecture.class);
+		// FIXME: Currently broken functionality, as the input set does not contain full
+		// architecture models.
+		PlatformArchitecture originalPA = null;// inputs.getEncoding(PlatformArchitecture.class);
 		if(originalPA == null) {
 			throw new TransformationModuleException(this,
 					"Could not retrieve the original platform architecture from the set of base models. Be sure to add it to the required input types.");
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 8305f86d..21d84f19 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
@@ -20,7 +20,6 @@ import static org.fortiss.af3.platform.utils.PlatformArchitectureUtils.getPhysic
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
-import java.util.Map;
 
 import org.eclipse.emf.ecore.EObject;
 import org.fortiss.af3.component.model.Component;
@@ -35,10 +34,8 @@ 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;
-import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
 import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService.TransformationContext;
-import org.fortiss.af3.exploration.model.SuperSetMap;
 import org.fortiss.af3.platform.model.PlatformArchitecture;
 
 /**
@@ -63,16 +60,19 @@ public class ExplorationSolutionToDeployment extends TransformationStrategyBase<
 	 * Helper method to set the architecture model references that were provided as an input to the
 	 * DSE.
 	 */
-	private <S extends EObject> void setArchModels(Map<Class<? extends S>, S> baseModels)
+	private <S extends EObject> void setArchModels(ExplorationTransformationInputs inputs)
 			throws TransformationModuleException {
-		af3ComponentArchitecture =
-				(ComponentArchitecture)baseModels.get(ComponentArchitecture.class);
+		// FIXME: Currently broken functionality, as the input set does not contain full
+		// architecture models.
+		af3ComponentArchitecture = null;// inputs.getEncoding(ComponentArchitecture.class);
 		if(af3ComponentArchitecture == null) {
 			throw new TransformationModuleException(this,
 					"An ComponentArchitecture is required for this module to operate properly.");
 		}
 
-		af3PlatformArchitecture = (PlatformArchitecture)baseModels.get(PlatformArchitecture.class);
+		// FIXME: Currently broken functionality, as the input set does not contain full
+		// architecture models.
+		af3PlatformArchitecture = null;// inputs.getEncoding(PlatformArchitecture.class);
 		if(af3PlatformArchitecture == null) {
 			throw new TransformationModuleException(this,
 					"An PlatformArchitecture is required for this module to operate properly.");
@@ -88,14 +88,12 @@ public class ExplorationSolutionToDeployment extends TransformationStrategyBase<
 	 */
 	@Override
 	public <N extends EObject, S extends EObject> Deployment transform(TransformationState state,
-			TransformationContext context, SubClassToInstanceMap<S> baseModels,
-			SuperSetMap superSets,
-			ExplorationEncodingMap<IExplorationEncoding> explorationEncodings,
+			TransformationContext context, ExplorationTransformationInputs inputs,
 			SubClassToInstanceMap<N> transformedModels, EObject outputModel)
 			throws TransformationModuleException {
 		if(state == TransformationState.INITIALIZING) {
 			@SuppressWarnings("unchecked") IMappingEncoding<ITaskAdapter<?>, ?, IMappingEntry<ITaskAdapter<?>, ?>> mapping =
-					explorationEncodings.getEncoding(IMappingEncoding.class);
+					null;// inputs.getEncoding(IMappingEncoding.class);
 			if(mapping == null) {
 				throw new TransformationModuleException(this,
 						"An IMappingEncoding is required for this module to operate properly.");
@@ -106,11 +104,10 @@ public class ExplorationSolutionToDeployment extends TransformationStrategyBase<
 				addBlacklistedModule(ComponentArchitectureTransformer.class);
 			}
 
-			setArchModels(baseModels);
+			setArchModels(inputs);
 		}
 
-		return super.transform(state, context, baseModels, superSets, explorationEncodings,
-				transformedModels, outputModel);
+		return super.transform(state, context, inputs, transformedModels, outputModel);
 	}
 
 	/**
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/.ratings
new file mode 100644
index 00000000..12b66ab7
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/.ratings
@@ -0,0 +1,6 @@
+ComponentExecutionUnitTransformation.java b4a88521187c8b114fa50bf239a17213add9f746 YELLOW
+PartitionToExecutionUnitTransformation.java 0d93bf39fed3af7f1b0b018bb14893c67ad038ae YELLOW
+PartitionTransformation.java e4f6120eaa59bf853c08918de821382b9390b18b YELLOW
+SuperSetTransformationBase.java 166ece983c1e010f18ed69dc072bd66e9cc94d08 YELLOW
+SuperSetTransformationStrategy.java 305d149e8e7044ea307738f1da2b483af689a726 YELLOW
+TaskToPartitionTransformation.java 12a5e5cc4031e590819970d781b88966dcac31b6 YELLOW
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/ComponentExecutionUnitTransformation.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/ComponentExecutionUnitTransformation.java
new file mode 100644
index 00000000..7eaeba02
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/ComponentExecutionUnitTransformation.java
@@ -0,0 +1,89 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2018 fortiss GmbH                                              |
+|                                                                          |
+| Licensed under the Apache License, Version 2.0 (the "License");          |
+| you may not use this file except in compliance with the License.         |
+| You may obtain a copy of the License at                                  |
+|                                                                          |
+|    http://www.apache.org/licenses/LICENSE-2.0                            |
+|                                                                          |
+| Unless required by applicable law or agreed to in writing, software      |
+| distributed under the License is distributed on an "AS IS" BASIS,        |
+| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+| See the License for the specific language governing permissions and      |
+| limitations under the License.                                           |
++--------------------------------------------------------------------------*/
+package org.fortiss.af3.exploration.alg.dse.modeltransformation.dseinternal;
+
+import static org.fortiss.af3.allocation.utils.AllocationModelElementFactory.createAllocationEntry;
+import static org.fortiss.af3.exploration.util.DSMLModelElementFactory.createSuperSet;
+import static org.fortiss.tooling.common.util.LambdaUtils.getFirst;
+
+import java.util.Collection;
+import java.util.HashSet;
+
+import org.eclipse.emf.ecore.EObject;
+import org.fortiss.af3.component.model.Component;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.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.taskmapping.TaskMappingEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter;
+import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
+import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService.TransformationContext;
+import org.fortiss.af3.exploration.dsl_v2.model.expression.SuperSet;
+import org.fortiss.af3.platform.model.allocation.ComponentToExecutionUnitAllocationEntry;
+import org.fortiss.tooling.base.model.element.IModelElement;
+
+/**
+ * Transforms a {@link TaskMappingEncoding} and a {@link PartitionMappingEncoding} to a
+ * {@link SuperSet} of AF3 {@link ComponentToExecutionUnitAllocationEntry}s.
+ * 
+ * @author diewald
+ */
+public class ComponentExecutionUnitTransformation
+		extends SuperSetTransformationBase<ComponentToExecutionUnitAllocationEntry> {
+	/** {@inheritDoc} */
+	@Override
+	public <N extends EObject, S extends EObject> SuperSet<ComponentToExecutionUnitAllocationEntry>
+			transform(TransformationState state, TransformationContext context,
+					ExplorationTransformationInputs inputs,
+					SubClassToInstanceMap<N> transformedModels, EObject outputModel) {
+		@SuppressWarnings("unchecked") InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry> tm =
+				inputs.getEncoding(InstantiatedTaskMappingEncoding.class);
+		PartitionMappingEncoding pmEncoding = inputs.getEncoding(PartitionMappingEncoding.class);
+
+		SuperSet<ComponentToExecutionUnitAllocationEntry> compExecUnitAllocs = createSuperSet(
+				"Optimized_Allocations", ComponentToExecutionUnitAllocationEntry.class);
+		for(Partition resource : tm.getResources()) {
+			for(ITaskAdapter<?> task : tm.getRequesters(resource)) {
+				Component af3Component = task.getAssignedComponent();
+				ComponentToExecutionUnitAllocationEntry allocEntry =
+						createAllocationEntry(ComponentToExecutionUnitAllocationEntry.class);
+				allocEntry.getSourceElements().add(af3Component);
+				allocEntry.setTargetElement(
+						(IModelElement)getFirst(pmEncoding.getAllocatedResourcesFor(resource)).get()
+								.getObject());
+				compExecUnitAllocs.getEntries().add(allocEntry);
+			}
+		}
+		return compExecUnitAllocs;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Collection<Class<?>> getRequiredTypes() {
+		Collection<Class<?>> inputTypes = new HashSet<>();
+		inputTypes.add(InstantiatedTaskMappingEncoding.class);
+		inputTypes.add(PartitionMappingEncoding.class);
+		return inputTypes;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Class<ComponentToExecutionUnitAllocationEntry> getOutputType() {
+		return ComponentToExecutionUnitAllocationEntry.class;
+	}
+}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/PartitionToExecutionUnitTransformation.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/PartitionToExecutionUnitTransformation.java
new file mode 100644
index 00000000..c94d7e45
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/PartitionToExecutionUnitTransformation.java
@@ -0,0 +1,80 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2018 fortiss GmbH                                              |
+|                                                                          |
+| Licensed under the Apache License, Version 2.0 (the "License");          |
+| you may not use this file except in compliance with the License.         |
+| You may obtain a copy of the License at                                  |
+|                                                                          |
+|    http://www.apache.org/licenses/LICENSE-2.0                            |
+|                                                                          |
+| Unless required by applicable law or agreed to in writing, software      |
+| distributed under the License is distributed on an "AS IS" BASIS,        |
+| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+| See the License for the specific language governing permissions and      |
+| limitations under the License.                                           |
++--------------------------------------------------------------------------*/
+package org.fortiss.af3.exploration.alg.dse.modeltransformation.dseinternal;
+
+import static org.fortiss.af3.allocation.utils.AllocationModelElementFactory.createAllocationEntry;
+import static org.fortiss.af3.exploration.util.DSMLModelElementFactory.createSuperSet;
+
+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.PartitionMappingEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.PartitionMappingEntry;
+import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
+import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService.TransformationContext;
+import org.fortiss.af3.exploration.dsl_v2.model.expression.SuperSet;
+import org.fortiss.af3.partition.model.Partition;
+import org.fortiss.af3.partition.model.allocation.PartitionToExecutionUnitAllocationEntry;
+import org.fortiss.af3.platform.model.ExecutionUnit;
+
+/**
+ * Transforms a {@link PartitionMappingEncoding} to a {@link SuperSet} of AF3
+ * {@link PartitionToExecutionUnitAllocationEntry}s.
+ * 
+ * @author diewald
+ */
+public class PartitionToExecutionUnitTransformation
+		extends SuperSetTransformationBase<PartitionToExecutionUnitAllocationEntry> {
+	/** {@inheritDoc} */
+	@Override
+	public <N extends EObject, S extends EObject> SuperSet<PartitionToExecutionUnitAllocationEntry>
+			transform(TransformationState state, TransformationContext context,
+					ExplorationTransformationInputs inputs,
+					SubClassToInstanceMap<N> transformedModels, EObject outputModel) {
+		PartitionMappingEncoding pmEncoding = inputs.getEncoding(PartitionMappingEncoding.class);
+
+		SuperSet<PartitionToExecutionUnitAllocationEntry> allocations =
+				createSuperSet("PartToExU", PartitionToExecutionUnitAllocationEntry.class);
+		for(PartitionMappingEntry entry : pmEncoding.getMappingEntries()) {
+			org.fortiss.af3.partition.model.Partition af3Partition =
+					(Partition)encEntryModelElemAssoc.get(entry.getSource(),
+							org.fortiss.af3.partition.model.Partition.class);
+			assert (af3Partition != null) : "Error in the mapping of internal Partitions --> AF3 Partitions.";
+			PartitionToExecutionUnitAllocationEntry af3AllocEntry =
+					createAllocationEntry(PartitionToExecutionUnitAllocationEntry.class);
+			af3AllocEntry.setSourceElement(af3Partition);
+			af3AllocEntry.getTargetElements().add((ExecutionUnit)entry.getTarget().getObject());
+			allocations.getEntries().add(af3AllocEntry);
+		}
+		return allocations;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Collection<Class<?>> getRequiredTypes() {
+		Collection<Class<?>> inputTypes = new HashSet<>();
+		inputTypes.add(PartitionMappingEncoding.class);
+		return inputTypes;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Class<PartitionToExecutionUnitAllocationEntry> getOutputType() {
+		return PartitionToExecutionUnitAllocationEntry.class;
+	}
+}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/PartitionTransformation.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/PartitionTransformation.java
new file mode 100644
index 00000000..840b975e
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/PartitionTransformation.java
@@ -0,0 +1,73 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2018 fortiss GmbH                                              |
+|                                                                          |
+| Licensed under the Apache License, Version 2.0 (the "License");          |
+| you may not use this file except in compliance with the License.         |
+| You may obtain a copy of the License at                                  |
+|                                                                          |
+|    http://www.apache.org/licenses/LICENSE-2.0                            |
+|                                                                          |
+| Unless required by applicable law or agreed to in writing, software      |
+| distributed under the License is distributed on an "AS IS" BASIS,        |
+| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+| See the License for the specific language governing permissions and      |
+| limitations under the License.                                           |
++--------------------------------------------------------------------------*/
+package org.fortiss.af3.exploration.alg.dse.modeltransformation.dseinternal;
+
+import static org.fortiss.af3.exploration.util.DSMLModelElementFactory.createSuperSet;
+import static org.fortiss.af3.partition.util.PartitionModelElementFactory.createPartition;
+
+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.partitionmapping.PartitionMappingEncoding;
+import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
+import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService.TransformationContext;
+import org.fortiss.af3.exploration.dsl_v2.model.expression.SuperSet;
+
+/**
+ * Transforms a {@link PartitionMappingEncoding} to a {@link SuperSet} of AF3 Partitions.
+ * 
+ * @author diewald
+ */
+public class PartitionTransformation
+		extends SuperSetTransformationBase<org.fortiss.af3.partition.model.Partition> {
+	/** {@inheritDoc} */
+	@Override
+	public <N extends EObject, S extends EObject>
+			SuperSet<org.fortiss.af3.partition.model.Partition> transform(TransformationState state,
+					TransformationContext context, ExplorationTransformationInputs inputs,
+					SubClassToInstanceMap<N> transformedModels, EObject outputModel) {
+		PartitionMappingEncoding pmEncoding = inputs.getEncoding(PartitionMappingEncoding.class);
+
+		SuperSet<org.fortiss.af3.partition.model.Partition> partitions =
+				createSuperSet("Partitions", org.fortiss.af3.partition.model.Partition.class);
+		int i = 0;
+		for(Partition internalPartition : pmEncoding.getRequesters()) {
+			org.fortiss.af3.partition.model.Partition af3Partition =
+					createPartition("Partition_" + i++);
+			encEntryModelElemAssoc.put(internalPartition,
+					org.fortiss.af3.partition.model.Partition.class, af3Partition, Partition.class);
+			partitions.getEntries().add(af3Partition);
+		}
+		return partitions;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Collection<Class<?>> getRequiredTypes() {
+		Collection<Class<?>> inputTypes = new HashSet<>();
+		inputTypes.add(PartitionMappingEncoding.class);
+		return inputTypes;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Class<org.fortiss.af3.partition.model.Partition> getOutputType() {
+		return org.fortiss.af3.partition.model.Partition.class;
+	}
+}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/SuperSetTransformationBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/SuperSetTransformationBase.java
new file mode 100644
index 00000000..f7454498
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/SuperSetTransformationBase.java
@@ -0,0 +1,68 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2018 fortiss GmbH                                              |
+|                                                                          |
+| Licensed under the Apache License, Version 2.0 (the "License");          |
+| you may not use this file except in compliance with the License.         |
+| You may obtain a copy of the License at                                  |
+|                                                                          |
+|    http://www.apache.org/licenses/LICENSE-2.0                            |
+|                                                                          |
+| Unless required by applicable law or agreed to in writing, software      |
+| distributed under the License is distributed on an "AS IS" BASIS,        |
+| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+| See the License for the specific language governing permissions and      |
+| limitations under the License.                                           |
++--------------------------------------------------------------------------*/
+package org.fortiss.af3.exploration.alg.dse.modeltransformation.dseinternal;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+
+import org.fortiss.af3.exploration.alg.dse.modeltransformation.ITransformationModule;
+import org.fortiss.af3.exploration.alg.dse.modeltransformation.base.TransformationModuleBase;
+import org.fortiss.af3.exploration.dsl_v2.model.expression.SuperSet;
+import org.fortiss.tooling.base.model.element.IModelElement;
+
+/**
+ * Base class for transforming inner solution representations of the DSE to {@link SuperSet}s.
+ * 
+ * @author diewald
+ */
+public abstract class SuperSetTransformationBase<T extends IModelElement>
+		extends TransformationModuleBase<SuperSet<T>> {
+	/** {@inheritDoc} */
+	@Override
+	public boolean isOptional() {
+		return false;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * NOTE: Currently, we neglect states in exporting DSE results: Transformations to SuperSets are
+	 * typically simple, so stages are typically adding unneeded complexity.
+	 */
+	@Override
+	public TransformationState getActivationStage() {
+		return TransformationState.INITIALIZING;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * NOTE: Currently, we neglect hierarchies in exporting DSE results.
+	 */
+	@Override
+	public Collection<Class<? extends ITransformationModule<?>>> getParentModules() {
+		Collection<Class<? extends ITransformationModule<?>>> parentModules = new ArrayList<>();
+		parentModules.add(SuperSetTransformationStrategy.class);
+		return parentModules;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Collection<Class<?>> getOptionalTypes() {
+		return Collections.emptySet();
+	}
+}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/SuperSetTransformationStrategy.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/SuperSetTransformationStrategy.java
new file mode 100644
index 00000000..0f658d7b
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/SuperSetTransformationStrategy.java
@@ -0,0 +1,121 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2018 fortiss GmbH                                              |
+|                                                                          |
+| Licensed under the Apache License, Version 2.0 (the "License");          |
+| you may not use this file except in compliance with the License.         |
+| You may obtain a copy of the License at                                  |
+|                                                                          |
+|    http://www.apache.org/licenses/LICENSE-2.0                            |
+|                                                                          |
+| Unless required by applicable law or agreed to in writing, software      |
+| distributed under the License is distributed on an "AS IS" BASIS,        |
+| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+| See the License for the specific language governing permissions and      |
+| limitations under the License.                                           |
++--------------------------------------------------------------------------*/
+package org.fortiss.af3.exploration.alg.dse.modeltransformation.dseinternal;
+
+import static org.fortiss.af3.exploration.util.DesignSpaceExplorationModelElementFactory.createSuperSetMap;
+import static org.fortiss.tooling.common.util.LambdaUtils.getFirst;
+
+import java.util.Collection;
+import java.util.Collections;
+
+import org.eclipse.emf.ecore.EObject;
+import org.fortiss.af3.exploration.alg.dse.modeltransformation.ITransformationModule;
+import org.fortiss.af3.exploration.alg.dse.modeltransformation.base.TransformationStrategyBase;
+import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
+import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService.TransformationContext;
+import org.fortiss.af3.exploration.dsl_v2.model.expression.SuperSet;
+import org.fortiss.af3.exploration.model.SuperSetMap;
+
+/**
+ * Transforms the DSE-internal solution representations into {@link SuperSet}s and stores them in a
+ * {@link SuperSetMap}.
+ * The current implementation is fairly static and shall be replaced by a version built on a
+ * dependency system.
+ * 
+ * @author diewald
+ */
+public class SuperSetTransformationStrategy extends TransformationStrategyBase<SuperSetMap> {
+	/**
+	 * Holds the generated {@link SuperSetMap} and keeps it over the different
+	 * {@link org.fortiss.af3.exploration.alg.dse.modeltransformation.ITransformationModule.TransformationState}s
+	 */
+	SuperSetMap superSets;
+
+	/** {@inheritDoc} */
+	@Override
+	public <N extends EObject, S extends EObject> SuperSetMap transform(TransformationState state,
+			TransformationContext context, ExplorationTransformationInputs inputs,
+			SubClassToInstanceMap<N> transformedModels, EObject outputModel) {
+		if(state == TransformationState.INITIALIZING) {
+			superSets = createSuperSetMap();
+
+			ComponentExecutionUnitTransformation cToExUModule =
+					(ComponentExecutionUnitTransformation)getFirst(subModules,
+							m -> m instanceof ComponentExecutionUnitTransformation).get();
+			superSets.put(cToExUModule.getOutputType(),
+					cToExUModule.transform(state, context, inputs, transformedModels, outputModel));
+
+			PartitionTransformation partModule = (PartitionTransformation)getFirst(subModules,
+					m -> m instanceof PartitionTransformation).get();
+			superSets.put(partModule.getOutputType(),
+					partModule.transform(state, context, inputs, transformedModels, outputModel));
+			applyAssociationUpdates(partModule);
+
+			// Allocations depending on the partition architecture.
+			TaskToPartitionTransformation tToPModule =
+					(TaskToPartitionTransformation)getFirst(subModules,
+							m -> m instanceof TaskToPartitionTransformation).get();
+			tToPModule.applyAssociationUpdates(this);
+			superSets.put(tToPModule.getOutputType(),
+					tToPModule.transform(state, context, inputs, transformedModels, outputModel));
+
+			PartitionToExecutionUnitTransformation pToExUModule =
+					(PartitionToExecutionUnitTransformation)getFirst(subModules,
+							m -> m instanceof PartitionToExecutionUnitTransformation).get();
+			pToExUModule.applyAssociationUpdates(this);
+			superSets.put(pToExUModule.getOutputType(),
+					pToExUModule.transform(state, context, inputs, transformedModels, outputModel));
+		}
+		return superSets;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public boolean isOptional() {
+		return false;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public TransformationState getActivationStage() {
+		return TransformationState.INITIALIZING;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Collection<Class<? extends ITransformationModule<?>>> getParentModules() {
+		return Collections.emptySet();
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Collection<Class<?>> getRequiredTypes() {
+		return Collections.emptySet();
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Collection<Class<?>> getOptionalTypes() {
+		return Collections.emptySet();
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Class<SuperSetMap> getOutputType() {
+		return SuperSetMap.class;
+	}
+}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/TaskToPartitionTransformation.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/TaskToPartitionTransformation.java
new file mode 100644
index 00000000..5c91f8b4
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/dseinternal/TaskToPartitionTransformation.java
@@ -0,0 +1,82 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2018 fortiss GmbH                                              |
+|                                                                          |
+| Licensed under the Apache License, Version 2.0 (the "License");          |
+| you may not use this file except in compliance with the License.         |
+| You may obtain a copy of the License at                                  |
+|                                                                          |
+|    http://www.apache.org/licenses/LICENSE-2.0                            |
+|                                                                          |
+| Unless required by applicable law or agreed to in writing, software      |
+| distributed under the License is distributed on an "AS IS" BASIS,        |
+| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+| See the License for the specific language governing permissions and      |
+| limitations under the License.                                           |
++--------------------------------------------------------------------------*/
+package org.fortiss.af3.exploration.alg.dse.modeltransformation.dseinternal;
+
+import static org.fortiss.af3.allocation.utils.AllocationModelElementFactory.createAllocationEntry;
+import static org.fortiss.af3.exploration.util.DSMLModelElementFactory.createSuperSet;
+
+import java.util.Collection;
+import java.util.HashSet;
+
+import org.eclipse.emf.ecore.EObject;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry;
+import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
+import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService.TransformationContext;
+import org.fortiss.af3.exploration.dsl_v2.model.expression.SuperSet;
+import org.fortiss.af3.partition.model.Partition;
+import org.fortiss.af3.partition.model.allocation.TaskToPartitionAllocationEntry;
+import org.fortiss.af3.task.model.Task;
+
+/**
+ * Transforms a {@link TaskMappingEncoding} to a {@link SuperSet} of AF3
+ * {@link TaskToPartitionAllocationEntry}s.
+ * 
+ * @author diewald
+ */
+public class TaskToPartitionTransformation
+		extends SuperSetTransformationBase<TaskToPartitionAllocationEntry> {
+
+	/** {@inheritDoc} */
+	@Override
+	public <N extends EObject, S extends EObject> SuperSet<TaskToPartitionAllocationEntry>
+			transform(TransformationState state, TransformationContext context,
+					ExplorationTransformationInputs inputs,
+					SubClassToInstanceMap<N> transformedModels, EObject outputModel) {
+		@SuppressWarnings("unchecked") InstantiatedTaskMappingEncoding<InstantiatedTaskMappingEntry> taskMapping =
+				inputs.getEncoding(InstantiatedTaskMappingEncoding.class);
+		SuperSet<TaskToPartitionAllocationEntry> allocations =
+				createSuperSet("TaskToPart", TaskToPartitionAllocationEntry.class);
+		for(InstantiatedTaskMappingEntry entry : taskMapping.getMappingEntries()) {
+			org.fortiss.af3.partition.model.Partition af3Partition =
+					(Partition)encEntryModelElemAssoc.get(entry.getTarget(),
+							org.fortiss.af3.partition.model.Partition.class);
+			assert (af3Partition != null) : "Error in the mapping of internal Partitions --> AF3 Partitions.";
+			TaskToPartitionAllocationEntry af3AllocEntry =
+					createAllocationEntry(TaskToPartitionAllocationEntry.class);
+			af3AllocEntry.getSourceElements().add((Task)entry.getSource().getObject());
+			af3AllocEntry.setTargetElement(af3Partition);
+			allocations.getEntries().add(af3AllocEntry);
+		}
+		return allocations;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Collection<Class<?>> getRequiredTypes() {
+		Collection<Class<?>> inputTypes = new HashSet<>();
+		inputTypes.add(InstantiatedTaskMappingEncoding.class);
+		return inputTypes;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Class<TaskToPartitionAllocationEntry> getOutputType() {
+		return TaskToPartitionAllocationEntry.class;
+	}
+}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/element/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/element/.ratings
index 7e3a7b14..b949ac98 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/element/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/element/.ratings
@@ -1,2 +1,2 @@
-IElementTransformationModule.java 925a20d09b2f0b457786986fdee808505a307e02 RED
+IElementTransformationModule.java 74944b50aa164aaa00a760c43674e5c7c5b168f7 RED
 M2MCopier.java 06c90ca296218bf0d5a39215e4200eeb41abd22e RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/element/IElementTransformationModule.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/element/IElementTransformationModule.java
index 2ae4c7f5..214929f1 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/element/IElementTransformationModule.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/element/IElementTransformationModule.java
@@ -21,8 +21,7 @@ import org.eclipse.emf.ecore.EObject;
 import org.fortiss.af3.exploration.alg.dse.modeltransformation.ITransformationModule;
 import org.fortiss.af3.exploration.alg.exception.TransformationModuleException;
 import org.fortiss.af3.exploration.alg.graph.IDependencyModule;
-import org.fortiss.af3.exploration.alg.service.ExplorationEncodingMap;
-import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
 
 /**
  * Interface for operations that are common to all Element Generation/Transformation Modules.
@@ -47,10 +46,8 @@ public interface IElementTransformationModule<T extends EObject, O extends EObje
 	 * 
 	 * @param inputElement
 	 *            Model element to be transformed.
-	 * @param baseModels
+	 * @param inputs
 	 *            Set of (original) base models.
-	 * @param explorationEncodings
-	 *            Encodings calculated by the DSE.
 	 * @param transformedModels
 	 *            Set of transformed/already manipulated models.
 	 * @param outputModel
@@ -64,8 +61,6 @@ public interface IElementTransformationModule<T extends EObject, O extends EObje
 	// for now to avoid a compile error in ElementTransformtationStrategy for now but this
 	// workaround is not type safe.
 	<N extends EObject, S extends EObject> O transformElement(EObject inputElement,
-			Map<Class<? extends S>, S> baseModels,
-			ExplorationEncodingMap<IExplorationEncoding> explorationEncodings,
-			Map<Class<? extends N>, N> transformedModels, O outputModel)
-			throws TransformationModuleException;
+			ExplorationTransformationInputs inputs, Map<Class<? extends N>, N> transformedModels,
+			O outputModel) throws TransformationModuleException;
 }
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/partition/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/partition/.ratings
index bd6c2a8d..08a954b4 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/partition/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/partition/.ratings
@@ -1,2 +1,2 @@
 PartitionTransformationStrategy.java 220d5175ac8ff958f82c053a934095880540fcd3 YELLOW
-PartitionTransformer.java 8e0cfe41579eea4c45d24ef768799f47e6751743 YELLOW
+PartitionTransformer.java b2f9f2dc793c73b35bef529646e449012f747750 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/partition/PartitionTransformer.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/partition/PartitionTransformer.java
index 38ed01d4..57f0b38e 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/partition/PartitionTransformer.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/partition/PartitionTransformer.java
@@ -34,11 +34,9 @@ import org.fortiss.af3.deployment.model.Deployment;
 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.guava.SubClassToInstanceMap;
-import org.fortiss.af3.exploration.alg.service.ExplorationEncodingMap;
-import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
 import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService.TransformationContext;
 import org.fortiss.af3.exploration.dsl_v2.model.expression.SuperSet;
-import org.fortiss.af3.exploration.model.SuperSetMap;
 import org.fortiss.af3.partition.model.Partition;
 import org.fortiss.af3.partition.model.PartitionArchitecture;
 import org.fortiss.af3.partition.model.allocation.PartitionToExecutionUnitAllocationEntry;
@@ -79,17 +77,16 @@ public class PartitionTransformer extends TransformationModuleBase<AllocationTab
 	@Override
 	public <N extends EObject, S extends EObject> AllocationTableCollection transform(
 			TransformationState state, TransformationContext context,
-			SubClassToInstanceMap<S> baseModels, SuperSetMap superSets,
-			ExplorationEncodingMap<IExplorationEncoding> explorationEncodings,
-			SubClassToInstanceMap<N> transformedModels, EObject outputModel) {
+			ExplorationTransformationInputs inputs, SubClassToInstanceMap<N> transformedModels,
+			EObject outputModel) {
 		platfromArchitecture = getArchitectureOfAllocSuperSet(
-				superSets.get(PartitionToExecutionUnitAllocationEntry.class),
+				inputs.getSuperSet(PartitionToExecutionUnitAllocationEntry.class),
 				PlatformArchitecture.class);
 		taskArchitecture = getArchitectureOfAllocSuperSet(
-				superSets.get(TaskToPartitionAllocationEntry.class), TaskArchitecture.class);
+				inputs.getSuperSet(TaskToPartitionAllocationEntry.class), TaskArchitecture.class);
 
 		SuperSet<PartitionToExecutionUnitAllocationEntry> partToExU =
-				superSets.get(PartitionToExecutionUnitAllocationEntry.class);
+				inputs.getSuperSet(PartitionToExecutionUnitAllocationEntry.class);
 		// Get a random entry to retrieve the model context.
 		PartitionToExecutionUnitAllocationEntry entry =
 				LambdaUtils.getFirst(partToExU.getEntries()).get();
@@ -98,18 +95,18 @@ public class PartitionTransformer extends TransformationModuleBase<AllocationTab
 		ITopLevelElement modelContext = IPersistencyService.getInstance().getTopLevelElementFor(fp);
 
 		// TODO: The following step should be performed in a separate module.
-		createPartitionArchitecture(superSets.get(Partition.class), modelContext);
-		modelContext.runAsNonDirtyingCommand(() -> fp.getRootElements().add(platfromArchitecture));
+		createPartitionArchitecture(inputs.getSuperSet(Partition.class), modelContext);
+		modelContext.runAsNonDirtyingCommand(() -> fp.getRootElements().add(partitionArchitecture));
 
 		// Create the allocations.
 		allocTableCollection = createAllocationTableCollection("Generated Allocations");
 		TaskToPartitionAllocationTable taskExUTable = createTaskToExecutionUnitAllocationTable(
-				superSets.get(TaskToPartitionAllocationEntry.class));
+				inputs.getSuperSet(TaskToPartitionAllocationEntry.class));
 		modelContext.runAsNonDirtyingCommand(
 				() -> allocTableCollection.getContainedElements().add(taskExUTable));
 		PartitionToExecutionUnitAllocationTable partExUTable =
 				createPartitionToExecutionUnitAllocationTable(
-						superSets.get(PartitionToExecutionUnitAllocationEntry.class));
+						inputs.getSuperSet(PartitionToExecutionUnitAllocationEntry.class));
 		modelContext.runAsNonDirtyingCommand(
 				() -> allocTableCollection.getContainedElements().add(partExUTable));
 
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/.ratings
index 9998a3ec..bd0ee265 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/.ratings
@@ -1,2 +1,2 @@
-SafetyChannelPortReplicator.java 691c953255a126c817b29b822ba52fa70422c866 RED
-SafetyDiagUnitRemover.java 082f3e2cab9b3c4ce1f4fc96ab3690ffa51be4f1 RED
+SafetyChannelPortReplicator.java 6fc6a909be6baa4d73501cd6d9759b5a47870057 RED
+SafetyDiagUnitRemover.java b3ce9c265511692802ce3c519c5ae2820e5d8ae0 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/SafetyChannelPortReplicator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/SafetyChannelPortReplicator.java
index e5ee589a..5990480f 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/SafetyChannelPortReplicator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/SafetyChannelPortReplicator.java
@@ -36,10 +36,8 @@ 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.ITaskAdapter;
 import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap;
-import org.fortiss.af3.exploration.alg.service.ExplorationEncodingMap;
-import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
 import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService.TransformationContext;
-import org.fortiss.af3.exploration.model.SuperSetMap;
 
 /**
  * 
@@ -71,11 +69,10 @@ public class SafetyChannelPortReplicator extends TransformationModuleBase<Compon
 	@Override
 	public <N extends EObject, S extends EObject> ComponentArchitecture transform(
 			ITransformationModule.TransformationState state, TransformationContext context,
-			SubClassToInstanceMap<S> baseModels, SuperSetMap superSets,
-			ExplorationEncodingMap<IExplorationEncoding> explorationEncodings,
-			SubClassToInstanceMap<N> transformedModels, EObject outputModel) {
+			ExplorationTransformationInputs inputs, SubClassToInstanceMap<N> transformedModels,
+			EObject outputModel) {
 		@SuppressWarnings("unchecked") SafetyFunctionArchEncoding<Component> sfaEnc =
-				explorationEncodings.getEncoding(SafetyFunctionArchEncoding.class);
+				inputs.getEncoding(SafetyFunctionArchEncoding.class);
 
 		Collection<Component> sfComponents = new HashSet<>();
 		for(SafetyFunctionArchEntry<Component> sfaEntry : sfaEnc.getAllEntries()) {
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/SafetyDiagUnitRemover.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/SafetyDiagUnitRemover.java
index 3a1b0e50..b1a08fa2 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/SafetyDiagUnitRemover.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/modeltransformation/safety/SafetyDiagUnitRemover.java
@@ -32,10 +32,8 @@ import org.fortiss.af3.exploration.alg.dse.modeltransformation.comparch.Componen
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.ITaskAdapter;
 import org.fortiss.af3.exploration.alg.exception.TransformationModuleException;
 import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap;
-import org.fortiss.af3.exploration.alg.service.ExplorationEncodingMap;
-import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
 import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService.TransformationContext;
-import org.fortiss.af3.exploration.model.SuperSetMap;
 
 /**
  * Module that deletes diagnostic {@link Component}s from a generated {@link ComponentArchitecture}
@@ -90,10 +88,8 @@ public class SafetyDiagUnitRemover extends TransformationModuleBase<ComponentArc
 	@Override
 	public <N extends EObject, S extends EObject> ComponentArchitecture transform(
 			TransformationState state, TransformationContext context,
-			SubClassToInstanceMap<S> baseModels, SuperSetMap superSets,
-			ExplorationEncodingMap<IExplorationEncoding> explorationEncodings,
-			SubClassToInstanceMap<N> transformedModels, EObject outputModel)
-			throws TransformationModuleException {
+			ExplorationTransformationInputs inputs, SubClassToInstanceMap<N> transformedModels,
+			EObject outputModel) throws TransformationModuleException {
 		ComponentArchitecture genCA = (ComponentArchitecture)outputModel;
 		if(genCA == null) {
 			throw new TransformationModuleException(this,
@@ -101,7 +97,7 @@ public class SafetyDiagUnitRemover extends TransformationModuleBase<ComponentArc
 		}
 
 		@SuppressWarnings("unchecked") SafetyFunctionArchEncoding<Component> sfaEnc =
-				explorationEncodings.getEncoding(SafetyFunctionArchEncoding.class);
+				inputs.getEncoding(SafetyFunctionArchEncoding.class);
 		if(sfaEnc == null) {
 			throw new TransformationModuleException(this,
 					"A SafetyFunctionArchEncoding is required for this module to operate properly.");
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/graph/IDependencyModule.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/graph/IDependencyModule.java
index 4189a901..8db4ecbd 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/graph/IDependencyModule.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/graph/IDependencyModule.java
@@ -42,5 +42,5 @@ public interface IDependencyModule<I, O> {
 	Collection<Class<?>> getOptionalTypes();
 
 	/** Returns the resulting type of {@code this} operation. */
-	Class<? super O> getOutputType();
+	Class<?> getOutputType();
 }
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/plot/XYPlotter.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/plot/XYPlotter.java
index f65690b5..e6d38d79 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/plot/XYPlotter.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/plot/XYPlotter.java
@@ -53,8 +53,7 @@ import org.fortiss.af3.component.model.ComponentArchitecture;
 import org.fortiss.af3.deployment.model.Deployment;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry;
-import org.fortiss.af3.exploration.alg.guava.MutableSubClassToInstanceMap;
-import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
 import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService;
 import org.fortiss.af3.exploration.dsl_v2.model.expression.SuperSet;
 import org.fortiss.af3.exploration.model.ExplorationConstraint;
@@ -84,8 +83,6 @@ import org.jfree.data.xy.XYSeries;
 import org.jfree.data.xy.XYSeriesCollection;
 import org.jfree.ui.RectangleEdge;
 
-import com.google.common.collect.ClassToInstanceMap;
-
 /**
  * This class is responsible for creating a dialog that is used to display the identified
  * pareto-optimal solution of the design space exploration. It offers a 2D graph that visualizes the
@@ -619,7 +616,7 @@ public class XYPlotter extends JFrame implements ChartMouseListener, ActionListe
 			deploymentName = "_Deployment";
 		}
 
-		SubClassToInstanceMap<EObject> baseModels = MutableSubClassToInstanceMap.create();
+		// SubClassToInstanceMap<EObject> baseModels = MutableSubClassToInstanceMap.create();
 		// TODO: instead of querying the systemModelAdapter here, we should use the
 		// explorationResult -> input models.
 		// ComponentArchitecture compArch =
@@ -645,19 +642,20 @@ public class XYPlotter extends JFrame implements ChartMouseListener, ActionListe
 		ITopLevelElement modelContext = IPersistencyService.getInstance()
 				.getTopLevelElementFor(LambdaUtils.getFirst(entry.getTargetElements()).get());
 
-		Collection<Class<? extends EObject>> solutionModelTypes = new HashSet<>();
+		Collection<Class<?>> solutionModelTypes = new HashSet<>();
 		// solutionModelTypes.add(Deployment.class);
 		solutionModelTypes.add(AllocationTableCollection.class);
 		if(generateSCSpec) {
 			// solutionModelTypes.add(SafetyComplianceSpecification.class);
 		}
 
+		ExplorationTransformationInputs inputs =
+				new ExplorationTransformationInputs(solutionMap.getSolutionSets(), null);
 		AllocationTableCollection deployment = null;
-		ClassToInstanceMap<EObject> solutionModels =
+		Map<Class<EObject>, ?> solutionModels =
 				getService(IExplorationTransformationService.class).getTransformedModels(EXPORT,
-						modelContext, solutionMap, baseModels, solutionMap.getSolutionSets(),
-						solutionModelTypes, deploymentName);
-		deployment = solutionModels.getInstance(AllocationTableCollection.class);
+						modelContext, inputs, solutionModelTypes, deploymentName);
+		deployment = (AllocationTableCollection)solutionModels.get(AllocationTableCollection.class);
 
 		// Derive the ComponentType from the Voter Specification.
 		// for(VoterType voterSpec : getChildrenWithType(compArch, VoterType.class)) {
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/.ratings
index 986a963e..2145bca6 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/.ratings
@@ -8,5 +8,5 @@ IExplorationModule.java 8990c654e649f043fa9813b8bf9113ac7bd42d27 RED
 IExplorationRepairService.java e923c43c49e0c83daef71707d5fdb66444f859f8 RED
 IExplorationService.java 891b8c4ce01e40ab31bf69231a63fd61c57ac98e RED
 IExplorationTargetEvaluator.java 9b39b44f64ad8195583b00f8e3852bbc912f75fc RED
-IExplorationTransformationService.java e0b50a382efcb1f84841ed4693077e8427031816 YELLOW
+IExplorationTransformationService.java 5430b63426e704516b560d142b46ae702e07f726 RED
 IRepairModule.java 498a5b0ff519482af41db2916b1eefd1142cc9df RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/ExplorationTransformationInputs.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/ExplorationTransformationInputs.java
new file mode 100644
index 00000000..3374ce60
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/ExplorationTransformationInputs.java
@@ -0,0 +1,95 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2018 fortiss GmbH                                              |
+|                                                                          |
+| Licensed under the Apache License, Version 2.0 (the "License");          |
+| you may not use this file except in compliance with the License.         |
+| You may obtain a copy of the License at                                  |
+|                                                                          |
+|    http://www.apache.org/licenses/LICENSE-2.0                            |
+|                                                                          |
+| Unless required by applicable law or agreed to in writing, software      |
+| distributed under the License is distributed on an "AS IS" BASIS,        |
+| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+| See the License for the specific language governing permissions and      |
+| limitations under the License.                                           |
++--------------------------------------------------------------------------*/
+package org.fortiss.af3.exploration.alg.service;
+
+import static org.fortiss.af3.exploration.util.DesignSpaceExplorationModelElementFactory.createSuperSetMap;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
+import org.fortiss.af3.exploration.dsl_v2.model.expression.SuperSet;
+import org.fortiss.af3.exploration.model.SuperSetMap;
+import org.fortiss.tooling.base.model.element.IModelElement;
+
+import com.google.common.collect.ClassToInstanceMap;
+import com.google.common.collect.MutableClassToInstanceMap;
+
+/**
+ * Container class that provides inputs from a DSE to the transformation framework.
+ * 
+ * @author diewald
+ */
+// TODO: Instead of wrapping, we could also use subclassing: Encodings for DSE internal instances,
+// SuperSets for the external world.
+public class ExplorationTransformationInputs {
+	/** References the input {@link SuperSet}s. */
+	private SuperSetMap superSets;
+	/** References the internal inputs from the DSE. */
+	// TODO(AD): This explicit declaration of the Phenotype parameter can be avoided by
+	// subclassing...
+	private ClassToInstanceMap<Phenotype> dseEncodings;
+
+	/** Constructor. */
+	public ExplorationTransformationInputs(SuperSetMap superSets,
+			ClassToInstanceMap<Phenotype> dseEncodings) {
+		if(superSets != null) {
+			this.superSets = superSets;
+		} else {
+			this.superSets = createSuperSetMap();
+		}
+		if(dseEncodings != null) {
+			this.dseEncodings = dseEncodings;
+		} else {
+			this.dseEncodings = MutableClassToInstanceMap.create();
+		}
+	}
+
+	/**
+	 * Returns an instance of the given class from the encodings of a DSE.
+	 * 
+	 * @param type
+	 *            of the instance to be returned.
+	 * @return instance of the class obtained from the above mentioned containers, or {@code null}
+	 *         if it is not found.
+	 */
+	public <T extends Phenotype> T getEncoding(Class<T> type) {
+		return dseEncodings.getInstance(type);
+	}
+
+	/**
+	 * Returns the {@link SuperSet} which references elements of the given type.
+	 * 
+	 * @param type
+	 *            of the {@link SuperSet} to be returned.
+	 * @return {@link SuperSet} of the given type or {@code null} if no corresponding
+	 *         {@link SuperSet} is not found.
+	 */
+	public <S extends IModelElement> SuperSet<S> getSuperSet(Class<S> type) {
+		return superSets.get(type);
+	}
+
+	/**
+	 * Returns the types of all instances of DSE results wrapped in this container (encodings or
+	 * {@link SuperSet}s).
+	 */
+	public Set<Class<?>> keySet() {
+		Set<Class<?>> allTypes = new HashSet<>();
+		allTypes.addAll(dseEncodings.keySet());
+		allTypes.addAll(superSets.keySet());
+		return allTypes;
+	}
+}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/IExplorationTransformationService.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/IExplorationTransformationService.java
index 49c98f5e..b16fb771 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/IExplorationTransformationService.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/IExplorationTransformationService.java
@@ -16,21 +16,16 @@
 package org.fortiss.af3.exploration.alg.service;
 
 import java.util.Collection;
+import java.util.Map;
 
 import org.eclipse.emf.ecore.EObject;
-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.modeltransformation.ITransformationModule;
 import org.fortiss.af3.exploration.alg.dse.modeltransformation.ITransformationStrategy;
-import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap;
 import org.fortiss.af3.exploration.alg.service.internal.ExplorationTransformationService;
 import org.fortiss.af3.exploration.dsl_v2.model.expression.SuperSet;
-import org.fortiss.af3.exploration.model.SuperSetMap;
 import org.fortiss.af3.exploration.model.solutions.SingleExplorationSolution;
 import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
 
-import com.google.common.collect.ClassToInstanceMap;
-
 /**
  * {@link IExplorationService} interface of the {@link IExplorationTransformationService}.
  * It enables users to obtain transformed EMF models of a given type from a provided (candidate)
@@ -94,12 +89,8 @@ public interface IExplorationTransformationService
 	 *            by the user to export a solution.
 	 * @param modelContext
 	 *            Model context in which the transformed models would be stored.
-	 * @param solution
-	 *            {@link SingleExplorationSolution} containing the solution models.
-	 * @param baseModels
-	 *            EMF models used as a basis to generate the transformed model.
-	 * @param superSets
-	 *            {@link SuperSet}s (= "models") calculated by the DSE.
+	 * @param inputs
+	 *            DSE encodings and {@link SuperSet}s as a basis to generate the transformed model.
 	 * @param transformedModelTypes
 	 *            Type of the transformed models that shall be returned.
 	 * @param transformedModelName
@@ -109,104 +100,11 @@ public interface IExplorationTransformationService
 	 *             If no {@link ITransformationModule} has been registered which can produce the
 	 *             demanded model, or if some required solution encoding was not passed.
 	 */
-	<U extends EObject, S extends EObject> ClassToInstanceMap<U> getTransformedModels(
+	<U extends EObject, S extends EObject> Map<Class<U>, S> getTransformedModels(
 			TransformationContext context, ITopLevelElement modelContext,
-			SingleExplorationSolution solution, SubClassToInstanceMap<S> baseModels,
-			SuperSetMap superSets, Collection<Class<? extends EObject>> transformedModelTypes,
+			ExplorationTransformationInputs inputs, Collection<Class<?>> transformedModelTypes,
 			String transformedModelName) throws Exception;
 
-	/**
-	 * Generates a model of the requested type ({@code transformedModelType}) using the set of
-	 * solution models contained in the given {@link SingleExplorationSolution} and the
-	 * collection of given {@code baseModel}s.
-	 * 
-	 * @param context
-	 *            Defines whether the model transformation is executed DSE-internally or triggered
-	 *            by the user to export a solution.
-	 * @param modelContext
-	 *            Model context in which the transformed models would be stored.
-	 * @param solution
-	 *            {@link SingleExplorationSolution} containing the solution models.
-	 * @param baseModels
-	 *            EMF models used as a basis to generate the transformed model.
-	 * @param superSets
-	 *            {@link SuperSet}s (= "models") calculated by the DSE.
-	 * @param transformedModelType
-	 *            Type of the transformed model.
-	 * @param transformedModelName
-	 *            name of the transformed model, used when the model shall be exported.
-	 * @return The transformed model.
-	 * @throws Exception
-	 *             If no {@link ITransformationModule} has been registered which can produce the
-	 *             demanded model, or if some required solution encoding was not passed.
-	 */
-	<U extends EObject, S extends EObject> U getTransformedModel(TransformationContext context,
-			ITopLevelElement modelContext, SingleExplorationSolution solution,
-			SubClassToInstanceMap<S> baseModels, SuperSetMap superSets,
-			Class<U> transformedModelType, String transformedModelName) throws Exception;
-
-	/**
-	 * Generates models of the requested types ({@code transformedModelTypes}) using the set of
-	 * solution models contained in the given {@link SingleExplorationSolution} and the
-	 * collection of given {@code baseModel}s.
-	 * 
-	 * @param context
-	 *            Defines whether the model transformation is executed DSE-internally or triggered
-	 *            by the user to export a solution.
-	 * @param modelContext
-	 *            Model context in which the transformed models would be stored.
-	 * @param encodings
-	 *            {@link SingleExplorationSolution} containing the solution models.
-	 * @param baseModels
-	 *            EMF models used as a basis to generate the transformed model.
-	 * @param superSets
-	 *            {@link SuperSet}s (= "models") calculated by the DSE.
-	 * @param transformedModelTypes
-	 *            Type of the transformed models that shall be returned.
-	 * @param transformedModelName
-	 *            name of the transformed model, used when the model shall be exported.
-	 * @return The transformed models which were requested.
-	 * @throws Exception
-	 *             If no {@link ITransformationModule} has been registered which can produce the
-	 *             demanded model, or if some required solution encoding was not passed.
-	 */
-	<U extends EObject, S extends EObject> ClassToInstanceMap<U> getTransformedModels(
-			TransformationContext context, ITopLevelElement modelContext,
-			ExplorationEncodingMap<IExplorationEncoding> encodings,
-			SubClassToInstanceMap<S> baseModels, SuperSetMap superSets,
-			Collection<Class<? extends EObject>> transformedModelTypes, String transformedModelName)
-			throws Exception;
-
-	/**
-	 * Generates a model of the requested type ({@code transformedModelType}) using the set of
-	 * {@link Phenotype}s contained in the given {@link FlatPhenotypeMap} and the
-	 * collection of given {@code baseModel}s.
-	 * 
-	 * @param context
-	 *            Defines whether the model transformation is executed DSE-internally or triggered
-	 *            by the user to export a solution.
-	 * @param modelContext
-	 *            Model context in which the transformed models would be stored.
-	 * @param encodings
-	 *            {@link SingleExplorationSolution} containing the solution models.
-	 * @param baseModels
-	 *            EMF models used as a basis to generate the transformed model.
-	 * @param superSets
-	 *            {@link SuperSet}s (= "models") calculated by the DSE.
-	 * @param transformedModelType
-	 *            Type of the transformed model.
-	 * @param transformedModelName
-	 *            name of the transformed model, used when the model shall be exported.
-	 * @return The transformed model.
-	 * @throws Exception
-	 *             If no {@link ITransformationModule} has been registered which can produce the
-	 *             demanded model, or if some required solution encoding was not passed.
-	 */
-	<U extends EObject, S extends EObject> U getTransformedModel(TransformationContext context,
-			ITopLevelElement modelContext, ExplorationEncodingMap<IExplorationEncoding> encodings,
-			SubClassToInstanceMap<S> baseModels, SuperSetMap superSets,
-			Class<U> transformedModelType, String transformedModelName) throws Exception;
-
 	/**
 	 * Resets the lists of {@link ITransformationModule}s registered at {@code this}
 	 * {@link ExplorationTransformationService}.
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/internal/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/internal/.ratings
index 6b6be46f..91a95e28 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/internal/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/internal/.ratings
@@ -1,4 +1,4 @@
 ExplorationConstraintTransformationService.java 80031ad626c327df10bc00859a4036844544553b RED
 ExplorationEvaluationService.java 259ace09d86990428fb2ff9cfbff552cb4a69be8 RED
 ExplorationRepairService.java ac50a5e53792c6793ff4b8ad5aa9812141990f5c RED
-ExplorationTransformationService.java e9dae52c7d57d7e694f5696a4808b6eacbab1b96 RED
+ExplorationTransformationService.java 44817e9380c88d538b094b0930b88b2ce0f03b89 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/internal/ExplorationTransformationService.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/internal/ExplorationTransformationService.java
index f442e619..36e2368d 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/internal/ExplorationTransformationService.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/service/internal/ExplorationTransformationService.java
@@ -37,11 +37,9 @@ import org.fortiss.af3.exploration.alg.dse.modeltransformation.ITransformationMo
 import org.fortiss.af3.exploration.alg.dse.modeltransformation.ITransformationStrategy;
 import org.fortiss.af3.exploration.alg.guava.MutableSubClassToInstanceMap;
 import org.fortiss.af3.exploration.alg.guava.SubClassToInstanceMap;
-import org.fortiss.af3.exploration.alg.service.ExplorationEncodingMap;
+import org.fortiss.af3.exploration.alg.service.ExplorationTransformationInputs;
 import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
 import org.fortiss.af3.exploration.alg.service.IExplorationTransformationService;
-import org.fortiss.af3.exploration.model.SuperSetMap;
-import org.fortiss.af3.exploration.model.solutions.SingleExplorationSolution;
 import org.fortiss.af3.project.model.FileProject;
 import org.fortiss.af3.project.utils.ProjectUtils;
 import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
@@ -49,10 +47,8 @@ import org.fortiss.tooling.kernel.model.INamedElement;
 import org.fortiss.tooling.kernel.service.ITransformationService;
 import org.fortiss.tooling.kernel.service.base.EObjectAwareServiceBase;
 
-import com.google.common.collect.ClassToInstanceMap;
 import com.google.common.collect.HashMultimap;
 import com.google.common.collect.Multimap;
-import com.google.common.collect.MutableClassToInstanceMap;
 
 /**
  * Implementation of the {@link ITransformationService} that manages model transformations from
@@ -173,15 +169,15 @@ public class ExplorationTransformationService<T extends ITransformationModule<?>
 	 *             the given {@link ITransformationModule} has already been registered.
 	 */
 	protected void registerTransformationModuleInternal(T module) throws Exception {
-		// if(modulesByOutput.containsKey(module.getOutputType())) {
-		// throw new Exception(
-		// "An ITransformationModule has already been registered to produce the target model type "
-		// +
-		// module.getOutputType() +
-		// " (currently registered ITransformationModule: " +
-		// module.getClass().getSimpleName() +
-		// ". It is only allowed to register one ITransformationModule per target model type.");
-		// }
+		if(module instanceof ITransformationStrategy &&
+				modulesByOutput.containsKey(module.getOutputType())) {
+			throw new Exception(
+					"An ITransformationModule has already been registered to produce the target" +
+							"model type " + module.getOutputType() + " (currently registered" +
+							" ITransformationStrategy: " + module.getClass().getSimpleName() +
+							". It is only allowed to register one ITransformationModule per " +
+							"target model type.");
+		}
 
 		if(inputTypesOfModules.containsKey(module)) {
 			inputTypesOfModules.removeAll(module);
@@ -191,20 +187,6 @@ public class ExplorationTransformationService<T extends ITransformationModule<?>
 		modulesByOutput.put(module.getOutputType(), module);
 	}
 
-	/** {@inheritDoc} */
-	@Override
-	public <U extends EObject, S extends EObject> U getTransformedModel(
-			TransformationContext context, ITopLevelElement modelContext,
-			SingleExplorationSolution solution, SubClassToInstanceMap<S> baseModels,
-			SuperSetMap superSets, Class<U> transformedModelType, String transformedModelName)
-			throws Exception {
-		Collection<Class<? extends EObject>> reqType = new ArrayList<>();
-		reqType.add(transformedModelType);
-		ClassToInstanceMap<U> retMap = getTransformedModels(context, modelContext, solution,
-				baseModels, superSets, reqType, transformedModelName);
-		return retMap.getInstance(transformedModelType);
-	}
-
 	/** {@inheritDoc} */
 	@Override
 	public boolean canTransformOutputType(Class<?> transformedModelType) {
@@ -213,18 +195,18 @@ public class ExplorationTransformationService<T extends ITransformationModule<?>
 
 	/** {@inheritDoc} */
 	@Override
-	public <U extends EObject, S extends EObject> ClassToInstanceMap<U> getTransformedModels(
+	// FIXME: Merge with the above method: Code duplication!!!
+	public <U extends EObject, S extends EObject> Map<Class<U>, S> getTransformedModels(
 			TransformationContext context, ITopLevelElement modelContext,
-			SingleExplorationSolution solution, SubClassToInstanceMap<S> baseModels,
-			SuperSetMap superSets, Collection<Class<? extends EObject>> transformedModelTypes,
+			ExplorationTransformationInputs inputs, Collection<Class<?>> transformedModelTypes,
 			String transformedModelName) throws Exception {
 		// First, collect all transformation modules which would generate the requested output.
 		Collection<ITransformationModule<?>> topLvlModules = new HashSet<>();
-		for(Class<? extends EObject> tModelType : transformedModelTypes) {
+		for(Class<?> tModelType : transformedModelTypes) {
 			ITransformationModule<?> module = modulesByOutput.get(tModelType);
 			if(module == null) {
 				throw new Exception(
-						"No ITransformationModule has been registerd which prduces the demanded output model type. Aborting.");
+						"No ITransformationModule has been registerd which produces the demanded output model type. Aborting.");
 			}
 			topLvlModules.add(module);
 		}
@@ -233,23 +215,20 @@ public class ExplorationTransformationService<T extends ITransformationModule<?>
 		// and its sub-Modules are present.
 		// TODO: instead of triggering the transformations here, use a threaded implementation in
 		// the ITransformation's base class.
-		ExplorationEncodingMap<IExplorationEncoding> solutionEncodings =
-				new ExplorationEncodingMap<>();
 		Queue<ITransformationModule<?>> moduleTraversalList = new LinkedList<>();
 		moduleTraversalList.addAll(topLvlModules);
 		while(!moduleTraversalList.isEmpty()) {
 			ITransformationModule<?> currentModule = moduleTraversalList.poll();
-			for(Class<IExplorationEncoding> solutionType : pickSubTypesOf(
-					IExplorationEncoding.class, currentModule.getRequiredTypes())) {
-				Object solutionModel = null; // solution.getSolutionModel(solutionType);
-				// TODO(#3285): Reinclude.
-				if(solutionModel != null) {
-					solutionEncodings.putEncoding(solutionType,
-							(IExplorationEncoding)solutionModel);
-				} else if(!currentModule.isOptional()) {
+			// FIXME: This part of the code does not consider SuperSets yet.
+			for(Class<Phenotype> inputType : pickSubTypesOf(Phenotype.class,
+					currentModule.getRequiredTypes())) {
+				if(!currentModule.isOptional() && !(inputs.keySet().contains(inputType) ||
+						transformedModelTypes.contains(inputType))) {
 					throw new Exception("The required solution encoding " +
-							solutionType.getSimpleName() +
-							" could not be found in the given set of solutions. Please check whether all required solution model have been requested from the DSE.");
+							inputType.getSimpleName() +
+							" could not be found in the given set of solutions. Please check" +
+							" whether all required solution model have been requested from the" +
+							" DSE.");
 				}
 			}
 
@@ -257,99 +236,9 @@ public class ExplorationTransformationService<T extends ITransformationModule<?>
 			currentModule.getSubModules().forEach(m -> topLvlModules.remove(m));
 		}
 
-		// TODO: Add a meaningful TransformationException here.
-		assert (topLvlModules.size() == 1);
-
-		ITransformationModule<?> rootModule = topLvlModules.stream().findAny().get();
-		ITransformationModule<?> moduleInstance = rootModule.createModuleInstance();
-		if(moduleInstance instanceof ITransformationStrategy) {
-			((ITransformationStrategy<?>)moduleInstance).setModelContext(modelContext);
-			((ITransformationStrategy<?>)moduleInstance).setModelName(transformedModelName);
-		}
-
-		annotationUpdateEnabled = isUpdateEnabled();
-		setUpdateEnabled(false);
-
-		SubClassToInstanceMap<U> transformedModels = MutableSubClassToInstanceMap.create();
-		moduleInstance.transform(TransformationState.INITIALIZING, context, baseModels, superSets,
-				solutionEncodings, transformedModels, null);
-
-		if(context == TransformationContext.EXPORT &&
-				moduleInstance instanceof ITransformationStrategy) {
-			FileProject fp = ProjectUtils.getFileProject(modelContext.getRootModelElement());
-			((ITransformationStrategy<?>)moduleInstance).addModelToProject(fp, modelContext);
-		}
-
-		// Re-enable Annotation view updates if needed
-		setUpdateEnabled(annotationUpdateEnabled);
-
-		ClassToInstanceMap<U> retModels = MutableClassToInstanceMap.create();
-		for(Class<? extends EObject> retType : transformedModelTypes) {
-			assert (transformedModels.get(retType) != null);
-			@SuppressWarnings("unchecked") Class<? extends U> castedRetType =
-					(Class<? extends U>)retType;
-			retModels.put(castedRetType, transformedModels.get(retType));
-		}
-
-		return retModels;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public <U extends EObject, S extends EObject> U getTransformedModel(
-			TransformationContext context, ITopLevelElement modelContext,
-			ExplorationEncodingMap<IExplorationEncoding> phenotypes,
-			SubClassToInstanceMap<S> baseModels, SuperSetMap superSets,
-			Class<U> transformedModelType, String transformedModelName) throws Exception {
-		Collection<Class<? extends EObject>> reqType = new ArrayList<>();
-		reqType.add(transformedModelType);
-		ClassToInstanceMap<U> retMap = getTransformedModels(context, modelContext, phenotypes,
-				baseModels, superSets, reqType, transformedModelName);
-		return retMap.getInstance(transformedModelType);
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public <U extends EObject, S extends EObject> ClassToInstanceMap<U> getTransformedModels(
-			TransformationContext context, ITopLevelElement modelContext,
-			ExplorationEncodingMap<IExplorationEncoding> phenotypes,
-			SubClassToInstanceMap<S> baseModels, SuperSetMap superSets,
-			Collection<Class<? extends EObject>> transformedModelTypes, String transformedModelName)
-			throws Exception {
-		// First, collect all transformation modules which would generate the requested output.
-		Collection<ITransformationModule<?>> topLvlModules = new HashSet<>();
-		for(Class<? extends EObject> tModelType : transformedModelTypes) {
-			ITransformationModule<?> module = modulesByOutput.get(tModelType);
-			if(module == null) {
-				throw new Exception(
-						"No ITransformationModule has been registerd which produces the demanded output model type. Aborting.");
-			}
-			topLvlModules.add(module);
-		}
-
-		// Then, we check whether all required inputs for the corresponding ITransformationModule
-		// and its sub-Modules are present.
-		// TODO: instead of triggering the transformations here, use a threaded implementation in
-		// the ITransformation's base class.
-		ExplorationEncodingMap<IExplorationEncoding> encodings = new ExplorationEncodingMap<>();
-		Queue<ITransformationModule<?>> moduleTraversalList = new LinkedList<>();
-		moduleTraversalList.addAll(topLvlModules);
-		while(!moduleTraversalList.isEmpty()) {
-			ITransformationModule<?> currentModule = moduleTraversalList.poll();
-			for(Class<Phenotype> solutionType : pickSubTypesOf(Phenotype.class,
-					currentModule.getRequiredTypes())) {
-				IExplorationEncoding phenotype = phenotypes.getEncoding(solutionType);
-				if(phenotype != null) {
-					encodings.putEncoding(solutionType, phenotype);
-				} else if(!currentModule.isOptional()) {
-					throw new Exception("The required phenotype encoding " +
-							solutionType.getSimpleName() +
-							" could not be found in the given set of phenotypes. Please check whether all required phenotypes have been requested from the DSE.");
-				}
-			}
-
-			moduleTraversalList.addAll(currentModule.getSubModules());
-			currentModule.getSubModules().forEach(m -> topLvlModules.remove(m));
+		if(context == TransformationContext.EXPORT) {
+			annotationUpdateEnabled = isUpdateEnabled();
+			setUpdateEnabled(false);
 		}
 
 		// TODO: Add a meaningful TransformationException here.
@@ -364,19 +253,28 @@ public class ExplorationTransformationService<T extends ITransformationModule<?>
 		}
 		SubClassToInstanceMap<U> transformedModels = MutableSubClassToInstanceMap.create();
 		@SuppressWarnings("unchecked") U transformedModel =
-				(U)moduleInstance.transform(TransformationState.INITIALIZING, context, baseModels,
-						superSets, encodings, transformedModels, null);
+				(U)moduleInstance.transform(TransformationState.INITIALIZING, context, inputs,
+						transformedModels, null);
 
 		if(transformedModel instanceof INamedElement) {
 			((INamedElement)transformedModel).setName(transformedModelName);
 		}
 
-		ClassToInstanceMap<U> retModels = MutableClassToInstanceMap.create();
-		for(Class<? extends EObject> retType : transformedModelTypes) {
-			assert (transformedModels.get(retType) != null);
-			@SuppressWarnings("unchecked") Class<? extends U> castedRetType =
-					(Class<? extends U>)retType;
-			retModels.put(castedRetType, transformedModels.get(retType));
+		Map<Class<U>, S> retModels = new HashMap<>();
+		for(Class<?> retType : transformedModelTypes) {
+			// FIMXE: These are VERY dirty casts to allow returning wrapped types (--> SuperSets).
+			// Reconsider!!!
+			@SuppressWarnings("unchecked") Class<U> castedRetType = (Class<U>)retType;
+			@SuppressWarnings("unchecked") S castedModel = (S)transformedModel;
+			retModels.put(castedRetType, castedModel);
+		}
+
+		if(context == TransformationContext.EXPORT) {
+			FileProject fp = ProjectUtils.getFileProject(modelContext.getRootModelElement());
+			((ITransformationStrategy<?>)moduleInstance).addModelToProject(fp, modelContext);
+
+			// Re-enable Annotation view updates if needed
+			setUpdateEnabled(annotationUpdateEnabled);
 		}
 
 		return retModels;
-- 
GitLab