diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/vdmn/VDmnColumn.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/vdmn/VDmnColumn.java
index 0368d782ac59edbf3637b768ca38dd0fc16b0903..c4487cdeb81dcf9810a597257239fcb1182928ba 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/vdmn/VDmnColumn.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/vdmn/VDmnColumn.java
@@ -20,6 +20,26 @@ public interface VDmnColumn extends VDmnElement {
    */
   VDmnDecisionTable getDmnDecisionTable();
 
+  /**
+   * Check, if the given column is a {@link VDmnInputColumn}. If this method returns true, than
+   * {@link VDmnColumn#isOutputColumn()} returns false.
+   *
+   * @return true, if the current column is a input column
+   */
+  default boolean isInputColumn() {
+    return this instanceof VDmnInputColumn;
+  }
+
+  /**
+   * Check, if the given column is a {@link VDmnOutputColumn}. If this method returns true, than
+   * {@link VDmnColumn#isInputColumn()} returns false.
+   *
+   * @return true, if the current column is a output column
+   */
+  default boolean isOutputColumn() {
+    return this instanceof VDmnOutputColumn;
+  }
+
   /**
    * Get the list of predefined {@link StringValue}s, if the column has the type {@link
    * VTypeRef#STRING} and the model contains these values.
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/vdmn/VDmnValue.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/vdmn/VDmnValue.java
index cf33286d8bb9bf364a1a051950679e3b1fb52cc3..4b1821aaba9b89987bb338859aa65163fb605652 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/vdmn/VDmnValue.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/domain/vdmn/VDmnValue.java
@@ -115,7 +115,7 @@ public interface VDmnValue extends VDmnElement {
    * @return true, if the value is a input value
    */
   default boolean isInputValue() {
-    return getDmnColumn() instanceof VDmnInputColumn;
+    return getDmnColumn().isInputColumn();
   }
 
   /**
@@ -124,7 +124,7 @@ public interface VDmnValue extends VDmnElement {
    * @return true, if the value is a output value
    */
   default boolean isOutputValue() {
-    return getDmnColumn() instanceof VDmnOutputColumn;
+    return getDmnColumn().isOutputColumn();
   }
 
   /**
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/classification/ModelingLevelVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/classification/ModelingLevelVerification.java
new file mode 100644
index 0000000000000000000000000000000000000000..25f61e58602a13caa8afb9b96957a91791396756
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/classification/ModelingLevelVerification.java
@@ -0,0 +1,19 @@
+package de.unikoblenz.fgbks.core.dmn.verification.verifier.classification;
+
+import de.unikoblenz.fgbks.base.domain.Description;
+import de.unikoblenz.fgbks.base.domain.Name;
+
+@Classification
+public class ModelingLevelVerification extends AbstractClassificationType {
+
+  private static final ModelingLevelVerification instance =
+      new ModelingLevelVerification();
+
+  private ModelingLevelVerification() {
+    super(new Name("Modeling"), new Description("test")); // TODO
+  }
+
+  public static ModelingLevelVerification getInstance() {
+    return instance;
+  }
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PredefinedExistingValueVerifier.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PredefinedExistingValueVerifier.java
new file mode 100644
index 0000000000000000000000000000000000000000..aef754da4061b7c77d9b3b3b8cba51c7c5476ed2
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/impl/PredefinedExistingValueVerifier.java
@@ -0,0 +1,86 @@
+package de.unikoblenz.fgbks.core.dmn.verification.verifier.impl;
+
+import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.VerificationFix.SHOW_INPUT_ENTRIES;
+import static de.unikoblenz.fgbks.core.dmn.verification.result.actions.VerificationFix.SHOW_OUTPUT_ENTRIES;
+
+import de.unikoblenz.fgbks.base.domain.StringValue;
+import de.unikoblenz.fgbks.base.utils.boundary.impl.StringBoundary;
+import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnColumn;
+import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnInputValue;
+import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnOutputValue;
+import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VDmnValue;
+import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VTypeRef;
+import de.unikoblenz.fgbks.core.dmn.domain.vdmn.utils.VDmnFunctions;
+import de.unikoblenz.fgbks.core.dmn.verification.result.VerificationResultEntry.VerificationClassification;
+import de.unikoblenz.fgbks.core.dmn.verification.result.VerificationResultEntryElement;
+import de.unikoblenz.fgbks.core.dmn.verification.verifier.AbstractVerifier;
+import de.unikoblenz.fgbks.core.dmn.verification.verifier.DmnVerifier;
+import de.unikoblenz.fgbks.core.dmn.verification.verifier.types.PredefinedExistingValueVerification;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+@DmnVerifier(verifierType = PredefinedExistingValueVerification.class)
+public class PredefinedExistingValueVerifier extends AbstractVerifier {
+
+  @Override
+  protected void doVerification() {
+    for (VDmnColumn stringColumn :
+        VDmnFunctions.getColumnsByTypeRef(
+            dmnObjectContainer.getVDmnDefinition(), VTypeRef.STRING)) {
+      checkStringColumns(stringColumn);
+    }
+  }
+
+  private void checkStringColumns(VDmnColumn stringColumn) {
+    // Check, if there are  PredefinedValues defined
+    boolean predefinedValuesArePresent = stringColumn.getPredefinedValues().isPresent();
+    Set<String> predefinedValues = new HashSet<>();
+    if (predefinedValuesArePresent) {
+      predefinedValues =
+          stringColumn.getPredefinedValues().get().stream()
+              .map(StringValue::getValue)
+              .collect(Collectors.toSet());
+    }
+    for (VDmnValue stringValue : stringColumn.getValues()) {
+      // do not check empty values
+      if (!stringValue.getText().getValue().isEmpty()) {
+        if (stringValue.isInputValue()) {
+          checkStringValue((VDmnInputValue) stringValue, predefinedValues);
+        } else {
+          checkStringValue((VDmnOutputValue) stringValue, predefinedValues);
+        }
+      }
+    }
+  }
+
+  private void checkStringValue(VDmnOutputValue stringValue, Set<String> predefinedValues) {
+    // get the Text and remove the "
+    String parsedOutputText = stringValue.getText().getValue().replace('"', '\0').trim();
+    if (!predefinedValues.contains(parsedOutputText)) {
+      addToResult(stringValue, parsedOutputText);
+    }
+  }
+
+  private void checkStringValue(VDmnInputValue stringValue, Set<String> predefinedValues) {
+    // Do check with input boundary
+    if (stringValue.getBoundary() instanceof StringBoundary) {
+      StringBoundary sb = (StringBoundary) stringValue.getBoundary();
+      for (String s : sb.getValues()) {
+        if (!predefinedValues.contains(s)) {
+          addToResult(stringValue, s);
+        }
+      }
+    }
+  }
+
+  private void addToResult(VDmnValue stringValue, String missingStringValue) {
+    vreFactory.addElement(VerificationResultEntryElement.create(stringValue));
+    vreFactory.addVerificationFix(
+        stringValue.isInputValue() ? SHOW_INPUT_ENTRIES : SHOW_OUTPUT_ENTRIES);
+    vreFactory.addToEntry(
+        VerificationClassification.WARNING,
+        "String value \"%s\" was not found in the list of predefined values.",
+        missingStringValue);
+  }
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PredefinedExistingValueVerification.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PredefinedExistingValueVerification.java
new file mode 100644
index 0000000000000000000000000000000000000000..c15ae69f9f7d523f445fc9b22389a0c4d778f8f2
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/core/dmn/verification/verifier/types/PredefinedExistingValueVerification.java
@@ -0,0 +1,30 @@
+package de.unikoblenz.fgbks.core.dmn.verification.verifier.types;
+
+import de.unikoblenz.fgbks.base.domain.Description;
+import de.unikoblenz.fgbks.base.domain.Name;
+import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.ClassificationType;
+import de.unikoblenz.fgbks.core.dmn.verification.verifier.classification.ModelingLevelVerification;
+import javax.validation.constraints.NotNull;
+
+@Type
+public class PredefinedExistingValueVerification extends AbstractVerificationType {
+
+  private static final PredefinedExistingValueVerification instance = new PredefinedExistingValueVerification();
+
+  private PredefinedExistingValueVerification() {
+    super(
+        new Name("PredefinedExistingValueVerification"),
+        new Description(
+            "Es gibt in einer Tabellen-Zelle einen String Value, der aber nicht in der Liste der "
+                + "Predefines Values vorgesehen ist.")); // TODO englisch
+  }
+
+  public static PredefinedExistingValueVerification getInstance() {
+    return instance;
+  }
+
+  @Override
+  public @NotNull ClassificationType getClassification() {
+    return ModelingLevelVerification.getInstance();
+  }
+}