diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/api/ea/constraints/strategies/RepairStrategy.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/api/ea/constraints/strategies/RepairStrategy.java
new file mode 100644
index 0000000000000000000000000000000000000000..f9b5493420738592d63296b6a069709b0ab13e8d
--- /dev/null
+++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/api/ea/constraints/strategies/RepairStrategy.java
@@ -0,0 +1,16 @@
+package de.evoal.core.api.ea.constraints.strategies;
+
+import de.evoal.languages.model.instance.Instance;
+import io.jenetics.Gene;
+import io.jenetics.Phenotype;
+
+/**
+ * Repair strategy used by kill-at-birth.
+ * @param <G>
+ * @param <C>
+ */
+public interface RepairStrategy<G extends Gene<?, G>, C extends Comparable<? super C>> {
+     public Phenotype<G,C> apply(Phenotype<G,C> individual, long generation);
+
+    RepairStrategy init(final Instance configuration);
+}
diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/JeneticsConstraintProducer.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/JeneticsConstraintProducer.java
index 28ab5ec485e2bf8355ad0ca83e1f63e3039617cf..cacd3c567f3fb6b307b07e084d10eb806c03c121 100644
--- a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/JeneticsConstraintProducer.java
+++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/JeneticsConstraintProducer.java
@@ -1,14 +1,17 @@
 package de.evoal.core.main.ea.constraints.constraint.strategies.constraint;
 
 import de.evoal.core.api.cdi.BeanFactory;
+import de.evoal.core.api.ea.constraints.calculation.CalculationStrategy;
 import de.evoal.core.api.ea.constraints.model.Constraint;
 import de.evoal.core.api.ea.constraints.model.Constraints;
 import de.evoal.core.api.ea.constraints.calculation.CalculationFactory;
 import de.evoal.core.api.board.BlackboardEntry;
 import de.evoal.core.api.cdi.ConfigurationValue;
 import de.evoal.core.api.ea.codec.CustomCodec;
+import de.evoal.core.api.ea.constraints.strategies.RepairStrategy;
 import de.evoal.core.api.ea.fitness.FitnessFunction;
 import de.evoal.core.api.properties.PropertiesSpecification;
+import de.evoal.core.api.utils.LanguageHelper;
 import de.evoal.core.main.ea.constraints.constraint.utils.ConfigurationUtils;
 import de.evoal.languages.model.instance.*;
 import org.apache.deltaspike.core.api.provider.BeanProvider;
@@ -18,6 +21,7 @@ import javax.enterprise.inject.Produces;
 import javax.inject.Named;
 
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @ApplicationScoped
@@ -33,14 +37,23 @@ public class JeneticsConstraintProducer {
 
         // collect group information to handle
         final List<Instance> groups = ConfigurationUtils.findConstraintHandlerByHandlingStrategy(handlerConfigurations, "kill-at-birth");
-        final Set<String> allGroups = groups.stream().map(i -> (String)((LiteralValue)i.findAttribute("category").getValue()).getLiteral().getValue()).collect(Collectors.toSet());
+        final Map<String, Instance> configurationMap = groups.stream().collect(Collectors.toMap(i -> (String)((LiteralValue)i.findAttribute("category").getValue()).getLiteral().getValue(), Function.identity()));
         final List<Constraint> listOfConstraints = constraints.getConstraints();
 
+
         return listOfConstraints
                     .stream()
-                    .filter(c -> allGroups.contains(c.getGroup()))
-                    .map(factory::create)
-                    .map(s -> new JeneticsConstraintStrategy(s, codec, function, optimizationSpec, new RandomGenotypeStrategy()))
+                    .filter(c -> configurationMap.keySet().contains(c.getGroup()))
+                    .map(s -> {
+                        final Instance handlerConfiguration = configurationMap.get(s.getGroup());
+                        final Instance repairConfiguration = LanguageHelper.lookup(handlerConfiguration, "constraint-handling.repair-strategy");
+
+                        final CalculationStrategy cStrategy = factory.create(s);
+                        final RepairStrategy rStrategy = BeanFactory.create(repairConfiguration.getName().getName(), RepairStrategy.class)
+                                                                    .init(repairConfiguration);
+
+                        return new JeneticsConstraintStrategy(cStrategy, codec, function, optimizationSpec, rStrategy);
+                    })
                     .collect(Collectors.toList());
     }
 }
diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/JeneticsConstraintStrategy.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/JeneticsConstraintStrategy.java
index 85388f55e65d2da3c6d61f2f840ffb87c69914d5..30672a6db8d7d86cfa80230ac97ac7f07d7a0ce0 100644
--- a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/JeneticsConstraintStrategy.java
+++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/JeneticsConstraintStrategy.java
@@ -3,6 +3,7 @@ package de.evoal.core.main.ea.constraints.constraint.strategies.constraint;
 import de.evoal.core.api.ea.constraints.calculation.CalculationStrategy;
 import de.evoal.core.api.ea.constraints.strategies.HandlingStrategy;
 import de.evoal.core.api.ea.codec.CustomCodec;
+import de.evoal.core.api.ea.constraints.strategies.RepairStrategy;
 import de.evoal.core.api.ea.fitness.FitnessFunction;
 import de.evoal.core.api.properties.Properties;
 import de.evoal.core.api.properties.PropertiesSpecification;
diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/RandomGenotypeStrategy.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/RandomGenotypeStrategy.java
index 2ea8f5f815681a7ce45e72ed02343a06b5c2bd5e..ea28d1f90cedd0b0eaf0222cdf207985e697d095 100644
--- a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/RandomGenotypeStrategy.java
+++ b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/RandomGenotypeStrategy.java
@@ -1,9 +1,16 @@
 package de.evoal.core.main.ea.constraints.constraint.strategies.constraint;
 
