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 f10e6028eceaee8959ad7a998c45941c39e907e9..295541c67acd888ea5b1cda2614edc5e4434ce14 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
@@ -116,7 +116,7 @@ public class Explorer {
 
 		// Invoke the backend in order to perform the DSE
 		IExplorerBackend<? extends IOptimizer> explorerBackend =
-				createExplorerBackend(dse, expSpecCopy, targetAssocMap, systemModelAdapter,
+				createExplorerBackend(dse, expSpec, targetAssocMap, systemModelAdapter,
 						requestedSolutions, progressMonitor);
 		CompositeExplorationSolution<?> explorationResult = explorerBackend.explore();
 
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 8f8905439085e14aa15f7f66600cf147f546a2ff..673c5bd65752ad3a37329dbc468e3681b880bf5a 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
@@ -76,7 +76,18 @@ public class ImplicitExplorationTargetFactory {
 	public Collection<ExplorationConstraint<?>> createImplicitExplorationTargets(
 			ExplorationSpecification expSpec,
 			SystemModelAdapter<?, ?, ?, ?, ?, ?> systemModelAdapter) throws Exception {
-		return createPeriodConstraints(systemModelAdapter);
+		Collection<ExplorationConstraint<?>> constraints = new ArrayList<>();
+		constraints.addAll(createPeriodConstraints(systemModelAdapter));
+
+		// Reassign the ids of generated constraints. By default, they are set to 0. Each constraint
+		// needs a "unique" id for its constraint type.
+		int constrId = 0;
+		for(ExplorationConstraint<?> curConstraint : constraints) {
+			curConstraint.setId(constrId);
+			constrId++;
+		}
+
+		return constraints;
 	}
 
 	/**
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 59b13be3e1030aa51969ed6b4512e4166cf8ba6a..e4b433dfbc3e9e5c49c748b041f97b92b911b084 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
@@ -19,15 +19,12 @@ package org.fortiss.af3.exploration.alg.dse.backend;
 
 import java.util.Collection;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Set;
 
 import javax.activation.UnsupportedDataTypeException;
 
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.fortiss.af3.exploration.alg.dse.CompositeExplorationSolution;
 import org.fortiss.af3.exploration.alg.dse.DSEFactory;
-import org.fortiss.af3.exploration.alg.dse.SolutionQuantification;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.EvaluatorWrapper;
@@ -42,6 +39,7 @@ 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;
+import org.opt4j.core.Value;
 import org.opt4j.core.problem.Evaluator;
 
 /**
@@ -58,6 +56,7 @@ public abstract class ExplorerBackendBase<O extends IOptimizer> implements IExpl
 	// TODO: remove the DSE Spec. It is currently here
 	protected DseSpecification dse;
 
+	/** Contains all ExplorationTargets of the exploration. */
 	protected ExplorationSpecification expSpec;
 
 	/**
@@ -149,54 +148,40 @@ public abstract class ExplorerBackendBase<O extends IOptimizer> implements IExpl
 	 * fulfilled by applying the validate function of the {@link IConstraintEvaluator}s onto each
 	 * possible solution.
 	 */
-	protected CompositeExplorationSolution<?> validate(
-			CompositeExplorationSolution<?> explorationResult,
-			Collection<EvaluatorWrapper<?, ?, ?>> evalWrappers) {
-		CompositeExplorationSolution<?> feasibleExplorationResult = explorationResult.copy();
-
-		// Iterate over all (feasible + infeasible) solutions
-		for(Entry<IExplorationSolution<?>, SolutionQuantification> solution : explorationResult
-				.getSolutionQuantification().entrySet()) {
-			boolean isFeasible =
-					validateSolution(solution.getKey(), solution.getValue(), evalWrappers);
-
-			// Remove the current solution if the feasibility check failed.
-			if(!isFeasible) {
-				feasibleExplorationResult.deleteSolutionQuantification(solution.getKey());
-			}
-		}
-
-		return feasibleExplorationResult;
-	}
+	// protected CompositeExplorationSolution<?> validate(
+	// CompositeExplorationSolution<?> explorationResult,
+	// Collection<EvaluatorWrapper<?, ?, ?>> evalWrappers) {
+	// CompositeExplorationSolution<?> feasibleExplorationResult = explorationResult.copy();
+	//
+	// // Iterate over all (feasible + infeasible) solutions
+	// for(Entry<IExplorationSolution<?>, SolutionQuantification> solution : explorationResult
+	// .getSolutionQuantification().entrySet()) {
+	// boolean isFeasible =
+	// validateSolution(solution.getKey(), solution.getValue(), evalWrappers);
+	//
+	// // Remove the current solution if the feasibility check failed.
+	// if(!isFeasible) {
+	// feasibleExplorationResult.deleteSolutionQuantification(solution.getKey());
+	// }
+	// }
+	//
+	// return feasibleExplorationResult;
+	// }
 
 	/**  */
-	private <M extends Phenotype> boolean validateSolution(IExplorationSolution<?> solution,
-			SolutionQuantification value, Collection<EvaluatorWrapper<?, ?, ?>> evalWrappers) {
-		boolean isFeasible = true;
-
-		for(ExplorationTarget<?> expTarget : targetAssocMap.values()) {
-			if(expTarget instanceof ExplorationConstraint<?>) {
-				EvaluatorWrapper<?, ?, ?> evalWrapper = getEvaluatorOf(expTarget, evalWrappers);
-
-				assert (evalWrapper.getEvaluator() instanceof IConstraintEvaluator) : "The evaluator for the exploration constraint " +
-						expTarget.getName() +
-						" has an evaluator which is not an IConstraintEvaluator.";
-
-				@SuppressWarnings("unchecked") Class<M> phenoClass =
-						(Class<M>)evalWrapper.getTargetPhenotypeType();
-				M targetSubSolution = solution.getSubSolution(phenoClass);
-				isFeasible =
-						((IConstraintEvaluator<?, ?, ?>)evalWrapper.getEvaluator()).validate(
-								expTarget, targetSubSolution, phenoClass, value);
-
-				if(!isFeasible) {
-					// Exit if the validation fails for a single constraint.
-					break;
-				}
-			}
-		}
+	protected <M extends Phenotype> boolean validateSolution(IExplorationSolution<?> solution,
+			ExplorationConstraint target, Value<?> value,
+			Collection<EvaluatorWrapper<?, ?, ?>> evalWrappers) {
+		EvaluatorWrapper<?, ?, ?> evalWrapper = getEvaluatorOf(target, evalWrappers);
+
+		assert (evalWrapper.getEvaluator() instanceof IConstraintEvaluator) : "The evaluator for the exploration constraint " +
+				target.getName() + " has an evaluator which is not an IConstraintEvaluator.";
 
-		return isFeasible;
+		@SuppressWarnings("unchecked") Class<M> phenoClass =
+				(Class<M>)evalWrapper.getTargetPhenotypeType();
+		M targetSubSolution = solution.getSubSolution(phenoClass);
+		return ((IConstraintEvaluator<?, ?, ?>)evalWrapper.getEvaluator()).validate(target,
+				targetSubSolution, phenoClass, value);
 	}
 
 	/**
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 84d6ec943ae2f0819f5981566d409d02b1480efb..c4343025de3bdf67ed1dd95a2c73bd0f44cacf5c 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
@@ -18,10 +18,13 @@ $Id: Opt4JExplorerBackend.java 3730 2016-10-19 15:43:43Z diewald $
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j;
 
 import static org.fortiss.tooling.kernel.utils.EcoreUtils.pickFirstInstanceOf;
+import static org.fortiss.tooling.kernel.utils.EcoreUtils.pickInstanceOf;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -38,13 +41,20 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.taskins
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.operator.mutate.taskmapping.MutateTaskMappingModule;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.ArchitectureExplorationProblemModule;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.ArchitectureSolution;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.solution.IExplorationSolution;
 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.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;
 import org.fortiss.af3.exploration.moea.model.parameters.EAOptimizer;
+import org.opt4j.core.Individual;
+import org.opt4j.core.Objective;
+import org.opt4j.core.Objectives;
+import org.opt4j.core.Value;
+import org.opt4j.core.common.archive.DefaultArchive;
 import org.opt4j.core.common.completer.IndividualCompleterModule;
 import org.opt4j.core.config.Task;
 import org.opt4j.core.config.TaskStateListener;
@@ -251,9 +261,57 @@ public class Opt4JExplorerBackend extends ExplorerBackendBase<EAOptimizer> {
 			// Execute optimization
 			opt4JTask.execute();
 
+			// Collect the set objectives
+			Collection<Objective> objectiveSet = new HashSet<>();
+			for(ExplorationTarget<?> copiedExpTarget : targetAssocMap.values()) {
+				if(!(copiedExpTarget instanceof ExplorationConstraint<?>)) {
+					Objective constraintObjective =
+							archExplorationProblemModule.getObjectiveOf(copiedExpTarget);
+					objectiveSet.add(constraintObjective);
+				}
+			}
+
+			Archive archive = new DefaultArchive();
+			Archive completeArchive = opt4JTask.getInstance(Archive.class);
+
+			// Check each individual for constraint violations and only further process those which
+			// violate none.
+			Collection<Individual> feasibleIndividuals = new ArrayList<>();
+			for(Individual curIndividual : completeArchive) {
+				boolean satisfiesAllConstraints = true;
+				for(ExplorationConstraint<?> target : pickInstanceOf(ExplorationConstraint.class,
+						expSpec.getTargets())) {
+					Objective objective = archExplorationProblemModule.getObjectiveOf(target);
+					Value<?> value = curIndividual.getObjectives().get(objective);
+					if(!validateSolution((IExplorationSolution<?>)curIndividual.getPhenotype(),
+							target, value, archExplorationProblemModule.getEvaluators())) {
+						satisfiesAllConstraints = false;
+					}
+				}
+
+				if(satisfiesAllConstraints) {
+					feasibleIndividuals.add(curIndividual);
+				}
+			}
+
+			// For the final Pareto-Front calculation, consider only Objectives.
+			// Create a new archive with the same individuals that have only objective evaluations.
+			// TODO: For robust optimization, we should also consider a distance metric to the
+			// constraint's bounds.
+			for(Individual curIndividual : feasibleIndividuals) {
+				Objectives oldObjectives = curIndividual.getObjectives();
+				Objectives reducedObjectives = new Objectives();
+				for(Entry<Objective, Value<?>> singleObjective : oldObjectives) {
+					if(objectiveSet.contains(singleObjective.getKey())) {
+						reducedObjectives.add(singleObjective.getKey(), singleObjective.getValue());
+					}
+				}
+				curIndividual.setObjectives(reducedObjectives);
+				archive.update(curIndividual);
+			}
+
 			rval =
-					new Opt4JExplorationSolutionSet<ArchitectureSolution>(
-							opt4JTask.getInstance(Archive.class), targetAssocMap,
+					new Opt4JExplorationSolutionSet<ArchitectureSolution>(archive, targetAssocMap,
 							archExplorationProblemModule);
 
 			rval.setCompletedIterations(opt4JTask.getIteration());
@@ -261,9 +319,6 @@ public class Opt4JExplorerBackend extends ExplorerBackendBase<EAOptimizer> {
 		} catch(Exception e) {
 			ex = e;
 		} finally {
-			if(rval != null) {
-				rval = validate(rval, archExplorationProblemModule.getEvaluators());
-			}
 			opt4JTask.close();
 		}
 
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 b7b77d8134d7a82d630a8781f745d64c7b4aed9e..896981557941a13c5394b1670bbfce7388ea5c93 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
@@ -98,7 +98,8 @@ public class EvaluatorWrapper<P, RT, T extends ExplorationTarget<RT>> implements
 
 		String objectiveName =
 				goal.getName() == null ? goal.getClass().toString() +
-						Integer.toString(goal.getId()) : goal.getName();
+						Integer.toString(goal.getId()) : goal.getName() +
+						Integer.toString(goal.getId());
 		objective =
 				new Objective(objectiveName, direction == OptimizationDirectionEnum.MIN ? Sign.MIN
 						: Sign.MAX);
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 3cb30da70223f29060dd12e2b5563a54602ebaf2..52b61e9ad2f7d8930ec9cf2d502eb5589746dac8 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
@@ -24,7 +24,6 @@ import java.util.Collection;
 import java.util.Collections;
 
 import org.eclipse.emf.ecore.EObject;
-import org.fortiss.af3.exploration.alg.dse.SolutionQuantification;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap;
@@ -32,10 +31,12 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IDeployableComponentAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.IExecutionUnitAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.mapping.IMappingEntry;
 import org.fortiss.af3.exploration.alg.service.IExplorationTargetEvaluator;
-import org.fortiss.af3.exploration.model.ExplorationTarget;
+import org.fortiss.af3.exploration.model.ExplorationConstraint;
 import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiAllocationConstraint;
 import org.opt4j.core.DoubleValue;
+import org.opt4j.core.Value;
 
 import com.google.common.collect.ClassToInstanceMap;
 
@@ -100,10 +101,22 @@ public class ComponentMultiAllocationConstraintEvaluator<S extends InstantiatedT
 
 	/** {@inheritDoc} */
 	@Override
-	public boolean validateInternal(ExplorationTarget<?> expTarget, T solution,
-			SolutionQuantification value) {
-		// Already considered in the operators.
-		// TODO: Just to be safe: add a real check.
+	public boolean validateInternal(ExplorationConstraint<?> expTarget, T solution, Value<?> value) {
+		Collection<IMappingEntry> entries =
+				solution.getIMappingEntriesOf(systemModelAdapter
+						.getDeployableComponentOf(((ComponentMultiAllocationConstraint)expTarget)
+								.getComponent()));
+
+		if(entries.isEmpty()) {
+			return false;
+		}
+
+		for(IMappingEntry entry : entries) {
+			if(!((ComponentMultiAllocationConstraint)expTarget).getExecutionUnits().contains(
+					entry.getTarget().getObject())) {
+				return false;
+			}
+		}
 		return true;
 	}
 
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 ff8b28fddd831d027b700a7d0375bf361021ce4a..156dbc4b8bde98051b93a3cf6fddabce60e8522b 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
@@ -24,7 +24,6 @@ import java.util.Collection;
 import java.util.Collections;
 
 import org.eclipse.emf.ecore.EObject;
-import org.fortiss.af3.exploration.alg.dse.SolutionQuantification;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap;
@@ -33,9 +32,10 @@ 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.service.IExplorationTargetEvaluator;
-import org.fortiss.af3.exploration.model.ExplorationTarget;
+import org.fortiss.af3.exploration.model.ExplorationConstraint;
 import org.fortiss.af3.exploration.moea.model.predefined.ComponentMultiDislocationConstraint;
 import org.opt4j.core.DoubleValue;
+import org.opt4j.core.Value;
 
 import com.google.common.collect.ClassToInstanceMap;
 
@@ -99,8 +99,7 @@ public class ComponentMultiDislocationConstraintEvaluator<S extends Instantiated
 
 	/** {@inheritDoc} */
 	@Override
-	public boolean validateInternal(ExplorationTarget<?> expTarget, T solution,
-			SolutionQuantification value) {
+	public boolean validateInternal(ExplorationConstraint<?> expTarget, T solution, Value<?> value) {
 		// Already considered in the operators.
 		// TODO: Just to be safe: add a real check.
 		return true;
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ConstraintEvaluatorBase.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ConstraintEvaluatorBase.java
index 1ebd85173a720fcde145d76bf923f43a17c7c2b8..c679a5866b7757f819ac487b44c486162dd5a0c0 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ConstraintEvaluatorBase.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ConstraintEvaluatorBase.java
@@ -17,12 +17,11 @@ $Id: ConstraintEvaluatorBase.java 3730 2016-10-19 15:43:43Z diewald $
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.evaluator.constraint;
 
-import org.fortiss.af3.exploration.alg.dse.SolutionQuantification;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.Phenotype;
 import org.fortiss.af3.exploration.alg.dse.evaluator.ExplorationTargetEvaluatorBase;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.model.ExplorationConstraint;
-import org.fortiss.af3.exploration.model.ExplorationTarget;
+import org.opt4j.core.Value;
 import org.opt4j.core.problem.Evaluator;
 
 /**
@@ -72,8 +71,8 @@ public abstract class ConstraintEvaluatorBase<P extends Phenotype, RT, T extends
 
 	/** {@inheritDoc} */
 	@Override
-	public <M> boolean validate(ExplorationTarget<?> expTarget, M solution, Class<M> solutionType,
-			SolutionQuantification value) {
+	public <M> boolean validate(ExplorationConstraint<?> expTarget, M solution,
+			Class<M> solutionType, Value<?> value) {
 		if(!solutionType.isAssignableFrom(solution.getClass())) {
 			return false;
 		}
@@ -82,6 +81,6 @@ public abstract class ConstraintEvaluatorBase<P extends Phenotype, RT, T extends
 	}
 
 	/** Actual validation method that must be implemented by each {@link IConstraintEvaluator}. */
-	public abstract boolean validateInternal(ExplorationTarget<?> expTarget, P solution,
-			SolutionQuantification value);
+	public abstract boolean validateInternal(ExplorationConstraint<?> expTarget, P solution,
+			Value<?> value);
 }
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 467e089cae281787d18da66d4bf08ea7a8e5f874..90b05d67b5c5fd5dc21bf6a95cfb30ae1191e39e 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
@@ -25,7 +25,6 @@ import java.util.Comparator;
 import java.util.HashSet;
 
 import org.eclipse.emf.ecore.EObject;
-import org.fortiss.af3.exploration.alg.dse.SolutionQuantification;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.InstantiatedAcyclicTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry;
@@ -37,9 +36,11 @@ import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.af3.AF3SystemModelAdapter;
 import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.taskgraph.TaskGraph;
 import org.fortiss.af3.exploration.alg.service.IExplorationTargetEvaluator;
+import org.fortiss.af3.exploration.model.ExplorationConstraint;
 import org.fortiss.af3.exploration.model.ExplorationTarget;
 import org.fortiss.af3.exploration.model.time.DeadlineConstraint;
 import org.opt4j.core.DoubleValue;
+import org.opt4j.core.Value;
 
 import com.google.common.collect.ClassToInstanceMap;
 
@@ -179,10 +180,10 @@ public class DeadlineConstraintEvaluator<S extends InstantiatedTaskMappingEntry,
 
 	/** {@inheritDoc} */
 	@Override
-	public boolean validateInternal(ExplorationTarget<?> expTarget,
-			StrictTTSchedule<S, T> solution, SolutionQuantification valueSet) {
+	public boolean validateInternal(ExplorationConstraint<?> expTarget,
+			StrictTTSchedule<S, T> solution, Value<?> value) {
 		// TODO: Readd the getLimitation support or find another way to express the same.
-		Double evalValue = valueSet.getQuantificationOf(expTarget);
+		Double evalValue = value.getDouble();
 		assert (expTarget instanceof DeadlineConstraint);
 		if(evalValue > ((DeadlineConstraint)expTarget).getLimitation() - NUMERIC_IMPRECISION) {
 			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 763f616185ff3b62aace70f7633d743aa903bdeb..282adc7b01c7686d3641f83ecec67c8d5f4f49fd 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
@@ -17,9 +17,8 @@ $Id: IConstraintEvaluator.java 3404 2016-08-26 15:01:08Z diewald $
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.evaluator.constraint;
 
-import org.fortiss.af3.exploration.alg.dse.SolutionQuantification;
 import org.fortiss.af3.exploration.model.ExplorationConstraint;
-import org.fortiss.af3.exploration.model.ExplorationTarget;
+import org.opt4j.core.Value;
 import org.opt4j.core.problem.Evaluator;
 
 /**
@@ -38,6 +37,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.
 	 */
-	<M> boolean validate(ExplorationTarget<?> expTarget, M solution, Class<M> solutionType,
-			SolutionQuantification value);
+	public <M> boolean validate(ExplorationConstraint<?> expTarget, M solution,
+			Class<M> solutionType, Value<?> 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
index 3e065004f67b2528d31627953366ca170dcb79b0..c8ff2322fc32ffaa1407abc0a50884166a46680e 100644
--- 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
@@ -18,7 +18,6 @@ $Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $
 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;
@@ -97,9 +96,9 @@ public class MappingEvaluatorConstraint extends MappingEvaluator implements
 
 	/** {@inheritDoc} */
 	@Override
-	public <M> boolean validate(ExplorationTarget<?> expTarget, M solution, Class<M> solutionType,
-			SolutionQuantification value) {
-		Double evalValue = value.getQuantificationOf(expTarget);
+	public <M> boolean validate(ExplorationConstraint<?> expTarget, M solution,
+			Class<M> solutionType, Value<?> value) {
+		Double evalValue = value.getDouble();
 		if(evalValue > 0.0) {
 			return false;
 		}
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/PeriodConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/PeriodConstraintEvaluator.java
index 01137ea369dd1e1d5f0acfd8dc6641396a4bd728..eb9277a4bd171ca1cf9b490033432ef99c70dea8 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/PeriodConstraintEvaluator.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/PeriodConstraintEvaluator.java
@@ -23,7 +23,6 @@ import java.util.Collection;
 import java.util.HashSet;
 
 import org.eclipse.emf.ecore.EObject;
-import org.fortiss.af3.exploration.alg.dse.SolutionQuantification;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskgraph.InstantiatedTaskGraphEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry;
@@ -35,9 +34,11 @@ 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.dse.sysmodel.arch.taskgraph.TaskGraph;
 import org.fortiss.af3.exploration.alg.service.IExplorationTargetEvaluator;
+import org.fortiss.af3.exploration.model.ExplorationConstraint;
 import org.fortiss.af3.exploration.model.ExplorationTarget;
 import org.fortiss.af3.exploration.model.time.PeriodConstraint;
 import org.opt4j.core.DoubleValue;
+import org.opt4j.core.Value;
 
 import com.google.common.collect.ClassToInstanceMap;
 
@@ -94,7 +95,7 @@ public class PeriodConstraintEvaluator<S extends InstantiatedTaskMappingEntry, T
 			}
 		}
 
-		return new DoubleValue(retval > 0 ? pow(retval * getIterationCountAndIncrement(), 2) : 0);
+		return new DoubleValue(retval > 0 ? pow(retval, 2) : 0);
 	}
 
 	/**
@@ -132,11 +133,13 @@ public class PeriodConstraintEvaluator<S extends InstantiatedTaskMappingEntry, T
 
 	/** {@inheritDoc} */
 	@Override
-	public boolean validateInternal(ExplorationTarget<?> expTarget,
-			StrictTTSchedule<S, T> solution, SolutionQuantification valueSet) {
-		Double evalValue = valueSet.getQuantificationOf(expTarget);
+	public boolean validateInternal(ExplorationConstraint<?> expTarget,
+			StrictTTSchedule<S, T> solution, Value<?> value) {
+		Double evalValue = value.getDouble();
 		assert (expTarget instanceof PeriodConstraint);
-		if(evalValue > ((PeriodConstraint)expTarget).getLimitation() - NUMERIC_IMPRECISION) {
+		Double limit = ((PeriodConstraint)expTarget).getLimitation();
+		limit = limit == null ? 0 : limit;
+		if(evalValue > limit + NUMERIC_IMPRECISION) {
 			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 3ed3d7a05581e906b3158a1c262b6b4af8cd5698..eab6f8d1ce36cd23c759f05594447778fb123192 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
@@ -30,7 +30,6 @@ import java.util.stream.Collectors;
 import org.eclipse.emf.common.util.Enumerator;
 import org.eclipse.emf.ecore.EObject;
 import org.fortiss.af3.component.model.Component;
-import org.fortiss.af3.exploration.alg.dse.SolutionQuantification;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.FlatPhenotypeMap;
@@ -39,10 +38,11 @@ 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.service.IExplorationTargetEvaluator;
-import org.fortiss.af3.exploration.model.ExplorationTarget;
+import org.fortiss.af3.exploration.model.ExplorationConstraint;
 import org.fortiss.af3.exploration.moea.model.predefined.SafetyIntegrityLevelConstraint;
 import org.fortiss.af3.safety.model.SIL;
 import org.opt4j.core.DoubleValue;
+import org.opt4j.core.Value;
 import org.opt4j.core.problem.Evaluator;
 
 import com.google.common.collect.ClassToInstanceMap;
@@ -80,8 +80,7 @@ public class SafetyIntegrityLevelConstraintEvaluator<S extends InstantiatedTaskM
 
 	/** {@inheritDoc} */
 	@Override
-	public boolean validateInternal(ExplorationTarget<?> expTarget, T mapping,
-			SolutionQuantification valueSet) {
+	public boolean validateInternal(ExplorationConstraint<?> expTarget, T mapping, Value<?> value) {
 		Map<IDeployableComponentAdapter<?>, Collection<S>> allocationMap =
 				mapping.getAllocationMap();
 		List<IDeployableComponentAdapter<?>> silComponents = getSILComponentAdapters();
diff --git a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/util/DesignSpaceExplorationModelElementFactory.java b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/util/DesignSpaceExplorationModelElementFactory.java
index c2979440ad359bc362d7603671de19ab3226ed3b..0c6626cebdf4b757d5c8e8ff21ffe9b9893ebe31 100644
--- a/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/util/DesignSpaceExplorationModelElementFactory.java
+++ b/org.fortiss.af3.exploration.alg/master/src/org/fortiss/af3/exploration/alg/util/DesignSpaceExplorationModelElementFactory.java
@@ -19,6 +19,7 @@ package org.fortiss.af3.exploration.alg.util;
 
 import static org.fortiss.af3.exploration.util.ExplorationDslModelElementFactory.createObjectiveExpression;
 import static org.fortiss.af3.exploration.util.ExplorationDslModelElementFactory.createSummationOp;
+import static org.fortiss.tooling.kernel.utils.UniqueIDUtils.prepareUniqueID;
 
 import org.eclipse.emf.common.util.EList;
 import org.fortiss.af3.component.model.Component;
@@ -92,6 +93,7 @@ public class DesignSpaceExplorationModelElementFactory {
 		DseSpecification dse =
 				createDseSpecification("Default DSE model", ExecutionModel.TT_FAIL_SILENCE,
 						createDefaultEAOptimizer(), modelContext);
+		prepareUniqueID(dse, explManager);
 		modelContext.runAsCommand(() -> explManager.getDseSpecifications().add(dse));
 		return dse;
 	}
@@ -143,6 +145,7 @@ public class DesignSpaceExplorationModelElementFactory {
 		EnergyMinObjective energyObjective = createEnergyMinObjective();
 		ITopLevelElement modelContext =
 				IPersistencyService.getInstance().getTopLevelElementFor(targetSpec);
+		prepareUniqueID(energyObjective, targetSpec);
 		modelContext.runAsCommand(() -> targetSpec.getTargets().add(energyObjective));
 		return energyObjective;
 	}
@@ -185,6 +188,7 @@ public class DesignSpaceExplorationModelElementFactory {
 		FailureMinObjective failureMinObjective = createFailureMinObjective();
 		ITopLevelElement modelContext =
 				IPersistencyService.getInstance().getTopLevelElementFor(targetSpec);
+		prepareUniqueID(failureMinObjective, targetSpec);
 		modelContext.runAsCommand(() -> targetSpec.getTargets().add(failureMinObjective));
 		return failureMinObjective;
 	}
@@ -228,6 +232,7 @@ public class DesignSpaceExplorationModelElementFactory {
 			ExplorationSpecification targetSpec) {
 		ComponentMultiAllocationConstraint fixedDeploymentConstraint =
 				createComponentMultiAllocationConstraint();
+		prepareUniqueID(fixedDeploymentConstraint, targetSpec);
 		ITopLevelElement modelContext =
 				IPersistencyService.getInstance().getTopLevelElementFor(targetSpec);
 		modelContext.runAsCommand(() -> targetSpec.getTargets().add(fixedDeploymentConstraint));
@@ -259,6 +264,7 @@ public class DesignSpaceExplorationModelElementFactory {
 			ExplorationSpecification targetSpec) {
 		ComponentMultiDislocationConstraint multiComponentDislocationConstraint =
 				createComponentMultiDislocationConstraint();
+		prepareUniqueID(multiComponentDislocationConstraint, targetSpec);
 		ITopLevelElement modelContext =
 				IPersistencyService.getInstance().getTopLevelElementFor(targetSpec);
 		modelContext.runAsCommand(() -> targetSpec.getTargets().add(
@@ -283,6 +289,7 @@ public class DesignSpaceExplorationModelElementFactory {
 		SafetyIntegrityLevelConstraint safetyIntegrityLevelConstraint =
 				PredefinedFactory.eINSTANCE.createSafetyIntegrityLevelConstraint();
 		safetyIntegrityLevelConstraint.setName("Safety Integrity Level Constraint");
+		prepareUniqueID(safetyIntegrityLevelConstraint, targetSpec);
 		ITopLevelElement modelContext =
 				IPersistencyService.getInstance().getTopLevelElementFor(targetSpec);
 		modelContext