diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/api/test/WordnetServiceX.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/api/test/WordnetServiceX.java
new file mode 100644
index 0000000000000000000000000000000000000000..f377f55f5c6cb7deea4102880b787d41be492499
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/api/test/WordnetServiceX.java
@@ -0,0 +1,22 @@
+package de.unikoblenz.fgbks.api.test;
+
+import de.unikoblenz.fgbks.base.wordnet.WordnetService;
+import de.unikoblenz.fgbks.base.wordnet.WordnetServiceFunctions;
+import java.util.Set;
+import javax.enterprise.context.ApplicationScoped;
+
+@ApplicationScoped
+public class WordnetServiceX implements WordnetServiceFunctions {
+
+  private WordnetService wordnetService = WordnetService.getInstance();
+
+  @Override
+  public boolean areNounsSynonyms(String noun1, String noun2) {
+    return wordnetService.areNounsSynonyms(noun1, noun2);
+  }
+
+  @Override
+  public Set<String> getNounsSynonyms(String noun) {
+    return wordnetService.getNounsSynonyms(noun);
+  }
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/wordnet/WordnetService.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/wordnet/WordnetService.java
new file mode 100644
index 0000000000000000000000000000000000000000..61326699b5753f64a5a06cd46bf0185336ef9331
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/wordnet/WordnetService.java
@@ -0,0 +1,128 @@
+package de.unikoblenz.fgbks.base.wordnet;
+
+import edu.mit.jwi.Dictionary;
+import edu.mit.jwi.IDictionary;
+import edu.mit.jwi.item.IIndexWord;
+import edu.mit.jwi.item.ISynset;
+import edu.mit.jwi.item.IWord;
+import edu.mit.jwi.item.IWordID;
+import edu.mit.jwi.item.POS;
+import java.io.File;
+import java.net.URL;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * WordnetService provides some functions from wordnet <br>
+ * First, get the instance with getInstance() (singleton) and than use the provided functions.
+ */
+public final class WordnetService implements WordnetServiceFunctions {
+
+  private static final String PATH_WORDNET = "dict/";
+  // Singleton pattern
+  private static WordnetService instance;
+
+  private IDictionary dictionary;
+
+  private WordnetService() {
+    setupDictionary();
+  }
+
+  /**
+   * Get the singleton instance of the wordnet service.
+   *
+   * @param refresh true for a new initialisation of wordnet
+   * @return the wordnet service instance
+   */
+  public static WordnetService getInstance(boolean refresh) {
+    if (instance == null) {
+      instance = new WordnetService();
+    } else if (refresh) {
+      instance.setupDictionary();
+    }
+    return instance;
+  }
+
+  /**
+   * Get the singleton instance of the wordnet service.
+   *
+   * @return the wordnet service instance
+   */
+  public static WordnetService getInstance() {
+    return getInstance(false);
+  }
+
+  private void setupDictionary() {
+    if (dictionary != null) {
+      dictionary.close();
+    }
+    dictionary = null;
+    try {
+      String totalPath =
+          new File(getClass().getClassLoader().getResource(PATH_WORDNET).getFile())
+              .getAbsolutePath();
+      dictionary = new Dictionary(new URL("file", null, totalPath));
+      dictionary.open();
+    } catch (Exception e) {
+      dictionary = null;
+    }
+  }
+
+  /**
+   * Return true, if both nouns are in one synset. <br>
+   * "examination" & "exam" = true <br>
+   * "bill" & "invoice" = true<br>
+   *
+   * @return true, if both nouns are synonyms
+   */
+  @Override
+  public boolean areNounsSynonyms(String noun1, String noun2) {
+    if (dictionary == null) {
+      return false;
+    }
+    noun1 = noun1.toLowerCase().replace(" ", "_");
+    noun2 = noun2.toLowerCase().replace(" ", "_");
+    if (noun1.equals(noun2)) {
+      return false;
+    }
+    return getNounsSynonyms(noun1).contains(noun2);
+  }
+
+  @Override
+  public Set<String> getNounsSynonyms(String noun) {
+    if (dictionary == null) {
+      return Collections.emptySet();
+    }
+    noun = noun.toLowerCase().replace(" ", "_");
+    IIndexWord idxWord = null;
+    try {
+      idxWord = dictionary.getIndexWord(noun, POS.NOUN);
+    } catch (Exception e) {
+      // nothing
+    }
+    if (idxWord == null) {
+      return Collections.emptySet();
+    }
+    List<IWordID> wordIDs = idxWord.getWordIDs();
+    Set<String> returnSet = new HashSet<>();
+    for (IWordID wordID : wordIDs) {
+      IWord word = dictionary.getWord(wordID);
+      ISynset synset = word.getSynset();
+
+      // iterate over words associated with the synset
+      for (IWord w : synset.getWords()) {
+        returnSet.add(w.getLemma());
+      }
+    }
+    return returnSet;
+  }
+
+  /** Close the wordnet dictionary. */
+  public void close() {
+    if (dictionary != null && dictionary.isOpen()) {
+      dictionary.close();
+    }
+  }
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/wordnet/WordnetServiceFunctions.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/wordnet/WordnetServiceFunctions.java
new file mode 100644
index 0000000000000000000000000000000000000000..9ae106e9fcb314fd40c4d8e8697ae3d8cb342fb9
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/wordnet/WordnetServiceFunctions.java
@@ -0,0 +1,16 @@
+package de.unikoblenz.fgbks.base.wordnet;
+
+import java.util.Set;
+
+public interface WordnetServiceFunctions {
+  /**
+   * Return true, if both nouns are in one synset. <br>
+   * "examination" & "exam" = true <br>
+   * "bill" & "invoice" = true<br>
+   *
+   * @return true, if both nouns are synonyms
+   */
+  boolean areNounsSynonyms(String noun1, String noun2);
+
+  Set<String> getNounsSynonyms(String noun);
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verfication/VerificationType.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verfication/VerificationType.java
new file mode 100644
index 0000000000000000000000000000000000000000..f2957f190b974ad5ebcf1463f76e4ae9938a4c2a
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verfication/VerificationType.java
@@ -0,0 +1,37 @@
+package de.unikoblenz.fgbks.core.dmn.verfication;
+
+import static de.unikoblenz.fgbks.core.dmn.verfication.VerificationClassification.DECISION_LOGIC_LEVEL_VERIFICATION;
+
+import de.unikoblenz.fgbks.core.dmn.verfication.verifier.AbstractVerifier;
+import de.unikoblenz.fgbks.core.dmn.verfication.verifier.SampleVerifier;
+import java.io.Serializable;
+import javax.json.bind.annotation.JsonbProperty;
+import org.apache.commons.lang3.Validate;
+
+public enum VerificationType implements Serializable {
+  IDENTICAL_BUSINESS_RULE_VERIFICATION(
+      DECISION_LOGIC_LEVEL_VERIFICATION, "Identical Business Rules");
+
+  private VerificationClassification classification;
+  private String name;
+  private transient Class<AbstractVerifier> verifierClass;
+
+  @JsonbProperty("classification")
+  public VerificationClassification getClassification() {
+    return classification;
+  }
+
+  @JsonbProperty("name")
+  public String getName() {
+    return name;
+  }
+
+  public AbstractVerifier getNewInstance() {
+    return new SampleVerifier();
+  }
+
+  VerificationType(VerificationClassification classification, String name) {
+    this.classification = Validate.notNull(classification);
+    this.name = Validate.notBlank(name);
+  }
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verfication/result/VerifierResult.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verfication/result/VerifierResult.java
new file mode 100644
index 0000000000000000000000000000000000000000..8895b07daa3499d377edc21720028062d740adcb
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verfication/result/VerifierResult.java
@@ -0,0 +1,67 @@
+package de.unikoblenz.fgbks.core.dmn.verfication.result;
+
+import de.unikoblenz.fgbks.base.builder.DefaultBuilder;
+import de.unikoblenz.fgbks.core.dmn.verfication.VerificationType;
+import de.unikoblenz.fgbks.core.dmn.verfication.verifier.AbstractVerifier;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import javax.json.bind.annotation.JsonbProperty;
+import org.apache.commons.lang3.Validate;
+
+public class VerifierResult extends AbstractResultObject {
+
+  private VerificationType verificationType;
+  private Set<VerificationResultEntry> verificationResultEntries;
+
+  public VerifierResult() {
+    this.verificationResultEntries = ConcurrentHashMap.newKeySet();
+  }
+
+  @JsonbProperty("type")
+  public VerificationType getVerificationType() {
+    return verificationType;
+  }
+
+  @JsonbProperty("type_name")
+  public String getVerificationTypeName() {
+    return verificationType.getName();
+  }
+
+  @JsonbProperty("entries")
+  public Set<VerificationResultEntry> getVerificationResultEntries() {
+    return new HashSet<>(verificationResultEntries);
+  }
+
+  @JsonbProperty("size")
+  public int getAmountOfEntries() {
+    return verificationResultEntries.size();
+  }
+
+  public static Builder getBuilder() {
+    return new VerifierResult().new Builder();
+  }
+
+  public class Builder extends DefaultBuilder<VerifierResult> {
+
+    public Builder withVerificationType(VerificationType verificationType) {
+      value.verificationType = Validate.notNull(verificationType);
+      return this;
+    }
+
+    public Builder addVerificationResultEntry(VerificationResultEntry verificationResultEntry) {
+      value.verificationResultEntries.add(Validate.notNull(verificationResultEntry));
+      return this;
+    }
+
+    public Builder fromVerifier(AbstractVerifier verifier) {
+      return withVerificationType(Validate.notNull(verifier).getVerificationType());
+    }
+
+    @Override
+    protected void validate() {
+      super.validate();
+      Validate.notNull(value.verificationType);
+    }
+  }
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verfication/result/VerifierResultSet.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verfication/result/VerifierResultSet.java
new file mode 100644
index 0000000000000000000000000000000000000000..7d949525de30df3b66684a06ae043b982d3e4e30
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verfication/result/VerifierResultSet.java
@@ -0,0 +1,43 @@
+package de.unikoblenz.fgbks.core.dmn.verfication.result;
+
+import de.unikoblenz.fgbks.base.builder.DefaultBuilder;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import javax.json.bind.annotation.JsonbProperty;
+import org.apache.commons.lang3.Validate;
+
+public class VerifierResultSet extends AbstractResultObject {
+
+  private Set<VerifierResult> verifierResults;
+
+  protected VerifierResultSet() {
+    this.verifierResults = ConcurrentHashMap.newKeySet();
+  }
+
+  @JsonbProperty("verifier")
+  public Set<VerifierResult> getVerifierResults() {
+    return new HashSet<>(verifierResults);
+  }
+
+  @JsonbProperty("size")
+  public int getAmountOfVerifier() {
+    return verifierResults.size();
+  }
+
+  private void addVerifierResult(VerifierResult verifierResult) {
+    verifierResults.add(verifierResult);
+  }
+
+  public static Builder getBuilder() {
+    return new VerifierResultSet().new Builder();
+  }
+
+  public class Builder extends DefaultBuilder<VerifierResultSet> {
+
+    public Builder addVerifierResult(VerifierResult verifierResult) {
+      value.addVerifierResult(Validate.notNull(verifierResult));
+      return this;
+    }
+  }
+}