diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/AbstractBoundary.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/AbstractBoundary.java
index fd5e6c9ff9e71a569f38fb1c34d949bb047fba4a..af0c490975fb8a43bdf93cb1a57fe3a9d83bbf92 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/AbstractBoundary.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/AbstractBoundary.java
@@ -2,6 +2,7 @@ package de.unikoblenz.fgbks.base.utils.boundary;
 
 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.impl.InvalidBoundary;
 import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VTypeRef;
 import java.util.HashMap;
 import org.apache.commons.lang3.Validate;
@@ -32,6 +33,9 @@ public abstract class AbstractBoundary<T extends Comparable<? super T>> implemen
 
   @Override
   public boolean checkWith(BoundaryCheckType checkType, Boundary other) {
+    if (other instanceof InvalidBoundary) {
+      return false;
+    }
     BoundaryCheck checkFunction = getTestFunction(checkType);
     if (checkFunction == null || !isValidOperation(checkType, other)) {
       throw new BoundaryOperationNotSupportedException(); // TODO: add error text
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckEqual.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckEqual.java
index 9dc1ed2787a2e6321076b1e42d81e1f3fe8078ad..a0ce4f868c06dea827c575d41458234e8356efef 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckEqual.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckEqual.java
@@ -4,16 +4,13 @@ import de.unikoblenz.fgbks.base.utils.boundary.AbstractGrowingBoundary;
 
 public class CheckEqual extends AbstractBoundaryCheck<AbstractGrowingBoundary> {
 
-  private static CheckEqual instance;
+  private static final CheckEqual instance = new CheckEqual();
 
   private CheckEqual() {
     super();
   }
 
   public static CheckEqual getInstance() {
-    if (instance == null) {
-      instance = new CheckEqual();
-    }
     return instance;
   }
 
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckEqualString.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckEqualString.java
new file mode 100644
index 0000000000000000000000000000000000000000..e27fa98094e2dbd870fb84d7dae34738ea9bffae
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckEqualString.java
@@ -0,0 +1,37 @@
+package de.unikoblenz.fgbks.base.utils.boundary.checker;
+
+import de.unikoblenz.fgbks.base.utils.boundary.impl.StringBoundary;
+
+public class CheckEqualString extends AbstractBoundaryCheck<StringBoundary> {
+
+  private static CheckEqualString instance = new CheckEqualString();
+
+  public static CheckEqualString getInstance() {
+    return instance;
+  }
+
+  @Override
+  public BoundaryCheckType getType() {
+    return BoundaryCheckType.IS_EQUAL;
+  }
+
+  @Override
+  public boolean check(StringBoundary b1, StringBoundary b2) {
+    if (b1 == b2 || b1.getText().equals(b2.getText()) || b1.isMatchAny() && b2.isMatchAny()) {
+      return true;
+    }
+    if (b1.isMatchNoneOfValues() != b2.isMatchNoneOfValues()
+        || b1.getAmountOfElements() != b2.getAmountOfElements()) {
+      return false;
+    }
+    // hashes are sorted while boundary creation
+    int[] h1 = b1.getValuesHashes();
+    int[] h2 = b2.getValuesHashes();
+    for (int i = 0; i < h1.length; i++) {
+      if (h1[i] != h2[i]) {
+        return false;
+      }
+    }
+    return true;
+  }
+}
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 2041c38d8e998ecba2f2aa1c968c6889eac85cba..1aa866d510b6a205a546d74857b669da687028f3 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
@@ -5,6 +5,7 @@ import de.unikoblenz.fgbks.base.utils.boundary.Boundary;
 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.CheckEqualString;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Objects;
@@ -26,6 +27,26 @@ public class StringBoundary extends AbstractBoundary<String> {
     return o.getText().compareTo(o.getText());
   }
 
+  public boolean isMatchNoneOfValues() {
+    return matchNoneOfValues;
+  }
+
+  public boolean isMatchAny() {
+    return matchAny;
+  }
+
+  public String[] getValues() {
+    return values.clone(); // performance ?
+  }
+
+  public int[] getValuesHashes() {
+    return valuesHashes.clone(); // performance ?
+  }
+
+  public int getAmountOfElements() {
+    return values.length;
+  }
+
   @Override
   protected void parse(String text) {
     matchNoneOfValues = false;
@@ -47,6 +68,8 @@ public class StringBoundary extends AbstractBoundary<String> {
           valuesHashes[i] = Objects.hashCode(values[i]);
         }
       }
+      // Sort hashes for later comparisons
+      Arrays.sort(valuesHashes);
     } catch (Exception e) {
       throw new BoundaryParseException("String value is not valid: " + this.getText());
     }
@@ -59,7 +82,9 @@ public class StringBoundary extends AbstractBoundary<String> {
 
   @Override
   protected HashMap<BoundaryCheckType, BoundaryCheck> getChecker() {
-    return new HashMap<>();
+    HashMap<BoundaryCheckType, BoundaryCheck> map = new HashMap<>();
+    map.put(BoundaryCheckType.IS_EQUAL, CheckEqualString.getInstance());
+    return map;
   }
 
   @Override