diff --git a/org.fortiss.af3.exploration.alg/trunk/model/moea.ecore b/org.fortiss.af3.exploration.alg/trunk/model/moea.ecore
index deaa938beee729e071e2e604add78b6a0cdb0ef6..099cf6fd45522f4b427d21f6bca28ec493e36c35 100644
--- a/org.fortiss.af3.exploration.alg/trunk/model/moea.ecore
+++ b/org.fortiss.af3.exploration.alg/trunk/model/moea.ecore
@@ -373,5 +373,10 @@
         <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDoubleObject"/>
       </eGenericSuperTypes>
     </eClassifiers>
+    <eClassifiers xsi:type="ecore:EClass" name="SameSilInPartitionConstraint">
+      <eGenericSuperTypes eClassifier="ecore:EClass platform:/resource/org.fortiss.af3.exploration/model/exploration.ecore#//ExplorationConstraint">
+        <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDoubleObject"/>
+      </eGenericSuperTypes>
+    </eClassifiers>
   </eSubpackages>
 </ecore:EPackage>
diff --git a/org.fortiss.af3.exploration.alg/trunk/model/moea.genmodel b/org.fortiss.af3.exploration.alg/trunk/model/moea.genmodel
index e7b653e7fd63aaec8d2fbe82b88323277751dc3a..ba106c86ef8c122fe4dcf9eda2f701f78212aba2 100644
--- a/org.fortiss.af3.exploration.alg/trunk/model/moea.genmodel
+++ b/org.fortiss.af3.exploration.alg/trunk/model/moea.genmodel
@@ -119,6 +119,7 @@
         <genTypeParameters ecoreTypeParameter="moea.ecore#//predefined/SafetyComparison/T"/>
       </genClasses>
       <genClasses ecoreClass="moea.ecore#//predefined/NoEmptyPartitionConstraint"/>
+      <genClasses ecoreClass="moea.ecore#//predefined/SameSilInPartitionConstraint"/>
     </nestedGenPackages>
   </genPackages>
 </genmodel:GenModel>
diff --git a/org.fortiss.af3.exploration.alg/trunk/plugin.xml b/org.fortiss.af3.exploration.alg/trunk/plugin.xml
index 37eedf75e878ff238a6674438b802e9201975f3f..4337d6a40fb718928c3bfeb0917daae52e183e57 100644
--- a/org.fortiss.af3.exploration.alg/trunk/plugin.xml
+++ b/org.fortiss.af3.exploration.alg/trunk/plugin.xml
@@ -267,7 +267,13 @@
       <evaluator
             module="org.fortiss.af3.exploration.alg.dse.evaluator.constraint.NoEmptyPartitionConstraintEvaluator">
          <modelElementClass
-               modelElementClass="org.fortiss.af3.exploration.model.ExplorationConstraint">
+               modelElementClass="org.fortiss.af3.exploration.moea.model.predefined.NoEmptyPartitionConstraint">
+         </modelElementClass>
+      </evaluator>
+      <evaluator
+            module="org.fortiss.af3.exploration.alg.dse.evaluator.constraint.SameSilInPartitionConstraintEvaluator">
+         <modelElementClass
+               modelElementClass="org.fortiss.af3.exploration.moea.model.predefined.SameSilInPartitionConstraint">
          </modelElementClass>
       </evaluator>
       <evaluator
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/.ratings
index 66e9ccf83a50dcbbfc94ef67ad9bc814a6617c5a..08035aab4f6d654cecb53e128dbd550023890788 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/.ratings
@@ -1,6 +1,6 @@
 CompositeExplorationSolution.java c35b0b0cf5658300b5e8c4f2cc9e217c29ae37a3 RED
 DSEFactory.java 0a2f2cc6a197e760c1f8223339ffa5f16856b184 RED
 Explorer.java 2194a74cbe51ca9e7dafb008dcefb51a54064dc8 RED
