diff --git a/src/core/de.evoal.core.main/scripts/run-print-help.sh b/src/core/de.evoal.core.main/scripts/run-print-help.sh
new file mode 100755
index 0000000000000000000000000000000000000000..c52ac853b3ea152f2b353424f2cf3039d43fc37c
--- /dev/null
+++ b/src/core/de.evoal.core.main/scripts/run-print-help.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+source $( cd -- "$(dirname $0)/" >/dev/null 2>&1 ; pwd -P)/paths.env
+
+if [ "$#" -ne 0 ]; then
+    echo "Usage: $0"
+    exit 1
+fi
+
+cd $1
+
+set -x
+java $CLASSPATH
\ No newline at end of file
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/BlackboardEntries.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/BlackboardEntries.java
new file mode 100644
index 0000000000000000000000000000000000000000..4476c50d3cd40e031261672e88ffde6f8a4e561b
--- /dev/null
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/BlackboardEntries.java
@@ -0,0 +1,7 @@
+package de.evoal.core.api.board;
+
+/**
+ * Base interface for classes declaring commandline parameters.
+ */
+public interface BlackboardEntries {
+}
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/BlackboardEntry.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/BlackboardEntry.java
index 9d6acdf147280bc970cab21840bd7dab6500b346..abaf5d5d271e704f834b7cd6fd8e5ef75266e2bd 100644
--- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/BlackboardEntry.java
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/BlackboardEntry.java
@@ -1,52 +1,8 @@
 package de.evoal.core.api.board;
 
