diff --git a/src/evoal/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/BeanFactory.java b/src/evoal/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/BeanFactory.java
index 70b88470127616b7a59e5f4d69587ad2c80e63e7..8d8989cea8e288a17a4d04fedebbaf8fa0cb1358 100644
--- a/src/evoal/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/BeanFactory.java
+++ b/src/evoal/core/de.evoal.core.main/src/main/java/de/evoal/core/api/cdi/BeanFactory.java
@@ -1,7 +1,9 @@
 package de.evoal.core.api.cdi;
 
 import de.evoal.core.api.utils.InitializationException;
+import de.evoal.core.api.utils.LanguageHelper;
 import de.evoal.core.api.utils.Requirements;
+import de.evoal.languages.model.base.Attribute;
 import de.evoal.languages.model.base.Instance;
 import de.evoal.languages.model.dl.util.FQNProvider;
 import lombok.NonNull;
@@ -73,17 +75,16 @@ public final class BeanFactory {
         }
     }
 
-    public static <T extends EvoalComponent<T>> T createComponent(final Class<T> type, final Instance configuration) {
+    public static <T extends EvoalComponent<T>> T createComponent(final Class<T> type, final String name, final Instance configuration) {
         Requirements.requireNotNull(type);
         Requirements.requireNotNull(configuration);
-
-        final String name = new FQNProvider().get(configuration);
+        Requirements.requireNotNull(name);
 
         log.info("Creating bean for instance of type {}.", name);
         try {
             return BeanProvider.getContextualReference(name, false, type)
-                               .init(configuration);
-        } catch(final IllegalStateException | IllegalArgumentException | InitializationException e) {
+                    .init(configuration);
+        } catch (final IllegalStateException | IllegalArgumentException | InitializationException e) {
             log.error("Failed to create contextual reference of type '{}' with name '{}'.", type, name);
             logInstantiationError(type, e);
 
@@ -91,7 +92,22 @@ public final class BeanFactory {
         }
     }
 
-    public static void injectFields(final Object instance) {
-        BeanProvider.injectFields(instance);
+    public static <T extends EvoalComponent<T>> T createComponent(final Class<T> type, final Instance configuration) {
+        Requirements.requireNotNull(configuration);
+
+        final String name = new FQNProvider().get(configuration);
+
+        return createComponent(type, name, configuration);
+    }
+
+    public static <T extends EvoalComponent<T>> T createComponentForAttribute(final Class<T> type, final Instance configuration, final String attributeName) {
+        final LanguageHelper helper = BeanFactory.create(LanguageHelper.class);
+        final Instance child = helper.lookup(configuration, attributeName);
+
+        return createComponent(type, child);
+    }
+
+    public static <T> T injectFields(final T instance) {
+        return BeanProvider.injectFields(instance);
     }
 }
diff --git a/src/evoal/plugins/de.evoal.approximative.interval/src/main/java/de/evoal/prediction/interval/statistics/GenerationStatisticsWriter.java b/src/evoal/plugins/de.evoal.approximative.interval/src/main/java/de/evoal/prediction/interval/statistics/GenerationStatisticsWriter.java
index 27b5acdbe5ecefd88ce8d417e2d2671297af3306..9929d0311ba2e7c1845465dae92395f58d36c787 100644
--- a/src/evoal/plugins/de.evoal.approximative.interval/src/main/java/de/evoal/prediction/interval/statistics/GenerationStatisticsWriter.java
+++ b/src/evoal/plugins/de.evoal.approximative.interval/src/main/java/de/evoal/prediction/interval/statistics/GenerationStatisticsWriter.java
@@ -44,7 +44,7 @@ public class GenerationStatisticsWriter implements StatisticsWriter {
     /**
      * Encoding for converting between ea and domain.
      */
-    @Inject
+    @Inject @Named("codec")
     private CustomCodec encoding;
 
     private EvolutionResult<?, FitnessValue> bestIndividual;
diff --git a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/codec/CustomCodec.java b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/codec/CustomCodec.java
index 745626a77472122236bac2febec6f075c5d18e24..993f6eb14ae07a2fc5c3667905e28cd17f03959e 100644
--- a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/codec/CustomCodec.java
+++ b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/codec/CustomCodec.java
@@ -1,5 +1,6 @@
 package de.evoal.core.ea.api.codec;
 
+import de.evoal.core.api.cdi.EvoalComponent;
 import de.evoal.core.api.properties.Properties;
 import io.jenetics.Gene;
 import io.jenetics.Genotype;
@@ -10,7 +11,7 @@ import io.jenetics.engine.Codec;
  *
  * @param <G> The gene type.
  */
-public interface CustomCodec<G extends Gene<?, G>> extends Codec<Properties, G> {
+public interface CustomCodec<G extends Gene<?, G>> extends Codec<Properties, G>, EvoalComponent<CustomCodec<G>> {
 
     /**
      * Encodes an individual according to the codes into a genotype.
diff --git a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/codec/CustomCodecDescriber.java b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/codec/CustomCodecDescriber.java
new file mode 100644
index 0000000000000000000000000000000000000000..59ef1f99e2a1a7ff7577f9592a4af8b8315c2d9f
--- /dev/null
+++ b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/api/codec/CustomCodecDescriber.java
@@ -0,0 +1,20 @@
+package de.evoal.core.ea.api.codec;
+
+import de.evoal.core.api.cdi.EvoalComponent;
+import de.evoal.languages.model.base.Definition;
+
+import java.util.List;
+
+/**
+ * Additional interface that a codec implementer has to implement to give a
+ *   description of the data/instances a codec configuration maps. In case
+ *   of the vector genotype codec it is the list of all used data descriptions.
+ *   The describer has to expand the name of the codec by the suffix "-describer"
+ *   in the @Named annotation.
+ */
+public interface CustomCodecDescriber extends EvoalComponent<CustomCodecDescriber> {
+    /**
+     * @return The mapped data.
+     */
+    public List<Definition> describe();
+}
diff --git a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/AltererFactory.java b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/AltererFactory.java
index b79e783f63e849b76de9f060c22b3c58ff60567e..1c7ebbad73b2b559e2dc35f38cb3deba027944ac 100644
--- a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/AltererFactory.java
+++ b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/AltererFactory.java
@@ -20,12 +20,13 @@ import javax.enterprise.context.ApplicationScoped;
 import lombok.extern.slf4j.Slf4j;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 
 @ApplicationScoped
 @Slf4j
 public class AltererFactory {
 
-	@Inject
+	@Inject @Named("codec")
 	private CustomCodec codec;
 
 	@Inject
diff --git a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/CorrelationMutatorFactory.java b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/CorrelationMutatorFactory.java
index 7ed1a928bd22dd94891cfc06389b091f80718938..7f3d9d4e7722e9df3cd02959d773758c9b470c8e 100644
--- a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/CorrelationMutatorFactory.java
+++ b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/alterer/mutator/CorrelationMutatorFactory.java
@@ -10,6 +10,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import java.util.function.BiFunction;
 
 @ApplicationScoped
@@ -19,7 +20,7 @@ public final class CorrelationMutatorFactory {
     @Inject
     private Blackboard board;
 
-    @Inject
+    @Inject @Named("codec")
     private CustomCodec codec;
 
     @Produces
diff --git a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/CodecProducer.java b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/CodecProducer.java
new file mode 100644
index 0000000000000000000000000000000000000000..88085206d01c58aedc9ea6bbc063d76606362882
--- /dev/null
+++ b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/CodecProducer.java
@@ -0,0 +1,20 @@
+package de.evoal.core.ea.main.codec;
+
+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.ea.api.codec.CustomCodec;
+import de.evoal.languages.model.base.Instance;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+@ApplicationScoped
+public class CodecProducer {
+    @Produces @Named("codec")
+    public CustomCodec create(final @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.genotype") Instance configuration) {
+        return BeanFactory.createComponent(CustomCodec.class, configuration);
+    }
+}
diff --git a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/VectorGenotypeCodec.java b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/VectorGenotypeCodec.java
index cdf93f3d4e6fc87839846c26ea480f3b7b836c61..f5092a4ef4832be640b4bade8af7eee04a485868 100644
--- a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/VectorGenotypeCodec.java
+++ b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/VectorGenotypeCodec.java
@@ -1,12 +1,11 @@
 package de.evoal.core.ea.main.codec;
 
 import de.evoal.core.api.cdi.BeanFactory;
+import de.evoal.core.api.utils.LanguageHelper;
 import de.evoal.core.ea.api.codec.CustomCodec;
 import de.evoal.core.api.properties.Properties;
 import de.evoal.core.api.properties.PropertiesSpecification;
 import de.evoal.core.ea.main.codec.chromosome.DynamicChromosome;
-import de.evoal.core.ea.main.codec.chromosome.DynamicChromosomeFactory;
-import de.evoal.languages.model.base.Array;
 import de.evoal.languages.model.base.Instance;
 import io.jenetics.Chromosome;
 import io.jenetics.Gene;
@@ -14,39 +13,35 @@ import io.jenetics.Genotype;
 import io.jenetics.util.Factory;
 import lombok.extern.slf4j.Slf4j;
 
-import java.util.Arrays;
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+import javax.inject.Named;
 import java.util.List;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @Slf4j
-public class DynamicCodec<G extends Gene<?, G>> implements CustomCodec<G> {
+public class VectorGenotypeCodec<G extends Gene<?, G>> implements CustomCodec<G> {
 
-    private final List<DynamicChromosome> dynamicTemplates;
+    @Inject
+    private @Named("genotype-specification") PropertiesSpecification specification;
 
-    private final PropertiesSpecification specification;
-
-    public DynamicCodec(final PropertiesSpecification specification, final List<DynamicChromosome> dynamicTemplates, final List<Chromosome<G>> jeneticsTemplates) {
-        this.specification = specification;
-        this.dynamicTemplates = dynamicTemplates;
-    }
-
-    static DynamicCodec from(final Instance [] config, final PropertiesSpecification specification) {
-        final DynamicChromosomeFactory factory = BeanFactory.create(DynamicChromosomeFactory.class);
-        final List<DynamicChromosome> chromosomes = Arrays.stream(config)
-                                                          .map(Instance.class::cast)
-                                                          .map(factory::create)
-                                                          .collect(Collectors.toList());
-
-        final List<Chromosome> templates = chromosomes.stream()
-                                                      .map(DynamicChromosome::toJenetics)
-                                                      .collect(Collectors.toList());
+    @Inject
+    private LanguageHelper helper;
 
+    private List<DynamicChromosome> dynamicTemplates;
 
+    @Override
+    public VectorGenotypeCodec<G> init(final Instance config) {
+        log.info("LanguageHelper is {}", helper);
+        final List<Instance> chromosomeConfigurations = helper.lookup(config, "chromosomes");
 
-        log.info("Created dynamic codec for properties specification {}.", specification);
+        dynamicTemplates = chromosomeConfigurations.stream()
+                .map(i -> BeanFactory.createComponent(DynamicChromosome.class, i))
+                .collect(Collectors.toList());
 
-        return new DynamicCodec(specification, chromosomes, templates);
+        return this;
     }
 
     @Override
@@ -84,4 +79,12 @@ public class DynamicCodec<G extends Gene<?, G>> implements CustomCodec<G> {
 
         return Genotype.of(chromosomes);
     }
+
+    @Produces
+    @Named("de.evoal.core.ea.optimisation.vector-genotype")
+    @ApplicationScoped
+    public static CustomCodec create() {
+        log.info("Creating vector-based codec for optimisation problem.");
+        return BeanFactory.injectFields(new VectorGenotypeCodec());
+    }
 }
diff --git a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/VectorGenotypeDescriber.java b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/VectorGenotypeDescriber.java
new file mode 100644
index 0000000000000000000000000000000000000000..20541065d39a85ec3dae05d638aabc4d30b971a3
--- /dev/null
+++ b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/VectorGenotypeDescriber.java
@@ -0,0 +1,60 @@
+package de.evoal.core.ea.main.codec;
+
+import de.evoal.core.api.languages.ExpressionEvaluator;
+import de.evoal.core.api.utils.InitializationException;
+import de.evoal.core.api.utils.LanguageHelper;
+import de.evoal.core.ea.api.codec.CustomCodecDescriber;
+import de.evoal.languages.model.base.Attribute;
+import de.evoal.languages.model.base.Instance;
+import de.evoal.languages.model.base.Definition;
+import de.evoal.languages.model.ddl.DataDescription;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.inject.Named;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Dependent
+@Named("de.evoal.core.ea.optimisation.vector-genotype-describer")
+@Slf4j
+public class VectorGenotypeDescriber implements CustomCodecDescriber {
+
+    private Instance configuration;
+
+    @Inject
+    private LanguageHelper helper;
+
+    @Inject
+    private ExpressionEvaluator evaluator;
+
+    @Override
+    public CustomCodecDescriber init(final Instance configuration) throws InitializationException {
+        log.info("Setting up describer");
+        this.configuration = configuration;
+
+        return CustomCodecDescriber.super.init(configuration);
+    }
+
+    @Override
+    public List<Definition> describe() {
+        log.info("Describing Genotype.");
+        final Object [] genes = helper.lookup(configuration, "chromosomes");
+
+        final List<DataDescription> descriptors = Arrays.stream(genes)
+                .map(Instance.class::cast)
+                .map(i -> i.findAttribute("genes"))
+                .map(Attribute::getValue)
+                .map(evaluator::evaluate)
+                .flatMap(l -> ((List<Instance>)(List)l).stream())
+                .map(i -> evaluator.attributeToObject(i, "content"))
+                .map(DataDescription.class::cast)
+                .collect(Collectors.toList());
+
+        log.info("{}", descriptors);
+
+        throw new IllegalArgumentException("HERE WE ARE");
+    }
+}
diff --git a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicBoundedDoubleChromosome.java b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicBoundedDoubleChromosome.java
index bb3d2d9674c3694cc73de465e710b3d2167af589..27f7df2195193e246a7a533a190cc7b6cac87528 100644
--- a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicBoundedDoubleChromosome.java
+++ b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicBoundedDoubleChromosome.java
@@ -17,12 +17,14 @@ public abstract class DynamicBoundedDoubleChromosome extends DynamicChromosome {
     protected List<DoubleRange> ranges;
 
     @Override
-    public void init(final Instance specification) {
+    public DynamicChromosome init(final Instance specification) {
         super.init(specification);
 
         ranges = dataRepresented.stream()
                 .map(this::toRange)
                 .collect(Collectors.toList());
+
+        return this;
     }
 
     protected DoubleRange toRange(final DataDescription dataDescription) {
diff --git a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicBoundedIntegerChromosome.java b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicBoundedIntegerChromosome.java
index ea019494438bbbdda33f146ed14209680ecf2955..19384a1eeb02e30820b3f23b2d396575281b728c 100644
--- a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicBoundedIntegerChromosome.java
+++ b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicBoundedIntegerChromosome.java
@@ -17,12 +17,14 @@ public abstract class DynamicBoundedIntegerChromosome extends DynamicChromosome
     protected List<IntRange> ranges;
 
     @Override
-    public void init(final Instance specification) {
+    public DynamicChromosome init(final Instance specification) {
         super.init(specification);
 
         ranges = dataRepresented.stream()
                 .map(this::toRange)
                 .collect(Collectors.toList());
+
+        return this;
     }
 
     protected IntRange toRange(final DataDescription dataDescription) {
diff --git a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicChromosome.java b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicChromosome.java
index 0e7879fb3990899aa0df6917bbcd158b553cda57..c740bded22ab49ae769301d991841cd4b4a1b248 100644
--- a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicChromosome.java
+++ b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicChromosome.java
@@ -1,5 +1,6 @@
 package de.evoal.core.ea.main.codec.chromosome;
 
+import de.evoal.core.api.cdi.EvoalComponent;
 import de.evoal.core.api.languages.ExpressionEvaluator;
 import de.evoal.core.api.properties.Properties;
 import de.evoal.core.api.properties.PropertiesSpecification;
@@ -17,14 +18,15 @@ import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 
-public abstract class DynamicChromosome {
+public abstract class DynamicChromosome implements EvoalComponent<DynamicChromosome> {
    @Inject
    private ExpressionEvaluator evaluator;
 
     protected List<DataDescription> dataRepresented;
     protected PropertiesSpecification specification;
 
-    public void init(final Instance specification) {
+    @Override
+    public DynamicChromosome init(final Instance specification) {
         final List<Instance> genes = (List<Instance>) evaluator.attributeToObject(specification, "genes");
 
         this.dataRepresented = genes.stream()
@@ -36,6 +38,8 @@ public abstract class DynamicChromosome {
         this.specification = PropertiesSpecification.builder()
                                                     .add(dataRepresented.stream())
                                                     .build();
+
+        return this;
     }
 
     public abstract Chromosome toJenetics();
diff --git a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicScaledChromosome.java b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicScaledChromosome.java
index 57aee89dfea1298de085feff60c4babfbb16ed72..ccbdb5ebd870b5508172d9bef65198136c0a5a89 100644
--- a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicScaledChromosome.java
+++ b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/codec/chromosome/DynamicScaledChromosome.java
@@ -22,12 +22,14 @@ public abstract class DynamicScaledChromosome extends DynamicBoundedDoubleChromo
     protected int scale;
 
     @Override
-    public void init(final Instance specification) {
+    public DynamicChromosome init(final Instance specification) {
         scale = evaluator.attributeToInteger(specification, "scale");
 
         super.init(specification);
         Requirements.requireSize(dataRepresented, 1);
         Requirements.requireSize(ranges, 1);
+
+        return this;
     }
 
     protected DoubleRange toRange(final DataDescription dataDescription) {
diff --git a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraint/JeneticsConstraintProducer.java b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraint/JeneticsConstraintProducer.java
index ca2ac59586f75158c46897603bd97a4de2601fc9..788db614c13395efa2fee0238fbb6bc7474a00db 100644
--- a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraint/JeneticsConstraintProducer.java
+++ b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/constraint/JeneticsConstraintProducer.java
@@ -37,7 +37,7 @@ public class JeneticsConstraintProducer {
             final @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.handlers") Instance [] handlerConfigurations,
             final @Named("optimisation-space-specification") PropertiesSpecification optimisationSpec,
             final @Named("optimisation-function") OptimisationFunction function,
-            final CustomCodec codec,
+            final @Named("codec") CustomCodec codec,
             final Constraints constraints,
             final CalculationFactory factory) {
 
diff --git a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/initial/InitialStream.java b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/initial/InitialStream.java
index b71ef69d499a95be7c0b4c08c08092ab3a7f79b0..c71eca973814d963524018fd1b40932a9d67f7f2 100644
--- a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/initial/InitialStream.java
+++ b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/initial/InitialStream.java
@@ -12,6 +12,7 @@ import io.jenetics.engine.EvolutionStream;
 
 import javax.enterprise.context.Dependent;
 import javax.inject.Inject;
+import javax.inject.Named;
 import java.util.stream.Stream;
 
 @Dependent
@@ -25,7 +26,7 @@ public class InitialStream {
 
     private Engine engine;
 
-    @Inject
+    @Inject @Named("codec")
     private CustomCodec codec;
 
     public InitialStream init(final InitialCandidatesProvider provider, final Engine<?, OptimisationValue> engine) {
diff --git a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/producer/SpecificationProducer.java b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/producer/SpecificationProducer.java
index 543033062c0129e550d72314ace78ebe85af5cef..29f259a0cc50fccd3a3dc41a7e783888b7d4d86c 100644
--- a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/producer/SpecificationProducer.java
+++ b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/producer/SpecificationProducer.java
@@ -1,13 +1,16 @@
-package de.evoal.core.main.producer;
+package de.evoal.core.ea.main.producer;
 
 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.languages.ExpressionEvaluator;
 import de.evoal.core.api.properties.PropertiesSpecification;
+import de.evoal.core.ea.api.codec.CustomCodecDescriber;
+import de.evoal.languages.model.base.Definition;
 import de.evoal.languages.model.ddl.DataDescription;
-import de.evoal.languages.model.base.Attribute;
 import de.evoal.languages.model.base.Instance;
+import de.evoal.languages.model.dl.util.FQNProvider;
+import lombok.extern.slf4j.Slf4j;
 
 import javax.enterprise.context.ApplicationScoped;
 import javax.enterprise.context.Dependent;
@@ -19,6 +22,7 @@ import java.util.List;
 import java.util.stream.Collectors;
 
 @ApplicationScoped
+@Slf4j
 public class SpecificationProducer {
 
     @Inject
@@ -28,7 +32,10 @@ public class SpecificationProducer {
     @Dependent
     @Named("genotype-description")
     public List<DataDescription> createSourceSpecification(final @ConfigurationValue(entry = CoreBlackboardEntries.OPTIMISATION_CONFIGURATION, access = "algorithm.genotype") Instance genotype) {
-        BeanFactory.createComponent(Codec)
+        final String name = new FQNProvider().get(genotype) + "-describer";
+                final CustomCodecDescriber describer = BeanFactory.createComponent(CustomCodecDescriber.class, name, genotype);
+        final List<Definition> references = describer.describe();
+
         throw new RuntimeException("safd");
     }
 
diff --git a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/search/EvolutionaryAlgorithmOptimisation.java b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/search/EvolutionaryAlgorithmOptimisation.java
index 3522d0deca3d8d87bd1184c8c0d0ec1462c37dc5..b2d1ea6821b7e1c3faf32a16f7f467a9c465b8dd 100644
--- a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/search/EvolutionaryAlgorithmOptimisation.java
+++ b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/search/EvolutionaryAlgorithmOptimisation.java
@@ -17,11 +17,12 @@ import de.evoal.core.api.utils.LanguageHelper;
 import de.evoal.core.api.optimisation.OptimisationValue;
 
 import de.evoal.core.api.statistics.writer.StatisticsWriter;
+import de.evoal.core.ea.api.codec.CustomCodec;
 import de.evoal.core.ea.main.fitness.JeneticsFitnessFunction;
 import de.evoal.core.ea.main.initial.InitialStream;
 import de.evoal.core.ea.main.jenetics.ConstraintList;
 import de.evoal.core.ea.main.alterer.AltererFactory;
-import de.evoal.core.ea.main.codec.DynamicCodec;
+import de.evoal.core.ea.main.codec.VectorGenotypeCodec;
 import de.evoal.core.ea.main.statistics.JeneticsStatisticsWriter;
 import de.evoal.languages.model.base.Attribute;
 import de.evoal.languages.model.ol.OptimisationModule;
@@ -33,6 +34,7 @@ import lombok.extern.slf4j.Slf4j;
 import javax.enterprise.context.Dependent;
 import javax.enterprise.inject.Instance;
 
+import javax.enterprise.inject.Produces;
 import javax.inject.Inject;
 import javax.inject.Named;
 
@@ -67,8 +69,8 @@ public class EvolutionaryAlgorithmOptimisation implements OptimisationAlgorithm
 
 	private final Map<String, List<Alterer<?, OptimisationValue>>> alterers = new HashMap<>();
 
-	@Inject
-	private DynamicCodec encoding;
+	@Inject @Named("codec")
+	private CustomCodec encoding;
 
 	private final ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
 
@@ -90,15 +92,9 @@ public class EvolutionaryAlgorithmOptimisation implements OptimisationAlgorithm
 	@Inject
 	private Instance<List<Constraint>> constraints;
 
-
 	@Inject @Named("initial")
 	private InitialCandidatesProvider provider;
 
-	@Override
-	public OptimisationAlgorithm init(de.evoal.languages.model.base.Instance instance) {
-		return this;
-	}
-
 	public void run() {
 		setup();
 
diff --git a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/statistics/CandidateAdapter.java b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/statistics/CandidateAdapter.java
index 9836c62e3b15a723cff930e9bd9b6d8f6da2b63d..f820f5fec575c50993f28f9763ff60eaea3d3891 100644
--- a/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/statistics/CandidateAdapter.java
+++ b/src/evoal/plugins/de.evoal.core.ea/src/main/java/de/evoal/core/ea/main/statistics/CandidateAdapter.java
@@ -3,11 +3,13 @@ package de.evoal.core.ea.main.statistics;
 import de.evoal.core.api.optimisation.OptimisationValue;
 import de.evoal.core.api.properties.Properties;
 import de.evoal.core.api.statistics.Candidate;
-import de.evoal.core.ea.main.codec.DynamicCodec;
+import de.evoal.core.ea.api.codec.CustomCodec;
+import de.evoal.core.ea.main.codec.VectorGenotypeCodec;
 import io.jenetics.Phenotype;
 
 import javax.enterprise.context.Dependent;
 import javax.inject.Inject;
+import javax.inject.Named;
 
 /**
  * An adapter, c.f. GOF: adapter pattern, for adapting Jenetic's {@link Phenotype} to
@@ -27,8 +29,8 @@ public class CandidateAdapter implements Candidate {
      */
     private Phenotype<?, OptimisationValue> phenotype;
 
-    @Inject
-    private DynamicCodec codec;
+    @Inject @Named("codec")
+    private CustomCodec codec;
 
     public CandidateAdapter init(final Phenotype<?, OptimisationValue> phenotype, final int generation) {
         this.phenotype = phenotype;
diff --git a/src/evoal/plugins/de.evoal.core.ea/src/main/java/module-info.java b/src/evoal/plugins/de.evoal.core.ea/src/main/java/module-info.java
index 756ab0de07c5ad9541a37cd5685b4f92a1c601fd..2cc8840aa63e8d0ba20d5825e9db2d0807826b14 100644
--- a/src/evoal/plugins/de.evoal.core.ea/src/main/java/module-info.java
+++ b/src/evoal/plugins/de.evoal.core.ea/src/main/java/module-info.java
@@ -11,6 +11,7 @@ module de.evoal.core.ea {
 
     requires org.eclipse.emf.common;
 
+    requires de.evoal.languages.model.dl;
     requires de.evoal.languages.model.ddl;
     requires de.evoal.languages.model.base;
     requires de.evoal.languages.model.instance;
@@ -28,6 +29,7 @@ module de.evoal.core.ea {
 
     opens de.evoal.core.ea;
 
+    opens de.evoal.core.ea.api.codec to weld.core.impl;
     opens de.evoal.core.ea.main.alterer to weld.core.impl;
     opens de.evoal.core.ea.main.alterer.mutator to weld.core.impl;
     opens de.evoal.core.ea.main.codec to weld.core.impl;
@@ -36,6 +38,7 @@ module de.evoal.core.ea {
     opens de.evoal.core.ea.main.constraint to weld.core.impl;
     opens de.evoal.core.ea.main.fitness to weld.core.impl;
     opens de.evoal.core.ea.main.initial to weld.core.impl;
+    opens de.evoal.core.ea.main.producer to weld.core.impl;
     opens de.evoal.core.ea.main.selector to weld.core.impl;
     opens de.evoal.core.ea.main.search to weld.core.impl;
     opens de.evoal.core.ea.main.statistics to weld.core.impl;
diff --git a/src/evoal/plugins/de.evoal.core.ea/src/main/resources/de/evoal/core/ea/optimisation.dl b/src/evoal/plugins/de.evoal.core.ea/src/main/resources/de/evoal/core/ea/optimisation.dl
index ad95699bd85b9c2b2cc75ae16697c700cebc3812..0aa53130c088141cc0d4b9900966f7ef35a2c17f 100644
--- a/src/evoal/plugins/de.evoal.core.ea/src/main/resources/de/evoal/core/ea/optimisation.dl
+++ b/src/evoal/plugins/de.evoal.core.ea/src/main/resources/de/evoal/core/ea/optimisation.dl
@@ -6,14 +6,36 @@ module de.evoal.core.ea.optimisation {
 		'size-of-population' : int;
 		'maximum-age' : int;
 	
-		genotype : array instance chromosome;
+		genotype : instance genotype;
 	
 		handlers : array instance 'handler';
 		selectors : instance selectors;
 		alterers : instance alterers;
 	}
-	
+
+    /**
+     * Base class for genotypes.
+     */
+	abstract type genotype {
+	}
+
+    /**
+     * A vector-based genotype that automatically maps 'data' to genes.
+     */
+	type 'vector-genotype' extends genotype {
+	    /**
+	     * List of chromosomes for mapping data on different ways.
+	     */
+        chromosomes : array instance chromosome;
+	}
+
+	/**
+	 * Abstract base type for different chromosome types.
+	 */
 	abstract type chromosome {
+	    /**
+	     * A chromosome consists of one to multiple genes.
+	     */
 		genes : array instance gene;
 	}
 	
@@ -30,10 +52,15 @@ module de.evoal.core.ea.optimisation {
 	
 	type 'integer-chromosome' extends chromosome {
 	}
+
+	/**
+	 * A gene maps some data.
+	 */
+	type gene {
+	    content : data;
+	}
 	
-	type gene { content : data; }
-	
-		type pareto extends comparator {
+    type pareto extends comparator {
 	}
 	
 	abstract type handler {}
diff --git a/src/examples/search/search.ol b/src/examples/search/search.ol
index cc5a762eae69c9df9200d2989855907fbd69c109..f7a22e781dad41198597ccac2d2e893e015711a6 100644
--- a/src/examples/search/search.ol
+++ b/src/examples/search/search.ol
@@ -31,14 +31,16 @@ module search {
 		
 		'comparator' := 'numeric-comparator' {};
 	
-	    genotype := [
-	            'bit-chromosome' {
+	    genotype := 'vector-genotype' {
+	        chromosomes := [
+				'bit-chromosome' {
 	                    scale := 12;
 	                    genes:= [
 	                            gene {content:= data 'x:0';}
 	                    ];
 	            }
-	    ];
+			];
+	    };
 	
 	    handlers := [];