diff --git a/org.fortiss.af3.exploration.alg/master/plugin.xml b/org.fortiss.af3.exploration.alg/master/plugin.xml
index 661feb6808d45a64dc32703cc0c63db366634ca5..3c091022ecfaa9cc3490646592c36e1144498fe6 100644
--- a/org.fortiss.af3.exploration.alg/master/plugin.xml
+++ b/org.fortiss.af3.exploration.alg/master/plugin.xml
@@ -235,5 +235,17 @@
                modelElementClass="org.fortiss.af3.exploration.moea.model.predefined.EnergyMinObjective">
          </modelElementClass>
       </evaluator>
+      <evaluator
+            module="org.fortiss.af3.exploration.alg.dse.evaluator.objective.MappingEvaluatorObjective">
+         <modelElementClass
+               modelElementClass="org.fortiss.af3.exploration.model.ObjectiveExpression">
+         </modelElementClass>
+      </evaluator>
+      <evaluator
+            module="org.fortiss.af3.exploration.alg.dse.evaluator.constraint.MappingEvaluatorConstraint">
+         <modelElementClass
+               modelElementClass="org.fortiss.af3.exploration.model.ConstraintExpression">
+         </modelElementClass>
+      </evaluator>
    </extension>
 </plugin>
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/contribution/Opt4JDseBackend.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/contribution/Opt4JDseBackend.java
index a36f6efcbeafd262f5e9ff48fb4066c9feddb47a..b4b25adc6059328329b3c4eb51da1f57790d86cf 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/contribution/Opt4JDseBackend.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/contribution/Opt4JDseBackend.java
@@ -62,7 +62,7 @@ public class Opt4JDseBackend implements IDseBackend {
 	/** {@inheritDoc} */
 	@SuppressWarnings("unchecked")
 	@Override
-	public Optional<ExplorationSolution> executeDSE(ExplorationSpecification spec,
+	public Optional<ExplorationSolution> executeDSE(ExplorationSpecification expSpec,
 			Set<Class<?>> solutionTypes, IDseInputParameters inputParameters,
 			Collection<IExplorationFeature> explorationModules, IProgressMonitor monitor)
 			throws Exception {
@@ -94,7 +94,7 @@ public class Opt4JDseBackend implements IDseBackend {
 				solPhenotypeTypes.add((Class<? extends IExplorationEncoding>)solType);
 			}
 			CompositeExplorationSolution<?> expResult =
-					explorer.explore(parameters.getInputParameter(DseSpecification.class),
+					explorer.explore(parameters.getInputParameter(DseSpecification.class), expSpec,
 							systemModelAdapter, solPhenotypeTypes, monitor, true);
 			explorationSolutionSet = expResult.convertToExplorationSolution();
 			explorationSolutionSet.setInputModelAdapter(systemModelAdapter);
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java
index e0a5e97268aaddd64005ab22a0d9dfc147ab9557..66249bca7526a04bcd92ef6315437140ffac3610 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/DSEFactory.java
@@ -54,6 +54,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.FailSilentExecModelFactory;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.FaultDetectionVotingExecModelFactory;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
+import org.fortiss.af3.exploration.model.ExplorationSpecification;
 import org.fortiss.af3.exploration.moea.model.DseSpecification;
 import org.fortiss.af3.exploration.moea.model.feature.SafetyExploration;
 import org.fortiss.af3.exploration.moea.model.parameters.ExecutionModel;
@@ -102,7 +103,8 @@ public class DSEFactory {
 	public
 			<C, S extends InstantiatedTaskMappingEntry, T extends InstantiatedTaskMappingEncoding<S>>
 			void createSubProblems(ArchitectureExplorationProblemModule archExpProblemModule,
-					DseSpecification dse, SystemModelAdapter<C, ?, ?, ?, ?, ?> systemModelAdapter,
+					DseSpecification dse, ExplorationSpecification expSpec,
+					SystemModelAdapter<C, ?, ?, ?, ?, ?> systemModelAdapter,
 					DecoderDependencyGraph execDepGraph) throws Exception {
 		// Java-limitation: it is not possible to pass the generic to the static methods.
 		TaskMappingFactory<S, T> tmFactory =
@@ -116,9 +118,9 @@ public class DSEFactory {
 			systemModelAdapter.addSafetyFunctionAdapters(sfExplorationModule.getAdapters());
 			createSafetyFunctionArchProblem(archExpProblemModule, systemModelAdapter, execDepGraph);
 		}
-		createAbstractTaskMappingProblem(tmFactory, archExpProblemModule, dse, systemModelAdapter,
-				execDepGraph);
-		createTaskMappingInstantiationProblem(tmFactory, archExpProblemModule, dse,
+		createAbstractTaskMappingProblem(tmFactory, archExpProblemModule, expSpec,
+				systemModelAdapter, execDepGraph);
+		createTaskMappingInstantiationProblem(tmFactory, archExpProblemModule, expSpec,
 				systemModelAdapter, execDepGraph);
 	}
 
@@ -190,14 +192,16 @@ public class DSEFactory {
 	private <S extends InstantiatedTaskMappingEntry, T extends InstantiatedTaskMappingEncoding<S>>
 			void createAbstractTaskMappingProblem(TaskMappingFactory<S, T> tmFactory,
 					ArchitectureExplorationProblemModule archExpProblemModule,
-					DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
+					ExplorationSpecification expSpec,
+					SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 					DecoderDependencyGraph execDepGraph) throws Exception {
 		Class<AbstractTaskMappingEncoding> tmEnodingClass = AbstractTaskMappingEncoding.class;
 		AbstractTaskMappingCreator tmCreator =
-				tmFactory.createAbstractTaskMappingCreator(dse, systemModelAdapter, execDepGraph);
+				tmFactory.createAbstractTaskMappingCreator(expSpec, systemModelAdapter,
+						execDepGraph);
 		@SuppressWarnings("rawtypes") List<ComposableDecoder> abstrTaskDecoders = new ArrayList<>();
 		AbstractTaskMappingDecoder<?, ?> atmDecoder =
-				tmFactory.createAbstractTaskMappingDecoder(systemModelAdapter, dse);
+				tmFactory.createAbstractTaskMappingDecoder(systemModelAdapter, expSpec);
 		AbstractTaskMappingIdentityDecoder idtDecoder = new AbstractTaskMappingIdentityDecoder();
 		abstrTaskDecoders.add(atmDecoder);
 		abstrTaskDecoders.add(idtDecoder);
@@ -231,11 +235,13 @@ public class DSEFactory {
 	private <S extends InstantiatedTaskMappingEntry, T extends InstantiatedTaskMappingEncoding<S>>
 			void createTaskMappingInstantiationProblem(TaskMappingFactory<S, T> tmFactory,
 					ArchitectureExplorationProblemModule archExpProblemModule,
-					DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
+					ExplorationSpecification expSpec,
+					SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 					DecoderDependencyGraph execDepGraph) throws Exception {
 		// These suppress warnings are required since type erasure in Java does not allow to pass
 		// XY<Z>.class.
-		StrictTTDecoder<S, T> tmDecoder = tmFactory.createStrictTTDecoder(systemModelAdapter, dse);
+		StrictTTDecoder<S, T> tmDecoder =
+				tmFactory.createStrictTTDecoder(systemModelAdapter, expSpec);
 		InstantiatedTaskMappingDecoder<S, ?> tgDecoder =
 				tmFactory.createInstantiatedTaskMappingDecoder(systemModelAdapter);
 		InstantiatedTaskMappingDecoderAcyclic<S, ?> acycTgDecoder =
@@ -243,7 +249,7 @@ public class DSEFactory {
 		@SuppressWarnings("rawtypes") MessageDecoder msgDecoder =
 				tmFactory.createMessageDecoder(systemModelAdapter);
 		@SuppressWarnings("rawtypes") TaskMappingCreator tmCreator =
-				tmFactory.createTaskMappingCreator(dse, systemModelAdapter, execDepGraph);
+				tmFactory.createTaskMappingCreator(expSpec, systemModelAdapter, execDepGraph);
 		@SuppressWarnings("rawtypes") List<ComposableDecoder> instTaskDecoders = new ArrayList<>();
 		instTaskDecoders.add(tgDecoder);
 		instTaskDecoders.add(acycTgDecoder);
@@ -261,8 +267,9 @@ public class DSEFactory {
 	 * calls the creators of the genotypes composing the architecture exploration problem.
 	 */
 	public ArchitectureExplorationCreator createArchitectureExplorationCreator(
-			DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter) {
-		return new ArchitectureExplorationCreator(dse, systemModelAdapter);
+			ExplorationSpecification expSpec,
+			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter) {
+		return new ArchitectureExplorationCreator(expSpec, systemModelAdapter);
 	}
 
 	/**
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/Explorer.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/Explorer.java
index 8486fe164e1a73a80cd2b63414e867d0d8fe9846..f10e6028eceaee8959ad7a998c45941c39e907e9 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/Explorer.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/Explorer.java
@@ -63,8 +63,8 @@ public class Explorer {
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			Set<Class<? extends IExplorationEncoding>> requestedSolutions,
 			boolean generateImplicitConstraints) throws Exception {
-		return explore(dse, systemModelAdapter, requestedSolutions, null,
-				generateImplicitConstraints);
+		return explore(dse, dse.getTargetSpecification(), systemModelAdapter, requestedSolutions,
+				null, generateImplicitConstraints);
 	}
 
 	/**
@@ -72,26 +72,27 @@ public class Explorer {
 	 * system model (represented by a {@link SystemModelAdapter}).
 	 */
 	public CompositeExplorationSolution<?> explore(DseSpecification dse,
+			ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			Set<Class<? extends IExplorationEncoding>> requestedSolutions,
 			IProgressMonitor progressMonitor, boolean generateImplicitConstraints) throws Exception {
 
-		validateDesignSpaceExploration(dse);
+		validateDesignSpaceExploration(dse, expSpec);
 		validateSystemModelAdapter(systemModelAdapter);
 
 		// Clear & add implicit constraints to the Goal specification that are defined by the system
 		// model.
 		Map<ExplorationTarget<?>, ExplorationTarget<?>> targetAssocMap = new HashMap<>();
-		DseSpecification dseSpec = copyDSESpecification(dse, targetAssocMap);
-		ExplorationSpecification expSpec = dseSpec.getTargetSpecification();
+		ExplorationSpecification expSpecCopy =
+				copyExplorationSpecification(expSpec, targetAssocMap);
 		if(generateImplicitConstraints) {
-			expSpec.getTargets().addAll(
+			expSpecCopy.getTargets().addAll(
 					ImplicitExplorationTargetFactory.getInstance()
-							.createImplicitExplorationTargets(dseSpec, systemModelAdapter));
+							.createImplicitExplorationTargets(expSpecCopy, systemModelAdapter));
 		}
 
 		// Extract external models to add them to the available input models.
-		for(ExplorationTarget<?> expTarget : expSpec.getTargets()) {
+		for(ExplorationTarget<?> expTarget : expSpecCopy.getTargets()) {
 			if(expTarget instanceof ExternalModelTarget) {
 				Collection<EObject> extModels =
 						((ExternalModelTarget)expTarget).getExternalModels();
@@ -107,15 +108,15 @@ public class Explorer {
 		IExplorationConstraintTransformationService constrService =
 				getService(IExplorationConstraintTransformationService.class);
 		Collection<GenericConstraint<?>> genConstrs =
-				filterByType(expSpec.getTargets(), new ArrayList<GenericConstraint<?>>(),
+				filterByType(expSpecCopy.getTargets(), new ArrayList<GenericConstraint<?>>(),
 						GenericConstraint.class);
 		Collection<ExplorationConstraint<?>> transformedConstrs =
 				constrService.getTransformedConstraints(systemModelAdapter, genConstrs);
-		expSpec.getTargets().addAll(transformedConstrs);
+		expSpecCopy.getTargets().addAll(transformedConstrs);
 
 		// Invoke the backend in order to perform the DSE
 		IExplorerBackend<? extends IOptimizer> explorerBackend =
-				createExplorerBackend(dseSpec, targetAssocMap, systemModelAdapter,
+				createExplorerBackend(dse, expSpecCopy, targetAssocMap, systemModelAdapter,
 						requestedSolutions, progressMonitor);
 		CompositeExplorationSolution<?> explorationResult = explorerBackend.explore();
 
@@ -129,22 +130,18 @@ public class Explorer {
 	 * Copies a DSE model, and returns a map that associates the {@link ExplorationTarget}s given in
 	 * the original {@link ExplorationSpecification} with the copied ones.
 	 */
-	private DseSpecification copyDSESpecification(DseSpecification dse,
+	private ExplorationSpecification copyExplorationSpecification(ExplorationSpecification expSpec,
 			Map<ExplorationTarget<?>, ExplorationTarget<?>> assocMap) {
-		// TODO: rework this method, can be done more efficient.
-		DseSpecification dseCopy = EcoreUtils.copy(dse);
+		ExplorationSpecification expSpecCopy = EcoreUtils.copy(expSpec);
+		expSpecCopy.getTargets().clear();
 
-		ExplorationSpecification origExpSpec = dse.getTargetSpecification();
-		dseCopy.getTargetSpecification().getTargets().clear();
-
-		// Instead of this extra hook, use the M2MCopier.
-		ExplorationSpecification expSpecCopy = dseCopy.getTargetSpecification();
-		for(ExplorationTarget<?> target : origExpSpec.getTargets()) {
+		// TODO: Instead of this extra hook, use the M2MCopier.
+		for(ExplorationTarget<?> target : expSpec.getTargets()) {
 			ExplorationTarget<?> targetCopy = EcoreUtils.copy(target);
 			expSpecCopy.getTargets().add(targetCopy);
 			assocMap.put(target, targetCopy);
 		}
-		return dseCopy;
+		return expSpecCopy;
 	}
 
 	/** Helper method to issue an exception for invalid DSE configurations */
@@ -156,7 +153,8 @@ public class Explorer {
 	// TODO: Port validation of DSE configuration to model validation framework that creates markers
 	// in the problem view
 	/** Validation of DSE configuration */
-	private void validateDesignSpaceExploration(DseSpecification dse) throws Exception {
+	private void validateDesignSpaceExploration(DseSpecification dse,
+			ExplorationSpecification expSpec) throws Exception {
 		if(dse == null) {
 			createDesignSpaceExplorationConfigurationException("No DSE configuration has been specified.");
 			// Never here
@@ -175,11 +173,8 @@ public class Explorer {
 			createDesignSpaceExplorationConfigurationException("No optimizer backend has been specified.");
 		}
 
-		// TODO: create a validation whether the constraints or objectives are not given
-		if(dse.getTargetSpecification() == null ||
-				dse.getTargetSpecification().getTargets() == null ||
-				dse.getTargetSpecification().getTargets().isEmpty()) {
-			createDesignSpaceExplorationConfigurationException("No Optimization goals have been provided.");
+		if(expSpec.getTargets() == null || expSpec.getTargets().isEmpty()) {
+			createDesignSpaceExplorationConfigurationException("No ExplorationTargets have been provided.");
 		}
 	}
 
@@ -226,12 +221,13 @@ public class Explorer {
 
 	/** Explorer backend */
 	private Opt4JExplorerBackend createExplorerBackend(DseSpecification dse,
+			ExplorationSpecification expSpec,
 			Map<ExplorationTarget<?>, ExplorationTarget<?>> targetAssocMap,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			Set<Class<? extends IExplorationEncoding>> requestedSolutions,
 			IProgressMonitor progressMonitor) throws Exception {
 		if(dse.getOptimizer() instanceof EAOptimizer) {
-			return new Opt4JExplorerBackend(dse, targetAssocMap, systemModelAdapter,
+			return new Opt4JExplorerBackend(dse, expSpec, targetAssocMap, systemModelAdapter,
 					requestedSolutions, progressMonitor);
 		}
 
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/ImplicitExplorationTargetFactory.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/ImplicitExplorationTargetFactory.java
index 9249e534e86bc271dab1540368e08010c75661e8..8f8905439085e14aa15f7f66600cf147f546a2ff 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/ImplicitExplorationTargetFactory.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/ImplicitExplorationTargetFactory.java
@@ -26,6 +26,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph;
 import org.fortiss.af3.exploration.alg.exception.ConstraintGenerationException;
 import org.fortiss.af3.exploration.model.ExplorationConstraint;
+import org.fortiss.af3.exploration.model.ExplorationSpecification;
 import org.fortiss.af3.exploration.model.ExplorationTarget;
 import org.fortiss.af3.exploration.model.time.PeriodConstraint;
 import org.fortiss.af3.exploration.moea.model.DseSpecification;
@@ -73,8 +74,8 @@ public class ImplicitExplorationTargetFactory {
 	 *             if any of the constraint generators fails.
 	 */
 	public Collection<ExplorationConstraint<?>> createImplicitExplorationTargets(
-			DseSpecification dse, SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter)
-			throws Exception {
+			ExplorationSpecification expSpec,
+			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter) throws Exception {
 		return createPeriodConstraints(systemModelAdapter);
 	}
 
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java
index 4567e006dd3f2b751ae1fd3e0f36a225a6d7cfac..e7c0f1abaed5f4ca955883f01f2a3e1a136f42b7 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/TaskMappingFactory.java
@@ -106,10 +106,11 @@ public abstract class TaskMappingFactory<S extends InstantiatedTaskMappingEntry,
 	 * @param systemModelAdapter
 	 *            the system model deduced from the logical and technical architecture
 	 */
-	public AbstractTaskMappingCreator createAbstractTaskMappingCreator(DseSpecification dse,
+	public AbstractTaskMappingCreator createAbstractTaskMappingCreator(
+			ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			DecoderDependencyGraph execDepGraph) {
-		return new AbstractTaskMappingCreator(dse, systemModelAdapter, execDepGraph);
+		return new AbstractTaskMappingCreator(expSpec, systemModelAdapter, execDepGraph);
 	}
 
 	/**
@@ -122,7 +123,7 @@ public abstract class TaskMappingFactory<S extends InstantiatedTaskMappingEntry,
 	 * @param execDepGraph
 	 */
 	// TODO: document execDepGraph param.
-	public TaskMappingCreator<S, T> createTaskMappingCreator(DseSpecification dse,
+	public TaskMappingCreator<S, T> createTaskMappingCreator(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			DecoderDependencyGraph execDepGraph) {
 		throw new UnsupportedOperationException(SCHED_NOT_IMPL_MSG);
@@ -224,7 +225,7 @@ public abstract class TaskMappingFactory<S extends InstantiatedTaskMappingEntry,
 	 */
 	public AbstractTaskMappingDecoder<?, ?> createAbstractTaskMappingDecoder(
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-			DseSpecification explorationDefinition) {
+			ExplorationSpecification expSpec) {
 		throw new UnsupportedOperationException(
 				"The Decoder to instantiate an \"abstract\" Task Mapping has not been defined for current Execution Model.");
 	}
@@ -282,7 +283,7 @@ public abstract class TaskMappingFactory<S extends InstantiatedTaskMappingEntry,
 	 */
 	public StrictTTDecoder<S, T> createStrictTTDecoder(
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-			DseSpecification explorationDefinition) {
+			ExplorationSpecification expSpec) {
 		throw new UnsupportedOperationException(SCHED_NOT_IMPL_MSG);
 	}
 
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/ExplorerBackendBase.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/ExplorerBackendBase.java
index 475c1acfb748502f4093050f9feada591b7c89e4..59b13be3e1030aa51969ed6b4512e4166cf8ba6a 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/ExplorerBackendBase.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/ExplorerBackendBase.java
@@ -38,6 +38,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.random.RandomExploration;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.random.RandomExploration.RandomnessType;
 import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
 import org.fortiss.af3.exploration.model.ExplorationConstraint;
+import org.fortiss.af3.exploration.model.ExplorationSpecification;
 import org.fortiss.af3.exploration.model.ExplorationTarget;
 import org.fortiss.af3.exploration.moea.model.DseSpecification;
 import org.fortiss.af3.exploration.moea.model.parameters.IOptimizer;
@@ -54,8 +55,11 @@ import org.opt4j.core.problem.Evaluator;
 public abstract class ExplorerBackendBase<O extends IOptimizer> implements IExplorerBackend<O> {
 
 	/** DSE specification (optimizer parameters, goal specification, input model, ...) */
+	// TODO: remove the DSE Spec. It is currently here
 	protected DseSpecification dse;
 
+	protected ExplorationSpecification expSpec;
+
 	/**
 	 * Map that relates the {@link ExplorationTarget}s from input specification with the
 	 * {@link ExplorationTarget}s that are actually used in the DSE.
@@ -84,12 +88,13 @@ public abstract class ExplorerBackendBase<O extends IOptimizer> implements IExpl
 	 * Constructor that initializes the DSE backend with the given optimizer independent parameters
 	 * and the goal specification
 	 */
-	protected ExplorerBackendBase(DseSpecification dse,
+	protected ExplorerBackendBase(DseSpecification dse, ExplorationSpecification expSpec,
 			Map<ExplorationTarget<?>, ExplorationTarget<?>> targetAssocMap,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			Set<Class<? extends IExplorationEncoding>> requestedSolutions,
 			IProgressMonitor progressMonitor) {
 		this.dse = dse;
+		this.expSpec = expSpec;
 		this.targetAssocMap = targetAssocMap;
 		this.systemModelAdapter = systemModelAdapter;
 		this.requestedSolutions = requestedSolutions;
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java
index de04cd42bea7e931f2964a8c28938879fd83c958..84d6ec943ae2f0819f5981566d409d02b1480efb 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java
@@ -40,6 +40,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.ArchitectureExp
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.ArchitectureSolution;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
+import org.fortiss.af3.exploration.model.ExplorationSpecification;
 import org.fortiss.af3.exploration.model.ExplorationTarget;
 import org.fortiss.af3.exploration.moea.model.DseSpecification;
 import org.fortiss.af3.exploration.moea.model.feature.SafetyExploration;
@@ -85,13 +86,13 @@ public class Opt4JExplorerBackend extends ExplorerBackendBase<EAOptimizer> {
 	 * 
 	 * @throws Exception
 	 */
-	public Opt4JExplorerBackend(DseSpecification dse,
+	public Opt4JExplorerBackend(DseSpecification dse, ExplorationSpecification expSpec,
 			Map<ExplorationTarget<?>, ExplorationTarget<?>> targetAssocMap,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			Set<Class<? extends IExplorationEncoding>> requestedSolutions,
 			IProgressMonitor progressMonitor) throws Exception {
 		// Optimizer independent configuration
-		super(dse, targetAssocMap, systemModelAdapter, requestedSolutions, progressMonitor);
+		super(dse, expSpec, targetAssocMap, systemModelAdapter, requestedSolutions, progressMonitor);
 
 		if(dse.getOptimizer() instanceof EAOptimizer) {
 			init((EAOptimizer)dse.getOptimizer());
@@ -146,7 +147,7 @@ public class Opt4JExplorerBackend extends ExplorerBackendBase<EAOptimizer> {
 		// modules.add(multiEvaluatorModule);
 
 		archExplorationProblemModule =
-				new ArchitectureExplorationProblemModule(dse, systemModelAdapter,
+				new ArchitectureExplorationProblemModule(dse, expSpec, systemModelAdapter,
 						requestedSolutions);
 		modules.add(archExplorationProblemModule);
 
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/ArchitectureExplorationCreator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/ArchitectureExplorationCreator.java
index 34b6cd4bfdcb19dfc7f17aa902bda49b5c0d22c2..54dda478cd996e47320ecb379d8ede90e8413bd4 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/ArchitectureExplorationCreator.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/ArchitectureExplorationCreator.java
@@ -21,7 +21,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.ArchitectureEx
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.create.CompositeCreatorBase;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.ComposableGenotype;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
-import org.fortiss.af3.exploration.moea.model.DseSpecification;
+import org.fortiss.af3.exploration.model.ExplorationSpecification;
 import org.opt4j.core.problem.Creator;
 
 import com.google.inject.Inject;
@@ -40,14 +40,14 @@ public class ArchitectureExplorationCreator extends
 		CompositeCreatorBase<ArchitectureExplorationEncoding> {
 
 	/** DSE specification */
-	protected DseSpecification dse;
+	protected ExplorationSpecification expSpec;
 
 	/** Constructor. */
 	@Inject
-	public ArchitectureExplorationCreator(DseSpecification dse,
+	public ArchitectureExplorationCreator(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter) {
 		super(systemModelAdapter);
-		this.dse = dse;
+		this.expSpec = expSpec;
 	}
 
 	/** {@inheritDoc} */
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java
index 3b75ae590f40cea6c4f24aa8088d232a1b24fd63..32e4980bfe0a12bc784c624001bc02965a8447b9 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/AbstractTaskMappingCreator.java
@@ -28,7 +28,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAda
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.alg.exception.ExplorationException;
 import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
-import org.fortiss.af3.exploration.moea.model.DseSpecification;
+import org.fortiss.af3.exploration.model.ExplorationSpecification;
 import org.opt4j.core.Genotype;
 import org.opt4j.core.problem.Creator;
 
@@ -48,10 +48,10 @@ public class AbstractTaskMappingCreator extends
 
 	/** Constructor */
 	@Inject
-	public AbstractTaskMappingCreator(DseSpecification dse,
+	public AbstractTaskMappingCreator(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			DecoderDependencyGraph execDepGraph) {
-		super(dse, systemModelAdapter, execDepGraph);
+		super(expSpec, systemModelAdapter, execDepGraph);
 	}
 
 	/**
@@ -71,7 +71,7 @@ public class AbstractTaskMappingCreator extends
 		// partial mapping.
 		AbstractTaskMappingEncoding atmEnc =
 				createdGenotypes.get(AbstractTaskMappingEncoding.class);
-		return new AbstractTaskMappingEncoding(dse, systemModelAdapter, atgEnc, atmEnc);
+		return new AbstractTaskMappingEncoding(expSpec, systemModelAdapter, atgEnc, atmEnc);
 	}
 
 	/** {@inheritDoc} */
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java
index f844f0de65f1ef3c35414e166a0f57a8be92d132..2923e248539cd10a7d2aea30d27b86203ffecca7 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FailSilentTaskMappingCreator.java
@@ -28,7 +28,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
-import org.fortiss.af3.exploration.moea.model.DseSpecification;
+import org.fortiss.af3.exploration.model.ExplorationSpecification;
 
 import com.google.inject.Inject;
 
@@ -48,10 +48,10 @@ public class FailSilentTaskMappingCreator extends
 	 * (execution model = fail-silent)
 	 */
 	@Inject
-	public FailSilentTaskMappingCreator(DseSpecification dse,
+	public FailSilentTaskMappingCreator(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			DecoderDependencyGraph execDepGraph) {
-		super(dse, systemModelAdapter, execDepGraph);
+		super(expSpec, systemModelAdapter, execDepGraph);
 	}
 
 	/** {@inheritDoc} */
@@ -64,7 +64,7 @@ public class FailSilentTaskMappingCreator extends
 		AbstractTaskMappingEncoding atmEnc =
 				createdGenotypes.get(AbstractTaskMappingEncoding.class);
 		assert (atmEnc != null) : "The required abstract task mapping encoding could not be found in the map of already decoded phenotypes.";
-		return new FailSilentTaskMappingEncoding(dse, systemModelAdapter, atgEnc, atmEnc);
+		return new FailSilentTaskMappingEncoding(expSpec, systemModelAdapter, atgEnc, atmEnc);
 	}
 
 	// TODO: remove this method: use the identifier from the encoding, instead.
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java
index 53d2a38c9058a62d25e5c519b69008296279879d..aed18beb6ecb4f962dde06eb9ce2d51b95aee694 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/FaultDetectionVotingTaskMappingCreator.java
@@ -28,7 +28,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
-import org.fortiss.af3.exploration.moea.model.DseSpecification;
+import org.fortiss.af3.exploration.model.ExplorationSpecification;
 
 import com.google.inject.Inject;
 
@@ -49,10 +49,10 @@ public class FaultDetectionVotingTaskMappingCreator
 	 * (execution model = fault-detection and voting)
 	 */
 	@Inject
-	public FaultDetectionVotingTaskMappingCreator(DseSpecification dse,
+	public FaultDetectionVotingTaskMappingCreator(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			DecoderDependencyGraph execDepGraph) {
-		super(dse, systemModelAdapter, execDepGraph);
+		super(expSpec, systemModelAdapter, execDepGraph);
 	}
 
 	/** {@inheritDoc} */
@@ -65,7 +65,8 @@ public class FaultDetectionVotingTaskMappingCreator
 		AbstractTaskMappingEncoding atmEnc =
 				createdGenotypes.get(AbstractTaskMappingEncoding.class);
 		assert (atmEnc != null) : "The required abstract task mapping encoding could not be found in the map of already decoded phenotypes.";
-		return new FaultDetectionVotingTaskMappingEncoding(dse, systemModelAdapter, atgEnc, atmEnc);
+		return new FaultDetectionVotingTaskMappingEncoding(expSpec, systemModelAdapter, atgEnc,
+				atmEnc);
 	}
 
 	/** {@inheritDoc} */
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java
index 7f4f91acc943b069847562aeb6a23eb0596fe43e..72a90248a9247dd7acceab8d913b00608eb9192f 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/create/taskmapping/TaskMappingCreator.java
@@ -22,7 +22,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.Ta
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.create.ComposableCreatorBase;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.graph.DecoderDependencyGraph;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
-import org.fortiss.af3.exploration.moea.model.DseSpecification;
+import org.fortiss.af3.exploration.model.ExplorationSpecification;
 import org.opt4j.core.Genotype;
 import org.opt4j.core.problem.Creator;
 
@@ -41,15 +41,15 @@ public abstract class TaskMappingCreator<S extends TaskMappingEntry, T extends T
 		extends ComposableCreatorBase<T> {
 
 	/** DSE specification. */
-	protected DseSpecification dse;
+	protected ExplorationSpecification expSpec;
 
 	/** Constructor. */
 	@Inject
-	public TaskMappingCreator(DseSpecification dse,
+	public TaskMappingCreator(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			DecoderDependencyGraph execDepGraph) {
 		super(systemModelAdapter, execDepGraph);
-		this.dse = dse;
+		this.expSpec = expSpec;
 	}
 
 }
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/MappingEncoding.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/MappingEncoding.java
new file mode 100644
index 0000000000000000000000000000000000000000..536f19cdb7df806bf0c1d971e74fc3afd2640d87
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/MappingEncoding.java
@@ -0,0 +1,34 @@
+/*--------------------------------------------------------------------------+
+$Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $
+|                                                                          |
+| Copyright 2017 fortiss GmbH                     |
+|                                                                          |
+| Licensed under the Apache License, Version 2.0 (the "License");          |
+| you may not use this file except in compliance with the License.         |
+| You may obtain a copy of the License at                                  |
+|                                                                          |
+|    http://www.apache.org/licenses/LICENSE-2.0                            |
+|                                                                          |
+| Unless required by applicable law or agreed to in writing, software      |
+| distributed under the License is distributed on an "AS IS" BASIS,        |
+| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+| See the License for the specific language governing permissions and      |
+| limitations under the License.                                           |
++--------------------------------------------------------------------------*/
+package org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding;
+
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEncoding;
+import org.opt4j.core.Genotype;
+
+/**
+ * 
+ * @author diewald
+ * @author $Author: hoelzl $
+ * @version $Rev: 18709 $
+ * @ConQAT.Rating RED Hash:
+ */
+public interface MappingEncoding<G extends Genotype> extends ComposablePhenotype<G>,
+		IMappingEncoding {
+
+}
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java
index fbf29321340afa1ee72efeb3c5c4955ffaae6f00..a145bbd1e1006b4690b2569f2df4a642465b37eb 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/TaskMappingEncoding.java
@@ -33,6 +33,7 @@ import java.util.stream.Collectors;
 
 import org.eclipse.emf.ecore.EObject;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.ArchExpSubEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.MappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.comm.constraint.InternalIsolatedCommunicationSet;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.TaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.constraint.InternalReplicationConstraint;
@@ -52,7 +53,7 @@ import org.fortiss.af3.exploration.alg.exception.ExplorationException;
 import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
 import org.fortiss.af3.exploration.alg.util.ExplorationAlgDebugUtils;
 import org.fortiss.af3.exploration.model.ExplorationConstraint;
-import org.fortiss.af3.exploration.moea.model.DseSpecification;
+import org.fortiss.af3.exploration.model.ExplorationSpecification;
 import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiAllocationConstraint;
 import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiDislocationConstraint;
 import org.fortiss.af3.platform.model.ExecutionUnit;
@@ -71,15 +72,17 @@ import com.google.common.collect.Multimap;
  * @ConQAT.Rating RED Hash: A2725E4E96BAA9D211EB0D09F59D039C
  */
 public abstract class TaskMappingEncoding<T extends TaskMappingEntry> implements IMappingEncoding,
-		ComposableGenotype, ArchExpSubEncoding, IExplorationEncoding, ConstrainedEncoding,
-		Cloneable {
+		ComposableGenotype, MappingEncoding, ArchExpSubEncoding, IExplorationEncoding,
+		ConstrainedEncoding, Cloneable {
 	/** Random generator */
 	private RandomExploration rand = RandomExploration.getInstance();
 
 	/** DSE specification */
-	protected DseSpecification dse;
+	protected ExplorationSpecification expSpec;
 
 	/** Map holding the DSE-internal constraints. */
+	// TODO: Remove InternalConstraint map or replace with a generic mapping Encoding.
+	// Alternative solution: Mode the map to the operators.
 	protected Multimap<Class<? extends ExplorationConstraint<?>>, ExplorationConstraint<?>> constraintMap =
 			HashMultimap.create();
 
@@ -131,10 +134,10 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> implements
 	 * Constructor that is initialized with a reference to the DSE specification and the input
 	 * system.
 	 */
-	public TaskMappingEncoding(DseSpecification dse,
+	public TaskMappingEncoding(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			TaskGraphEncoding<?, ?, ?> tgEncoding) {
-		this.dse = dse;
+		this.expSpec = expSpec;
 		this.systemModelAdapter = systemModelAdapter;
 		this.tgEncoding = tgEncoding;
 		this.deployableComponents = castToRawColl(tgEncoding.getDeployableComponents());
@@ -152,10 +155,10 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> implements
 	 *             if no valid allocation targets can be identified for one
 	 *             {@link IDeployableComponentAdapter}.
 	 */
-	public TaskMappingEncoding(DseSpecification dse,
+	public TaskMappingEncoding(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, boolean initialize)
 			throws ExplorationException {
-		this(dse, systemModelAdapter, new TaskGraphEncoding<>(systemModelAdapter));
+		this(expSpec, systemModelAdapter, new TaskGraphEncoding<>(systemModelAdapter));
 		if(initialize) {
 			resetEncoding();
 		}
@@ -168,10 +171,10 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> implements
 	 *             if no valid allocation targets can be identified for one
 	 *             {@link IDeployableComponentAdapter}.
 	 */
-	public TaskMappingEncoding(DseSpecification dse,
+	public TaskMappingEncoding(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			TaskGraphEncoding<?, ?, ?> tgEncoding, boolean initialize) throws ExplorationException {
-		this(dse, systemModelAdapter, tgEncoding);
+		this(expSpec, systemModelAdapter, tgEncoding);
 		if(initialize) {
 			resetEncoding();
 		}
@@ -184,11 +187,11 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> implements
 	 *             if no valid allocation targets can be identified for one
 	 *             {@link IDeployableComponentAdapter}.
 	 */
-	public TaskMappingEncoding(DseSpecification dse,
+	public TaskMappingEncoding(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			TaskGraphEncoding<?, ?, ?> tgEncoding, TaskMappingEncoding<?> incompleteEncoding)
 			throws ExplorationException {
-		this(dse, systemModelAdapter, tgEncoding);
+		this(expSpec, systemModelAdapter, tgEncoding);
 		completeEncoding(incompleteEncoding);
 	}
 
@@ -214,7 +217,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> implements
 		Collection<IDeployableComponentAdapter<?>> fixAllocatedComponents = new HashSet<>();
 		for(IDeployableComponentAdapter<?> compAdp : deployableComponents) {
 			Optional<ComponentMultiDislocationConstraint> constr =
-					dse.getTargetSpecification().getTargets().stream()
+					expSpec.getTargets().stream()
 							.filter(c -> (c instanceof ComponentMultiDislocationConstraint))
 							.map(ComponentMultiDislocationConstraint.class::cast)
 							.filter(c -> c.getComponent() == compAdp.getObject()).findAny();
@@ -248,7 +251,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> implements
 				HashMultimap.create();
 
 		Collection<ComponentMultiDislocationConstraint> forbiddenDeploymentConstraints =
-				getChildrenWithType(dse, ComponentMultiDislocationConstraint.class);
+				getChildrenWithType(expSpec, ComponentMultiDislocationConstraint.class);
 
 		for(ComponentMultiDislocationConstraint currentConstraint : forbiddenDeploymentConstraints) {
 			for(IDeployableComponentAdapter<?> currentComponentAdapter : systemModelAdapter
@@ -281,7 +284,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> implements
 				HashMultimap.create();
 
 		Collection<ComponentMultiAllocationConstraint> allowedDeploymentConstraints =
-				getChildrenWithType(dse, ComponentMultiAllocationConstraint.class);
+				getChildrenWithType(expSpec, ComponentMultiAllocationConstraint.class);
 		Collection<IDeployableComponentAdapter<?>> constrainedComponentAdps = new HashSet<>();
 
 		for(ComponentMultiAllocationConstraint currentConstraint : allowedDeploymentConstraints) {
@@ -624,7 +627,7 @@ public abstract class TaskMappingEncoding<T extends TaskMappingEntry> implements
 	 */
 	public void generateFixedDeployment(IDeployableComponentAdapter<?> deployableComponent) {
 		Collection<ComponentMultiAllocationConstraint> constraints =
-				dse.getTargetSpecification().getTargets().stream()
+				expSpec.getTargets().stream()
 						.filter(t -> (t instanceof ComponentMultiAllocationConstraint))
 						.map(ComponentMultiAllocationConstraint.class::cast)
 						.collect(Collectors.toList());
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java
index 4c98983a1f7010a19f1ba8919a98d921ac7e7aa0..056a69381be5964a8e354a0c473823497cf7b945 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/abstractmapping/AbstractTaskMappingEncoding.java
@@ -30,7 +30,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAda
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.alg.exception.ExplorationException;
-import org.fortiss.af3.exploration.moea.model.DseSpecification;
+import org.fortiss.af3.exploration.model.ExplorationSpecification;
 import org.opt4j.core.Genotype;
 
 /**
@@ -42,17 +42,16 @@ import org.opt4j.core.Genotype;
  * @version $Rev: 3885 $
  * @ConQAT.Rating YELLOW Hash: 3DF39B0B8106F1038EB2EC0EF0E02D1E
  */
-public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTaskMappingEntry>
-		implements ComposablePhenotype<AbstractTaskMappingEncoding> {
+public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTaskMappingEntry> {
 
 	/**
 	 * Constructor that is initialized with a reference to the DSE specification and the input
 	 * system model.
 	 */
-	AbstractTaskMappingEncoding(DseSpecification dse,
+	AbstractTaskMappingEncoding(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			SafeTaskGraphEncoding<?> tgEncoding) {
-		super(dse, systemModelAdapter, tgEncoding);
+		super(expSpec, systemModelAdapter, tgEncoding);
 	}
 
 	/**
@@ -62,10 +61,10 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas
 	 *             if no valid allocation targets can be identified for one
 	 *             {@link IDeployableComponentAdapter}.
 	 */
-	public AbstractTaskMappingEncoding(DseSpecification dse,
+	public AbstractTaskMappingEncoding(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			SafeTaskGraphEncoding<?> tgEncoding, boolean initialize) throws ExplorationException {
-		super(dse, systemModelAdapter, tgEncoding, initialize);
+		super(expSpec, systemModelAdapter, tgEncoding, initialize);
 	}
 
 	/**
@@ -75,10 +74,10 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas
 	 *             if no valid allocation targets can be identified for one
 	 *             {@link IDeployableComponentAdapter}.
 	 */
-	public AbstractTaskMappingEncoding(DseSpecification dse,
+	public AbstractTaskMappingEncoding(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, boolean initialize)
 			throws ExplorationException {
-		super(dse, systemModelAdapter, initialize);
+		super(expSpec, systemModelAdapter, initialize);
 	}
 
 	/**
@@ -88,10 +87,10 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas
 	 *             if no valid allocation targets can be identified for one
 	 *             {@link IDeployableComponentAdapter}.
 	 */
-	public AbstractTaskMappingEncoding(DseSpecification dse,
+	public AbstractTaskMappingEncoding(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			AbstractTaskGraphEncoding<?, ?> atgEnc, boolean initialize) throws ExplorationException {
-		super(dse, systemModelAdapter, atgEnc, initialize);
+		super(expSpec, systemModelAdapter, atgEnc, initialize);
 	}
 
 	/**
@@ -102,11 +101,11 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas
 	 *             if no valid allocation targets can be identified for one
 	 *             {@link IDeployableComponentAdapter}.
 	 */
-	public AbstractTaskMappingEncoding(DseSpecification dse,
+	public AbstractTaskMappingEncoding(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			AbstractTaskGraphEncoding<?, ?> atgEnc, AbstractTaskMappingEncoding partialEncoding)
 			throws ExplorationException {
-		super(dse, systemModelAdapter, atgEnc, partialEncoding);
+		super(expSpec, systemModelAdapter, atgEnc, partialEncoding);
 	}
 
 	/** {@inheritDoc} */
@@ -126,7 +125,7 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas
 	@Override
 	public AbstractTaskMappingEncoding newInstance() {
 		try {
-			return new AbstractTaskMappingEncoding(dse, systemModelAdapter, true);
+			return new AbstractTaskMappingEncoding(expSpec, systemModelAdapter, true);
 		} catch(ExplorationException e) {
 			// Opt4J does not allow to throw Exceptions here.
 			throw new RuntimeException(e);
@@ -138,7 +137,7 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas
 	public Object clone() {
 		AbstractTaskMappingEncoding clonedEncoding;
 		try {
-			clonedEncoding = new AbstractTaskMappingEncoding(dse, systemModelAdapter, false);
+			clonedEncoding = new AbstractTaskMappingEncoding(expSpec, systemModelAdapter, false);
 		} catch(ExplorationException e) {
 			// Opt4J does not allow to throw Exceptions here.
 			throw new RuntimeException(e);
@@ -161,6 +160,6 @@ public class AbstractTaskMappingEncoding extends TaskMappingEncoding<AbstractTas
 	/** {@inheritDoc} */
 	@Override
 	public Class<? extends ComposablePhenotype<?>> getPTypeToRegister() {
-		return AbstractTaskMappingEncoding.class;
+		return (Class<? extends ComposablePhenotype<?>>)AbstractTaskMappingEncoding.class;
 	}
 }
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java
index 704654126d5d2559f475cfd143479d67e01efdb2..17b1f5d498b0ac78618dd8f640f95f3f985db768 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FailSilentTaskMappingEncoding.java
@@ -26,6 +26,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAda
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.alg.exception.ExplorationException;
+import org.fortiss.af3.exploration.model.ExplorationSpecification;
 import org.fortiss.af3.exploration.moea.model.DseSpecification;
 
 /**
@@ -43,10 +44,10 @@ public class FailSilentTaskMappingEncoding extends
 	 * Constructor that is initialized with a reference to the DSE specification and the input
 	 * system model.
 	 */
-	FailSilentTaskMappingEncoding(DseSpecification dse,
+	FailSilentTaskMappingEncoding(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			AbstractTaskGraphEncoding<?, ?> tgEncoding) {
-		super(dse, systemModelAdapter, tgEncoding);
+		super(expSpec, systemModelAdapter, tgEncoding);
 	}
 
 	// TODO: Check whether the two constructors below are actually needed.
@@ -57,11 +58,11 @@ public class FailSilentTaskMappingEncoding extends
 	 *             if no valid allocation targets can be identified for one
 	 *             {@link IDeployableComponentAdapter}.
 	 */
-	public FailSilentTaskMappingEncoding(DseSpecification dse,
+	public FailSilentTaskMappingEncoding(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			AbstractTaskGraphEncoding<?, ?> tgEncoding, boolean initialize)
 			throws ExplorationException {
-		super(dse, systemModelAdapter, tgEncoding, initialize);
+		super(expSpec, systemModelAdapter, tgEncoding, initialize);
 	}
 
 	/**
@@ -71,20 +72,20 @@ public class FailSilentTaskMappingEncoding extends
 	 *             if no valid allocation targets can be identified for one
 	 *             {@link IDeployableComponentAdapter}.
 	 */
-	public FailSilentTaskMappingEncoding(DseSpecification dse,
+	public FailSilentTaskMappingEncoding(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, boolean initialize)
 			throws ExplorationException {
-		super(dse, systemModelAdapter, initialize);
+		super(expSpec, systemModelAdapter, initialize);
 	}
 
 	/**
 	 * Constructor which derives the resulting {@link FailSilentTaskMappingEncoding} from the given
 	 * {@link AbstractTaskMappingEncoding}.
 	 */
-	public FailSilentTaskMappingEncoding(DseSpecification dse,
+	public FailSilentTaskMappingEncoding(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			AbstractTaskGraphEncoding<?, ?> tgEncoding, AbstractTaskMappingEncoding abstractEncoding) {
-		super(dse, systemModelAdapter, tgEncoding, abstractEncoding);
+		super(expSpec, systemModelAdapter, tgEncoding, abstractEncoding);
 	}
 
 	/** {@inheritDoc} */
@@ -114,7 +115,7 @@ public class FailSilentTaskMappingEncoding extends
 	@Override
 	public FailSilentTaskMappingEncoding newInstance() {
 		try {
-			return new FailSilentTaskMappingEncoding(dse, systemModelAdapter, true);
+			return new FailSilentTaskMappingEncoding(expSpec, systemModelAdapter, true);
 		} catch(ExplorationException e) {
 			// Opt4J does not allow to throw Exceptions here.
 			throw new RuntimeException(e);
@@ -127,7 +128,7 @@ public class FailSilentTaskMappingEncoding extends
 		// TODO: Here, we should maintain the mapping.
 		FailSilentTaskMappingEncoding clonedEncoding;
 		try {
-			clonedEncoding = new FailSilentTaskMappingEncoding(dse, systemModelAdapter, false);
+			clonedEncoding = new FailSilentTaskMappingEncoding(expSpec, systemModelAdapter, false);
 		} catch(ExplorationException e) {
 			// Opt4J does not allow to throw Exceptions here.
 			throw new RuntimeException(e);
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java
index b42ee12c7170b1c142912c127c11fd526329791e..b0d596b895730ee6943793e2c348e72155b95ccd 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/FaultDetectionVotingTaskMappingEncoding.java
@@ -26,7 +26,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAda
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.alg.exception.ExplorationException;
-import org.fortiss.af3.exploration.moea.model.DseSpecification;
+import org.fortiss.af3.exploration.model.ExplorationSpecification;
 
 /**
  * Problem encoding of redundant {@link TaskMappingEncoding}s with fault detection and voting.
@@ -43,10 +43,10 @@ public class FaultDetectionVotingTaskMappingEncoding extends
 	 * Constructor that is initialized with a reference to the DSE specification and the input
 	 * system model.
 	 */
-	FaultDetectionVotingTaskMappingEncoding(DseSpecification dse,
+	FaultDetectionVotingTaskMappingEncoding(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			AbstractTaskGraphEncoding<?, ?> tgEncoding) {
-		super(dse, systemModelAdapter, tgEncoding);
+		super(expSpec, systemModelAdapter, tgEncoding);
 	}
 
 	// TODO: Check whether the two constructors below are actually needed.
@@ -57,11 +57,11 @@ public class FaultDetectionVotingTaskMappingEncoding extends
 	 *             if no valid allocation targets can be identified for one
 	 *             {@link IDeployableComponentAdapter}.
 	 */
-	public FaultDetectionVotingTaskMappingEncoding(DseSpecification dse,
+	public FaultDetectionVotingTaskMappingEncoding(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			AbstractTaskGraphEncoding<?, ?> tgEncoding, boolean initialize)
 			throws ExplorationException {
-		super(dse, systemModelAdapter, tgEncoding, initialize);
+		super(expSpec, systemModelAdapter, tgEncoding, initialize);
 		assert (false) : "Never here any more.";
 	}
 
@@ -72,10 +72,10 @@ public class FaultDetectionVotingTaskMappingEncoding extends
 	 *             if no valid allocation targets can be identified for one
 	 *             {@link IDeployableComponentAdapter}.
 	 */
-	public FaultDetectionVotingTaskMappingEncoding(DseSpecification dse,
+	public FaultDetectionVotingTaskMappingEncoding(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, boolean initialize)
 			throws ExplorationException {
-		super(dse, systemModelAdapter, initialize);
+		super(expSpec, systemModelAdapter, initialize);
 		assert (false) : "Never here any more.";
 	}
 
@@ -83,10 +83,10 @@ public class FaultDetectionVotingTaskMappingEncoding extends
 	 * Constructor which derives the resulting {@link FaultDetectionVotingTaskMappingEncoding} from
 	 * the given {@link AbstractTaskMappingEncoding}.
 	 */
-	public FaultDetectionVotingTaskMappingEncoding(DseSpecification dse,
+	public FaultDetectionVotingTaskMappingEncoding(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			AbstractTaskGraphEncoding<?, ?> tgEncoding, AbstractTaskMappingEncoding abstractEncoding) {
-		super(dse, systemModelAdapter, tgEncoding, abstractEncoding);
+		super(expSpec, systemModelAdapter, tgEncoding, abstractEncoding);
 	}
 
 	/** {@inheritDoc} */
@@ -118,7 +118,7 @@ public class FaultDetectionVotingTaskMappingEncoding extends
 	@Override
 	public FaultDetectionVotingTaskMappingEncoding newInstance() {
 		try {
-			return new FaultDetectionVotingTaskMappingEncoding(dse, systemModelAdapter, true);
+			return new FaultDetectionVotingTaskMappingEncoding(expSpec, systemModelAdapter, true);
 		} catch(ExplorationException e) {
 			// Opt4J does not allow to throw Exceptions here.
 			throw new RuntimeException(e);
@@ -134,7 +134,7 @@ public class FaultDetectionVotingTaskMappingEncoding extends
 		FaultDetectionVotingTaskMappingEncoding clonedEncoding = null;
 		try {
 			clonedEncoding =
-					new FaultDetectionVotingTaskMappingEncoding(dse, systemModelAdapter, false);
+					new FaultDetectionVotingTaskMappingEncoding(expSpec, systemModelAdapter, false);
 		} catch(ExplorationException e) {
 			// Opt4J does not allow to throw Exceptions here.
 			throw new RuntimeException(e);
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java
index 81b9a4c37354935012864cd71918cd6c0b5f6204..59ad29f155900c128a5bfdb31408be2107a696cf 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/encoding/taskmapping/instantiatedmapping/InstantiatedTaskMappingEncoding.java
@@ -29,7 +29,7 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAda
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.alg.exception.ExplorationException;
-import org.fortiss.af3.exploration.moea.model.DseSpecification;
+import org.fortiss.af3.exploration.model.ExplorationSpecification;
 import org.opt4j.core.Genotype;
 
 /**
@@ -44,16 +44,16 @@ import org.opt4j.core.Genotype;
  * @ConQAT.Rating YELLOW Hash: 46FF32B4C28A6EA1581C3EDFBDA7755E
  */
 public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTaskMappingEntry>
-		extends TaskMappingEncoding<T> implements ComposablePhenotype<AbstractTaskMappingEncoding> {
+		extends TaskMappingEncoding<T> {
 
 	/**
 	 * Constructor that is initialized with a reference to the DSE specification and the input
 	 * system model.
 	 */
-	protected InstantiatedTaskMappingEncoding(DseSpecification dse,
+	protected InstantiatedTaskMappingEncoding(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			AbstractTaskGraphEncoding<?, ?> tgEncoding) {
-		super(dse, systemModelAdapter, tgEncoding);
+		super(expSpec, systemModelAdapter, tgEncoding);
 	}
 
 	// TODO: Check whether the two constructors below are actually needed.
@@ -64,11 +64,11 @@ public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTask
 	 *             if no valid allocation targets can be identified for one
 	 *             {@link IDeployableComponentAdapter}.
 	 */
-	public InstantiatedTaskMappingEncoding(DseSpecification dse,
+	public InstantiatedTaskMappingEncoding(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			AbstractTaskGraphEncoding<?, ?> tgEncoding, boolean initialize)
 			throws ExplorationException {
-		super(dse, systemModelAdapter, tgEncoding, initialize);
+		super(expSpec, systemModelAdapter, tgEncoding, initialize);
 	}
 
 	/**
@@ -78,20 +78,20 @@ public abstract class InstantiatedTaskMappingEncoding<T extends InstantiatedTask
 	 *             if no valid allocation targets can be identified for one
 	 *             {@link IDeployableComponentAdapter}.
 	 */
-	public InstantiatedTaskMappingEncoding(DseSpecification dse,
+	public InstantiatedTaskMappingEncoding(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, boolean initialize)
 			throws ExplorationException {
-		super(dse, systemModelAdapter, initialize);
+		super(expSpec, systemModelAdapter, initialize);
 	}
 
 	/**
 	 * Constructor which derives the resulting {@link InstantiatedTaskMappingEncoding} from the
 	 * given {@link AbstractTaskMappingEncoding}.
 	 */
-	public InstantiatedTaskMappingEncoding(DseSpecification dse,
+	public InstantiatedTaskMappingEncoding(ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			AbstractTaskGraphEncoding<?, ?> tgEncoding, AbstractTaskMappingEncoding abstractEncoding) {
-		super(dse, systemModelAdapter, tgEncoding);
+		super(expSpec, systemModelAdapter, tgEncoding);
 		this.constraintMap = abstractEncoding.copyConstraintMap(null);
 		instantiateAbstractEntries(abstractEncoding);
 	}
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchitectureExplorationProblemModule.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchitectureExplorationProblemModule.java
index bd5ff5665fd0cc93d601e09cbd601d9e5b0e7549..3e2efce8175c106b4c3fb090eee4ab1ef898132a 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchitectureExplorationProblemModule.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/ArchitectureExplorationProblemModule.java
@@ -28,6 +28,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.ArchitectureSo
 import org.fortiss.af3.exploration.alg.dse.evaluator.ArchitectureEvaluator;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
+import org.fortiss.af3.exploration.model.ExplorationSpecification;
 import org.fortiss.af3.exploration.moea.model.DseSpecification;
 
 /**
@@ -45,9 +46,10 @@ public class ArchitectureExplorationProblemModule
 
 	/** Constructor. */
 	public ArchitectureExplorationProblemModule(DseSpecification dse,
+			ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			Set<Class<? extends IExplorationEncoding>> requestedSolutions) {
-		super(dse, systemModelAdapter, requestedSolutions);
+		super(dse, expSpec, systemModelAdapter, requestedSolutions);
 	}
 
 	/** Configure genotype creator (execution model dependent), problem decoder and goal evaluators. */
@@ -67,13 +69,13 @@ public class ArchitectureExplorationProblemModule
 				new DecoderDependencyGraph(systemModelAdapter, requestedSolutions);
 
 		// TODO: construct the execution dependency graph elsewhere?
-		bindProblem(dseFactory.createArchitectureExplorationCreator(dse, systemModelAdapter),
+		bindProblem(dseFactory.createArchitectureExplorationCreator(expSpec, systemModelAdapter),
 				dseFactory.createArchitectureDecoder(systemModelAdapter, execDepGraph),
 				archEvaluator);
 
 		// Create/Bind the subproblems of the architectural exploration problem.
 		try {
-			dseFactory.createSubProblems(this, dse, systemModelAdapter, execDepGraph);
+			dseFactory.createSubProblems(this, dse, expSpec, systemModelAdapter, execDepGraph);
 		} catch(Exception e) {
 			throw new RuntimeException("Failed setting up the DSE Problem instance.", e);
 		}
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/DseProblemModuleBase.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/DseProblemModuleBase.java
index 902a98ae97adbb2244c98b7c229078205e95ab43..977a85288bb44850afc33d7de239429496bfdeff 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/DseProblemModuleBase.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/DseProblemModuleBase.java
@@ -23,7 +23,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
-import org.apache.commons.lang.IllegalClassException;
+import org.fortiss.af3.exploration.alg.ExplorationAlgActivator;
 import org.fortiss.af3.exploration.alg.dse.TaskMappingFactory;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.CompositeDecoder;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.evaluate.ComposableEvaluator;
@@ -38,9 +38,11 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.alg.service.IExplorationEncoding;
 import org.fortiss.af3.exploration.model.ExplorationConstraint;
 import org.fortiss.af3.exploration.model.ExplorationObjective;
+import org.fortiss.af3.exploration.model.ExplorationSpecification;
 import org.fortiss.af3.exploration.model.ExplorationTarget;
 import org.fortiss.af3.exploration.model.MOExplorationObjective;
 import org.fortiss.af3.exploration.moea.model.DseSpecification;
+import org.fortiss.tooling.kernel.utils.LoggingUtils;
 import org.opt4j.core.Objective;
 import org.opt4j.core.genotype.CompositeGenotype;
 import org.opt4j.core.problem.Evaluator;
@@ -61,6 +63,8 @@ public abstract class DseProblemModuleBase<C extends CompositeGenotype<Class<? e
 	/** DSE configuration */
 	protected DseSpecification dse;
 
+	protected ExplorationSpecification expSpec;
+
 	/** Representation of input system */
 	protected SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter;
 
@@ -71,10 +75,11 @@ public abstract class DseProblemModuleBase<C extends CompositeGenotype<Class<? e
 	 * Constructor the DSE specification and an adapter to the input system model has to be
 	 * specified.
 	 */
-	public DseProblemModuleBase(DseSpecification dse,
+	public DseProblemModuleBase(DseSpecification dse, ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 			Set<Class<? extends IExplorationEncoding>> requestedSolutions) {
 		this.dse = dse;
+		this.expSpec = expSpec;
 		this.systemModelAdapter = systemModelAdapter;
 		this.requestedSolutions = requestedSolutions;
 	}
@@ -86,7 +91,7 @@ public abstract class DseProblemModuleBase<C extends CompositeGenotype<Class<? e
 	 */
 	protected <RT, T extends ExplorationTarget<RT>, S extends Phenotype, E extends Evaluator<?>>
 			void addGoalEvaluators(CompositeEvaluator<P> dseEvaluator) throws Exception {
-		Collection<ExplorationTarget<?>> targets = dse.getTargetSpecification().getTargets();
+		Collection<ExplorationTarget<?>> targets = expSpec.getTargets();
 		Collection<ExplorationConstraint<?>> constraints =
 				targets.stream().filter(t -> t instanceof ExplorationConstraint<?>)
 						.map(ExplorationConstraint.class::cast).collect(Collectors.toList());
@@ -103,10 +108,12 @@ public abstract class DseProblemModuleBase<C extends CompositeGenotype<Class<? e
 		}
 
 		int objectivePrioOffset = currentConstrPrio;
+		int nonMOObjectiveCounter = 0;
 		Collection<ExplorationObjective<?>> objectives =
 				targets.stream().filter(t -> t instanceof ExplorationObjective<?>)
 						.map(ExplorationObjective.class::cast).collect(Collectors.toList());
 		for(ExplorationObjective<?> currObjective : objectives) {
+			nonMOObjectiveCounter++;
 			if(MOExplorationObjective.class.isAssignableFrom(currObjective.getClass())) {
 				if(!priorityMap.containsKey(currObjective.getClass())) {
 					int objPrio = ((MOExplorationObjective<?>)currObjective).getPriority();
@@ -115,8 +122,13 @@ public abstract class DseProblemModuleBase<C extends CompositeGenotype<Class<? e
 					priorityMap.put(objectiveType, objectivePrioOffset + objPrio);
 				}
 			} else {
-				throw new IllegalClassException(
-						"Objectives that are not MOExplorationObjectives are currently not supported by this backend.");
+				LoggingUtils.warning(
+						ExplorationAlgActivator.getDefault(),
+						"Could not extract the priority of the objective " +
+								currObjective.getName() + ".");
+				@SuppressWarnings("unchecked") Class<? extends ExplorationTarget<?>> objectiveType =
+						(Class<? extends ExplorationTarget<?>>)currObjective.getClass();
+				priorityMap.put(objectiveType, objectivePrioOffset + nonMOObjectiveCounter);
 			}
 		}
 
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/EvaluatorWrapper.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/EvaluatorWrapper.java
index dfe0edba62b2973c1c41e44bea55e523704f2b04..2fdc35f57a8f1c221919d9529dea94d412fbe47e 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/EvaluatorWrapper.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/EvaluatorWrapper.java
@@ -23,15 +23,23 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
 import org.fortiss.af3.exploration.alg.dse.evaluator.ArchExpSubEvaluator;
 import org.fortiss.af3.exploration.alg.dse.evaluator.ExplorationTargetEvaluatorBase;
+import org.fortiss.af3.exploration.alg.exception.ExplorationException;
 import org.fortiss.af3.exploration.alg.service.IExplorationTargetEvaluator;
 import org.fortiss.af3.exploration.dsl.model.MOEAExplorationExpression;
 import org.fortiss.af3.exploration.dsl.model.expressions.Expression;
 import org.fortiss.af3.exploration.dsl.model.operators.OptimizationDirection;
 import org.fortiss.af3.exploration.dsl.model.operators.OptimizationDirectionEnum;
+import org.fortiss.af3.exploration.dsl_v2.model.expression.IExpression;
+import org.fortiss.af3.exploration.dsl_v2.model.function.Maximize;
+import org.fortiss.af3.exploration.dsl_v2.model.function.Minimize;
+import org.fortiss.af3.exploration.model.ExplorationObjective;
 import org.fortiss.af3.exploration.model.ExplorationTarget;
+import org.fortiss.af3.exploration.model.ExplorationTargetExpression;
+import org.opt4j.core.DoubleValue;
 import org.opt4j.core.Objective;
 import org.opt4j.core.Objective.Sign;
 import org.opt4j.core.Objectives;
+import org.opt4j.core.Value;
 import org.opt4j.core.problem.Evaluator;
 
 import com.google.common.collect.ClassToInstanceMap;
@@ -55,7 +63,7 @@ public class EvaluatorWrapper<P, RT, T extends ExplorationTarget<RT>> implements
 	private IExplorationTargetEvaluator<P, RT, T> evaluator;
 
 	/** Goal specification */
-	private T goal;
+	private T explorationTarget;
 
 	/** Contains the priority of the {@link ExplorationTarget} of the {@link EvaluatorWrapper}. */
 	private int targetPriority;
@@ -75,7 +83,19 @@ public class EvaluatorWrapper<P, RT, T extends ExplorationTarget<RT>> implements
 			if(moExpr instanceof OptimizationDirection) {
 				direction = ((OptimizationDirection)moExpr).getOperator();
 			}
+		} else if(goal instanceof ExplorationObjective<?> &&
+				goal instanceof ExplorationTargetExpression<?>) {
+			// TODO: Reconsider the wrapping / passing to the ExpressionEvaluators. Probably, the
+			// evaluators only need to be aware of the systemModelAdapter and the exploration
+			// expression.
+			IExpression expr = ((ExplorationTargetExpression<?>)goal).getExpression();
+			if(expr instanceof Minimize) {
+				direction = OptimizationDirectionEnum.MIN;
+			} else if(expr instanceof Maximize) {
+				direction = OptimizationDirectionEnum.MAX;
+			}
 		}
+
 		String objectiveName =
 				goal.getName() == null ? goal.getClass().toString() +
 						Integer.toString(goal.getId()) : goal.getName();
@@ -83,7 +103,7 @@ public class EvaluatorWrapper<P, RT, T extends ExplorationTarget<RT>> implements
 				new Objective(objectiveName, direction == OptimizationDirectionEnum.MIN ? Sign.MIN
 						: Sign.MAX);
 
-		this.goal = goal;
+		this.explorationTarget = goal;
 		this.evaluator = evaluator;
 		this.targetPriority = priority;
 		@SuppressWarnings("unchecked") Class<P> targetPhenotypeType = (Class<P>)primaryInputType;
@@ -105,9 +125,20 @@ public class EvaluatorWrapper<P, RT, T extends ExplorationTarget<RT>> implements
 			ClassToInstanceMap<EObject> transformedModels) {
 		Objectives objectives = new Objectives();
 
+		// TODO: Do we really need the evalu
 		@SuppressWarnings("unchecked") P castedPhenotype = (P)phenotype;
-		objectives.add(objective,
-				evaluator.evaluateGoal(castedPhenotype, phenotypes, transformedModels));
+
+		Value<?> evalResult = new DoubleValue(Double.MAX_VALUE);
+		try {
+			evalResult = evaluator.evaluateGoal(castedPhenotype, phenotypes, transformedModels);
+		} catch(Exception e) {
+			// The Opt4J framework only allows us to throw runtime exceptions.
+			throw new RuntimeException(new ExplorationException("The evaluatior " +
+					this.toString() + " failed to evaluate the ExplorationTarget " +
+					explorationTarget.getName() + ".", e));
+		}
+
+		objectives.add(objective, evalResult);
 
 		return objectives;
 	}
@@ -119,7 +150,17 @@ public class EvaluatorWrapper<P, RT, T extends ExplorationTarget<RT>> implements
 		assert (false);
 		Objectives objectives = new Objectives();
 
-		objectives.add(objective, evaluator.evaluateGoal(phenotype, null, null));
+		Value<?> evalResult = new DoubleValue(Double.MAX_VALUE);
+		try {
+			evalResult = evaluator.evaluateGoal(phenotype, null, null);
+		} catch(Exception e) {
+			// The Opt4J framework only allows us to throw runtime exceptions.
+			throw new RuntimeException(new ExplorationException("The evaluatior " +
+					this.toString() + " failed to evaluate the ExplorationTarget " +
+					explorationTarget.getName() + ".", e));
+		}
+
+		objectives.add(objective, evalResult);
 
 		return objectives;
 	}
@@ -127,7 +168,7 @@ public class EvaluatorWrapper<P, RT, T extends ExplorationTarget<RT>> implements
 	/** Returns the type of the goal this evaluator is built for. */
 	@SuppressWarnings("unchecked")
 	public Class<T> getTargetType() {
-		return (Class<T>)goal.getClass();
+		return (Class<T>)explorationTarget.getClass();
 	}
 
 	/** Returns the underlying (actual) evaluator. */
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/StrictTTDecoder.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/StrictTTDecoder.java
index 847eeaef49881d0f11da8a2ce1befc9dbf330095..8ba0aa9ee34b4ad63dd38268d087b0c2d903add3 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/StrictTTDecoder.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/StrictTTDecoder.java
@@ -35,7 +35,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.StrictTTSchedu
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.comm.TDMABusScheduler;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.sched.proc.EDFSchedulerBase;
-import org.fortiss.af3.exploration.moea.model.DseSpecification;
+import org.fortiss.af3.exploration.model.ExplorationSpecification;
 import org.opt4j.core.Genotype;
 
 import com.google.inject.Inject;
@@ -67,17 +67,14 @@ public class StrictTTDecoder<S extends InstantiatedTaskMappingEntry, T extends I
 	@SuppressWarnings("unchecked")
 	@Inject
 	public StrictTTDecoder(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-			DseSpecification explorationDefinition) {
+			ExplorationSpecification expSpec) {
 		this.systemModelAdapter = systemModelAdapter;
 
 		TaskMappingFactory<?, ?> tmFactory = TaskMappingFactory.getInstance();
 
 		simpleEDFScheduler =
-				(EDFSchedulerBase<S, T>)tmFactory.createEDFScheduler(systemModelAdapter,
-						explorationDefinition.getTargetSpecification());
-		simpleBusScheduler =
-				new TDMABusScheduler<S, T>(systemModelAdapter,
-						explorationDefinition.getTargetSpecification());
+				(EDFSchedulerBase<S, T>)tmFactory.createEDFScheduler(systemModelAdapter, expSpec);
+		simpleBusScheduler = new TDMABusScheduler<S, T>(systemModelAdapter, expSpec);
 
 	}
 
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/AbstractTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/AbstractTaskMappingDecoder.java
index fb9cc10f5ca55da9711da3eb26c27ae3f2ac3246..a47903ae55e37fbeb303ddb323f55506db49e1cb 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/AbstractTaskMappingDecoder.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/AbstractTaskMappingDecoder.java
@@ -27,7 +27,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.in
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode.ComposableDecoderBase;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.ArchExpSubDecoder;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
-import org.fortiss.af3.exploration.moea.model.DseSpecification;
+import org.fortiss.af3.exploration.model.ExplorationSpecification;
 import org.opt4j.core.problem.Decoder;
 
 import com.google.inject.Inject;
@@ -47,15 +47,15 @@ public abstract class AbstractTaskMappingDecoder<S extends InstantiatedTaskMappi
 	/** Reference to the {@link SystemModelAdapter} that handles input models for the DSE. */
 	SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter;
 
-	/** Reference to the {@link DseSpecification} specification that defines the DSE. */
-	DseSpecification explorationDefinition;
+	/** Reference to the {@link ExplorationSpecification} specification that defines the DSE. */
+	ExplorationSpecification expSpec;
 
 	/** Constructs a new decoder that instantiates {@link AbstractTaskMappingEncoding}. */
 	@Inject
 	public AbstractTaskMappingDecoder(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-			DseSpecification explorationDefinition) {
+			ExplorationSpecification expSpec) {
 		this.systemModelAdapter = systemModelAdapter;
-		this.explorationDefinition = explorationDefinition;
+		this.expSpec = expSpec;
 	}
 
 	/** {@inheritDoc} */
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FailSilentAbstractTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FailSilentAbstractTaskMappingDecoder.java
index 8383101d5b91a995bb2c95a510a7677f435067ab..e11011479477731635af3aebb20fd8d03959ed36 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FailSilentAbstractTaskMappingDecoder.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FailSilentAbstractTaskMappingDecoder.java
@@ -33,7 +33,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
-import org.fortiss.af3.exploration.moea.model.DseSpecification;
+import org.fortiss.af3.exploration.model.ExplorationSpecification;
 
 /**
  * Decoder for instantiating an {@link AbstractTaskMappingEncoding} to a
@@ -50,8 +50,8 @@ public class FailSilentAbstractTaskMappingDecoder extends
 	/** Constructor. */
 	public FailSilentAbstractTaskMappingDecoder(
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-			DseSpecification explorationDefinition) {
-		super(systemModelAdapter, explorationDefinition);
+			ExplorationSpecification expSpec) {
+		super(systemModelAdapter, expSpec);
 	}
 
 	/** {@inheritDoc} */
@@ -62,8 +62,7 @@ public class FailSilentAbstractTaskMappingDecoder extends
 		AbstractTaskGraphEncoding<?, ?> atgEnc =
 				phenotypeTypeMap.getEncoding(AbstractTaskGraphEncoding.class);
 		assert (atgEnc != null) : "The required abstract task graph encoding could not be found in the map of already decoded phenotypes.";
-		return new FailSilentTaskMappingEncoding(explorationDefinition, systemModelAdapter, atgEnc,
-				genotype);
+		return new FailSilentTaskMappingEncoding(expSpec, systemModelAdapter, atgEnc, genotype);
 	}
 
 	// TODO: Abstract to the AbstractTaskMappingDecoder.
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FaultDetectionVotingAbstractTaskMappingDecoder.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FaultDetectionVotingAbstractTaskMappingDecoder.java
index 45e750c615ab7f5e3618af992d112ed30d46a377..3acbe024acd5dbe83edc236f9c029bcdd1af5d2c 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FaultDetectionVotingAbstractTaskMappingDecoder.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/instantiatemapping/FaultDetectionVotingAbstractTaskMappingDecoder.java
@@ -32,7 +32,7 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
-import org.fortiss.af3.exploration.moea.model.DseSpecification;
+import org.fortiss.af3.exploration.model.ExplorationSpecification;
 import org.opt4j.core.problem.Decoder;
 
 /**
@@ -51,8 +51,8 @@ public class FaultDetectionVotingAbstractTaskMappingDecoder
 	/** Constructor. */
 	public FaultDetectionVotingAbstractTaskMappingDecoder(
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-			DseSpecification explorationDefinition) {
-		super(systemModelAdapter, explorationDefinition);
+			ExplorationSpecification expSpec) {
+		super(systemModelAdapter, expSpec);
 	}
 
 	/** {@inheritDoc} */
@@ -63,8 +63,8 @@ public class FaultDetectionVotingAbstractTaskMappingDecoder
 		AbstractTaskGraphEncoding<?, ?> atgEnc =
 				phenotypeTypeMap.getEncoding(AbstractTaskGraphEncoding.class);
 		assert (atgEnc != null) : "The required abstract task graph encoding could not be found in the map of already decoded phenotypes.";
-		return new FaultDetectionVotingTaskMappingEncoding(explorationDefinition,
-				systemModelAdapter, atgEnc, genotype);
+		return new FaultDetectionVotingTaskMappingEncoding(expSpec, systemModelAdapter, atgEnc,
+				genotype);
 	}
 
 	/**
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/ExplorationTargetEvaluatorBase.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/ExplorationTargetEvaluatorBase.java
index 214f0be3108f845b973a6d284c581ed27e173222..5e009d55809534fd8aaba0d3393878251e1f5e7d 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/ExplorationTargetEvaluatorBase.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/ExplorationTargetEvaluatorBase.java
@@ -23,6 +23,7 @@ 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.sysmodel.arch.SystemModelAdapter;
+import org.fortiss.af3.exploration.alg.exception.ExplorationException;
 import org.fortiss.af3.exploration.alg.service.IExplorationTargetEvaluator;
 import org.fortiss.af3.exploration.model.ExplorationConstraint;
 import org.fortiss.af3.exploration.model.ExplorationTarget;
@@ -49,7 +50,7 @@ public abstract class ExplorationTargetEvaluatorBase<P, RT, T extends Exploratio
 	protected SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter;
 
 	/** Exploration goal evaluated by this evaluator */
-	protected T optTarget;
+	protected T explorationTarget;
 
 	/** Prototype constructor. */
 	protected ExplorationTargetEvaluatorBase() {
@@ -65,7 +66,7 @@ public abstract class ExplorationTargetEvaluatorBase<P, RT, T extends Exploratio
 	protected ExplorationTargetEvaluatorBase(
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter, T optTarget) throws Exception {
 		this.systemModelAdapter = systemModelAdapter;
-		this.optTarget = optTarget;
+		this.explorationTarget = optTarget;
 
 		validateInputs();
 	}
@@ -83,7 +84,15 @@ public abstract class ExplorationTargetEvaluatorBase<P, RT, T extends Exploratio
 		}
 		// TODO #checking: Add an check here to ensure that the evaluators don't mess around with
 		// the encodings.
-		Value<?> evalResult = evaluateGoal(phenotype, phenotypeTypeMap, transformedModels);
+		Value<?> evalResult = new DoubleValue(Double.MAX_VALUE);
+		try {
+			evalResult = evaluateGoal(phenotype, phenotypeTypeMap, transformedModels);
+		} catch(Exception e) {
+			// The Opt4J framework only allows us to throw runtime exceptions.
+			throw new RuntimeException(new ExplorationException("The evaluatior " +
+					this.toString() + " failed to evaluate the ExplorationTarget " +
+					explorationTarget.getName() + ".", e));
+		}
 		return evalResult;
 	}
 
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/ExpressionEvaluatorBase.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/ExpressionEvaluatorBase.java
new file mode 100644
index 0000000000000000000000000000000000000000..354ed9c1bd09c1b764f2ec9da4957e0241e49221
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/ExpressionEvaluatorBase.java
@@ -0,0 +1,133 @@
+/*--------------------------------------------------------------------------+
+$Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $
+|                                                                          |
+| Copyright 2017 fortiss GmbH                     |
+|                                                                          |
+| Licensed under the Apache License, Version 2.0 (the "License");          |
+| you may not use this file except in compliance with the License.         |
+| You may obtain a copy of the License at                                  |
+|                                                                          |
+|    http://www.apache.org/licenses/LICENSE-2.0                            |
+|                                                                          |
+| Unless required by applicable law or agreed to in writing, software      |
+| distributed under the License is distributed on an "AS IS" BASIS,        |
+| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+| See the License for the specific language governing permissions and      |
+| limitations under the License.                                           |
++--------------------------------------------------------------------------*/
+package org.fortiss.af3.exploration.alg.dse.evaluator;
+
+import java.util.Collection;
+
+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.sysmodel.arch.SystemModelAdapter;
+import org.fortiss.af3.exploration.alg.exception.ExplorationException;
+import org.fortiss.af3.exploration.alg.service.IExplorationTargetEvaluator;
+import org.fortiss.af3.exploration.dsl_v2.model.expression.IExpression;
+import org.fortiss.af3.exploration.lang.ExplorationExpressionEvaluator;
+import org.fortiss.af3.exploration.model.ExplorationTarget;
+import org.fortiss.af3.exploration.model.ExplorationTargetExpression;
+import org.fortiss.tooling.kernel.introspection.IIntrospectionDetailsItem;
+import org.fortiss.tooling.kernel.introspection.IIntrospectionItem;
+import org.opt4j.core.DoubleValue;
+import org.opt4j.core.Value;
+
+import com.google.common.collect.ClassToInstanceMap;
+
+/**
+ * 
+ * @author diewald
+ * @author $Author: hoelzl $
+ * @version $Rev: 18709 $
+ * @ConQAT.Rating RED Hash:
+ */
+public abstract class ExpressionEvaluatorBase<P extends Phenotype, RT, T extends ExplorationTarget<RT>>
+		extends ExplorationExpressionEvaluator implements IExplorationTargetEvaluator<P, RT, T> {
+
+	/** Representation of system model */
+	protected SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter;
+
+	/** Exploration goal evaluated by this evaluator */
+	protected T explorationTarget;
+
+	protected IExpression expression;
+
+	/** Prototype constructor. */
+	protected ExpressionEvaluatorBase() {
+	}
+
+	/**
+	 * Creates an evaluator for a given exploration goal
+	 * 
+	 * @throws Exception
+	 *             if the input validation fails (has to be implemented by the concrete
+	 *             {@link ExplorationTarget} evaluators.
+	 */
+	protected ExpressionEvaluatorBase(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
+			T explorationTarget) throws Exception {
+		if(!(explorationTarget instanceof ExplorationTargetExpression<?>)) {
+			throw new Exception("The exploration target " + explorationTarget.getName() + " is" +
+					" not of the ExplorationTargetExpression. Thus, it cannot be evaluated by " +
+					getClass().getSimpleName() + ".");
+
+		}
+
+		this.systemModelAdapter = systemModelAdapter;
+		this.explorationTarget = explorationTarget;
+		this.expression = ((ExplorationTargetExpression<?>)explorationTarget).getExpression();
+
+		validateInputs();
+	}
+
+	/**
+	 * Wrapper method for the original evaluate function.
+	 * 
+	 * @param transformedModels
+	 *            TODO
+	 */
+	public Value<?> evaluate(P phenotype, FlatPhenotypeMap<Phenotype> phenotypeTypeMap,
+			ClassToInstanceMap<EObject> transformedModels) {
+		if(phenotype == null) {
+			return new DoubleValue(Double.MAX_VALUE);
+		}
+		// TODO #checking: Add an check here to ensure that the evaluators don't mess around with
+		// the encodings.
+		Value<?> evalResult = new DoubleValue(Double.MAX_VALUE);
+		try {
+			evalResult = evaluateGoal(phenotype, phenotypeTypeMap, transformedModels);
+		} catch(Exception e) {
+			// The Opt4J framework only allows us to throw runtime exceptions.
+			throw new RuntimeException(new ExplorationException("The evaluatior " +
+					this.toString() + " failed to evaluate the ExplorationTarget " +
+					explorationTarget.getName() + ".", e));
+		}
+		return evalResult;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public String getIntrospectionLabel() {
+		return getClass().getSimpleName();
+	}
+
+	// TODO: Add the introspection information.
+	/** {@inheritDoc} */
+	@Override
+	public boolean showInIntrospectionNavigation() {
+		return true;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Collection<IIntrospectionItem> getIntrospectionItems() {
+		return null;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public IIntrospectionDetailsItem getDetailsItem() {
+		return null;
+	}
+}
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/MappingEvaluator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/MappingEvaluator.java
new file mode 100644
index 0000000000000000000000000000000000000000..49b908355a80a581ebccd66ed862883ff7b18ddb
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/MappingEvaluator.java
@@ -0,0 +1,122 @@
+/*--------------------------------------------------------------------------+
+$Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $
+|                                                                          |
+| Copyright 2017 fortiss GmbH                     |
+|                                                                          |
+| Licensed under the Apache License, Version 2.0 (the "License");          |
+| you may not use this file except in compliance with the License.         |
+| You may obtain a copy of the License at                                  |
+|                                                                          |
+|    http://www.apache.org/licenses/LICENSE-2.0                            |
+|                                                                          |
+| Unless required by applicable law or agreed to in writing, software      |
+| distributed under the License is distributed on an "AS IS" BASIS,        |
+| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+| See the License for the specific language governing permissions and      |
+| limitations under the License.                                           |
++--------------------------------------------------------------------------*/
+package org.fortiss.af3.exploration.alg.dse.evaluator;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.MappingEncoding;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IRequestAdapter;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IResourceAdapter;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
+import org.fortiss.af3.exploration.dsl_v2.model.booleanp.Implies;
+import org.fortiss.af3.exploration.dsl_v2.model.booleanp.allocation.Allocation;
+import org.fortiss.af3.exploration.dsl_v2.model.booleanp.allocation.Dislocation;
+import org.fortiss.af3.exploration.model.ExplorationTarget;
+import org.fortiss.tooling.base.model.element.IModelElement;
+
+/**
+ * 
+ * @author diewald
+ * @author $Author: hoelzl $
+ * @version $Rev: 18709 $
+ * @ConQAT.Rating RED Hash:
+ */
+public abstract class MappingEvaluator extends
+		ExpressionEvaluatorBase<MappingEncoding, Double, ExplorationTarget<Double>> {
+
+	protected MappingEncoding mapping;
+
+	/** Empty prototype constructor. */
+	public MappingEvaluator() {
+		super();
+	}
+
+	/** Constructor. */
+	public MappingEvaluator(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
+			ExplorationTarget<Double> explorationTarget) throws Exception {
+		super(systemModelAdapter, explorationTarget);
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Object visit(Allocation alloc) throws Exception {
+		// TODO: Here, we could use the requester / resource framework for the return types. In
+		// addition we would obtain a generic mapping evaluator.
+		IModelElement requester = alloc.getLeft().accept(this, IModelElement.class);
+		IModelElement resource = alloc.getRight().accept(this, IModelElement.class);
+
+		IRequestAdapter<?> requestAdp = systemModelAdapter.getDeployableComponentOf(requester);
+
+		Collection<IResourceAdapter<?>> allocResourceAdps =
+				mapping.getAllocatedResourcesFor(requestAdp);
+		for(IResourceAdapter<?> allocResource : allocResourceAdps) {
+			if(allocResource.getObject() == resource) {
+				return Boolean.valueOf(true);
+			}
+		}
+
+		return Boolean.valueOf(false);
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Object visit(Dislocation disLoc) throws Exception {
+		IModelElement requester = disLoc.getLeft().accept(this, IModelElement.class);
+		IModelElement resource = disLoc.getRight().accept(this, IModelElement.class);
+
+		IRequestAdapter<?> requestAdp = systemModelAdapter.getDeployableComponentOf(requester);
+
+		Collection<IResourceAdapter<?>> allocResourceAdps =
+				mapping.getAllocatedResourcesFor(requestAdp);
+		for(IResourceAdapter<?> allocResource : allocResourceAdps) {
+			if(allocResource.getObject() == resource) {
+				return Boolean.valueOf(false);
+			}
+		}
+
+		return Boolean.valueOf(true);
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Object visit(Implies implies) throws Exception {
+		// FIXME: How to implement implies?
+		return null;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public boolean validateInputs() throws Exception {
+		return true;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Collection<Class<?>> getRequiredInputTypes() {
+		Collection<Class<?>> requiredTypes = new ArrayList<>();
+		requiredTypes.add(MappingEncoding.class);
+		return requiredTypes;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Class<?> getPrimaryInputType() {
+		return MappingEncoding.class;
+	}
+}
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiAllocationConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiAllocationConstraintEvaluator.java
index 17ee333188577b1ce7b5a1cbf1c59477e19340fa..3cb30da70223f29060dd12e2b5563a54602ebaf2 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiAllocationConstraintEvaluator.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiAllocationConstraintEvaluator.java
@@ -78,19 +78,19 @@ public class ComponentMultiAllocationConstraintEvaluator<S extends InstantiatedT
 	 */
 	@Override
 	public boolean validateInputs() throws Exception {
-		if(optTarget.getComponent() == null ||
-				systemModelAdapter.getDeployableComponentOf(optTarget.getComponent()) == null) {
+		if(explorationTarget.getComponent() == null ||
+				systemModelAdapter.getDeployableComponentOf(explorationTarget.getComponent()) == null) {
 			throw new Exception("The referenced component of the dislocation constraint " +
-					optTarget.getName() + "(id: " + optTarget.getId() +
+					explorationTarget.getName() + "(id: " + explorationTarget.getId() +
 					") is not correctly specified." +
 					" Either it is missing, or not part of the set of deployable components.");
 		}
 
-		if(optTarget.getExecutionUnits().isEmpty() ||
+		if(explorationTarget.getExecutionUnits().isEmpty() ||
 				!mapInOut(systemModelAdapter.getDeploymentTargets(), t -> t.getObject(),
-						ArrayList::new).containsAll(optTarget.getExecutionUnits())) {
+						ArrayList::new).containsAll(explorationTarget.getExecutionUnits())) {
 			throw new Exception("The referenced execution unit of the dislocation constraint " +
-					optTarget.getName() + "(id: " + optTarget.getId() +
+					explorationTarget.getName() + "(id: " + explorationTarget.getId() +
 					") is not correctly specified." +
 					" Either it is missing, or not part of the set of deployment targets.");
 		}
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiDislocationConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiDislocationConstraintEvaluator.java
index 566971566c94c9d5021e0931ccfc3dfccb509dcb..ff8b28fddd831d027b700a7d0375bf361021ce4a 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiDislocationConstraintEvaluator.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiDislocationConstraintEvaluator.java
@@ -77,19 +77,19 @@ public class ComponentMultiDislocationConstraintEvaluator<S extends Instantiated
 	 */
 	@Override
 	public boolean validateInputs() throws Exception {
-		if(optTarget.getComponent() == null ||
-				systemModelAdapter.getDeployableComponentOf(optTarget.getComponent()) == null) {
+		if(explorationTarget.getComponent() == null ||
+				systemModelAdapter.getDeployableComponentOf(explorationTarget.getComponent()) == null) {
 			throw new Exception("The referenced component of the dislocation constraint " +
-					optTarget.getName() + "(id: " + optTarget.getId() +
+					explorationTarget.getName() + "(id: " + explorationTarget.getId() +
 					") is not correctly specified." +
 					" Either it is missing, or not part of the set of deployable components.");
 		}
 
-		if(optTarget.getExecutionUnits().isEmpty() ||
+		if(explorationTarget.getExecutionUnits().isEmpty() ||
 				!mapInOut(systemModelAdapter.getDeploymentTargets(), t -> t.getObject(),
-						ArrayList::new).containsAll(optTarget.getExecutionUnits())) {
+						ArrayList::new).containsAll(explorationTarget.getExecutionUnits())) {
 			throw new Exception("The referenced execution unit of the dislocation constraint " +
-					optTarget.getName() + "(id: " + optTarget.getId() +
+					explorationTarget.getName() + "(id: " + explorationTarget.getId() +
 					") is not correctly specified." +
 					" Either it is missing, or not part of the set of deployment targets.");
 		}
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/DeadlineConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/DeadlineConstraintEvaluator.java
index bab0cb327f0dd4bebea3683d2afddf7270fc57ac..467e089cae281787d18da66d4bf08ea7a8e5f874 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/DeadlineConstraintEvaluator.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/DeadlineConstraintEvaluator.java
@@ -78,17 +78,17 @@ public class DeadlineConstraintEvaluator<S extends InstantiatedTaskMappingEntry,
 
 		sourceDeployableComponent.add(systemModelAdapter.getDeployableComponentOf(optGoal
 				.getStartComponent()));
-		targetDeployableComponent.add(systemModelAdapter.getDeployableComponentOf(optTarget
+		targetDeployableComponent.add(systemModelAdapter.getDeployableComponentOf(explorationTarget
 				.getEndComponent()));
 
-		deadline = optTarget.getDeadline();
+		deadline = explorationTarget.getDeadline();
 
 		// TODO: AD: The cast to the AF3 systemmodeladapter breaks the abstration the goals. It
 		// would be rather required to define the source and sink components as
 		// IDeployableComponents in the ecore model. The transformation from AF3 components to the
 		// IDeployableCompontes should be done when the data from the GUI is written to the model.
 		IDeployableComponentAdapter<?> origStartComponent =
-				((AF3SystemModelAdapter)systemModelAdapter).getDeployableComponentAdapter(optTarget
+				((AF3SystemModelAdapter)systemModelAdapter).getDeployableComponentAdapter(explorationTarget
 						.getStartComponent());
 		if(origStartComponent.isInstantiation()) {
 			sourceDeployableComponent.add(origStartComponent);
@@ -97,7 +97,7 @@ public class DeadlineConstraintEvaluator<S extends InstantiatedTaskMappingEntry,
 		}
 
 		IDeployableComponentAdapter<?> origTargetComponent =
-				((AF3SystemModelAdapter)systemModelAdapter).getDeployableComponentAdapter(optTarget
+				((AF3SystemModelAdapter)systemModelAdapter).getDeployableComponentAdapter(explorationTarget
 						.getEndComponent());
 		if(origStartComponent.isInstantiation()) {
 			targetDeployableComponent.add(origTargetComponent);
@@ -169,8 +169,8 @@ public class DeadlineConstraintEvaluator<S extends InstantiatedTaskMappingEntry,
 	public boolean validateInputs() {
 		// TODO: AD: is this check really required here? Shouldn't this be done by the
 		// inputvalidator?
-		if(optTarget.getStartComponent() == null || optTarget.getEndComponent() == null ||
-				optTarget.getDeadline() <= 0) {
+		if(explorationTarget.getStartComponent() == null || explorationTarget.getEndComponent() == null ||
+				explorationTarget.getDeadline() <= 0) {
 			return false;
 		}
 
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/IConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/IConstraintEvaluator.java
index a134841e8f8f1dcf165c4c66cace1c025ef0de32..763f616185ff3b62aace70f7633d743aa903bdeb 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/IConstraintEvaluator.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/IConstraintEvaluator.java
@@ -38,6 +38,6 @@ public interface IConstraintEvaluator<P, RT, T extends ExplorationConstraint<RT>
 	 * The {@code validate} is applied to phenotypes in order to check whether proposed solutions
 	 * are contained within the feasible set.
 	 */
-	public <M> boolean validate(ExplorationTarget<?> expTarget, M solution, Class<M> solutionType,
+	<M> boolean validate(ExplorationTarget<?> expTarget, M solution, Class<M> solutionType,
 			SolutionQuantification value);
 }
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/MappingEvaluatorConstraint.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/MappingEvaluatorConstraint.java
new file mode 100644
index 0000000000000000000000000000000000000000..3e065004f67b2528d31627953366ca170dcb79b0
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/MappingEvaluatorConstraint.java
@@ -0,0 +1,108 @@
+/*--------------------------------------------------------------------------+
+$Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $
+|                                                                          |
+| Copyright 2017 fortiss GmbH                     |
+|                                                                          |
+| Licensed under the Apache License, Version 2.0 (the "License");          |
+| you may not use this file except in compliance with the License.         |
+| You may obtain a copy of the License at                                  |
+|                                                                          |
+|    http://www.apache.org/licenses/LICENSE-2.0                            |
+|                                                                          |
+| Unless required by applicable law or agreed to in writing, software      |
+| distributed under the License is distributed on an "AS IS" BASIS,        |
+| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+| See the License for the specific language governing permissions and      |
+| limitations under the License.                                           |
++--------------------------------------------------------------------------*/
+package org.fortiss.af3.exploration.alg.dse.evaluator.constraint;
+
+import org.eclipse.emf.ecore.EObject;
+import org.fortiss.af3.exploration.alg.dse.SolutionQuantification;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.MappingEncoding;
+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.evaluator.MappingEvaluator;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
+import org.fortiss.af3.exploration.alg.service.IExplorationTargetEvaluator;
+import org.fortiss.af3.exploration.dsl_v2.model.function.Maximize;
+import org.fortiss.af3.exploration.dsl_v2.model.function.Minimize;
+import org.fortiss.af3.exploration.model.ExplorationConstraint;
+import org.fortiss.af3.exploration.model.ExplorationTarget;
+import org.opt4j.core.IntegerValue;
+import org.opt4j.core.Value;
+
+import com.google.common.collect.ClassToInstanceMap;
+
+/**
+ * 
+ * @author diewald
+ * @author $Author: hoelzl $
+ * @version $Rev: 18709 $
+ * @ConQAT.Rating RED Hash:
+ */
+public class MappingEvaluatorConstraint extends MappingEvaluator implements
+		IConstraintEvaluator<MappingEncoding, Boolean, ExplorationConstraint<Boolean>> {
+
+	public MappingEvaluatorConstraint() {
+	}
+
+	public MappingEvaluatorConstraint(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
+			ExplorationTarget<Double> explorationTarget) throws Exception {
+		super(systemModelAdapter, explorationTarget);
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Value<?> evaluateGoal(MappingEncoding phenotype,
+			FlatPhenotypeMap<Phenotype> phenotypeTypeMap,
+			ClassToInstanceMap<EObject> transformedModels) {
+		mapping = phenotype;
+
+		Boolean retVal = null;
+		// FIXME: pass parsing exception to upper layers.
+		try {
+			retVal = expression.accept(this, Boolean.class);
+		} catch(Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+
+		// TODO Auto-generated method stub
+		return new IntegerValue(retVal == true ? 1 : 0);
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Object visit(Maximize max) throws Exception {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Object visit(Minimize min) throws Exception {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public IExplorationTargetEvaluator<MappingEncoding, Double, ExplorationTarget<Double>>
+			createEvaluator(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
+					ExplorationTarget<Double> explorationTarget) throws InstantiationException,
+					Exception {
+		return new MappingEvaluatorConstraint(systemModelAdapter, explorationTarget);
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public <M> boolean validate(ExplorationTarget<?> expTarget, M solution, Class<M> solutionType,
+			SolutionQuantification value) {
+		Double evalValue = value.getQuantificationOf(expTarget);
+		if(evalValue > 0.0) {
+			return false;
+		}
+		return true;
+	}
+}
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/SafetyIntegrityLevelConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/SafetyIntegrityLevelConstraintEvaluator.java
index 76f760564706568e91fe569bfc45b061bb57e69e..3ed3d7a05581e906b3158a1c262b6b4af8cd5698 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/SafetyIntegrityLevelConstraintEvaluator.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/SafetyIntegrityLevelConstraintEvaluator.java
@@ -85,7 +85,7 @@ public class SafetyIntegrityLevelConstraintEvaluator<S extends InstantiatedTaskM
 		Map<IDeployableComponentAdapter<?>, Collection<S>> allocationMap =
 				mapping.getAllocationMap();
 		List<IDeployableComponentAdapter<?>> silComponents = getSILComponentAdapters();
-		List<SIL> silBounds = optTarget.getLimitation();
+		List<SIL> silBounds = explorationTarget.getLimitation();
 		for(int idx = 0; idx < silComponents.size(); idx++) {
 			SIL actualSIL = detectSIL(silComponents.get(idx), allocationMap);
 			if(actualSIL.getValue() < silBounds.get(idx).getValue()) {
@@ -109,7 +109,7 @@ public class SafetyIntegrityLevelConstraintEvaluator<S extends InstantiatedTaskM
 	private List<IDeployableComponentAdapter<?>> getSILComponentAdapters() {
 		Collection<IDeployableComponentAdapter<?>> deplComp =
 				castToRawColl(systemModelAdapter.getDeployableComponents());
-		return deplComp.stream().filter(c -> optTarget.getComponents().contains(c))
+		return deplComp.stream().filter(c -> explorationTarget.getComponents().contains(c))
 				.collect(Collectors.toList());
 	}
 
@@ -124,7 +124,7 @@ public class SafetyIntegrityLevelConstraintEvaluator<S extends InstantiatedTaskM
 		Map<IDeployableComponentAdapter<?>, Collection<S>> allocationMap =
 				mapping.getAllocationMap();
 		List<IDeployableComponentAdapter<?>> silComponents = getSILComponentAdapters();
-		List<SIL> silBounds = optTarget.getLimitation();
+		List<SIL> silBounds = explorationTarget.getLimitation();
 		for(int idx = 0; idx < silComponents.size(); idx++) {
 			SIL actualSIL = detectSIL(silComponents.get(idx), allocationMap);
 			silViolations.add(calculateSILViolation(silBounds.get(idx), actualSIL));
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/MappingEvaluatorObjective.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/MappingEvaluatorObjective.java
new file mode 100644
index 0000000000000000000000000000000000000000..79019567c316c9a8afd2076530d7e3e1cf46a9b1
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/MappingEvaluatorObjective.java
@@ -0,0 +1,108 @@
+/*--------------------------------------------------------------------------+
+$Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $
+|                                                                          |
+| Copyright 2017 fortiss GmbH                     |
+|                                                                          |
+| Licensed under the Apache License, Version 2.0 (the "License");          |
+| you may not use this file except in compliance with the License.         |
+| You may obtain a copy of the License at                                  |
+|                                                                          |
+|    http://www.apache.org/licenses/LICENSE-2.0                            |
+|                                                                          |
+| Unless required by applicable law or agreed to in writing, software      |
+| distributed under the License is distributed on an "AS IS" BASIS,        |
+| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+| See the License for the specific language governing permissions and      |
+| limitations under the License.                                           |
++--------------------------------------------------------------------------*/
+package org.fortiss.af3.exploration.alg.dse.evaluator.objective;
+
+import java.math.BigInteger;
+
+import org.eclipse.emf.ecore.EObject;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.MappingEncoding;
+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.evaluator.MappingEvaluator;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
+import org.fortiss.af3.exploration.alg.service.IExplorationTargetEvaluator;
+import org.fortiss.af3.exploration.dsl_v2.model.arithmetic.IArithmeticExpression;
+import org.fortiss.af3.exploration.dsl_v2.model.function.IFunction;
+import org.fortiss.af3.exploration.dsl_v2.model.function.Maximize;
+import org.fortiss.af3.exploration.dsl_v2.model.function.Minimize;
+import org.fortiss.af3.exploration.model.ExplorationTarget;
+import org.opt4j.core.DoubleValue;
+import org.opt4j.core.IntegerValue;
+import org.opt4j.core.Value;
+import org.opt4j.core.problem.Evaluator;
+
+import com.google.common.collect.ClassToInstanceMap;
+
+/**
+ * 
+ * @author diewald
+ * @author $Author: hoelzl $
+ * @version $Rev: 18709 $
+ * @ConQAT.Rating RED Hash:
+ */
+public class MappingEvaluatorObjective extends MappingEvaluator {
+
+	/** Prototype Constructor. */
+	public MappingEvaluatorObjective() {
+	}
+
+	/**
+	 * Constructor.
+	 * 
+	 * @param systemModelAdapter
+	 *            abstracts the input models.
+	 * @param explorationTarget
+	 *            Target for which the {@link Evaluator} is constructed.
+	 * @throws Exception
+	 *             if the inputs don't satisfy the {@link Evaluator}'s requirements.
+	 */
+	public MappingEvaluatorObjective(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
+			ExplorationTarget<Double> explorationTarget) throws Exception {
+		super(systemModelAdapter, explorationTarget);
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Value<?> evaluateGoal(MappingEncoding phenotype,
+			FlatPhenotypeMap<Phenotype> phenotypeTypeMap,
+			ClassToInstanceMap<EObject> transformedModels) throws Exception {
+		mapping = phenotype;
+
+		// For ExplorationObjectives the expression begins either with a Minimize or Maximize
+		// operation.
+		IArithmeticExpression minMaxTerm = ((IFunction)expression).getArgs();
+
+		Number retVal = minMaxTerm.accept(this, Number.class);
+
+		return retVal instanceof BigInteger ? new IntegerValue(retVal.intValue())
+				: new DoubleValue(retVal.doubleValue());
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Object visit(Maximize max) throws Exception {
+		// Max/Min operators are handled in the EvaluationWrapper (pre-processing).
+		return null;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Object visit(Minimize min) throws Exception {
+		// Max/Min operators are handled in the EvaluationWrapper (pre-processing).
+		return null;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public IExplorationTargetEvaluator<MappingEncoding, Double, ExplorationTarget<Double>>
+			createEvaluator(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
+					ExplorationTarget<Double> explorationTarget) throws InstantiationException,
+					Exception {
+		return new MappingEvaluatorObjective(systemModelAdapter, explorationTarget);
+	}
+}
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/ReliabilityEvaluatorBase.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/ReliabilityEvaluatorBase.java
index f8d5dd1c1c9e68350a1be29216160048b7b1946c..ecd8b62b9c834d0c74b0ee1a0297d886ec81534d 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/ReliabilityEvaluatorBase.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/objective/ReliabilityEvaluatorBase.java
@@ -91,12 +91,12 @@ public abstract class ReliabilityEvaluatorBase<S extends InstantiatedTaskMapping
 		super(systemModelAdapter, target);
 
 		targetComponent =
-				systemModelAdapter.getDeployableComponentOf(optTarget.getTargetComponent());
+				systemModelAdapter.getDeployableComponentOf(explorationTarget.getTargetComponent());
 		if(targetComponent == null) {
 			throw new Exception("The Component for which to minimize the failure rate is not" +
 					" correctly specified. It is either not defined, or it is not part of the" +
-					" set of deployable Components. The error is caused by " + optTarget.getName() +
-					"(id: " + optTarget.getId() + ").");
+					" set of deployable Components. The error is caused by " + explorationTarget.getName() +
+					"(id: " + explorationTarget.getId() + ").");
 		}
 
 		// TODO: Check for different implementation of this single initialization for different
@@ -264,7 +264,7 @@ public abstract class ReliabilityEvaluatorBase<S extends InstantiatedTaskMapping
 		// TODO: It seems that 'comp' is used to identify the task graph for which the analysis is
 		// performed.
 		return new DoubleValue(evaluateInternal(schedule, itmEnc,
-				atgEnc.getTaskGraphOf(targetComponent), optTarget.getType()));
+				atgEnc.getTaskGraphOf(targetComponent), explorationTarget.getType()));
 		// ((AF3SystemModelAdapter)systemModelAdapter).getTaskGraph(optGoal.getComponent()),
 		// optGoal.getType());
 	}
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FailSilentExecModelFactory.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FailSilentExecModelFactory.java
index 4c5a1aba3a45dd5b7616309a2601e73c3c32a90f..bd7a1aa53031d76e11688eedcc30e7218662b0da 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FailSilentExecModelFactory.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FailSilentExecModelFactory.java
@@ -50,7 +50,6 @@ import org.fortiss.af3.exploration.model.ExplorationSpecification;
 import org.fortiss.af3.exploration.model.ExplorationTarget;
 import org.fortiss.af3.exploration.model.time.DeadlineConstraint;
 import org.fortiss.af3.exploration.model.time.PeriodConstraint;
-import org.fortiss.af3.exploration.moea.model.DseSpecification;
 import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiAllocationConstraint;
 import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiDislocationConstraint;
 import org.fortiss.af3.exploration.moea.model.predefined.FailureMinObjective;
@@ -93,10 +92,10 @@ public class FailSilentExecModelFactory extends
 	/** Creates a TaskMappingCreator that matches the given execution model. */
 	@Override
 	public TaskMappingCreator<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding>
-			createTaskMappingCreator(DseSpecification dse,
+			createTaskMappingCreator(ExplorationSpecification expSpec,
 					SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 					DecoderDependencyGraph execDepGraph) {
-		return new FailSilentTaskMappingCreator(dse, systemModelAdapter, execDepGraph);
+		return new FailSilentTaskMappingCreator(expSpec, systemModelAdapter, execDepGraph);
 	}
 
 	/*
@@ -152,8 +151,8 @@ public class FailSilentExecModelFactory extends
 	public AbstractTaskMappingDecoder<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding>
 			createAbstractTaskMappingDecoder(
 					SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-					DseSpecification explorationDefinition) {
-		return new FailSilentAbstractTaskMappingDecoder(systemModelAdapter, explorationDefinition);
+					ExplorationSpecification expSpec) {
+		return new FailSilentAbstractTaskMappingDecoder(systemModelAdapter, expSpec);
 	}
 
 	/** {@inheritDoc} */
@@ -179,9 +178,9 @@ public class FailSilentExecModelFactory extends
 	@Override
 	public StrictTTDecoder<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding>
 			createStrictTTDecoder(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-					DseSpecification explorationDefinition) {
+					ExplorationSpecification expSpec) {
 		return new StrictTTDecoder<FailSilentTaskMappingEntry, FailSilentTaskMappingEncoding>(
-				systemModelAdapter, explorationDefinition);
+				systemModelAdapter, expSpec);
 	}
 
 	/**
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FaultDetectionVotingExecModelFactory.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FaultDetectionVotingExecModelFactory.java
index d574ff34b6c6758f02e142be8c742b61e7eff368..345f3dc3e2f5d7da888a49f435ba720bf09e8cab 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FaultDetectionVotingExecModelFactory.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/FaultDetectionVotingExecModelFactory.java
@@ -50,7 +50,6 @@ import org.fortiss.af3.exploration.model.ExplorationSpecification;
 import org.fortiss.af3.exploration.model.ExplorationTarget;
 import org.fortiss.af3.exploration.model.time.DeadlineConstraint;
 import org.fortiss.af3.exploration.model.time.PeriodConstraint;
-import org.fortiss.af3.exploration.moea.model.DseSpecification;
 import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiAllocationConstraint;
 import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiDislocationConstraint;
 import org.fortiss.af3.exploration.moea.model.predefined.FailureMinObjective;
@@ -96,10 +95,10 @@ public class FaultDetectionVotingExecModelFactory
 	@Override
 	public
 			TaskMappingCreator<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding>
-			createTaskMappingCreator(DseSpecification dse,
+			createTaskMappingCreator(ExplorationSpecification expSpec,
 					SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
 					DecoderDependencyGraph execDepGraph) {
-		return new FaultDetectionVotingTaskMappingCreator(dse, systemModelAdapter, execDepGraph);
+		return new FaultDetectionVotingTaskMappingCreator(expSpec, systemModelAdapter, execDepGraph);
 	}
 
 	/*
@@ -156,9 +155,8 @@ public class FaultDetectionVotingExecModelFactory
 			AbstractTaskMappingDecoder<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding>
 			createAbstractTaskMappingDecoder(
 					SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-					DseSpecification explorationDefinition) {
-		return new FaultDetectionVotingAbstractTaskMappingDecoder(systemModelAdapter,
-				explorationDefinition);
+					ExplorationSpecification expSpec) {
+		return new FaultDetectionVotingAbstractTaskMappingDecoder(systemModelAdapter, expSpec);
 	}
 
 	/** {@inheritDoc} */
@@ -186,9 +184,9 @@ public class FaultDetectionVotingExecModelFactory
 	public
 			StrictTTDecoder<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding>
 			createStrictTTDecoder(SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter,
-					DseSpecification explorationDefinition) {
+					ExplorationSpecification expSpec) {
 		return new StrictTTDecoder<FaultDetectionVotingTaskMappingEntry, FaultDetectionVotingTaskMappingEncoding>(
-				systemModelAdapter, explorationDefinition);
+				systemModelAdapter, expSpec);
 	}
 
 	/** {@inheritDoc} */
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java
index 26371025426126ddbe0c3bea05458ce97fc757e6..7e24ea43076d208bd47ab4430f95769a99ab19fa 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/SystemModelAdapter.java
@@ -1066,6 +1066,10 @@ public class SystemModelAdapter<C, E, S, G, TR, M> {
 	 */
 	protected boolean connectsSwHwPlatform(IConnector connector,
 			Map<IModelElement, IModelElement> invNetDriverRef) {
+		if(platformInterconnectTypes == null) {
+			return false;
+		}
+
 		if(!connectsSwHwPlatform(connector)) {
 			if(connector != null) {
 				IHierarchicElement parent = connector.getOwner();
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3SystemModelAdapter.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3SystemModelAdapter.java
index a734d77da306ecb7f3ea08c34923f99c31fbd217..c9c6aa262f08017a9f8ef67dee7cbfef989583c3 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3SystemModelAdapter.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3SystemModelAdapter.java
@@ -329,17 +329,17 @@ public class AF3SystemModelAdapter
 		for(Component currentComponent : deployableComponents) {
 			Map<IExecutionUnitAdapter<?>, Double> wcetMap =
 					new HashMap<IExecutionUnitAdapter<?>, Double>();
-			Map<IExecutionUnitAdapter<?>, Double> energyConsumptionMap =
-					new HashMap<IExecutionUnitAdapter<?>, Double>();
+			// Map<IExecutionUnitAdapter<?>, Double> energyConsumptionMap =
+			// new HashMap<IExecutionUnitAdapter<?>, Double>();
 			for(IExecutionUnitAdapter<?> execUnit : deploymentTargets) {
 				wcetMap.put(execUnit, parameterAdapter.getWcet(currentComponent, execUnit));
-				energyConsumptionMap.put(execUnit,
-						parameterAdapter.getEnergyConsumption(currentComponent, execUnit));
+				// energyConsumptionMap.put(execUnit,
+				// parameterAdapter.getEnergyConsumption(currentComponent, execUnit));
 			}
 
 			InternalComponentParameters parameterMap = new InternalComponentParameters();
 			parameterMap.setWcetMap(wcetMap);
-			parameterMap.setEnergyConsumptionMap(energyConsumptionMap);
+			// parameterMap.setEnergyConsumptionMap(energyConsumptionMap);
 			internalParameterMap.put(currentComponent, parameterMap);
 		}
 		return internalParameterMap;
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/service/IExplorationTargetEvaluator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/service/IExplorationTargetEvaluator.java
index f60bf203c38dcd8d37f08fa58df98c750f201afe..df02a6f3c9da8497a5aa8ec8c089f7bfd888cce6 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/service/IExplorationTargetEvaluator.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/service/IExplorationTargetEvaluator.java
@@ -46,10 +46,9 @@ public interface IExplorationTargetEvaluator<P, RT, S extends ExplorationTarget<
 	 * Evaluates a phenotype w.r.t. a given objective dimension
 	 * 
 	 * @param transformedModels
-	 *            TODO
 	 */
 	public Value<?> evaluateGoal(P phenotype, FlatPhenotypeMap<Phenotype> phenotypeTypeMap,
-			ClassToInstanceMap<EObject> transformedModels);
+			ClassToInstanceMap<EObject> transformedModels) throws Exception;
 
 	/** Validate if objective has been correctly specified. */
 	public boolean validateInputs() throws Exception;
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java
index c2391a6874015093eff2eca6e3461034512a44e0..d8ad13856482eece96af0f3754e887543d51c922 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/util/AF3Utils.java
@@ -505,11 +505,13 @@ public class AF3Utils {
 		Map<IModelElement, IModelElement> invElementReferences =
 				new HashMap<IModelElement, IModelElement>();
 
-		for(IModelElement referencingElement : getChildrenWithType(referencingPlatformArchitecture,
-				interPlatformConnectingElements.getFirst())) {
-			for(IModelElement referencedElement : getReferencedElementsWithType(referencingElement,
-					interPlatformConnectingElements.getSecond())) {
-				invElementReferences.put(referencedElement, referencingElement);
+		if(interPlatformConnectingElements != null) {
+			for(IModelElement referencingElement : getChildrenWithType(
+					referencingPlatformArchitecture, interPlatformConnectingElements.getFirst())) {
+				for(IModelElement referencedElement : getReferencedElementsWithType(
+						referencingElement, interPlatformConnectingElements.getSecond())) {
+					invElementReferences.put(referencedElement, referencingElement);
+				}
 			}
 		}