-ImplicitExplorationTargetFactory.java e45c6c3344b46a275e2c74b5c714900229f5f8d3 RED
+ImplicitExplorationTargetFactory.java 6c16c6712886b549dda0a73aef4a4c3fe18c1850 RED
 SolutionQuantification.java efd31f192c3adbf1a4434452a19eb836a17390e2 RED
 TaskMappingFactory.java 5e41df9d45e338dbcfa95bc3818ca17774951893 RED
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 5e0cedafb0e14a9f8b6ecd67a15678423c2bdee7..25c3c668ed268843f8af7e37eb03370ed513b482 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,6 +75,7 @@ public class ImplicitExplorationTargetFactory {
 		Collection<ExplorationConstraint<?>> constraints = new ArrayList<>();
 		// constraints.addAll(createPeriodConstraints(systemModelAdapter));
 		constraints.add(createNoEmptyPartitionConstraint());
+		constraints.add(createSameSilInPartitionConstraint());
 
 		// Reassign the ids of generated constraints. By default, they are set to 0. Each constraint
 		// needs a "unique" id for its constraint type.
@@ -95,6 +96,11 @@ public class ImplicitExplorationTargetFactory {
 		return PredefinedFactory.eINSTANCE.createNoEmptyPartitionConstraint();
 	}
 
+	/** Creates a single constraint that states a partition may only host tasks with the same SIL. */
+	private static ExplorationConstraint<?> createSameSilInPartitionConstraint() {
+		return PredefinedFactory.eINSTANCE.createSameSilInPartitionConstraint();
+	}
+
 	/**
 	 * Creates a {@link PeriodConstraint} for each {@link TaskGraph} present in the
 	 * {@link SystemModelAdapter}.
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/.ratings
index eaa395c52e8efeaf9ca96d72100478cca5356a6d..eaab550c897663de709b8b1800691fcee3e5c3eb 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/.ratings
@@ -7,3 +7,4 @@ MappingEvaluatorConstraint.java f1f44bffbef03f1650a7f026428423838b16b845 RED
 NoEmptyPartitionConstraintEvaluator.java 33f7b4215b2ada1e60474e9385150a9ea234b060 YELLOW
 PeriodConstraintEvaluator.java 05cf21be06c9ae12593f870efdf9c358efa2d97c RED
 SafetyIntegrityLevelConstraintEvaluator.java 9ad7129faaa35d89af4fced7a7121a0a142cb6f1 RED
+SameSilInPartitionConstraintEvaluator.java 9f30f5731fb64b73ab2c50868026e9d1af05beb5 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/SameSilInPartitionConstraintEvaluator.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/SameSilInPartitionConstraintEvaluator.java
new file mode 100644
index 0000000000000000000000000000000000000000..0c371e2a153c275656f52540eb12ec91030cb1fc
--- /dev/null
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/evaluator/constraint/SameSilInPartitionConstraintEvaluator.java
@@ -0,0 +1,121 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2018 fortiss GmbH                                              |
+|                                                                          |
+| Licensed under the Apache License, Version 2.0 (the "License");          |
+| you may not use this file except in compliance with the License.         |
+| You may obtain a copy of the License at                                  |
+|                                                                          |
+|    http://www.apache.org/licenses/LICENSE-2.0                            |
+|                                                                          |
+| Unless required by applicable law or agreed to in writing, software      |
+| distributed under the License is distributed on an "AS IS" BASIS,        |
+| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+| See the License for the specific language governing permissions and      |
+| limitations under the License.                                           |
++--------------------------------------------------------------------------*/
+package org.fortiss.af3.exploration.alg.dse.evaluator.constraint;
+
+import static java.lang.Math.abs;
+import static java.lang.Math.expm1;
+import static org.fortiss.tooling.common.util.LambdaUtils.getFirst;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Optional;
+
+import org.eclipse.emf.ecore.EObject;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.partitionmapping.Partition;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.TaskMappingEncoding;
+import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.taskmapping.instantiatedmapping.InstantiatedTaskMappingEntry;
+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.ITaskAdapter;
+import org.fortiss.af3.exploration.alg.dse.sysmodel.arch.SystemModelAdapter;
+import org.fortiss.af3.exploration.alg.service.IExplorationTargetEvaluator;
+import org.fortiss.af3.exploration.model.ExplorationConstraint;
+import org.fortiss.af3.exploration.moea.model.predefined.SameSilInPartitionConstraint;
+import org.opt4j.core.DoubleValue;
+import org.opt4j.core.Value;
+
+import com.google.common.collect.ClassToInstanceMap;
+
+/**
+ * Evaluates whether all {@link ITaskAdapter}s mapped to {@link Partition}s have the same
+ * SIL/ASIL/DAL value and calculates a penality based on the difference in the Integrity Levels of
+ * the tasks.
+ * 
+ * @author diewald
+ */
+public class SameSilInPartitionConstraintEvaluator
+		extends
+		ConstraintEvaluatorBase<TaskMappingEncoding<ITaskAdapter<?>, InstantiatedTaskMappingEntry>, Double, SameSilInPartitionConstraint> {
+
+	/** {@inheritDoc} */
+	@Override
+	public Value<?> evaluateGoal(
+			TaskMappingEncoding<ITaskAdapter<?>, InstantiatedTaskMappingEntry> phenotype,
+			FlatPhenotypeMap<Phenotype> phenotypeTypeMap,
+			ClassToInstanceMap<EObject> transformedModels) throws Exception {
+		double resVal = 0.0;
+		for(Partition partition : phenotype.getResources()) {
+			// FIXME: remove casts by specifying the TaskMapping.
+			Collection<ITaskAdapter<?>> allocatedTasks = phenotype.getRequesters(partition);
+			Optional<ITaskAdapter<?>> anyTask = getFirst(allocatedTasks);
+			if(!anyTask.isPresent()) {
+				continue;
+			}
+
+			int derivationSum = 0;
+			int firstSilVal = anyTask.get().getRequiredSafetyIntegrityLevel().getValue();
+			for(ITaskAdapter<?> task : allocatedTasks) {
+				int currentSilVal = task.getRequiredSafetyIntegrityLevel().getValue();
+				derivationSum += abs(firstSilVal - currentSilVal);
+			}
+
+			// TODO: Will the evaluator perform more efficiently if the penalty function is
+			// calculated over the sum of violation of partitions, or (as it is now) a sum over the
+			// penalties per partition mismatch.
+			resVal += expm1(derivationSum);
+		}
+		System.out.println("ResVal: " + resVal);
+		return new DoubleValue(resVal);
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public boolean validateInputs() throws Exception {
+		return true;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Collection<Class<?>> getRequiredInputTypes() {
+		Collection<Class<?>> inputs = new ArrayList<>();
+		inputs.add(TaskMappingEncoding.class);
+		return inputs;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Class<?> getPrimaryInputType() {
+		return TaskMappingEncoding.class;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public
+			IExplorationTargetEvaluator<TaskMappingEncoding<ITaskAdapter<?>, InstantiatedTaskMappingEntry>, Double, SameSilInPartitionConstraint>
+			createEvaluator(SystemModelAdapter<?, ?, ?, ?, ?, ?, ?> systemModelAdapter,
+					SameSilInPartitionConstraint explorationTarget) throws Exception {
+		return new SameSilInPartitionConstraintEvaluator();
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public boolean validateInternal(ExplorationConstraint<?> expTarget,
+			TaskMappingEncoding<ITaskAdapter<?>, InstantiatedTaskMappingEntry> solution,
+			Value<?> value) {
+		return value.getDouble() <= 10e-6;
+	}
+
+}
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/.ratings
index ca703dc54a8ac9ec360e9bdfa238b8c71be54cb9..2a9765d66a13181280faa6a05665018dcfa712fd 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/.ratings
@@ -9,5 +9,5 @@ AF3ResourceAdapter.java 00070d4e3ec7f19a672b6295c546fa1d30d7fc50 RED
 AF3ResourceConnectionAdapter.java 0e791fd7d9602f4cf00f54c6254d31f1c9cc72b0 RED
 AF3SignalAdapter.java bc102b65b929393808eb747572f9ae05b04a8856 RED
 AF3SystemModelAdapter.java e6ea1aaae3c4867cfc38487d7534e847794fdb82 RED
-AF3TaskAdapter.java ac021d7af31888d89d1cb58ec64bf7f551da160b RED
+AF3TaskAdapter.java e59896eeb0a268435075474947a51fa0689df554 RED
 AF3TransmissionUnitAdapter.java 0ce1a08c29d75a05fb49668d02abddd852487a4c RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3TaskAdapter.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3TaskAdapter.java
index dc745b260ba28a63b1ed5fec59f776d789f7af57..4ee4e1bcf1f4780f0a4f069d1a0bcf177a241dc7 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3TaskAdapter.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/sysmodel/arch/af3/AF3TaskAdapter.java
@@ -66,8 +66,8 @@ public class AF3TaskAdapter extends AF3RequestAdapter<Task> implements ITaskAdap
 	private Collection<ITaskAdapter<Component>> replacementComponents;
 
 	/**
-	 * "Trace" to the {@link ITaskAdapter} which {@code this}
-	 * {@link ITaskAdapter} replaced (if applicable).
+	 * "Trace" to the {@link ITaskAdapter} which {@code this} {@link ITaskAdapter} replaced (if
+	 * applicable).
 	 */
 	private ITaskAdapter<Component> replacedComponent;
 
@@ -89,7 +89,7 @@ public class AF3TaskAdapter extends AF3RequestAdapter<Task> implements ITaskAdap
 					"A non-specified period value and negative periods are not allowed.");
 		}
 		period = af3Period.doubleValue();
-		sil = getAnnotationChecked(af3Task, SafetyIntegrityLevel.class);
+		sil = getAnnotationChecked(af3Component, SafetyIntegrityLevel.class);
 		ReplicationBounds replicationSpec = getAnnotationChecked(af3Task, ReplicationBounds.class);
 		minReplication = replicationSpec.getMinReplication();
 		maxReplication = replicationSpec.getMaxReplication();