diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/AbstractGrowingBoundary.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/AbstractGrowingBoundary.java
index 17107d44c28d037ebc242652cac60dac396093a5..03a0323bc9c010bbd721c849de3c4180b8702486 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/AbstractGrowingBoundary.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/AbstractGrowingBoundary.java
@@ -6,7 +6,7 @@ import de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheck;
 import de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType;
 import de.unikoblenz.fgbks.base.utils.boundary.checker.CheckEqual;
 import de.unikoblenz.fgbks.base.utils.boundary.checker.CheckInContact;
-import de.unikoblenz.fgbks.base.utils.boundary.checker.CheckIsSubsumes;
+import de.unikoblenz.fgbks.base.utils.boundary.checker.CheckIsSubsumption;
 import de.unikoblenz.fgbks.base.utils.boundary.checker.CheckNotInContact;
 import de.unikoblenz.fgbks.base.utils.boundary.checker.CheckOverlap;
 import de.unikoblenz.fgbks.base.utils.boundary.checker.CheckSubsumes;
@@ -72,7 +72,7 @@ public abstract class AbstractGrowingBoundary<T extends Comparable<? super T>>
     map.put(BoundaryCheckType.IS_IN_CONTACT, CheckInContact.getInstance());
     map.put(BoundaryCheckType.IS_NOT_IN_CONTACT, CheckNotInContact.getInstance());
     map.put(BoundaryCheckType.IS_OVERLAPPING, CheckOverlap.getInstance());
-    map.put(BoundaryCheckType.IS_SUBSUMPTION, CheckIsSubsumes.getInstance());
+    map.put(BoundaryCheckType.IS_SUBSUMPTION, CheckIsSubsumption.getInstance());
     map.put(BoundaryCheckType.SUBSUMES, CheckSubsumes.getInstance());
     return map;
   }
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckIsSubsumes.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckIsSubsumption.java
similarity index 70%
rename from dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckIsSubsumes.java
rename to dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckIsSubsumption.java
index f554327e0fd56eb2720cfef1e472bd042e9fd017..435747b3f5fbb1e11717c57fb21273b4c2973621 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckIsSubsumes.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckIsSubsumption.java
@@ -2,15 +2,15 @@ package de.unikoblenz.fgbks.base.utils.boundary.checker;
 
 import de.unikoblenz.fgbks.base.utils.boundary.AbstractGrowingBoundary;
 
