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 32e8965f6bf44c67dcd3ac2e848ef2f461e72f2d..3fc966552f7e173d15c6fe2f2eb5e7671aeb166e 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,5 +1,6 @@
 package de.unikoblenz.fgbks.api.test;
 
+import de.unikoblenz.fgbks.core.dmn.utils.DmnObjectContainer;
 import de.unikoblenz.fgbks.core.dmn.utils.DmnService;
 import de.unikoblenz.fgbks.core.dmn.verification.VerificationService;
 import javax.inject.Inject;
@@ -18,6 +19,8 @@ public class TestApi {
 
   private static Logger LOGGER = LoggerFactory.getLogger(TestApi.class.getSimpleName());
 
+  @Inject private DmnService dmnService;
+
   @Inject private VerificationService verificationService;
 
   @GET
@@ -31,8 +34,8 @@ public class TestApi {
   @Produces(MediaType.TEXT_PLAIN)
   @Consumes(MediaType.TEXT_XML)
   public String xx(String payload) {
-    DmnService dmnService = DmnService.getDmnServiceFromXml(payload);
-    dmnService.x();
+    DmnObjectContainer container = dmnService.getDmnServiceFromXml(payload);
+    container.x();
     return "yes";
   }
 }
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/builder/DefaultBuilder.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/builder/DefaultBuilder.java
index 26397bf9d8b75f31ee72e8380bb21e9f50a66ed5..59bbb7d62d81dd3191878b5f19493d1ef8b30362 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/builder/DefaultBuilder.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/builder/DefaultBuilder.java
@@ -2,6 +2,7 @@ package de.unikoblenz.fgbks.base.builder;
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Modifier;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 
@@ -51,7 +52,8 @@ public class DefaultBuilder<E> extends AbstractBuilder<E, DefaultBuilder<E>> {
   @Override
   protected E newInstance() {
     Class<?> directSubclass = getClass();
-    while (directSubclass.getSuperclass() != DefaultBuilder.class) {
+    while (directSubclass.getSuperclass() != DefaultBuilder.class
+        && !Modifier.isAbstract(directSubclass.getSuperclass().getModifiers())) {
       directSubclass = directSubclass.getSuperclass();
     }
     Type genericSuperclass = directSubclass.getGenericSuperclass();
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/ids/AbstractId.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/ids/AbstractId.java
index e97c5081cc2fae880d1b10891af5250597806c38..eaa62aaaf52df0da8382d918ab9a92eb061bfade 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/ids/AbstractId.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/ids/AbstractId.java
@@ -16,4 +16,9 @@ public abstract class AbstractId extends AbstractStringValueObject {
   protected Integer getMaxLength() {
     return 100;
   }
+
+  @Override
+  public String toString() {
+    return this.getClassName() + ": " + this.getValue();
+  }
 }
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/ids/DefinitionId.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/ids/DefinitionId.java
new file mode 100644
index 0000000000000000000000000000000000000000..9a35b398170bdc770dbd2f885ff6a7f99d034c7f
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/ids/DefinitionId.java
@@ -0,0 +1,12 @@
+package de.unikoblenz.fgbks.core.dmn.domain.ids;
+
+public class DefinitionId extends AbstractId {
+
+  public DefinitionId(DefinitionId initialValue) {
+    this(initialValue.getValue());
+  }
+
+  public DefinitionId(String initialValue) {
+    super(initialValue);
+  }
+}
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 f908e84b0a1bee5f1929c959bd118742d49a0ae2..7abff8a076ff33c24ab88f97bdb799ab12ccca30 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
@@ -1,11 +1,12 @@
 package de.unikoblenz.fgbks.core.dmn.domain.values;
 
 import de.unikoblenz.fgbks.core.dmn.domain.ids.DecisionId;
-import java.util.List;
 
 public interface VDmnDecision extends VDmnElement {
 
+  VDmnDefinition getDmnDefinition();
+
   DecisionId getDecisionId();
 
-  List<VDmnDecisionTable> getDmnDecisionTables();
+  VDmnDecisionTable getDmnDecisionTable();
 }
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnDefinition.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnDefinition.java
new file mode 100644
index 0000000000000000000000000000000000000000..d911997f1e65ef9a378229e3316c13561958000d
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/VDmnDefinition.java
@@ -0,0 +1,11 @@
+package de.unikoblenz.fgbks.core.dmn.domain.values;
+
+import de.unikoblenz.fgbks.core.dmn.domain.ids.DefinitionId;
+import java.util.List;
+
+public interface VDmnDefinition extends VDmnElement {
+
+  DefinitionId getDefinitionId();
+
+  List<VDmnDecision> getDmnDecisions();
+}
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 1995c88c2ed309a8209e08e58e79ffa5e0661641..62d955b667884128a2029072f472151ef6c208f7 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
@@ -3,18 +3,20 @@ package de.unikoblenz.fgbks.core.dmn.domain.values.impl;
 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;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
+import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnDefinition;
 import org.apache.commons.lang3.Validate;
 
 public class VDmnDecisionImpl implements VDmnDecision {
 
+  private VDmnDefinition dmnDefinition;
   private DecisionId decisionId;
-  private List<VDmnDecisionTable> dmnDecisionTables;
+  private VDmnDecisionTable dmnDecisionTable;
 
-  private VDmnDecisionImpl() {
-    dmnDecisionTables = new ArrayList<>();
+  private VDmnDecisionImpl() {}
+
+  @Override
+  public VDmnDefinition getDmnDefinition() {
+    return dmnDefinition;
   }
 
   @Override
@@ -23,8 +25,8 @@ public class VDmnDecisionImpl implements VDmnDecision {
   }
 
   @Override
-  public List<VDmnDecisionTable> getDmnDecisionTables() {
-    return Collections.unmodifiableList(dmnDecisionTables);
+  public VDmnDecisionTable getDmnDecisionTable() {
+    return dmnDecisionTable;
   }
 
   public static Builder getBuilder() {
@@ -33,19 +35,24 @@ public class VDmnDecisionImpl implements VDmnDecision {
 
   public class Builder extends DmnElementBuilder<VDmnDecisionImpl> {
 
+    public Builder withDmnDefinition(VDmnDefinition dmnDefinition) {
+      value.dmnDefinition = dmnDefinition;
+      return this;
+    }
+
     public Builder withDecisionId(DecisionId decisionId) {
       value.decisionId = decisionId;
       return this;
     }
 
-    public Builder addDmnDecisionTable(VDmnDecisionTable dmnDecisionTable) {
-      value.dmnDecisionTables.add(Validate.notNull(dmnDecisionTable));
+    public Builder withDmnDecisionTable(VDmnDecisionTable dmnDecisionTable) {
+      value.dmnDecisionTable = dmnDecisionTable;
       return this;
     }
 
-    public Builder addDmnDecisionTableFromBuilder(
+    public Builder withDmnDecisionTableFromBuilder(
         VDmnDecisionTableImpl.Builder dmnDecisionTableBuilder) {
-      addDmnDecisionTable(dmnDecisionTableBuilder.getUnbuildValue());
+      withDmnDecisionTable(dmnDecisionTableBuilder.getUnbuildValue());
       dmnDecisionTableBuilder.withDmnDecision(value);
       return this;
     }
@@ -53,7 +60,9 @@ public class VDmnDecisionImpl implements VDmnDecision {
     @Override
     protected void validate() {
       super.validate();
+      Validate.notNull(value.dmnDefinition);
       Validate.notNull(value.decisionId);
+      Validate.notNull(value.dmnDecisionTable);
     }
   }
 }
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnDefinitionImpl.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnDefinitionImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..a54dcfde5504793e78f2d3e5f95f6b262b2bf279
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/impl/VDmnDefinitionImpl.java
@@ -0,0 +1,57 @@
+package de.unikoblenz.fgbks.core.dmn.domain.values.impl;
+
+import de.unikoblenz.fgbks.core.dmn.domain.ids.DefinitionId;
+import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnDecision;
+import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnDefinition;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.commons.lang3.Validate;
+
+public class VDmnDefinitionImpl implements VDmnDefinition {
+
+  private DefinitionId definitionId;
+  private List<VDmnDecision> dmnDecisions;
+
+  private VDmnDefinitionImpl() {
+    dmnDecisions = new ArrayList<>();
+  }
+
+  @Override
+  public DefinitionId getDefinitionId() {
+    return definitionId;
+  }
+
+  @Override
+  public List<VDmnDecision> getDmnDecisions() {
+    return dmnDecisions;
+  }
+
+  public static Builder getBuilder() {
+    return new VDmnDefinitionImpl().new Builder();
+  }
+
+  public class Builder extends DmnElementBuilder<VDmnDefinitionImpl> {
+
+    public Builder withDefinitionId(DefinitionId definitionId) {
+      value.definitionId = definitionId;
+      return this;
+    }
+
+    public Builder addDmnDecision(VDmnDecision dmnDecision) {
+      value.dmnDecisions.add(Validate.notNull(dmnDecision));
+      return this;
+    }
+
+    public Builder addDmnDecisionFromBuilder(VDmnDecisionImpl.Builder dmnDecisionBuilder) {
+      addDmnDecision(dmnDecisionBuilder.getUnbuildValue());
+      dmnDecisionBuilder.withDmnDefinition(value);
+      return this;
+    }
+
+    @Override
+    protected void validate() {
+      super.validate();
+      Validate.notNull(value.definitionId);
+    }
+  }
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/parser/DmnModelInstanceWrapper.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/parser/DmnModelInstanceWrapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..1169ea352c63c401078941f8ce0e107df23d7d35
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/parser/DmnModelInstanceWrapper.java
@@ -0,0 +1,9 @@
+package de.unikoblenz.fgbks.core.dmn.domain.values.parser;
+
+import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnDefinition;
+import org.camunda.bpm.model.dmn.DmnModelInstance;
+
+public interface DmnModelInstanceWrapper {
+
+  VDmnDefinition getVDmnDefinition(DmnModelInstance dmnModelInstance);
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/parser/SimpleParser.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/parser/SimpleParser.java
new file mode 100644
index 0000000000000000000000000000000000000000..224df4ab480672d2c6cfc8caaf4e37ebdcdb0497
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/values/parser/SimpleParser.java
@@ -0,0 +1,29 @@
+package de.unikoblenz.fgbks.core.dmn.domain.values.parser;
+
+import de.unikoblenz.fgbks.core.dmn.domain.ids.DecisionId;
+import de.unikoblenz.fgbks.core.dmn.domain.ids.DefinitionId;
+import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnDefinition;
+import de.unikoblenz.fgbks.core.dmn.domain.values.impl.VDmnDecisionImpl;
+import de.unikoblenz.fgbks.core.dmn.domain.values.impl.VDmnDefinitionImpl;
+import javax.inject.Singleton;
+import org.camunda.bpm.model.dmn.DmnModelInstance;
+import org.camunda.bpm.model.dmn.instance.Decision;
+
+@Singleton
+public class SimpleParser implements DmnModelInstanceWrapper {
+
+  @Override
+  public VDmnDefinition getVDmnDefinition(DmnModelInstance dmnModel) {
+    VDmnDefinitionImpl.Builder definitionBuilder =
+        VDmnDefinitionImpl.getBuilder()
+            .withDefinitionId(new DefinitionId(dmnModel.getDefinitions().getId()));
+    for (Decision x : dmnModel.getModelElementsByType(Decision.class)) {
+      VDmnDecisionImpl.Builder vDmnDecisionBuilder =
+          VDmnDecisionImpl.getBuilder().withDecisionId(new DecisionId(x.getId()));
+      definitionBuilder.addDmnDecisionFromBuilder(vDmnDecisionBuilder);
+
+      x.getId();
+    }
+    return definitionBuilder.build();
+  }
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/utils/DmnObjectContainer.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/utils/DmnObjectContainer.java
new file mode 100644
index 0000000000000000000000000000000000000000..171a012678780c1be3cea1aef5a2ca89362414a0
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/utils/DmnObjectContainer.java
@@ -0,0 +1,40 @@
+package de.unikoblenz.fgbks.core.dmn.utils;
+
+import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnDefinition;
+import java.util.List;
+import org.camunda.bpm.dmn.engine.DmnDecision;
+import org.camunda.bpm.model.dmn.DmnModelInstance;
+import org.camunda.bpm.model.dmn.instance.Decision;
+
+public class DmnObjectContainer {
+
+  private final List<DmnDecision> dmnDecisions;
+  private final DmnModelInstance dmnModel;
+  private final VDmnDefinition vDmnDefinition;
+
+  public List<DmnDecision> getDmnDecisions() {
+    return dmnDecisions;
+  }
+
+  public DmnModelInstance getDmnModel() {
+    return dmnModel;
+  }
+
+  public VDmnDefinition getvDmnDefinition() {
+    return vDmnDefinition;
+  }
+
+  public DmnObjectContainer(
+      List<DmnDecision> dmnDecisions, DmnModelInstance dmnModel, VDmnDefinition vDmnDefinition) {
+    this.dmnDecisions = dmnDecisions;
+    this.dmnModel = dmnModel;
+    this.vDmnDefinition = vDmnDefinition;
+  }
+
+  // TODO: delete!
+  public void x() {
+    dmnModel.getModelElementsByType(Decision.class).stream()
+        .map(a -> a.getId())
+        .forEach(System.out::println);
+  }
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/utils/DmnService.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/utils/DmnService.java
index 3d9706763da4ae6b6235fe3c1fb2631a8ead652e..7a55bd9c1888da46c808b129866562f9f5f832a1 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/utils/DmnService.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/utils/DmnService.java
@@ -1,20 +1,23 @@
 package de.unikoblenz.fgbks.core.dmn.utils;
 
+import de.unikoblenz.fgbks.core.dmn.domain.values.VDmnDefinition;
+import de.unikoblenz.fgbks.core.dmn.domain.values.parser.SimpleParser;
 import java.nio.charset.Charset;
 import java.util.List;
+import javax.inject.Inject;
+import javax.inject.Singleton;
 import org.apache.commons.io.IOUtils;
 import org.camunda.bpm.dmn.engine.DmnDecision;
 import org.camunda.bpm.dmn.engine.DmnEngineConfiguration;
 import org.camunda.bpm.model.dmn.DmnModelInstance;
 import org.camunda.bpm.model.dmn.impl.DmnParser;
-import org.camunda.bpm.model.dmn.instance.Decision;
 
+@Singleton
 public class DmnService {
 
-  private final List<DmnDecision> dmnDecisions;
-  private final DmnModelInstance dmnModel;
+  @Inject SimpleParser simpleDmnParser;
 
-  public static DmnService getDmnServiceFromXml(String dmnXmlString) {
+  public DmnObjectContainer getDmnServiceFromXml(String dmnXmlString) {
     List<DmnDecision> dmnDecisions =
         DmnEngineConfiguration.createDefaultDmnEngineConfiguration()
             .buildEngine()
@@ -23,17 +26,7 @@ public class DmnService {
         new DmnParser()
             .parseModelFromStream(IOUtils.toInputStream(dmnXmlString, Charset.defaultCharset()));
 
-    return new DmnService(dmnDecisions, dmnModel);
-  }
-
-  private DmnService(List<DmnDecision> dmnDecisionsDmnModelInstance, DmnModelInstance dmnModel) {
-    this.dmnModel = dmnModel;
-    this.dmnDecisions = dmnDecisionsDmnModelInstance;
-  }
-
-  public void x() {
-    dmnModel.getModelElementsByType(Decision.class).stream()
-        .map(a -> a.getId())
-        .forEach(System.out::println);
+    VDmnDefinition vDmnDefinition = simpleDmnParser.getVDmnDefinition(dmnModel);
+    return new DmnObjectContainer(dmnDecisions, dmnModel, vDmnDefinition);
   }
 }
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/VerificationService.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/VerificationService.java
index 92fe69693db719e25fd878f85e0f020bf667ddc1..7d2c54ae74b2a133c75a144dc09efedf2deb1a06 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/VerificationService.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/VerificationService.java
@@ -1,5 +1,6 @@
 package de.unikoblenz.fgbks.core.dmn.verification;
 
+import de.unikoblenz.fgbks.core.dmn.domain.values.parser.SimpleParser;
 import de.unikoblenz.fgbks.core.dmn.verification.result.VerifierResult;
 import de.unikoblenz.fgbks.core.dmn.verification.result.VerifierResultSet;
 import de.unikoblenz.fgbks.core.dmn.verification.result.VerifierResultSet.Builder;
@@ -16,6 +17,7 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
+import javax.inject.Inject;
 import javax.inject.Singleton;
 import org.eclipse.microprofile.config.Config;
 import org.eclipse.microprofile.config.ConfigProvider;
@@ -33,6 +35,8 @@ public class VerificationService {
   private ExecutorService executor;
   private Set<Class<?>> verifierClasses;
 
+  @Inject private SimpleParser parser;
+
   protected VerificationService() {
     Config config = ConfigProvider.getConfig();
     int maxThreads =