diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/Explorer.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/Explorer.java
index 8486fe164e1a73a80cd2b63414e867d0d8fe9846..db516fc3ba5ba26cc7985c9c4f8449a63055f213 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/Explorer.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/Explorer.java
@@ -115,7 +115,7 @@ public class Explorer {
 
 		// Invoke the backend in order to perform the DSE
 		IExplorerBackend<? extends IOptimizer> explorerBackend =
-				createExplorerBackend(dseSpec, targetAssocMap, systemModelAdapter,
+				createExplorerBackend(dseSpec, expSpec, targetAssocMap, systemModelAdapter,
 						requestedSolutions, progressMonitor);
 		CompositeExplorationSolution<?> explorationResult = explorerBackend.explore();
 
@@ -226,12 +226,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/trunk/src/org/fortiss/af3/exploration/alg/dse/ImplicitExplorationTargetFactory.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/ImplicitExplorationTargetFactory.java
index 9249e534e86bc271dab1540368e08010c75661e8..872073681a9e2b0dd3e1b9ef70ff2bcce2ea80ec 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/ImplicitExplorationTargetFactory.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/ImplicitExplorationTargetFactory.java
@@ -75,7 +75,18 @@ public class ImplicitExplorationTargetFactory {
 	public Collection<ExplorationConstraint<?>> createImplicitExplorationTargets(
 			DseSpecification dse, 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/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/ExplorerBackendBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/ExplorerBackendBase.java
index 475c1acfb748502f4093050f9feada591b7c89e4..802ae0db00b014fa2c6b4e222892e5c92e4cb47c 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/ExplorerBackendBase.java
+++ b/org.fortiss.af3.exploration.alg/trunk/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;
@@ -38,9 +35,11 @@ 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;
+import org.opt4j.core.Value;
 import org.opt4j.core.problem.Evaluator;
 
 /**
@@ -56,6 +55,9 @@ public abstract class ExplorerBackendBase<O extends IOptimizer> implements IExpl
 	/** DSE specification (optimizer parameters, goal specification, input model, ...) */
 	protected DseSpecification dse;
 
+	/** Contains all ExplorationTargets of the exploration. */
+	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 +86,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;
@@ -144,54 +147,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/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java
index de04cd42bea7e931f2964a8c28938879fd83c958..aaf7084367441623ae8f1091d044470f14fde97a 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/Opt4JExplorerBackend.java
@@ -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,12 +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;
@@ -85,13 +96,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());
@@ -250,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());
@@ -260,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/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/EvaluatorWrapper.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/EvaluatorWrapper.java
index 0484806a18676ac48fe0b3e8fe5b8d73a723ceff..30f4a285ab185ad7b0aee1d1e238727c721dd063 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/EvaluatorWrapper.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/EvaluatorWrapper.java
@@ -78,7 +78,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/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiAllocationConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiAllocationConstraintEvaluator.java
index 6ca9f70d4e8c60ca0ac71696d347f3ab4e948cae..cea44e06cd10cf6a6303411ff903adfb8c3c990d 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiAllocationConstraintEvaluator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiAllocationConstraintEvaluator.java
@@ -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;
@@ -34,9 +33,10 @@ 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;
 
@@ -106,9 +106,7 @@ public class ComponentMultiAllocationConstraintEvaluator<S extends InstantiatedT
 
 	/** {@inheritDoc} */
 	@Override
-	public boolean validateInternal(ExplorationTarget<?> expTarget, T solution,
-			SolutionQuantification value) {
-
+	public boolean validateInternal(ExplorationConstraint<?> expTarget, T solution, Value<?> value) {
 		Collection<IMappingEntry> entries =
 				solution.getIMappingEntriesOf(systemModelAdapter
 						.getDeployableComponentOf(((ComponentMultiAllocationConstraint)expTarget)
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiDislocationConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiDislocationConstraintEvaluator.java
index 566971566c94c9d5021e0931ccfc3dfccb509dcb..67c64458419c04be9269f453ebdca25f805a9324 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ComponentMultiDislocationConstraintEvaluator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/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/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ConstraintEvaluatorBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ConstraintEvaluatorBase.java
index 1ebd85173a720fcde145d76bf923f43a17c7c2b8..c679a5866b7757f819ac487b44c486162dd5a0c0 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/ConstraintEvaluatorBase.java
+++ b/org.fortiss.af3.exploration.alg/trunk/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/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/DeadlineConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/DeadlineConstraintEvaluator.java
index bab0cb327f0dd4bebea3683d2afddf7270fc57ac..fee990f60622912966ba7b6757e94dc049d4cb29 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/DeadlineConstraintEvaluator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/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/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/IConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/IConstraintEvaluator.java
index a134841e8f8f1dcf165c4c66cace1c025ef0de32..282adc7b01c7686d3641f83ecec67c8d5f4f49fd 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/IConstraintEvaluator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/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.
 	 */
-	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);
 }
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/PeriodConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/PeriodConstraintEvaluator.java
index 01137ea369dd1e1d5f0acfd8dc6641396a4bd728..eb9277a4bd171ca1cf9b490033432ef99c70dea8 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/PeriodConstraintEvaluator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/PeriodConstraintEvaluator.java
@@ -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/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/SafetyIntegrityLevelConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/SafetyIntegrityLevelConstraintEvaluator.java
index 76f760564706568e91fe569bfc45b061bb57e69e..c60ecf607b517e15d9c66e7a484283b8ecadcccc 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/SafetyIntegrityLevelConstraintEvaluator.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/SafetyIntegrityLevelConstraintEvaluator.java
@@ -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/trunk/src/org/fortiss/af3/exploration/alg/util/DesignSpaceExplorationModelElementFactory.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/DesignSpaceExplorationModelElementFactory.java
index c2979440ad359bc362d7603671de19ab3226ed3b..0c6626cebdf4b757d5c8e8ff21ffe9b9893ebe31 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/util/DesignSpaceExplorationModelElementFactory.java
+++ b/org.fortiss.af3.exploration.alg/trunk/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