-public final class BlackboardEntry {
-
-    /**
-     * The target properties to search for.
-     */
-    public static final String TARGET_PROPERTIES = "core:target-properties";
-
-    /**
-     * Folder containing the constraint files.
-     */
-    public static final String CONSTRAINT_FOLDER = "core:constraint-folder";
-
-    /**
-     * Number of evaluation runs.
-     */
-    public static final String EVALUATION_ITERATIONS = "core:evaluation-iterations";
-
-    /**
-     * The evaluation run number.
-     */
-    public static final String EVALUATION_RUN = "core:evaluation-run";
-
-    /**
-     * The actual output folder for the evaluation.
-     */
-    public static final String EVALUATION_OUTPUT_FOLDER = "core:evaluation-output-folder";
-
-    /**
-     * The heuristic configuration.
-     */
-    public static final String OPTIMISATION_CONFIGURATION = "core:optimisation-configuration";
-
-    /**
-     * The file containing the ea configuration.
-     */
-    public static final String OPTIMISATION_CONFIGURATION_FILE = "core:optimisation-configuration-file";
-
-    /**
-     * Name of the main to run.
-     */
-    public static final String MAIN = "core:main";
-
-    /**
-     * File containing targets for evaluation.
-     */
-    public static final String TARGET_POINTS_FILE = "core:target-points-file";
+import de.evoal.core.api.cdi.Commandline;
 
+public final class BlackboardEntry {
     private final String label;
 
     private BlackboardEntry(final String label) {
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/CoreBlackboardEntries.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/CoreBlackboardEntries.java
new file mode 100644
index 0000000000000000000000000000000000000000..e665ecf7677a328f5f5578fa2c9a7ecbf443f1a6
--- /dev/null
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/CoreBlackboardEntries.java
@@ -0,0 +1,60 @@
+package de.evoal.core.api.board;
+
+import de.evoal.core.api.cdi.Commandline;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Named;
+
+@ApplicationScoped
+@Named("core-entries")
+public class CoreBlackboardEntries implements BlackboardEntries {
+
+    /**
+     * The target properties to search for.
+     */
+    public static final String TARGET_PROPERTIES = "core:target-properties";
+
+    /**
+     * Folder containing the constraint files.
+     */
+    public static final String CONSTRAINT_FOLDER = "core:constraint-folder";
+
+    /**
+     * Number of evaluation runs.
+     */
+    @Commandline(main = "heuristic-search", name = "core:evaluation-iterations", doc = "Number of iterations to run the search.")
+    public static final String EVALUATION_ITERATIONS = "core:evaluation-iterations";
+
+    /**
+     * The evaluation run number.
+     */
+    public static final String EVALUATION_RUN = "core:evaluation-run";
+
+    /**
+     * The actual output folder for the evaluation.
+     */
+    @Commandline(main = "heuristic-search", name = "core:evaluation-output-folder", doc = "Folder to write the results to.")
+    public static final String EVALUATION_OUTPUT_FOLDER = "core:evaluation-output-folder";
+
+    /**
+     * The heuristic configuration.
+     */
+    public static final String OPTIMISATION_CONFIGURATION = "core:optimisation-configuration";
+
+    /**
+     * The file containing the ea configuration.
+     */
+    @Commandline(main = "heuristic-search", name = "core:optimisation-configuration", doc = "Optimisation configuration to use.")
+    public static final String OPTIMISATION_CONFIGURATION_FILE = "core:optimisation-configuration-file";
+
+    /**
+     * Name of the main to run.
+     */
+    public static final String MAIN = "core:main";
+
+    /**
+     * File containing targets for evaluation.
+     */
+    @Commandline(main="heuristic-search-evaluation", name = "core:target-points-file", doc = "A file containing the targets to use for evaluation.")
+    public static final String TARGET_POINTS_FILE = "core:target-points-file";
+}
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/Application.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/Application.java
new file mode 100644
index 0000000000000000000000000000000000000000..72076d76971f070b37d43b6796988ffd54b2f2f6
--- /dev/null
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/Application.java
@@ -0,0 +1,19 @@
+package de.evoal.core.api.cdi;
+
+import javax.enterprise.util.Nonbinding;
+import javax.inject.Qualifier;
+import java.lang.annotation.*;
+
+/**
+ * Annotation for documenting main classes.
+ */
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Qualifier
+@Target({ElementType.TYPE})
+public @interface Application {
+    /**
+     * @return The documentation.
+     */
+    public @Nonbinding String value();
+}
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/Commandline.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/Commandline.java
new file mode 100644
index 0000000000000000000000000000000000000000..c4840cd247d456650d4da2b919fa737b5472f6b4
--- /dev/null
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/Commandline.java
@@ -0,0 +1,29 @@
+package de.evoal.core.api.cdi;
+
+import javax.enterprise.util.Nonbinding;
+import javax.inject.Qualifier;
+import java.lang.annotation.*;
+
+/**
+ * Annotation for documenting main classes.
+ */
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Qualifier
+@Target({ElementType.FIELD})
+public @interface Commandline {
+    /**
+     * @return The application that accept this parameter.
+     */
+    public @Nonbinding String main();
+
+    /**
+     * @return Parameter name.
+     */
+    public @Nonbinding String name();
+
+    /**
+     * @return The documentation.
+     */
+    public @Nonbinding String doc();
+}
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/MainClass.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/MainClass.java
index 27cbbf65793326a5b31880b220fbdc3a841051e5..486826d586fdd7de51ae101b2f0405dc976d1698 100644
--- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/MainClass.java
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/MainClass.java
@@ -4,6 +4,9 @@ package de.evoal.core.api.cdi;
  * Base interface for all main classes. A main class must be annotated using the
  * {@link javax.inject.Named} annotation, which can be used on the command line
  * to select the main class to execute.
+ *
+ * Additionally, you should add a {@link Application} annotation to your main class
+ * to allow EvoAl to print some documentation for the user.
  */
 public interface MainClass {
     /**
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/calculation/CalculationFactory.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/calculation/CalculationFactory.java
index 8a469f160d0a8a7e5e575aaaaebb1553ec8646d2..51ec56767a84b7ebb8578f06b90e24e708f317b0 100644
--- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/calculation/CalculationFactory.java
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/constraints/calculation/CalculationFactory.java
@@ -1,7 +1,7 @@
 package de.evoal.core.api.ea.constraints.calculation;
 
 import de.evoal.core.api.ea.constraints.model.Constraint;
-import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
 import de.evoal.core.api.cdi.ConfigurationValue;
 import javax.enterprise.context.ApplicationScoped;
 
@@ -19,7 +19,7 @@ public class CalculationFactory {
     private final Map<String, Instance> calculationConfigurationByCategory = new HashMap<>();
 
     @Inject
-    public CalculationFactory(final @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.handlers") Array handlerConfigurations) {
+    public CalculationFactory(final @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.handlers") Array handlerConfigurations) {
         handlerConfigurations.getValues()
                              .stream()
                              .map(Instance.class::cast)
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/Evoal.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/Evoal.java
index 5d9da60baebeab9c5b0158efee56a7a2b811f0a6..3680d20b4334a471d4b02b53f0a993015cfc118c 100644
--- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/Evoal.java
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/Evoal.java
@@ -1,7 +1,10 @@
 package de.evoal.core.main;
 
 import de.evoal.core.api.board.Blackboard;
-import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.BlackboardEntries;
+import de.evoal.core.api.board.CoreBlackboardEntries;
+import de.evoal.core.api.cdi.Application;
+import de.evoal.core.api.cdi.Commandline;
 import de.evoal.core.api.cdi.MainClass;
 import javax.enterprise.context.ApplicationScoped;
 import javax.enterprise.inject.spi.Bean;
@@ -11,7 +14,8 @@ import org.apache.deltaspike.cdise.api.CdiContainer;
 import org.apache.deltaspike.cdise.api.CdiContainerLoader;
 import org.apache.deltaspike.core.api.provider.BeanProvider;
 
-import java.util.Set;
+import java.lang.reflect.Field;
+import java.util.*;
 
 /**
  * Main class for EvoAl. The concrete runtime behaviour depends on the used blackboard
@@ -27,34 +31,103 @@ public final class Evoal {
         cdiContainer.boot();
         cdiContainer.getContextControl().startContext(ApplicationScoped.class);
 
-        log.info("Setting up black board");
-        final Blackboard board = BeanProvider.getContextualReference(Blackboard.class);
-        board.readArguments(args);
-
-        log.info("Fetching main class and handing over control");
-        try {
-            final String mainName = board.get(BlackboardEntry.MAIN);
-            MainClass main = null;
+        if(args.length == 0) {
+            printUsage();
+        } else {
+            log.info("Setting up black board");
+            final Blackboard board = BeanProvider.getContextualReference(Blackboard.class);
+            board.readArguments(args);
 
+            log.info("Fetching main class and handing over control");
             try {
-                main = BeanProvider.getContextualReference(mainName, false, MainClass.class);
-            } catch(final Throwable e) {
-                logMainError(e);
-                System.exit(1);
-            }
+                final String mainName = board.get(CoreBlackboardEntries.MAIN);
+                MainClass main = null;
 
-            main.run();
-        } catch (final Throwable e) {
-            log.error("Main class threw an exception.", e);
-        }
+                try {
+                    main = BeanProvider.getContextualReference(mainName, false, MainClass.class);
+                } catch (final Throwable e) {
+                    logMainError(e);
+                    System.exit(1);
+                }
 
+                main.run();
+            } catch (final Throwable e) {
+                log.error("Main class threw an exception.", e);
+            }
+        }
+        
         log.info("Shutting down CDI container");
         cdiContainer.shutdown();
     }
 
+    private static void printUsage() {
+        System.out.println();
+        System.out.println();
+        System.out.println("EvoAl is a launcher application for different functions.");
+        System.out.println("  To invoke EvoAl correctly, you first have to specify the function you want to");
+        System.out.println("  use and the necessary parameters. All parameters are passed by using the -B ");
+        System.out.println("  switch, e.g., '-Bcore:main=heuristic-search'. The part after the -B specifies");
+        System.out.println("  the parameter name and the corresponding value is given after the equals sign.");
+        System.out.println("  Your EvoAl installation supports the following functions and parameters:");
+        System.out.println();
+
+        final Set<Bean<BlackboardEntries>> entriesBeans = BeanProvider.getBeanDefinitions(BlackboardEntries.class, true, true);
+        final Map<String, List<Commandline>> parameters = new HashMap<>();
+
+        for(final Bean<BlackboardEntries> bean : entriesBeans) {
+            final Class<?> clazz = bean.getBeanClass();
+            for(final Field field : clazz.getDeclaredFields()) {
+                if(!field.isAnnotationPresent(Commandline.class)) {
+                    continue;
+                }
+
+                final Commandline annotation = field.getAnnotation(Commandline.class);
+
+                parameters.putIfAbsent(annotation.main(), new LinkedList<>());
+                final List<Commandline> annotations = parameters.get(annotation.main());
+                annotations.add(annotation);
+            }
+        }
+
+        final Set<Bean<MainClass>> beans = BeanProvider.getBeanDefinitions(MainClass.class, true, true);
+        for(final Bean<MainClass> bean : beans) {
+            System.out.println();
+            System.out.println("--------------------------------------------------------------------------------");
+            System.out.println("  -Bcore:main=" + bean.getName());
+            if(bean.getBeanClass().isAnnotationPresent(Application.class)) {
+                printIntended(4, bean.getBeanClass().getAnnotation(Application.class).value());
+            }
+
+            final List<Commandline> annotations = parameters.getOrDefault(bean.getName(), new LinkedList<>());
+            for(final Commandline annotation : annotations) {
+                System.out.println();
+                System.out.println("    -B" + annotation.name() + "=");
+                printIntended(6, annotation.doc());
+            }
+        }
+
+        final List<Commandline> annotations = parameters.getOrDefault("", new LinkedList<>());
+        if(annotations != null) {
+            System.out.println();
+            System.out.println("--------------------------------------------------------------------------------");
+            System.out.println("  General parameters:");
+            for(final Commandline annotation : annotations) {
+                System.out.println("    " + annotation.name() + ":");
+                printIntended(6, annotation.doc());
+                System.out.println();
+            }
+        }
+    }
+
+    private static void printIntended(final int nmrWhitespaces, final String text) {
+        for(final String part : text.split("\\r?\\n")) {
+            System.out.println(" ".repeat(nmrWhitespaces) + part);
+        }
+    }
+
     private static void logMainError(final Throwable e) {
         log.error("Filed to create main.", e);
-        log.error("Name of main class was not set correctly. Please specify the main class via command line (-B{}=<name>).", BlackboardEntry.MAIN);
+        log.error("Name of main class was not set correctly. Please specify the main class via command line (-B{}=<name>).", CoreBlackboardEntries.MAIN);
         Set<Bean<MainClass>> beans = BeanProvider.getBeanDefinitions(MainClass.class, true, true);
         log.error("  possible names are:");
 
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/DynamicCodecProducer.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/DynamicCodecProducer.java
index a6722b7da4706c1250e3a13981e3d7cc4b977907..bd7eec67b605969700a4862a35225f1802d7de7d 100644
--- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/DynamicCodecProducer.java
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/codec/DynamicCodecProducer.java
@@ -1,6 +1,6 @@
 package de.evoal.core.main.ea.codec;
 
-import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
 import de.evoal.core.api.cdi.ConfigurationValue;
 import de.evoal.core.api.properties.PropertiesSpecification;
 import de.evoal.languages.model.instance.Array;
@@ -14,7 +14,7 @@ import javax.inject.Named;
 @Slf4j
 public class DynamicCodecProducer {
     @Produces @ApplicationScoped
-    public DynamicCodec create(@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.genotype") Array config, final @Named("genotype-specification") PropertiesSpecification specification) {
+    public DynamicCodec create(@ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.genotype") Array config, final @Named("genotype-specification") PropertiesSpecification specification) {
         log.info("Creating encoding for EA problem.");
 
         return DynamicCodec.from(config, specification);
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/ConstraintProducer.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/ConstraintProducer.java
index d6b6faf8f6fd787311d0aa8a4e08bf5950757f4d..c80303fc8ddb3b8dd541c8af130c5e1197eb4e2d 100644
--- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/ConstraintProducer.java
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/ConstraintProducer.java
@@ -1,6 +1,6 @@
 package de.evoal.core.main.ea.constraints.constraint;
 
-import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
 import de.evoal.core.api.cdi.ConfigurationValue;
 import de.evoal.core.api.ea.constraints.model.Constraint;
 import de.evoal.core.api.ea.constraints.model.Constraints;
@@ -34,7 +34,7 @@ public class ConstraintProducer {
     @ApplicationScoped
     public Constraints create(final DataConstraints constraints,
                               @Named("genotype-specification") final PropertiesSpecification genoSpec,
-                              @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.fitness") final Instance fitnessConfig) {
+                              @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.fitness") final Instance fitnessConfig) {
         this.genoSpec = genoSpec;
         this.fitnessSpec = toInnerSpecification(fitnessConfig);
 
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/JeneticsConstraintProducer.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/JeneticsConstraintProducer.java
index 372d920fc8d453d484694216ebe95ae18355e9f2..8f8338dd0d4c28f0d6d2d78eaa2123840119dc59 100644
--- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/JeneticsConstraintProducer.java
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/constraint/JeneticsConstraintProducer.java
@@ -5,7 +5,7 @@ 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.board.CoreBlackboardEntries;
 import de.evoal.core.api.cdi.ConfigurationValue;
 import de.evoal.core.api.ea.codec.CustomCodec;
 import de.evoal.core.api.ea.constraints.strategies.RepairStrategy;
@@ -27,7 +27,7 @@ import java.util.stream.Collectors;
 public class JeneticsConstraintProducer {
     @Produces
     public List<io.jenetics.engine.Constraint> create(
-            final @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.handlers") Array handlerConfigurations,
+            final @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.handlers") Array handlerConfigurations,
             final @Named("optimization-function-output") PropertiesSpecification optimizationSpec,
             final @Named("optimization-function")  FitnessFunction function,
             final CustomCodec codec,
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/fitness/MalusFunctionProducer.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/fitness/MalusFunctionProducer.java
index 9a35f09308b59537aab8ba630b2a623c50af1157..57371661129f4e54c8ad43c95cbc89ec50f20d91 100644
--- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/fitness/MalusFunctionProducer.java
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/constraints/constraint/strategies/fitness/MalusFunctionProducer.java
@@ -8,7 +8,7 @@ import de.evoal.core.api.properties.info.PropertiesDependencies;
 import de.evoal.core.api.utils.LanguageHelper;
 import de.evoal.core.api.ea.constraints.calculation.CalculationFactory;
 import de.evoal.core.api.ea.constraints.calculation.CalculationStrategy;
-import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
 import de.evoal.core.api.cdi.ConfigurationValue;
 import de.evoal.core.api.properties.PropertiesSpecification;
 import de.evoal.core.api.properties.PropertySpecification;
@@ -28,7 +28,7 @@ import java.util.stream.Collectors;
 public class MalusFunctionProducer {
     @ApplicationScoped @Produces
     public MalusForFitnessStrategy create(
-            final @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.handlers") Array handlers,
+            final @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.handlers") Array handlers,
             final @Named("optimization-function-input") PropertiesSpecification source,
             final @Named("optimization-function-output") PropertiesSpecification target,
             final @Named("output-dependencies") PropertiesDependencies dependencies,
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/fitness/DistanceFitness.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/fitness/DistanceFitness.java
index 550348bea9f6572917fa4b090923830e57db3a3e..d7cc3febb98ba5dabe5afcb834206c92dd90f074 100644
--- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/fitness/DistanceFitness.java
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/fitness/DistanceFitness.java
@@ -1,7 +1,7 @@
 package de.evoal.core.main.ea.fitness;
 
 import de.evoal.core.api.board.Blackboard;
-import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
 import de.evoal.core.api.ea.fitness.FitnessDecorator;
 import de.evoal.core.api.ea.fitness.FitnessFunction;
 import de.evoal.core.api.properties.Properties;
@@ -53,11 +53,11 @@ public class DistanceFitness extends FitnessDecorator {
         final Attribute target = config.findAttribute("target");
 
         if(target == null) {
-            this.target = board.get(BlackboardEntry.TARGET_PROPERTIES);
+            this.target = board.get(CoreBlackboardEntries.TARGET_PROPERTIES);
         } else {
             this.target = toProperties((Array)target.getValue());
             log.info("Binding target properties based on information found in MLL to {}.", this.target);
-            board.bind(BlackboardEntry.TARGET_PROPERTIES, this.target);
+            board.bind(CoreBlackboardEntries.TARGET_PROPERTIES, this.target);
         }
 
         return this;
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/fitness/FitnessFactory.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/fitness/FitnessFactory.java
index aff9fa010f8126726171f96a46b1f9d8f58af9dc..2c71a22f04c89aabb10047ae3fba11de7cee7b39 100644
--- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/fitness/FitnessFactory.java
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/fitness/FitnessFactory.java
@@ -1,6 +1,6 @@
 package de.evoal.core.main.ea.fitness;
 
-import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
 import de.evoal.core.api.cdi.ConfigurationValue;
 
 import javax.enterprise.context.ApplicationScoped;
@@ -27,12 +27,12 @@ public class FitnessFactory {
 	 * Creates a fitness function based on the heuristic configuration.<br/>
 	 * Blackboard slots used:
 	 * <ul>
-	 *   <li>{@link BlackboardEntry#OPTIMISATION_CONFIGURATION}.</li>
+	 *   <li>{@link CoreBlackboardEntries#OPTIMISATION_CONFIGURATION}.</li>
 	 * </ul>
 	 */
 	@Produces @Dependent
-	public JeneticsFitnessFunction create(final @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.fitness") Instance fitnessConfig,
-										  final @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.comparator") Instance comparatorConfig) {
+	public JeneticsFitnessFunction create(final @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.fitness") Instance fitnessConfig,
+										  final @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.comparator") Instance comparatorConfig) {
 		final String fitnessName = fitnessConfig.getName().getName();
 		final String comparatorName = comparatorConfig.getName().getName();
 
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/initial/InitialPopulationFactory.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/initial/InitialPopulationFactory.java
index c2301d5f6a85414aad661bde2a42310dbe1144ac..1d94bd30ce208993e90bcd73032d6cd6d2d10124 100644
--- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/initial/InitialPopulationFactory.java
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/initial/InitialPopulationFactory.java
@@ -1,6 +1,6 @@
 package de.evoal.core.main.ea.initial;
 
-import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
 import de.evoal.core.api.cdi.BeanFactory;
 import de.evoal.core.api.cdi.ConfigurationValue;
 import de.evoal.core.api.ea.initial.InitialPopulation;
@@ -15,7 +15,7 @@ import javax.inject.Named;
 public class InitialPopulationFactory {
 
 	@Inject
-	@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.initialization")
+	@ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.initialization")
 	private Instance initialization;
 
 	/**
@@ -23,7 +23,7 @@ public class InitialPopulationFactory {
 	 *
 	 * Blackboard slots used:
 	 * <ul>
-	 *   <li>{@link BlackboardEntry#OPTIMISATION_CONFIGURATION}.</li>
+	 *   <li>{@link CoreBlackboardEntries#OPTIMISATION_CONFIGURATION}.</li>
 	 * </ul>
 	 */
 	@Produces @Dependent @Named("initial")
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/initial/RandomProducer.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/initial/RandomProducer.java
index 9999352bab4c05aaa4b23bcc6201e9bffbe19313..168407850ea77deca4ae5dcfdbca5bccaaf7b929 100644
--- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/initial/RandomProducer.java
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/initial/RandomProducer.java
@@ -1,6 +1,6 @@
 package de.evoal.core.main.ea.initial;
 
-import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
 import de.evoal.core.api.cdi.BeanFactory;
 import de.evoal.core.api.cdi.ConfigurationValue;
 import de.evoal.core.api.ea.initial.InitialPopulation;
@@ -20,7 +20,7 @@ public class RandomProducer {
     @Produces
     @Dependent
     @Named("random")
-    public InitialPopulation create(@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.initialization") Instance initialization) {
+    public InitialPopulation create(@ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.initialization") Instance initialization) {
         final InitialPopulation population = new RandomInitialPopulation();
         BeanFactory.injectFields(population);
         population.init(initialization);
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/producer/OptimizingFunctionProducer.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/producer/OptimizingFunctionProducer.java
index 2828b828c05fa858014a2fdb38387d62fa707a96..7c30c047373cc6f879b3a3133503b6fa6f7c0e28 100644
--- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/producer/OptimizingFunctionProducer.java
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/producer/OptimizingFunctionProducer.java
@@ -1,6 +1,6 @@
 package de.evoal.core.main.ea.producer;
 
-import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
 import de.evoal.core.api.cdi.ConfigurationValue;
 import de.evoal.core.api.ea.fitness.FitnessFunction;
 import de.evoal.core.api.properties.PropertiesSpecification;
@@ -27,7 +27,7 @@ public class OptimizingFunctionProducer {
     @Produces
     @ApplicationScoped
     @Named("optimization-function-configuration")
-    public Instance find(final @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.fitness") Instance fitnessConfiguration) {
+    public Instance find(final @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.fitness") Instance fitnessConfiguration) {
         return findInner(fitnessConfiguration);
     }
 
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/producer/SelectorFactory.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/producer/SelectorFactory.java
index 3241b26f36bd1d04bcffddb55631a67d830ce080..ffbf125bce1dadf70c72bb36f010b625f8d18487 100644
--- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/producer/SelectorFactory.java
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/producer/SelectorFactory.java
@@ -1,6 +1,6 @@
 package de.evoal.core.main.ea.producer;
 
-import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
 import de.evoal.core.api.cdi.ConfigurationValue;
 import de.evoal.core.api.utils.LanguageHelper;
 import de.evoal.languages.model.instance.Instance;
@@ -16,15 +16,15 @@ public class SelectorFactory {
 	@Produces
 	@Named("survivor")
 	public Selector createSurvivorSelector(
-			@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.selectors.survivor.name") final String name,
-			@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.selectors.survivor") Instance config) {
+			@ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.selectors.survivor.name") final String name,
+			@ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.selectors.survivor") Instance config) {
 		return create(name, config);
 	}
 
 	@Produces @Named("offspring")
 	public Selector createOffspringSelector(
-			@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.selectors.offspring.name") final String name,
-			@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.selectors.offspring") Instance config) {
+			@ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.selectors.offspring.name") final String name,
+			@ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.selectors.offspring") Instance config) {
 		return create(name, config);
 	}
 
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/search/EvolutionaryAlgorithmSearch.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/search/EvolutionaryAlgorithmSearch.java
index cae627713a052002052fb2d2a9f5d7518b6247e3..e0030e8d7ec3cafb852a5eae793a16bf25dc24d2 100644
--- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/search/EvolutionaryAlgorithmSearch.java
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/ea/search/EvolutionaryAlgorithmSearch.java
@@ -6,7 +6,7 @@ import java.util.*;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
-import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
 import de.evoal.core.api.board.Blackboard;
 import de.evoal.core.api.cdi.BlackboardValue;
 import de.evoal.core.api.cdi.ConfigurationValue;
@@ -47,30 +47,30 @@ public class EvolutionaryAlgorithmSearch implements OptimisationAlgorithm {
 	 * Location for storing the output.
 	 */
 	@Inject
-	@BlackboardValue(BlackboardEntry.EVALUATION_OUTPUT_FOLDER)
+	@BlackboardValue(CoreBlackboardEntries.EVALUATION_OUTPUT_FOLDER)
 	private File outputDirectory;
 
 	/**
 	 * The actual run
 	 */
 	@Inject
-	@BlackboardValue(BlackboardEntry.EVALUATION_RUN)
+	@BlackboardValue(CoreBlackboardEntries.EVALUATION_RUN)
 	private String run;
 
 	@Inject
-	@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.number-of-generations")
+	@ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.number-of-generations")
 	private int numberOfGenerations;
 
 	@Inject
-	@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.size-of-population")
+	@ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.size-of-population")
 	private int sizeOfPopulation;
 
 	@Inject
-	@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.maximize")
+	@ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.maximize")
 	private Boolean maximize;
 
 	@Inject
-	@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.maximum-age")
+	@ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.maximum-age")
 	private int maximumAge;
 
 	private final Map<String, List<Alterer<?, FitnessValue>>> alterers = new HashMap<>();
@@ -141,7 +141,7 @@ public class EvolutionaryAlgorithmSearch implements OptimisationAlgorithm {
 	}
 
 	private void setup() {
-		final OptimisationModel configuration = board.get(BlackboardEntry.OPTIMISATION_CONFIGURATION);
+		final OptimisationModel configuration = board.get(CoreBlackboardEntries.OPTIMISATION_CONFIGURATION);
 
 		final de.evoal.languages.model.instance.Instance alterers = LanguageHelper.lookup(configuration.getInstance(), "algorithm.alterers");
 
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/BlackboardValueProducer.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/BlackboardValueProducer.java
index 9537e98a66980a67fa7020120053f546c2c76cc4..0cd81e996e39a8a91c038f2c78c6279d3f956cb8 100644
--- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/BlackboardValueProducer.java
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/BlackboardValueProducer.java
@@ -2,7 +2,7 @@ package de.evoal.core.main.producer;
 
 import de.evoal.core.api.cdi.BlackboardValue;
 import de.evoal.core.api.board.Blackboard;
-import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
 import de.evoal.core.api.properties.Properties;
 import de.evoal.core.api.properties.PropertiesSpecification;
 import javax.enterprise.context.ApplicationScoped;
@@ -15,7 +15,7 @@ import java.util.Map;
 @ApplicationScoped
 public class BlackboardValueProducer {
     @Produces
-    @BlackboardValue(BlackboardEntry.OPTIMISATION_CONFIGURATION)
+    @BlackboardValue(CoreBlackboardEntries.OPTIMISATION_CONFIGURATION)
     public Integer injectIntegerValue(final InjectionPoint ip, final Blackboard board) {
         final BlackboardValue value = ip.getAnnotated().getAnnotation(BlackboardValue.class);
         final Object result = board.get(value.value());
@@ -30,7 +30,7 @@ public class BlackboardValueProducer {
     }
 
     @Produces
-    @BlackboardValue(BlackboardEntry.OPTIMISATION_CONFIGURATION)
+    @BlackboardValue(CoreBlackboardEntries.OPTIMISATION_CONFIGURATION)
     public String injectStringValue(final InjectionPoint ip, final Blackboard board) {
         final BlackboardValue value = ip.getAnnotated().getAnnotation(BlackboardValue.class);
         final Object result = board.get(value.value());
@@ -39,7 +39,7 @@ public class BlackboardValueProducer {
     }
 
     @Produces
-    @BlackboardValue(BlackboardEntry.OPTIMISATION_CONFIGURATION)
+    @BlackboardValue(CoreBlackboardEntries.OPTIMISATION_CONFIGURATION)
     public File injectFileValue(final InjectionPoint ip, final Blackboard board) {
         final BlackboardValue value = ip.getAnnotated().getAnnotation(BlackboardValue.class);
         final Object result = board.get(value.value());
@@ -47,7 +47,7 @@ public class BlackboardValueProducer {
     }
 
     @Produces
-    @BlackboardValue(BlackboardEntry.OPTIMISATION_CONFIGURATION)
+    @BlackboardValue(CoreBlackboardEntries.OPTIMISATION_CONFIGURATION)
     public Map<String, Object> injectMapValue(final InjectionPoint ip, final Blackboard board) {
         final BlackboardValue value = ip.getAnnotated().getAnnotation(BlackboardValue.class);
 
@@ -55,7 +55,7 @@ public class BlackboardValueProducer {
     }
 
     @Produces
-    @BlackboardValue(BlackboardEntry.OPTIMISATION_CONFIGURATION)
+    @BlackboardValue(CoreBlackboardEntries.OPTIMISATION_CONFIGURATION)
     public PropertiesSpecification injectPropertiesSpecification(final InjectionPoint ip, final Blackboard board) {
         final BlackboardValue value = ip.getAnnotated().getAnnotation(BlackboardValue.class);
 
@@ -63,7 +63,7 @@ public class BlackboardValueProducer {
     }
 
     @Produces
-    @BlackboardValue(BlackboardEntry.OPTIMISATION_CONFIGURATION)
+    @BlackboardValue(CoreBlackboardEntries.OPTIMISATION_CONFIGURATION)
     public Properties injectProperties(final InjectionPoint ip, final Blackboard board) {
         final BlackboardValue value = ip.getAnnotated().getAnnotation(BlackboardValue.class);
 
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/ConfigurationValueProducer.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/ConfigurationValueProducer.java
index a3a90dba42b285deaf7dfe49694618b9e404792a..ffe4d141c9262387bbfc896d7eaded23e847a5e6 100644
--- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/ConfigurationValueProducer.java
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/ConfigurationValueProducer.java
@@ -1,7 +1,7 @@
 package de.evoal.core.main.producer;
 
 import de.evoal.core.api.board.Blackboard;
-import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
 import de.evoal.core.api.cdi.ConfigurationValue;
 import de.evoal.core.api.utils.LanguageHelper;
 import de.evoal.languages.model.ol.OptimisationModel;
@@ -19,7 +19,7 @@ import javax.enterprise.inject.spi.InjectionPoint;
 @Slf4j
 public class ConfigurationValueProducer {
     @Produces
-    @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "")
+    @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "")
     public Integer injectIntegerValue(final InjectionPoint ip, final Blackboard board) {
         final ConfigurationValue value = ip.getAnnotated().getAnnotation(ConfigurationValue.class);
 
@@ -27,7 +27,7 @@ public class ConfigurationValueProducer {
     }
 
     @Produces
-    @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "")
+    @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "")
     public Double injectDoubleValue(final InjectionPoint ip, final Blackboard board) {
         final ConfigurationValue value = ip.getAnnotated().getAnnotation(ConfigurationValue.class);
 
@@ -35,7 +35,7 @@ public class ConfigurationValueProducer {
     }
 
     @Produces
-    @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "")
+    @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "")
     public String injectStringValue(final InjectionPoint ip, final Blackboard board) {
         final ConfigurationValue value = ip.getAnnotated().getAnnotation(ConfigurationValue.class);
 
@@ -43,7 +43,7 @@ public class ConfigurationValueProducer {
     }
 
     @Produces
-    @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "")
+    @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "")
     public final Array injectArrayValue(final InjectionPoint ip, final Blackboard board) {
         final ConfigurationValue value = ip.getAnnotated().getAnnotation(ConfigurationValue.class);
 
@@ -51,7 +51,7 @@ public class ConfigurationValueProducer {
     }
 
     @Produces
-    @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "")
+    @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "")
     public final Instance injectInstanceValue(final InjectionPoint ip, final Blackboard board) {
         final ConfigurationValue value = ip.getAnnotated().getAnnotation(ConfigurationValue.class);
 
@@ -59,7 +59,7 @@ public class ConfigurationValueProducer {
     }
 
     @Produces
-    @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "")
+    @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "")
     public Boolean injectBooleanValue(final InjectionPoint ip, final Blackboard board) {
         final ConfigurationValue value = ip.getAnnotated().getAnnotation(ConfigurationValue.class);
 
@@ -67,7 +67,7 @@ public class ConfigurationValueProducer {
     }
     
     @Produces
-    @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "")
+    @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "")
     public double [] injectDoubleArrayValue(final InjectionPoint ip, final Blackboard board) {
         final ConfigurationValue value = ip.getAnnotated().getAnnotation(ConfigurationValue.class);
 
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/OptimisationModelLoader.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/OptimisationModelLoader.java
index cf7612674e695629f9586c7f2247fe7d172b1d07..091a8a20d57f4df3517859f65bb2a818cbdc1714 100644
--- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/OptimisationModelLoader.java
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/OptimisationModelLoader.java
@@ -3,6 +3,7 @@ package de.evoal.core.main.producer;
 import com.google.inject.Injector;
 import de.evoal.core.api.board.Blackboard;
 import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
 import javax.enterprise.context.ApplicationScoped;
 import javax.enterprise.context.Dependent;
 import javax.enterprise.event.Observes;
@@ -31,11 +32,11 @@ public class OptimisationModelLoader {
     private OptimisationModel model;
 
     public void load(final @Observes BlackboardEntry entry) {
-        if(!entry.isSame(BlackboardEntry.OPTIMISATION_CONFIGURATION_FILE)) {
+        if(!entry.isSame(CoreBlackboardEntries.OPTIMISATION_CONFIGURATION_FILE)) {
             return;
         }
 
-        final String configurationFileName = board.get(BlackboardEntry.OPTIMISATION_CONFIGURATION_FILE);
+        final String configurationFileName = board.get(CoreBlackboardEntries.OPTIMISATION_CONFIGURATION_FILE);
         log.info("Loading optimisation configuration from {}.",  configurationFileName);
 
         final File configurationFile = new File(configurationFileName);
@@ -81,7 +82,7 @@ public class OptimisationModelLoader {
             }
 
             model = (OptimisationModel) resource.getContents().get(0);
-            board.bind(BlackboardEntry.OPTIMISATION_CONFIGURATION, model);
+            board.bind(CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, model);
         } catch (final Exception e) {
             log.error("Unable to load optimisation configuration file '{}'.", configurationFile, e);
          }
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/SpecificationProducer.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/SpecificationProducer.java
index b21bea72011b03eac9159c91ce5f7ecca3190c7a..faf31bd308b230f574d61b83ae94d6d0669a62f9 100644
--- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/SpecificationProducer.java
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/producer/SpecificationProducer.java
@@ -1,6 +1,6 @@
 package de.evoal.core.main.producer;
 
-import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
 import de.evoal.core.api.cdi.ConfigurationValue;
 import de.evoal.core.api.properties.PropertiesSpecification;
 import de.evoal.languages.model.ddl.DataDescription;
@@ -21,7 +21,7 @@ public class SpecificationProducer {
     @Produces
     @Dependent
     @Named("genotype-description")
-    public List<DataDescription> createSourceSpecification(final @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.genotype") Array genotype) {
+    public List<DataDescription> createSourceSpecification(final @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.genotype") Array genotype) {
         final List<DataDescription> descriptors = genotype.getValues()
                 .stream()
                 .map(Instance.class::cast)
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/search/HeuristicSearchEvaluation.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/search/HeuristicSearchEvaluation.java
index 189f6d099944f06ca03b8ae9d09a3e1666d1aaa4..e83f4c0288059998f7ba7ba262bdb1ce00f262be 100644
--- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/search/HeuristicSearchEvaluation.java
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/search/HeuristicSearchEvaluation.java
@@ -1,6 +1,7 @@
 package de.evoal.core.main.search;
 
-import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
+import de.evoal.core.api.cdi.Application;
 import de.evoal.core.api.cdi.BeanFactory;
 import de.evoal.core.api.cdi.BlackboardValue;
 import de.evoal.core.api.cdi.MainClass;
@@ -24,7 +25,13 @@ import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 @Slf4j
-@Named("evaluation")
+@Application("""
+Evaluates a heuristic search using multiple targets.
+
+Each target is searched for 'core:evaluation-iterations' times to allow a
+proper empirical evaluation. 
+""")
+@Named("heuristic-search-evaluation")
 @ApplicationScoped
 public class HeuristicSearchEvaluation implements MainClass {
     @Inject
@@ -34,11 +41,11 @@ public class HeuristicSearchEvaluation implements MainClass {
     private WriterContext context;
 
     @Inject
-    @BlackboardValue(BlackboardEntry.OPTIMISATION_CONFIGURATION_FILE)
+    @BlackboardValue(CoreBlackboardEntries.OPTIMISATION_CONFIGURATION_FILE)
     private String heuristicFile;
 
     @Inject
-    @BlackboardValue(BlackboardEntry.EVALUATION_ITERATIONS)
+    @BlackboardValue(CoreBlackboardEntries.EVALUATION_ITERATIONS)
     private int iterations;
 
     private File outputBaseDir;
@@ -46,7 +53,7 @@ public class HeuristicSearchEvaluation implements MainClass {
     private List<Pair<Properties, Properties>> targets;
 
     @Inject
-    @BlackboardValue(BlackboardEntry.TARGET_POINTS_FILE)
+    @BlackboardValue(CoreBlackboardEntries.TARGET_POINTS_FILE)
     private String targetFile;
 
     @Inject
@@ -64,7 +71,7 @@ public class HeuristicSearchEvaluation implements MainClass {
         log.info("  running {} iterations.", iterations);
 
         /* prepare output directory */
-        this.outputBaseDir = new File(board.<String>get(BlackboardEntry.EVALUATION_OUTPUT_FOLDER));
+        this.outputBaseDir = new File(board.<String>get(CoreBlackboardEntries.EVALUATION_OUTPUT_FOLDER));
 
         targets = targetStream.collect(Collectors.toList());
 
@@ -93,15 +100,15 @@ public class HeuristicSearchEvaluation implements MainClass {
         context.bindColumn(targetColumn, targetIndex);
 
 //        board.bind(BlackboardEntry.TARGET_PROPERTIES_SOURCE, target.getFirst());
-        board.bind(BlackboardEntry.TARGET_PROPERTIES, target.getSecond());
-        board.bind(BlackboardEntry.EVALUATION_OUTPUT_FOLDER, outputBaseDir);
+        board.bind(CoreBlackboardEntries.TARGET_PROPERTIES, target.getSecond());
+        board.bind(CoreBlackboardEntries.EVALUATION_OUTPUT_FOLDER, outputBaseDir);
 
         log.info("Evaluating with target {} -> {}.", targetIndex, target);
 
         for (int i = 0; i < iterations; ++i) {
             log.info("Running {}/{}", i, iterations);
             final String run = convertToString(i, runLength);
-            board.bind(BlackboardEntry.EVALUATION_RUN, run);
+            board.bind(CoreBlackboardEntries.EVALUATION_RUN, run);
             context.bindColumn(runColumn, i);
 
             BeanFactory.create(EvolutionaryAlgorithmSearch.class)
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/search/HeuristicSearchMain.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/search/HeuristicSearchMain.java
index d7ab7f4aebe23b8224bd60ad8e2a4dfcaa7a1d3e..ff78cc188f18db762ae79fc36a6d3f8f445e2a1a 100644
--- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/search/HeuristicSearchMain.java
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/search/HeuristicSearchMain.java
@@ -1,7 +1,8 @@
 package de.evoal.core.main.search;
 
 import de.evoal.core.api.board.Blackboard;
-import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
+import de.evoal.core.api.cdi.Application;
 import de.evoal.core.api.cdi.BeanFactory;
 import de.evoal.core.api.cdi.ConfigurationValue;
 import de.evoal.core.api.cdi.MainClass;
@@ -19,6 +20,10 @@ import javax.inject.Named;
 import java.io.File;
 import java.util.stream.Stream;
 
+@Application("""
+This application starts a heuristic search for an optimal solution based on a
+problem specification.
+""")
 @Named("heuristic-search")
 @ApplicationScoped
 public class HeuristicSearchMain implements MainClass {
@@ -29,21 +34,21 @@ public class HeuristicSearchMain implements MainClass {
 	private WriterContext context;
 
 	@Inject
-	@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm")
+	@ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm")
 	private Instance algorithmConfiguration;
 
 	@Override
 	public void run() {
-		final String outputFolder = board.get(BlackboardEntry.EVALUATION_OUTPUT_FOLDER);
-		final String heuristicFileName = board.get(BlackboardEntry.OPTIMISATION_CONFIGURATION_FILE);
+		final String outputFolder = board.get(CoreBlackboardEntries.EVALUATION_OUTPUT_FOLDER);
+		final String heuristicFileName = board.get(CoreBlackboardEntries.OPTIMISATION_CONFIGURATION_FILE);
 
 		final File outputBaseDir = HeuristicSearchUtils.calculateOutputBaseDir(new File(outputFolder), new File(heuristicFileName));
 
 		HeuristicSearchUtils.addColumn(context,"target", ColumnType.Integer, 0);
 		HeuristicSearchUtils.addColumn(context,"run", ColumnType.Integer, 0);
 
-		board.bind(BlackboardEntry.EVALUATION_OUTPUT_FOLDER, outputBaseDir);
-		board.bind(BlackboardEntry.EVALUATION_RUN, "0");
+		board.bind(CoreBlackboardEntries.EVALUATION_OUTPUT_FOLDER, outputBaseDir);
+		board.bind(CoreBlackboardEntries.EVALUATION_RUN, "0");
 
 		BeanFactory.create(OptimisationAlgorithm.class)
 				   .init(algorithmConfiguration)
@@ -55,6 +60,6 @@ public class HeuristicSearchMain implements MainClass {
 					targets.findFirst()
 						   .orElseThrow(() -> {throw new IllegalStateException("No target point found");});
 
-		board.bind(BlackboardEntry.TARGET_PROPERTIES, targetProperties.getSecond());
+		board.bind(CoreBlackboardEntries.TARGET_PROPERTIES, targetProperties.getSecond());
 	}
 }
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/StatisticsFactory.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/StatisticsFactory.java
index 7403629fc8a253d5bf90fb56230d6ab017c98d5d..ac5fe40e76c4b3691ac26145c59efb561bd0273e 100644
--- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/StatisticsFactory.java
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/StatisticsFactory.java
@@ -1,6 +1,6 @@
 package de.evoal.core.main.statistics;
 
-import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
 import de.evoal.core.api.cdi.ConfigurationValue;
 import de.evoal.core.api.statistics.StatisticsWriter;
 import de.evoal.core.api.utils.Requirements;
@@ -21,7 +21,7 @@ public class StatisticsFactory {
     @Produces
     @Dependent
     @Named("statistics")
-    public StatisticsWriter create(final @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "statistics") Instance instance) {
+    public StatisticsWriter create(final @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "statistics") Instance instance) {
         Requirements.requireSize(instance.getAttributes(), 1);
         final Array array = (Array)instance.getAttributes().get(0).getValue();
 
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/fitness/FitnessStatistics.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/fitness/FitnessStatistics.java
index c84d9df332ee279652d68efee8cf7d18222f8c8b..d7a058b1c69a118694115cf5fd764beefc750c2f 100644
--- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/fitness/FitnessStatistics.java
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/fitness/FitnessStatistics.java
@@ -1,7 +1,6 @@
 package de.evoal.core.main.statistics.fitness;
 
-import de.evoal.core.api.board.Blackboard;
-import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
 import de.evoal.core.api.cdi.BlackboardValue;
 import de.evoal.core.api.ea.fitness.comparator.FitnessValue;
 import de.evoal.core.api.properties.Properties;
@@ -10,7 +9,6 @@ import de.evoal.languages.model.instance.Instance;
 import io.jenetics.Phenotype;
 import io.jenetics.engine.EvolutionResult;
 import io.jenetics.util.ISeq;
-import javax.annotation.PostConstruct;
 import javax.enterprise.context.Dependent;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
@@ -30,7 +28,7 @@ import java.util.List;
 public class FitnessStatistics implements StatisticsWriter {
 
     @Inject
-    @BlackboardValue(BlackboardEntry.TARGET_PROPERTIES)
+    @BlackboardValue(CoreBlackboardEntries.TARGET_PROPERTIES)
     private Provider<Properties> targetSpecification;
 
     @Inject
diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/writer/csv/CsvStrategy.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/writer/csv/CsvStrategy.java
index cc12027222fa579c14c331e7e7ea3e1d312cad2f..f2bb050689bf434d60cb452eacdcd5b357b485ac 100644
--- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/writer/csv/CsvStrategy.java
+++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/writer/csv/CsvStrategy.java
@@ -1,6 +1,6 @@
 package de.evoal.core.main.statistics.writer.csv;
 
-import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
 import de.evoal.core.api.cdi.BlackboardValue;
 import de.evoal.core.api.statistics.Column;
 import de.evoal.core.api.statistics.Writer;
@@ -18,7 +18,7 @@ import java.util.Map;
 @ApplicationScoped
 @Named("csv")
 public class CsvStrategy extends WriterStrategy {
-    @Inject @BlackboardValue(BlackboardEntry.EVALUATION_OUTPUT_FOLDER)
+    @Inject @BlackboardValue(CoreBlackboardEntries.EVALUATION_OUTPUT_FOLDER)
     private File outputFolder;
 
     private final Map<String, CsvWriter> writerMap = new HashMap<>();
diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/api/SurrogateBlackboardEntries.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/api/SurrogateBlackboardEntries.java
new file mode 100644
index 0000000000000000000000000000000000000000..d7774951cd22b851d3c6f055d6957806babbb9a6
--- /dev/null
+++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/api/SurrogateBlackboardEntries.java
@@ -0,0 +1,36 @@
+package de.evoal.surrogate.api;
+
+import de.evoal.core.api.board.BlackboardEntries;
+import de.evoal.core.api.cdi.Commandline;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Named;
+
+@ApplicationScoped
+@Named("surrogate-entries")
+public class SurrogateBlackboardEntries implements BlackboardEntries {
+    /**
+     * Loaded surrogate configuration.
+     */
+    public static final String SURROGATE_CONFIGURATION = "surrogate:configuration";
+
+    /**
+     * Configuration file for the data generator.
+     */
+    @Commandline(main = "", name = "surrogate:configuration-file", doc = "Configuration file for surrogate training, e.g., surrogate.mll.")
+    public static final String SURROGATE_CONFIGURATION_FILE = "surrogate:configuration-file";
+
+    /**
+     * File containing a pre-trained surrogate.
+     */
+    @Commandline(main = "", name = "surrogate:pre-trained", doc = "File containing a pre-trained surrogate function written by \"surrogate-training\".")
+    public static final String SURROGATE_PRETRAINED_FILE = "surrogate:pre-trained";
+
+    /**
+     * File containing the training data.
+     */
+    @Commandline(main = "", name = "surrogate:training-data", doc = "File containing data for the surrogate training.")
+    public static final String SURROGATE_TRAINING_DATA_FILE = "surrogate:training-data";
+
+    private SurrogateBlackboardEntries() {}
+}
diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/api/SurrogateBlackboardEntry.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/api/SurrogateBlackboardEntry.java
deleted file mode 100644
index 4ca8baa9fd3e986070a8e9007599b19addc5b663..0000000000000000000000000000000000000000
--- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/api/SurrogateBlackboardEntry.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package de.evoal.surrogate.api;
-
-public final class SurrogateBlackboardEntry {
-    /**
-     * Loaded surrogate configuration.
-     */
-    public static final String SURROGATE_CONFIGURATION = "surrogate:configuration";
-
-    /**
-     * Configuration file for the data generator.
-     */
-    public static final String SURROGATE_CONFIGURATION_FILE = "surrogate:configuration-file";
-
-    /**
-     * File containing a pre-trained surrogate.
-     */
-    public static final String SURROGATE_PRETRAINED_FILE = "surrogate:pre-trained";
-
-    /**
-     * File containing the training data.
-     */
-    public static final String SURROGATE_TRAINING_DATA_FILE = "surrogate:training-data";
-
-    private SurrogateBlackboardEntry() {}
-}
diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/SurrogateMain.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/SurrogateMain.java
index a28b8593c92809aaf33891a90b307949e9db0b78..73a530660484c9ba40f1aed5f2b50885eb1efa52 100644
--- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/SurrogateMain.java
+++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/SurrogateMain.java
@@ -9,7 +9,7 @@ import javax.inject.Inject;
 import javax.inject.Named;
 
 import de.evoal.languages.model.mll.MachineLearningConfiguration;
-import de.evoal.surrogate.api.SurrogateBlackboardEntry;
+import de.evoal.surrogate.api.SurrogateBlackboardEntries;
 import de.evoal.surrogate.main.internal.StatementExecutor;
 import de.evoal.surrogate.main.internal.SymbolTable;
 import lombok.extern.slf4j.Slf4j;
@@ -24,7 +24,7 @@ import lombok.extern.slf4j.Slf4j;
 public class SurrogateMain implements MainClass {
 
     @Inject
-    @BlackboardValue(SurrogateBlackboardEntry.SURROGATE_CONFIGURATION)
+    @BlackboardValue(SurrogateBlackboardEntries.SURROGATE_CONFIGURATION)
     private MachineLearningConfiguration mlConfiguration;
 
     @Inject
diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/MLLConfigurationProducer.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/MLLConfigurationProducer.java
index 6b03b28af48d1a17f5938d0d93f99350735fa2c0..8203dc93222d416b49c0a041d47f206a702b2513 100644
--- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/MLLConfigurationProducer.java
+++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/MLLConfigurationProducer.java
@@ -13,7 +13,7 @@ import de.evoal.languages.model.el.impl.ELPackageImpl;
 import de.evoal.languages.model.mll.dsl.MachineLearningLanguageStandaloneSetup;
 import de.evoal.languages.model.mll.MachineLearningConfiguration;
 import de.evoal.languages.model.mll.impl.MllPackageImpl;
-import de.evoal.surrogate.api.SurrogateBlackboardEntry;
+import de.evoal.surrogate.api.SurrogateBlackboardEntries;
 import lombok.extern.slf4j.Slf4j;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.resource.Resource;
@@ -32,7 +32,7 @@ import java.util.Optional;
 @Slf4j
 public class MLLConfigurationProducer {
     public void loadModel(final @Observes BlackboardEntry value, final Blackboard board) {
-        if(!value.isSame(SurrogateBlackboardEntry.SURROGATE_CONFIGURATION_FILE)) {
+        if(!value.isSame(SurrogateBlackboardEntries.SURROGATE_CONFIGURATION_FILE)) {
             return;
         }
 
@@ -55,7 +55,7 @@ public class MLLConfigurationProducer {
         }
 
         final MachineLearningConfiguration configuration = read(file).get();
-        board.bind(SurrogateBlackboardEntry.SURROGATE_CONFIGURATION, configuration);
+        board.bind(SurrogateBlackboardEntries.SURROGATE_CONFIGURATION, configuration);
     }
 
     /**
@@ -112,7 +112,7 @@ public class MLLConfigurationProducer {
     }
 
     @Produces @Dependent
-    @BlackboardValue(SurrogateBlackboardEntry.SURROGATE_CONFIGURATION)
+    @BlackboardValue(SurrogateBlackboardEntries.SURROGATE_CONFIGURATION)
     public MachineLearningConfiguration injectMachineLearningConfiguration(final InjectionPoint ip, final Blackboard board) {
         final BlackboardValue value = ip.getAnnotated().getAnnotation(BlackboardValue.class);
         final Object result = board.get(value.value());
diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/SurrogateProducer.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/SurrogateProducer.java
index dacc2251d93e08f7ec0b3bfbc3b314bd1748322e..87ebe6744e0d1da555c245fbaf09d0b44afb5e3b 100644
--- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/SurrogateProducer.java
+++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/SurrogateProducer.java
@@ -2,6 +2,7 @@ package de.evoal.surrogate.main.cdi;
 
 import de.evoal.core.api.board.Blackboard;
 import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
 import de.evoal.core.api.properties.info.PropertiesDependencies;
 import de.evoal.core.api.properties.PropertiesSpecification;
 import de.evoal.core.api.properties.PropertySpecification;
@@ -9,7 +10,7 @@ import de.evoal.core.api.utils.Requirements;
 import de.evoal.languages.model.instance.DataReference;
 import de.evoal.languages.model.mll.PartialSurrogateFunctionDefinition;
 import de.evoal.languages.model.mll.SurrogateDefinition;
-import de.evoal.surrogate.api.SurrogateBlackboardEntry;
+import de.evoal.surrogate.api.SurrogateBlackboardEntries;
 import de.evoal.surrogate.api.configuration.FunctionCombinerConfiguration;
 import de.evoal.surrogate.api.configuration.PartialFunctionConfiguration;
 import de.evoal.surrogate.api.configuration.SurrogateConfiguration;
@@ -40,11 +41,11 @@ public class SurrogateProducer {
     private SurrogateConfiguration configuration;
 
     public void setPreTrainedSurrogate(final @Observes BlackboardEntry event, final Blackboard board, final Function<@NonNull File, @NonNull SurrogateConfiguration> loader) {
-        if(!event.isSame(SurrogateBlackboardEntry.SURROGATE_PRETRAINED_FILE)) {
+        if(!event.isSame(SurrogateBlackboardEntries.SURROGATE_PRETRAINED_FILE)) {
             return;
         }
 
-        final String filename = board.get(SurrogateBlackboardEntry.SURROGATE_PRETRAINED_FILE);
+        final String filename = board.get(SurrogateBlackboardEntries.SURROGATE_PRETRAINED_FILE);
         final File file = new File(filename);
 
         log.info("Using pre-trained surrogate model {}.", filename);
@@ -55,8 +56,8 @@ public class SurrogateProducer {
 
         this.configuration = loader.apply(file);
         
-        final EObject mlConfiguration = board.get(SurrogateBlackboardEntry.SURROGATE_CONFIGURATION);
-        final EObject eaConfiguration = board.get(BlackboardEntry.OPTIMISATION_CONFIGURATION);
+        final EObject mlConfiguration = board.get(SurrogateBlackboardEntries.SURROGATE_CONFIGURATION);
+        final EObject eaConfiguration = board.get(CoreBlackboardEntries.OPTIMISATION_CONFIGURATION);
 
         final Map<String, PropertySpecification> specifications = new HashMap<>();
         addDataFrom(specifications, mlConfiguration);
diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/TargetPointLoader.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/TargetPointLoader.java
index 1e7d29d7ab9569abf137a5cdfb5bf69f7ccf7bf7..5511a8a3cbd8612ff6fa27d2cca1f75c16d9da28 100644
--- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/TargetPointLoader.java
+++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/cdi/TargetPointLoader.java
@@ -2,6 +2,7 @@ package de.evoal.surrogate.main.cdi;
 
 import de.evoal.core.api.board.Blackboard;
 import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
 import de.evoal.core.api.properties.PropertiesPair;
 import de.evoal.core.api.properties.PropertiesSpecification;
 import javax.enterprise.context.ApplicationScoped;
@@ -33,12 +34,11 @@ public class TargetPointLoader {
      */
     private PropertiesBasedPropertiesStreamSupplier loadedProperties;
 
-
     private PropertiesStreamSupplier targetPoints;
 
     @SneakyThrows
     public void load(final @Observes BlackboardEntry entry) {
-        if (!BlackboardEntry.TARGET_POINTS_FILE.equals(entry)) {
+        if (!CoreBlackboardEntries.TARGET_POINTS_FILE.equals(entry)) {
             return;
         }
 
diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/TrainingInitialPopulation.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/TrainingInitialPopulation.java
index 3c0454d26a4d51ea4f04063beccd45ca7ac9c16f..2064686ef965c31936a26c96f34d0bf40fa3dd0c 100644
--- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/TrainingInitialPopulation.java
+++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/TrainingInitialPopulation.java
@@ -1,7 +1,7 @@
 package de.evoal.surrogate.main.ea;
 
 import de.evoal.core.api.board.Blackboard;
-import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
 import de.evoal.core.api.cdi.ConfigurationValue;
 import de.evoal.core.api.ea.codec.CustomCodec;
 import de.evoal.core.api.ea.initial.InitialPopulation;
@@ -10,7 +10,7 @@ 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 de.evoal.surrogate.api.SurrogateBlackboardEntries;
 import io.jenetics.Gene;
 import io.jenetics.Genotype;
 import io.jenetics.engine.Engine;
@@ -28,7 +28,7 @@ import java.io.File;
 public class TrainingInitialPopulation<G extends Gene<?, G>, C extends Comparable<C>> implements InitialPopulation<G, C> {
 
     @Inject
-    @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.size-of-population")
+    @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.size-of-population")
     private int sizeOfPopulation;
 
     @Inject
@@ -60,7 +60,7 @@ public class TrainingInitialPopulation<G extends Gene<?, G>, C extends Comparabl
     }
 
     private ISeq<Genotype<G>> createInitialPopulation() {
-        final String filename = board.get(SurrogateBlackboardEntry.SURROGATE_TRAINING_DATA_FILE);
+        final String filename = board.get(SurrogateBlackboardEntries.SURROGATE_TRAINING_DATA_FILE);
         final File trainingFile = new File(filename);
 
         log.info("Using training data from {} for population.", filename);
diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/TrainingProducer.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/TrainingProducer.java
index 95d8103be4a4a36185a26660baac606ed8440450..cbbbdef6c4999e582cfb8cdc609fc90ca91116e0 100644
--- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/TrainingProducer.java
+++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/ea/TrainingProducer.java
@@ -1,6 +1,6 @@
 package de.evoal.surrogate.main.ea;
 
-import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
 import de.evoal.core.api.cdi.BeanFactory;
 import de.evoal.core.api.cdi.ConfigurationValue;
 import de.evoal.core.api.ea.initial.InitialPopulation;
@@ -21,7 +21,7 @@ public class TrainingProducer {
     @Produces
     @Dependent
     @Named("training")
-    public InitialPopulation create(@ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.initialization") Instance initialization) {
+    public InitialPopulation create(@ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.initialization") Instance initialization) {
         final TrainingInitialPopulation population = new TrainingInitialPopulation();
         BeanFactory.injectFields(population);
         population.init();
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
index 254e4c4b37c5d867373af8ae2aa1b9b9b7ac1951..545eab0a60366f380a9f1f7014ad4eaec4678d48 100644
--- 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
@@ -8,15 +8,13 @@ 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 de.evoal.surrogate.api.SurrogateBlackboardEntries;
 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;
@@ -45,7 +43,7 @@ public class TrainingRepairStrategy<G extends Gene<?, G>, C extends Comparable<?
 
     @Override
     public RepairStrategy init(final Instance configuration) {
-        final String filename = board.get(SurrogateBlackboardEntry.SURROGATE_TRAINING_DATA_FILE);
+        final String filename = board.get(SurrogateBlackboardEntries.SURROGATE_TRAINING_DATA_FILE);
         final File trainingFile = new File(filename);
 
         log.info("Using training data from {} for population.", filename);
diff --git a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/correlated/GenerationStatisticsWriter.java b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/correlated/GenerationStatisticsWriter.java
index e3a13aeada49f90ad01b79c2b6bcaf98a1cf8409..c141bda6165947df9c5c69ad9a1c545eec1ca745 100644
--- a/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/correlated/GenerationStatisticsWriter.java
+++ b/src/core/de.evoal.surrogate.api/src/main/java/de/evoal/surrogate/main/statistics/correlated/GenerationStatisticsWriter.java
@@ -1,6 +1,6 @@
 package de.evoal.surrogate.main.statistics.correlated;
 
-import de.evoal.core.api.board.BlackboardEntry;
+import de.evoal.core.api.board.CoreBlackboardEntries;
 import de.evoal.core.api.cdi.ConfigurationValue;
 import de.evoal.core.api.statistics.*;
 import de.evoal.core.api.utils.LanguageHelper;
@@ -60,7 +60,7 @@ public class GenerationStatisticsWriter implements StatisticsWriter {
     @Inject
     private Provider<Function<Properties, Properties>> fitnessFactory;
 
-    @Inject @ConfigurationValue(entry = BlackboardEntry.OPTIMISATION_CONFIGURATION, access = "algorithm.fitness")
+    @Inject @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.fitness")
     private Instance config;
 
     @Inject
diff --git a/src/core/de.evoal.surrogate.api/src/main/java/module-info.java b/src/core/de.evoal.surrogate.api/src/main/java/module-info.java
index 97e2c58bf6f4b45cce85935ba674365eb7c77883..2cf1213f1b828253385edf6ea56e0ab3a8ede2ad 100644
--- a/src/core/de.evoal.surrogate.api/src/main/java/module-info.java
+++ b/src/core/de.evoal.surrogate.api/src/main/java/module-info.java
@@ -33,8 +33,9 @@ module de.evoal.surrogate.api {
     exports de.evoal.surrogate.api.configuration;
 
     // open packages for CDI
-    opens de.evoal.surrogate.api.training to weld.core.impl;
+    opens de.evoal.surrogate.api to weld.core.impl;
     opens de.evoal.surrogate.api.configuration to com.fasterxml.jackson.databind;
+    opens de.evoal.surrogate.api.training to weld.core.impl;
 
     opens de.evoal.surrogate.main to weld.core.impl;
     opens de.evoal.surrogate.main.cdi to weld.core.impl;
diff --git a/src/core/de.evoal.surrogate.ws/src/main/java/de/evoal/surrogate/ws/WebServiceFitness.java b/src/core/de.evoal.surrogate.ws/src/main/java/de/evoal/surrogate/ws/WebServiceFitness.java
index 4aabaf11cd0ac38288104313471c8cc569724bca..e2810086eb8d919faf4a3d6649ab9c4254b0ff79 100644
--- a/src/core/de.evoal.surrogate.ws/src/main/java/de/evoal/surrogate/ws/WebServiceFitness.java
+++ b/src/core/de.evoal.surrogate.ws/src/main/java/de/evoal/surrogate/ws/WebServiceFitness.java
@@ -22,7 +22,7 @@ public class WebServiceFitness implements FitnessFunction {
 
     @Override
     public FitnessFunction init(final Instance config) {
-        LanguageHelper.lookup()
+//        LanguageHelper.lookup();
 
         return this;
     }