+import de.evoal.core.api.ea.constraints.strategies.RepairStrategy;
+import de.evoal.languages.model.instance.Instance;
 import io.jenetics.Gene;
 import io.jenetics.Genotype;
 import io.jenetics.Phenotype;
 
+import javax.enterprise.context.Dependent;
+import javax.inject.Named;
+
+@Dependent
+@Named("repair-with-random")
 public class RandomGenotypeStrategy<G extends Gene<?, G>, C extends Comparable<? super C>> implements RepairStrategy<G, C> {
     @Override
     public Phenotype apply(final Phenotype<G, C> individual, long generation) {
@@ -11,4 +18,9 @@ public class RandomGenotypeStrategy<G extends Gene<?, G>, C extends Comparable<?
 
         return Phenotype.of(newInstance, generation);
     }
+
+    @Override
+    public RepairStrategy init(Instance configuration) {
+        return null;
+    }
 }
diff --git a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/RepairStrategy.java b/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/RepairStrategy.java
deleted file mode 100644
index 425036ccc59157063d12322089eb5c4c70370488..0000000000000000000000000000000000000000
--- a/src/core/de.evoal.core/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/RepairStrategy.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package de.evoal.core.main.ea.constraints.constraint.strategies.constraint;
-
-import io.jenetics.Gene;
-import io.jenetics.Phenotype;
-
-public interface RepairStrategy<G extends Gene<?, G>, C extends Comparable<? super C>> {
-     public Phenotype<G,C> apply(Phenotype<G,C> individual, long generation);
-}
diff --git a/src/core/de.evoal.core/src/main/java/module-info.java b/src/core/de.evoal.core/src/main/java/module-info.java
index 511c8a70777d34b152c662d5958a36cc8d70048d..43401de0c3edfc1d2b4cda3962de1e3a840be4e2 100644
--- a/src/core/de.evoal.core/src/main/java/module-info.java
+++ b/src/core/de.evoal.core/src/main/java/module-info.java
@@ -94,4 +94,5 @@ module de.evoal.core {
     opens de.evoal.core.api.ea.correlations to weld.core.impl;
     opens de.evoal.core.api.ea.constraints.calculation to weld.core.impl;
     opens de.evoal.core.api.properties.info to weld.core.impl;
+    opens de.evoal.core.api.ea.constraints.strategies to weld.core.impl;
 }
diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/TrainingRepairStrategy.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/TrainingRepairStrategy.java
new file mode 100644
index 0000000000000000000000000000000000000000..33a89c136bb822b1e5b0f5e76710cc42f5a44223
--- /dev/null
+++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/TrainingRepairStrategy.java
@@ -0,0 +1,82 @@
+package de.evoal.surrogate.main.ea;
+
+import de.evoal.core.api.board.Blackboard;
+import de.evoal.core.api.ea.codec.CustomCodec;
+import de.evoal.core.api.ea.constraints.strategies.RepairStrategy;
+import de.evoal.core.api.properties.Properties;
+import de.evoal.core.api.properties.PropertiesSpecification;
+import de.evoal.core.api.properties.stream.FileBasedPropertiesStreamSupplier;
+import de.evoal.core.api.properties.stream.PropertiesStreamSupplier;
+import de.evoal.languages.model.instance.Instance;
+import de.evoal.surrogate.api.SurrogateBlackboardEntry;
+import io.jenetics.Gene;
+import io.jenetics.Genotype;
+import io.jenetics.Phenotype;
+import io.jenetics.util.ISeq;
+import io.jenetics.util.RandomRegistry;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.annotation.PostConstruct;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.inject.Named;
+import java.io.File;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Dependent
+@Named("repair-with-training")
+@Slf4j
+public class TrainingRepairStrategy<G extends Gene<?, G>, C extends Comparable<? super C>> implements RepairStrategy<G, C> {
+    @Inject
+    private Blackboard board;
+
+    @Inject
+    private CustomCodec codec;
+
+    @Inject
+    @Named("genotype-specification")
+    private PropertiesSpecification sourceSpecification;
+
+    @Inject
+    @Named("surrogate-target-properties-specification")
+    private PropertiesSpecification targetSpecification;
+
+    private List<Properties> trainingData;
+
+    @Override
+    public RepairStrategy init(final Instance configuration) {
+        final String filename = board.get(SurrogateBlackboardEntry.SURROGATE_TRAINING_DATA_FILE);
+        final File trainingFile = new File(filename);
+
+        log.info("Using training data from {} for population.", filename);
+
+        final PropertiesSpecification totalSpecification =
+                PropertiesSpecification.builder()
+                        .add(sourceSpecification)
+                        .add(targetSpecification)
+                        .build();
+
+        final PropertiesStreamSupplier stream = new FileBasedPropertiesStreamSupplier(trainingFile, totalSpecification);
+
+        trainingData =  stream
+                .apply(totalSpecification)
+                .map(p -> new Properties(sourceSpecification).putAll(p))
+                .unordered()
+                .collect(Collectors.toList());
+
+        return this;
+    }
+
+
+    @Override
+    public Phenotype apply(final Phenotype<G, C> individual, long generation) {
+        int index = RandomRegistry.random()
+                                  .nextInt(0, trainingData.size());
+
+
+        final Genotype<G> newInstance = codec.encode(trainingData.get(index));
+
+        return Phenotype.of(newInstance, generation);
+    }
+}