diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/api/test/TestApi.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/api/test/TestApi.java
index 317f1e733f0a056a8dd9578b83718b79381a2b1c..32e8965f6bf44c67dcd3ac2e848ef2f461e72f2d 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/api/test/TestApi.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/api/test/TestApi.java
@@ -1,7 +1,8 @@
 package de.unikoblenz.fgbks.api.test;
 
 import de.unikoblenz.fgbks.core.dmn.utils.DmnService;
-import de.unikoblenz.fgbks.core.dmn.verification.VerificationGenerator;
+import de.unikoblenz.fgbks.core.dmn.verification.VerificationService;
+import javax.inject.Inject;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
@@ -17,10 +18,12 @@ public class TestApi {
 
   private static Logger LOGGER = LoggerFactory.getLogger(TestApi.class.getSimpleName());
 
+  @Inject private VerificationService verificationService;
+
   @GET
   @Produces(MediaType.APPLICATION_JSON)
   public Response helloBuilder() {
-    return Response.accepted(VerificationGenerator.generate()).build();
+    return Response.accepted(verificationService.generate()).build();
   }
 
   @POST
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnColumn.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnColumn.java
index 947786ec903ceb31fe7f8f6306e929403559a456..02d05dc0faf6cf5ab74f5f067c7068c1cbdf059b 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnColumn.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnColumn.java
@@ -3,7 +3,7 @@ package de.unikoblenz.fgbks.core.dmn.domain.values;
 import de.unikoblenz.fgbks.core.dmn.domain.ids.ColumnId;
 import java.util.List;
 
-public interface VDmnColumn {
+public interface VDmnColumn extends VDmnElement {
 
   VDmnDecisionTable getDmnDecisionTable();
 
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnDecision.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnDecision.java
index 68171b080353579c024a38acd294070c0f298ce9..f908e84b0a1bee5f1929c959bd118742d49a0ae2 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnDecision.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnDecision.java
@@ -3,7 +3,7 @@ package de.unikoblenz.fgbks.core.dmn.domain.values;
 import de.unikoblenz.fgbks.core.dmn.domain.ids.DecisionId;
 import java.util.List;
 
-public interface VDmnDecision {
+public interface VDmnDecision extends VDmnElement {
 
   DecisionId getDecisionId();
 
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnDecisionTable.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnDecisionTable.java
index 862d9ad046b6616d2239b5bb5066f4c27cc14315..8d4b577145ab7220101e8d7fa3713cd6b65cdfad 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnDecisionTable.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnDecisionTable.java
@@ -3,7 +3,7 @@ package de.unikoblenz.fgbks.core.dmn.domain.values;
 import de.unikoblenz.fgbks.core.dmn.domain.ids.DecisionTableId;
 import java.util.List;
 
-public interface VDmnDecisionTable {
+public interface VDmnDecisionTable extends VDmnElement {
 
   VDmnDecision getDecision();
 
@@ -14,4 +14,6 @@ public interface VDmnDecisionTable {
   List<VDmnInputColumn> getInputColumns();
 
   List<VDmnRule> getRules();
+
+  List<VDmnValue> getValues();
 }
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnElement.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..a7376aa1775474e2fd0e04b51cf539f9b34a3445
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnElement.java
@@ -0,0 +1,3 @@
+package de.unikoblenz.fgbks.core.dmn.domain.values;
+
+public interface VDmnElement {}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnInputValue.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnInputValue.java
index 18a66725d0d1ae95ab62d1dd73e722f97c958a40..53dbbad504b86d1bf3c1cbde0fc5b4a184de0667 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnInputValue.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnInputValue.java
@@ -6,5 +6,7 @@ public interface VDmnInputValue extends VDmnValue {
 
   InputEntryId getInputEntryId();
 
-  VDmnInputColumn getDmnInput();
+  default VDmnInputColumn getDmnInputColumn() {
+    return (VDmnInputColumn) getDmnColumn();
+  }
 }
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnOutputValue.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnOutputValue.java
index f951643b847ba2ef3ae5dad924383dcfb76b027d..609d654052e263c0ec216c4ed9b17b00db8daac9 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnOutputValue.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnOutputValue.java
@@ -6,5 +6,7 @@ public interface VDmnOutputValue extends VDmnValue {
 
   OutputEntryId getOutputEntryId();
 
-  VDmnOutputColumn getDmnOutput();
+  default VDmnOutputColumn getDmnOutputColumn() {
+    return (VDmnOutputColumn) getDmnColumn();
+  }
 }
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnRule.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnRule.java
index 3f84a431b8fb02d91eb3c4cb943d3d982c8e6599..0e6dbb0114237655169491ab0d848e3984a827c9 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnRule.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnRule.java
@@ -4,7 +4,7 @@ import de.unikoblenz.fgbks.core.dmn.domain.common.RowNumber;
 import de.unikoblenz.fgbks.core.dmn.domain.ids.RuleId;
 import java.util.List;
 
-public interface VDmnRule {
+public interface VDmnRule extends VDmnElement {
 
   RowNumber getRowNumber();
 
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnValue.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnValue.java
index ff92718d254430133195bf379023895bde1a0f7a..2a28b5ac24f0583a0fb58246f871372f4cc3066b 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnValue.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnValue.java
@@ -4,7 +4,7 @@ import de.unikoblenz.fgbks.core.dmn.domain.ids.DecisionId;
 import de.unikoblenz.fgbks.core.dmn.domain.ids.DecisionTableId;
 import de.unikoblenz.fgbks.core.dmn.domain.ids.RuleId;
 
-public interface VDmnValue {
+public interface VDmnValue extends VDmnElement {
 
   VDmnRule getDmnRule();
 
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/DmnElementBuilder.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/DmnElementBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..1b3ce58d861efd09cc340908ba5d69697c971aed
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/DmnElementBuilder.java
@@ -0,0 +1,5 @@
+package de.unikoblenz.fgbks.core.dmn.domain.values.impl;
+
+import de.unikoblenz.fgbks.base.builder.DefaultBuilder;
+
+public abstract class DmnElementBuilder<E> extends DefaultBuilder<E> {}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnDecisionImpl.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnDecisionImpl.java
index 2de8b3973a48d5f89a3f3ad943f9df685a14fa16..caf79d692509b849ec9c21037d97e695b8d17811 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnDecisionImpl.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnDecisionImpl.java
@@ -1,6 +1,5 @@
 package de.unikoblenz.fgbks.core.dmn.domain.values.impl;
 
-import de.unikoblenz.fgbks.base.builder.DefaultBuilder;
 import de.unikoblenz.fgbks.core.dmn.domain.ids.DecisionId;
 import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnDecision;
 import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnDecisionTable;
@@ -32,7 +31,7 @@ public class VDmnDecisionImpl implements VDmnDecision {
     return new VDmnDecisionImpl().new Builder();
   }
 
-  public class Builder extends DefaultBuilder<VDmnDecisionImpl> {
+  public class Builder extends DmnElementBuilder<VDmnDecisionImpl> {
 
     public Builder withDecisionId(DecisionId decisionId) {
       value.decisionId = decisionId;
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnDecisionTableImpl.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnDecisionTableImpl.java
index 27ed6ec6babdb1846d64d52c5817aeb927dfaf96..7c3ac9808c490f67843ea1708a3a3ec638e4d384 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnDecisionTableImpl.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnDecisionTableImpl.java
@@ -1,12 +1,12 @@
 package de.unikoblenz.fgbks.core.dmn.domain.values.impl;
 
-import de.unikoblenz.fgbks.base.builder.DefaultBuilder;
 import de.unikoblenz.fgbks.core.dmn.domain.ids.DecisionTableId;
 import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnDecision;
 import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnDecisionTable;
 import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnInputColumn;
 import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnOutputColumn;
 import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnRule;
+import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnValue;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -19,11 +19,13 @@ public class VDmnDecisionTableImpl implements VDmnDecisionTable {
   private List<VDmnOutputColumn> dmnOutputColumns;
   private List<VDmnInputColumn> dmnInputColumns;
   private List<VDmnRule> dmnRules;
+  private List<VDmnValue> dmnValues;
 
   private VDmnDecisionTableImpl() {
     dmnOutputColumns = new ArrayList<>();
     dmnInputColumns = new ArrayList<>();
     dmnRules = new ArrayList<>();
+    dmnValues = new ArrayList<>();
   }
 
   @Override
@@ -51,11 +53,22 @@ public class VDmnDecisionTableImpl implements VDmnDecisionTable {
     return Collections.unmodifiableList(dmnRules);
   }
 
+  @Override
+  public List<VDmnValue> getValues() {
+    return Collections.unmodifiableList(dmnValues);
+  }
+
   public static Builder getBuilder() {
     return new VDmnDecisionTableImpl().new Builder();
   }
 
-  public class Builder extends DefaultBuilder<VDmnDecisionTableImpl> {
+  public class Builder extends DmnElementBuilder<VDmnDecisionTableImpl> {
+
+    private List<VDmnOutputColumnImpl.Builder> dmnOutputColumnsBuilders = new ArrayList<>();
+    private List<VDmnInputColumnImpl.Builder> dmnInputColumnsBuilders = new ArrayList<>();
+    private List<DmnElementBuilder> dmnRulesBuilders = new ArrayList<>();
+    private List<DmnElementBuilder> dmnOutputValueBuilders = new ArrayList<>();
+    private List<DmnElementBuilder> dmnInputValueBuilders = new ArrayList<>();
 
     public Builder withDecisionTableId(DecisionTableId decisionTableId) {
       value.decisionTableId = decisionTableId;
@@ -82,11 +95,23 @@ public class VDmnDecisionTableImpl implements VDmnDecisionTable {
       return this;
     }
 
+    public Builder addDmnValue(VDmnValue dmnValue) {
+      value.dmnValues.add(Validate.notNull(dmnValue));
+      return this;
+    }
+
     @Override
     protected void validate() {
       super.validate();
       Validate.notNull(value.decisionTableId);
       Validate.notNull(value.dmnDecision);
     }
+
+    @Override
+    public VDmnDecisionTableImpl build() {
+      dmnOutputColumnsBuilders.forEach(v -> addDmnOutputColumn(v.build()));
+      dmnInputColumnsBuilders.forEach(v -> addDmnInputColumn(v.build()));
+      return super.build();
+    }
   }
 }
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnInputColumnImpl.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnInputColumnImpl.java
index 64ffed58e287b9ed4c6479e5d77044ed677f9feb..722684c89b86f92bfbd19f79fe2e164db171e513 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnInputColumnImpl.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnInputColumnImpl.java
@@ -1,6 +1,5 @@
 package de.unikoblenz.fgbks.core.dmn.domain.values.impl;
 
-import de.unikoblenz.fgbks.base.builder.DefaultBuilder;
 import de.unikoblenz.fgbks.core.dmn.domain.ids.InputId;
 import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnDecisionTable;
 import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnInputColumn;
@@ -18,7 +17,7 @@ public class VDmnInputColumnImpl extends VDmnColumnImpl implements VDmnInputColu
     return new VDmnInputColumnImpl().new Builder();
   }
 
-  public class Builder extends DefaultBuilder<VDmnInputColumnImpl> {
+  public class Builder extends DmnElementBuilder<VDmnInputColumnImpl> {
 
     public Builder withInputId(InputId inputId) {
       value.columnId = inputId;
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnInputValueImpl.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnInputValueImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..7cf82af83ab44235535be7772ba6515776e5d206
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnInputValueImpl.java
@@ -0,0 +1,60 @@
+package de.unikoblenz.fgbks.core.dmn.domain.values.impl;
+
+import de.unikoblenz.fgbks.core.dmn.domain.ids.InputEntryId;
+import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnInputColumn;
+import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnInputValue;
+import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnRule;
+import org.apache.commons.lang3.Validate;
+
+public class VDmnInputValueImpl extends VDmnValueImpl implements VDmnInputValue {
+
+  private InputEntryId inputEntryId;
+
+  @Override
+  public InputEntryId getInputEntryId() {
+    return inputEntryId;
+  }
+
+  private VDmnInputValueImpl() {}
+
+  public static Builder getBuilder() {
+    return new VDmnInputValueImpl().new Builder();
+  }
+
+  public class Builder extends DmnElementBuilder<VDmnInputValueImpl> {
+
+    public Builder withDmnRule(VDmnRule dmnRule) {
+      value.dmnRule = dmnRule;
+      return this;
+    }
+
+    public Builder withText(String text) {
+      value.text = text;
+      return this;
+    }
+
+    public Builder withDescription(String description) {
+      value.description = description;
+      return this;
+    }
+
+    public Builder withDmnInputColumn(VDmnInputColumn dmnColumn) {
+      value.dmnColumn = dmnColumn;
+      return this;
+    }
+
+    public Builder withInputEntryId(InputEntryId inputEntryId) {
+      value.inputEntryId = inputEntryId;
+      return this;
+    }
+
+    @Override
+    protected void validate() {
+      super.validate();
+      Validate.notNull(value.dmnRule);
+      Validate.notNull(value.text);
+      Validate.notNull(value.dmnColumn);
+      Validate.notNull(value.inputEntryId);
+    }
+  }
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnOutputColumnImpl.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnOutputColumnImpl.java
index a4c99d05a5c96a18962f5452f7c76b3454af02e5..7eb4777b93eda5191e98ae3515e938b9ed6dd3b5 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnOutputColumnImpl.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnOutputColumnImpl.java
@@ -1,6 +1,5 @@
 package de.unikoblenz.fgbks.core.dmn.domain.values.impl;
 
-import de.unikoblenz.fgbks.base.builder.DefaultBuilder;
 import de.unikoblenz.fgbks.core.dmn.domain.ids.InputId;
 import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnDecisionTable;
 import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnOutputColumn;
@@ -18,7 +17,7 @@ public class VDmnOutputColumnImpl extends VDmnColumnImpl implements VDmnOutputCo
     return new VDmnOutputColumnImpl().new Builder();
   }
 
-  public class Builder extends DefaultBuilder<VDmnOutputColumnImpl> {
+  public class Builder extends DmnElementBuilder<VDmnOutputColumnImpl> {
 
     public Builder withInputId(InputId inputId) {
       value.columnId = inputId;
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnOutputValueImpl.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnOutputValueImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..7a58d9864cd0aa8f6708e4445288ec65bd522435
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnOutputValueImpl.java
@@ -0,0 +1,60 @@
+package de.unikoblenz.fgbks.core.dmn.domain.values.impl;
+
+import de.unikoblenz.fgbks.core.dmn.domain.ids.OutputEntryId;
+import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnOutputColumn;
+import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnOutputValue;
+import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnRule;
+import org.apache.commons.lang3.Validate;
+
+public class VDmnOutputValueImpl extends VDmnValueImpl implements VDmnOutputValue {
+
+  private OutputEntryId outputEntryId;
+
+  @Override
+  public OutputEntryId getOutputEntryId() {
+    return outputEntryId;
+  }
+
+  private VDmnOutputValueImpl() {}
+
+  public static Builder getBuilder() {
+    return new VDmnOutputValueImpl().new Builder();
+  }
+
+  public class Builder extends DmnElementBuilder<VDmnOutputValueImpl> {
+
+    public Builder withDmnRule(VDmnRule dmnRule) {
+      value.dmnRule = dmnRule;
+      return this;
+    }
+
+    public Builder withText(String text) {
+      value.text = text;
+      return this;
+    }
+
+    public Builder withDescription(String description) {
+      value.description = description;
+      return this;
+    }
+
+    public Builder withDmnOutputColumn(VDmnOutputColumn dmnColumn) {
+      value.dmnColumn = dmnColumn;
+      return this;
+    }
+
+    public Builder withOutputEntryId(OutputEntryId outputEntryId) {
+      value.outputEntryId = outputEntryId;
+      return this;
+    }
+
+    @Override
+    protected void validate() {
+      super.validate();
+      Validate.notNull(value.dmnRule);
+      Validate.notNull(value.text);
+      Validate.notNull(value.dmnColumn);
+      Validate.notNull(value.outputEntryId);
+    }
+  }
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnRuleImpl.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnRuleImpl.java
index efaefce49ef119049dc4a88d97c4d7f6e27f0cfd..c1e48f05c1b70c98e06d9c38785b1edb747ae0a4 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnRuleImpl.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnRuleImpl.java
@@ -1,6 +1,5 @@
 package de.unikoblenz.fgbks.core.dmn.domain.values.impl;
 
-import de.unikoblenz.fgbks.base.builder.DefaultBuilder;
 import de.unikoblenz.fgbks.core.dmn.domain.common.RowNumber;
 import de.unikoblenz.fgbks.core.dmn.domain.ids.RuleId;
 import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnInputValue;
@@ -47,7 +46,7 @@ public class VDmnRuleImpl implements VDmnRule {
     return new VDmnRuleImpl().new Builder();
   }
 
-  public class Builder extends DefaultBuilder<VDmnRuleImpl> {
+  public class Builder extends DmnElementBuilder<VDmnRuleImpl> {
 
     public Builder withRowNumber(RowNumber rowNumber) {
       value.rowNumber = rowNumber;
@@ -59,12 +58,12 @@ public class VDmnRuleImpl implements VDmnRule {
       return this;
     }
 
-    public Builder addiInputValues(VDmnInputValue inputValue) {
+    public Builder addiInputValue(VDmnInputValue inputValue) {
       value.inputValues.add(Validate.notNull(inputValue));
       return this;
     }
 
-    public Builder addiInputValues(VDmnOutputValue outputValue) {
+    public Builder addOutputValue(VDmnOutputValue outputValue) {
       value.outputValues.add(Validate.notNull(outputValue));
       return this;
     }
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnValueImpl.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnValueImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..c4f28eb7dfb96efb2e624f6de497c1d048f3503d
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnValueImpl.java
@@ -0,0 +1,33 @@
+package de.unikoblenz.fgbks.core.dmn.domain.values.impl;
+
+import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnColumn;
+import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnRule;
+import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnValue;
+
+public abstract class VDmnValueImpl implements VDmnValue {
+
+  protected VDmnRule dmnRule;
+  protected String text;
+  protected String description;
+  protected VDmnColumn dmnColumn;
+
+  @Override
+  public VDmnRule getDmnRule() {
+    return dmnRule;
+  }
+
+  @Override
+  public String getText() {
+    return text;
+  }
+
+  @Override
+  public String getDescription() {
+    return description;
+  }
+
+  @Override
+  public VDmnColumn getDmnColumn() {
+    return dmnColumn;
+  }
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/VerificationGenerator.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/VerificationService.java
similarity index 76%
rename from dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/VerificationGenerator.java
rename to dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/VerificationService.java
index 8bed941e3475a9132349a883f0e650d76bfcd3c6..92fe69693db719e25fd878f85e0f020bf667ddc1 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/VerificationGenerator.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/VerificationService.java
@@ -16,39 +16,42 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
+import javax.inject.Singleton;
 import org.eclipse.microprofile.config.Config;
 import org.eclipse.microprofile.config.ConfigProvider;
 import org.reflections.Reflections;
 
-public class VerificationGenerator {
+@Singleton
+public class VerificationService {
 
   private static final String CONF_VERIFIER_THREADS = "verifier.threads";
+  private static final String CONF_PACKAGE_PATH = "verifier.package";
   private static final Integer DEFAULT_MAX_THREADS = 1;
   private static final String DEFAULT_PACKAGE =
       "de.unikoblenz.fgbks.core.dmn.verification.verifier";
 
-  public static VerifierResultSet generate() {
-    return generate(DEFAULT_PACKAGE, DEFAULT_MAX_THREADS);
-  }
-
-  public static VerifierResultSet generate(String packagePath, Integer maxThreads) {
+  private ExecutorService executor;
+  private Set<Class<?>> verifierClasses;
 
+  protected VerificationService() {
     Config config = ConfigProvider.getConfig();
-    maxThreads = config.getOptionalValue(CONF_VERIFIER_THREADS, Integer.class).orElse(maxThreads);
-
-    ExecutorService executor = Executors.newFixedThreadPool(maxThreads);
-
-    Builder resultBuilder = VerifierResultSet.getBuilder();
-
-    List<Future<VerifierResult>> results = new ArrayList<>(10);
-    System.out.println("Starting calculation with " + maxThreads + " threads.");
-
+    int maxThreads =
+        config.getOptionalValue(CONF_VERIFIER_THREADS, Integer.class).orElse(DEFAULT_MAX_THREADS);
+    executor = Executors.newFixedThreadPool(maxThreads);
+    System.out.println("Creating thread pool with " + maxThreads + " threads!");
+    String packagePath =
+        config.getOptionalValue(CONF_PACKAGE_PATH, String.class).orElse(DEFAULT_PACKAGE);
     Reflections reflections = new Reflections(packagePath);
-    Set<Class<?>> verifierClasses = reflections.getTypesAnnotatedWith(DmnVerifier.class);
+    verifierClasses = reflections.getTypesAnnotatedWith(DmnVerifier.class);
+  }
 
-    // TODO: Load configuraion Propertiey dynamicl
+  public VerifierResultSet generate() {
+    System.out.println("xxx");
     Map<Class<? extends AbstractDmnVerifierConfig>, AbstractDmnVerifierConfig> configs =
         getConfigs();
+    Builder resultBuilder = VerifierResultSet.getBuilder();
+
+    List<Future<VerifierResult>> results = new ArrayList<>(10);
 
     for (Class<?> verifierClass : verifierClasses) {
       AbstractVerifier av = null;
@@ -81,8 +84,7 @@ public class VerificationGenerator {
     return resultBuilder.build();
   }
 
-  private static Map<Class<? extends AbstractDmnVerifierConfig>, AbstractDmnVerifierConfig>
-      getConfigs() {
+  private Map<Class<? extends AbstractDmnVerifierConfig>, AbstractDmnVerifierConfig> getConfigs() {
     Map<Class<? extends AbstractDmnVerifierConfig>, AbstractDmnVerifierConfig> map =
         new ConcurrentHashMap<>();
     map.put(
diff --git a/dmnverifierapi/src/main/resources/application.properties b/dmnverifierapi/src/main/resources/application.properties
index d53a22529b77f21b2b97905533d8e5fe8a60bd23..93113c69cde2b6a419666caca4ed7ad72ec78e7b 100644
--- a/dmnverifierapi/src/main/resources/application.properties
+++ b/dmnverifierapi/src/main/resources/application.properties
@@ -11,3 +11,4 @@ quarkus.http.cors.methods=GET, OPTIONS
 # Amount of threads for calculating the verifications
 verifier.threads=8
 %dev.verifier.threads=4
+verifier.package=de.unikoblenz.fgbks.core.dmn.verification.verifier