-public class CheckIsSubsumes extends AbstractBoundaryCheck<AbstractGrowingBoundary> {
+public class CheckIsSubsumption extends AbstractBoundaryCheck<AbstractGrowingBoundary> {
 
-  private static final CheckIsSubsumes instance = new CheckIsSubsumes();
+  private static final CheckIsSubsumption instance = new CheckIsSubsumption();
 
-  private CheckIsSubsumes() {
+  private CheckIsSubsumption() {
     super();
   }
 
-  public static CheckIsSubsumes getInstance() {
+  public static CheckIsSubsumption getInstance() {
     return instance;
   }
 
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckOverlap.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckOverlap.java
index a98c6810e828e8e462c2bd1274c4c27d95d709c0..380531ba3705abc01a3d6a45b73e66ee18d6c096 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckOverlap.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckOverlap.java
@@ -27,6 +27,6 @@ public class CheckOverlap extends AbstractBoundaryCheck<AbstractGrowingBoundary>
   public static boolean checkOverlapping(AbstractGrowingBoundary b1, AbstractGrowingBoundary b2) {
     return CheckInContact.checkInContact(b1, b2)
         && !CheckEqual.checkEqual(b1, b2)
-        && !CheckIsSubsumes.checkIsSubsumption(b1, b2);
+        && !CheckIsSubsumption.checkIsSubsumption(b1, b2);
   }
 }
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringEqual.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringEqual.java
index 0c749655b1ac92ea12435649948619c1c9c5c7af..3345d8b4a5e2f2210c2a04258d0bff95e55bcba9 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringEqual.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringEqual.java
@@ -24,7 +24,7 @@ public class CheckStringEqual extends AbstractBoundaryCheck<StringBoundary> {
     if (b1 == b2 || b1.getText().equals(b2.getText()) || b1.isMatchAny() && b2.isMatchAny()) {
       return true;
     }
-    if (b1.isMatchNoneOfValues() != b2.isMatchNoneOfValues()
+    if (b1.matchesNoneOfValues() != b2.matchesNoneOfValues()
         || b1.getAmountOfElements() != b2.getAmountOfElements()) {
       return false;
     }
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringInContact.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringInContact.java
index 2a1e1ff9c796976bb55368bf7e9ce4662665866c..be74a3cbbf9250a312311d58381715331d711b5a 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringInContact.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringInContact.java
@@ -23,13 +23,13 @@ public class CheckStringInContact extends AbstractBoundaryCheck<StringBoundary>
   public static boolean checkInContact(StringBoundary b1, StringBoundary b2) {
     if (b1.isMatchAny()
         || b2.isMatchAny()
-        || b1.isMatchNoneOfValues() && b2.isMatchNoneOfValues()) {
+        || b1.matchesNoneOfValues() && b2.matchesNoneOfValues()) {
       return true;
     }
     int[] b1h = b1.getValuesHashes();
     int[] b2h = b2.getValuesHashes();
     // both are not matching non values
-    if (!b1.isMatchNoneOfValues() && !b2.isMatchNoneOfValues()) {
+    if (!b1.matchesNoneOfValues() && !b2.matchesNoneOfValues()) {
       for (int i : b1h) {
         for (int u : b2h) {
           if (i == u) {
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringNotContact.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringNotInContact.java
similarity index 69%
rename from dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringNotContact.java
rename to dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringNotInContact.java
index e514083762e85ec32af4898a3138d7bc7efe905f..5aaa21e0c03282581c4b6452be21b81e25457c92 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringNotContact.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringNotInContact.java
@@ -2,11 +2,11 @@ package de.unikoblenz.fgbks.base.utils.boundary.checker;
 
 import de.unikoblenz.fgbks.base.utils.boundary.impl.StringBoundary;
 
-public class CheckStringNotContact extends AbstractBoundaryCheck<StringBoundary> {
+public class CheckStringNotInContact extends AbstractBoundaryCheck<StringBoundary> {
 
-  private static CheckStringNotContact instance = new CheckStringNotContact();
+  private static CheckStringNotInContact instance = new CheckStringNotInContact();
 
-  public static CheckStringNotContact getInstance() {
+  public static CheckStringNotInContact getInstance() {
     return instance;
   }
 
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringOverlap.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringOverlap.java
new file mode 100644
index 0000000000000000000000000000000000000000..6c5d0eff6d1993ce27de91a510a1eaf52666a510
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringOverlap.java
@@ -0,0 +1,28 @@
+package de.unikoblenz.fgbks.base.utils.boundary.checker;
+
+import de.unikoblenz.fgbks.base.utils.boundary.impl.StringBoundary;
+
+public class CheckStringOverlap extends AbstractBoundaryCheck<StringBoundary> {
+
+  private static CheckStringOverlap instance = new CheckStringOverlap();
+
+  public static CheckStringOverlap getInstance() {
+    return instance;
+  }
+
+  @Override
+  public BoundaryCheckType getType() {
+    return BoundaryCheckType.IS_NOT_IN_CONTACT;
+  }
+
+  @Override
+  public boolean check(StringBoundary b1, StringBoundary b2) {
+    return checkSubsumption(b1, b2);
+  }
+
+  public static boolean checkSubsumption(StringBoundary b1, StringBoundary b2) {
+    return CheckStringInContact.checkInContact(b1, b2)
+        && !CheckStringEqual.checkEqual(b1, b2)
+        && !CheckStringSubsumption.checkSubsumption(b1, b2);
+  }
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringSubsumes.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringSubsumes.java
new file mode 100644
index 0000000000000000000000000000000000000000..5565d5a4f98a68fffb2e17026f6f469c6bbe49a4
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringSubsumes.java
@@ -0,0 +1,69 @@
+package de.unikoblenz.fgbks.base.utils.boundary.checker;
+
+import de.unikoblenz.fgbks.base.utils.boundary.impl.StringBoundary;
+
+public class CheckStringSubsumes extends AbstractBoundaryCheck<StringBoundary> {
+
+  private static CheckStringSubsumes instance = new CheckStringSubsumes();
+
+  public static CheckStringSubsumes getInstance() {
+    return instance;
+  }
+
+  @Override
+  public BoundaryCheckType getType() {
+    return BoundaryCheckType.IS_NOT_IN_CONTACT;
+  }
+
+  @Override
+  public boolean check(StringBoundary b1, StringBoundary b2) {
+    return checkSubsumes(b1, b2);
+  }
+
+  public static boolean checkSubsumes(StringBoundary b1, StringBoundary b2) {
+    if (b1.isMatchAny() && !b2.isMatchAny()) {
+      return true;
+    }
+    if (b2.isMatchAny()) {
+      return false;
+    }
+    int[] b1h = b1.getValuesHashes();
+    int[] b2h = b2.getValuesHashes();
+    // not() and not not()
+    if (b1.matchesNoneOfValues() && !b2.matchesNoneOfValues()) {
+      for (int i = 0; i < b1h.length; i++) {
+        for (int u = 0; u < b2h.length; u++) {
+          if (b1h[i] == b2h[u]) {
+            return false;
+          }
+        }
+      }
+      return true;
+    }
+    // both not()
+    if (b1.matchesNoneOfValues() && b2.matchesNoneOfValues()) {
+      return checkX(b1h, b2h, b1h.length >= b2h.length);
+    }
+    // both normal
+    return checkX(b2h, b1h, b1h.length <= b2h.length);
+  }
+
+  private static boolean checkX(int[] b1h, int[] b2h, boolean b) {
+    if (b) {
+      return false;
+    }
+    for (int i : b1h) {
+      boolean found = false;
+      for (int u : b2h) {
+        found |= i == u;
+        if (found) {
+          break;
+        }
+      }
+      if (!found) {
+        return false;
+      }
+    }
+    return true;
+  }
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringSubsumption.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringSubsumption.java
new file mode 100644
index 0000000000000000000000000000000000000000..e21e32b287b25499db71046fd268f1d71d11392d
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringSubsumption.java
@@ -0,0 +1,26 @@
+package de.unikoblenz.fgbks.base.utils.boundary.checker;
+
+import de.unikoblenz.fgbks.base.utils.boundary.impl.StringBoundary;
+
+public class CheckStringSubsumption extends AbstractBoundaryCheck<StringBoundary> {
+
+  private static CheckStringSubsumption instance = new CheckStringSubsumption();
+
+  public static CheckStringSubsumption getInstance() {
+    return instance;
+  }
+
+  @Override
+  public BoundaryCheckType getType() {
+    return BoundaryCheckType.IS_NOT_IN_CONTACT;
+  }
+
+  @Override
+  public boolean check(StringBoundary b1, StringBoundary b2) {
+    return checkSubsumption(b1, b2);
+  }
+
+  public static boolean checkSubsumption(StringBoundary b1, StringBoundary b2) {
+    return CheckStringSubsumes.checkSubsumes(b1, b2) || CheckStringSubsumes.checkSubsumes(b2, b1);
+  }
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/impl/StringBoundary.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/impl/StringBoundary.java
index 762744e0ecf05a676854e15a6ceecafe8f710982..cd46565008d00336d492468b43abc3e65e1a7582 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/impl/StringBoundary.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/impl/StringBoundary.java
@@ -6,6 +6,11 @@ import de.unikoblenz.fgbks.base.utils.boundary.BoundaryParseException;
 import de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheck;
 import de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType;
 import de.unikoblenz.fgbks.base.utils.boundary.checker.CheckStringEqual;
+import de.unikoblenz.fgbks.base.utils.boundary.checker.CheckStringInContact;
+import de.unikoblenz.fgbks.base.utils.boundary.checker.CheckStringNotInContact;
+import de.unikoblenz.fgbks.base.utils.boundary.checker.CheckStringOverlap;
+import de.unikoblenz.fgbks.base.utils.boundary.checker.CheckStringSubsumes;
+import de.unikoblenz.fgbks.base.utils.boundary.checker.CheckStringSubsumption;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Objects;
@@ -28,7 +33,7 @@ public class StringBoundary extends AbstractBoundary<String> {
     return o.getText().compareTo(o.getText());
   }
 
-  public boolean isMatchNoneOfValues() {
+  public boolean matchesNoneOfValues() {
     return matchNoneOfValues;
   }
 
@@ -86,6 +91,11 @@ public class StringBoundary extends AbstractBoundary<String> {
   protected HashMap<BoundaryCheckType, BoundaryCheck> getChecker() {
     HashMap<BoundaryCheckType, BoundaryCheck> map = new HashMap<>();
     map.put(BoundaryCheckType.IS_EQUAL, CheckStringEqual.getInstance());
+    map.put(BoundaryCheckType.IS_IN_CONTACT, CheckStringInContact.getInstance());
+    map.put(BoundaryCheckType.IS_NOT_IN_CONTACT, CheckStringNotInContact.getInstance());
+    map.put(BoundaryCheckType.IS_OVERLAPPING, CheckStringOverlap.getInstance());
+    map.put(BoundaryCheckType.IS_SUBSUMPTION, CheckStringSubsumption.getInstance());
+    map.put(BoundaryCheckType.SUBSUMES, CheckStringSubsumes.getInstance());
     return map;
   }
 
diff --git a/dmnverifierapi/src/test/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringNotInContactTest.java b/dmnverifierapi/src/test/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringNotInContactTest.java
index 5ead66854672bc4f8ce78cab080f156bba66738a..6d4e0e3c7270a635f4933ec39600f992fbc7f755 100644
--- a/dmnverifierapi/src/test/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringNotInContactTest.java
+++ b/dmnverifierapi/src/test/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringNotInContactTest.java
@@ -8,7 +8,7 @@ class CheckStringNotInContactTest extends AbstractStringCheckerTest {
 
   @Test
   void check() {
-    super.checker = CheckStringNotContact.getInstance();
+    super.checker = CheckStringNotInContact.getInstance();
     doStringCheck("\"a\"", "\"a\"", false);
     doStringCheck("\"a\"", "\"b\"", true);
     doStringCheck("\"a\"", "not(\"a\")", true);
diff --git a/dmnverifierapi/src/test/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringSubsumesTest.java b/dmnverifierapi/src/test/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringSubsumesTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..f4900dc020a8e1067fee4efb8a458ecef8ad0914
--- /dev/null
+++ b/dmnverifierapi/src/test/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringSubsumesTest.java
@@ -0,0 +1,40 @@
+package de.unikoblenz.fgbks.base.utils.boundary.checker;
+
+import org.junit.jupiter.api.Test;
+
+class CheckStringSubsumesTest extends AbstractStringCheckerTest {
+
+  @Test
+  void check() {
+    super.checker = CheckStringSubsumes.getInstance();
+    doStringCheck("\"a\"", "\"a\"", false);
+    doStringCheck("\"a\"", "\"b\"", false);
+    doStringCheck("\"a\"", "not(\"a\")", false);
+    doStringCheck("\"a\"", "not(\"b\")", false);
+    doStringCheck("\"a\"", "\"a\",\"b\"", false);
+    doStringCheck("\"a\"", "\"c\",\"b\"", false);
+    doStringCheck("\"a\"", "not(\"a\",\"b\")", false);
+    doStringCheck("\"a\"", "not(\"c\",\"b\")", false);
+    doStringCheck("\"a\"", "\"a\"", false);
+    doStringCheck("\"b\"", "\"a\"", false);
+    doStringCheck("not(\"a\")", "\"a\"", false);
+    doStringCheck("not(\"b\")", "\"a\"", true);
+    doStringCheck("\"a\",\"b\"", "\"a\"", true);
+    doStringCheck("\"c\",\"b\"", "\"a\"", false);
+    doStringCheck("not(\"a\",\"b\")", "\"a\"", false);
+    doStringCheck("not(\"c\",\"b\")", "\"a\"", true);
+    doStringCheck("not(\"c\",\"b\")", "not(\"c\",\"b\")", false);
+    doStringCheck("not(\"a\",\"c\",\"b\")", "not(\"c\",\"b\")", false);
+    doStringCheck("not(\"b\")", "not(\"c\",\"b\")", true);
+    doStringCheck("", "\"c\",\"b\"", true);
+    doStringCheck("", "\"c\"", true);
+    doStringCheck("\"c\",\"b\"", "", false);
+    doStringCheck("\"c\"", "", false);
+    doStringCheck("", "", false);
+  }
+
+  @Override
+  protected boolean checkBothWays() {
+    return false;
+  }
+}