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 406a6a3736c010cb3589818f2868a0a3432d22e0..7e95f7012406985fec9e440fd78420e1aef6709b 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
@@ -9,6 +9,7 @@ import de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType;
 import de.unikoblenz.fgbks.base.utils.boundary.impl.InvalidBoundary;
 import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VTypeRef;
 import java.util.HashMap;
+import java.util.Map;
 import java.util.Optional;
 import org.apache.commons.lang3.Validate;
 
@@ -113,11 +114,11 @@ public abstract class AbstractBoundary<T extends Comparable<? super T>> implemen
 
   protected abstract void validate();
 
-  protected abstract HashMap<BoundaryCheckType, BoundaryCheck> getChecker();
+  protected abstract Map<BoundaryCheckType, BoundaryCheck> getChecker();
 
-  protected abstract HashMap<BoundaryBiCreaterType, BoundaryBiCreater> getBiCreater();
+  protected abstract Map<BoundaryBiCreaterType, BoundaryBiCreater> getBiCreater();
 
-  protected abstract HashMap<BoundaryCreaterType, BoundaryCreater> getCreater();
+  protected abstract Map<BoundaryCreaterType, BoundaryCreater> getCreater();
 
   @Override
   public String toString() {
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 8298ef97d650f85672cc8ed11d23529534b40c51..1672df6b515e3a1ae3ec9d7f4c1d1520699ad4d4 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
@@ -36,7 +36,9 @@ import de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreater;
 import de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType;
 import de.unikoblenz.fgbks.base.utils.boundary.creater.CreaterLower;
 import de.unikoblenz.fgbks.base.utils.boundary.creater.CreaterUpper;
+import java.util.Collections;
 import java.util.HashMap;
+import java.util.Map;
 import java.util.Objects;
 import org.apache.commons.lang3.Validate;
 
@@ -117,18 +119,18 @@ public abstract class AbstractGrowingBoundary<T extends Comparable<? super T>>
   }
 
   @Override
-  protected HashMap<BoundaryCheckType, BoundaryCheck> getChecker() {
-    return checkerMap;
+  protected Map<BoundaryCheckType, BoundaryCheck> getChecker() {
+    return Collections.unmodifiableMap(checkerMap);
   }
 
   @Override
-  protected HashMap<BoundaryBiCreaterType, BoundaryBiCreater> getBiCreater() {
-    return biCreaterMap;
+  protected Map<BoundaryBiCreaterType, BoundaryBiCreater> getBiCreater() {
+    return Collections.unmodifiableMap(biCreaterMap);
   }
 
   @Override
-  protected HashMap<BoundaryCreaterType, BoundaryCreater> getCreater() {
-    return createrMap;
+  protected Map<BoundaryCreaterType, BoundaryCreater> getCreater() {
+    return Collections.unmodifiableMap(createrMap);
   }
 
   @Override
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/CreaterStringLower.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/CreaterStringLower.java
index 8371ff22484ee11fb30d602bd2d64218e6fd9318..0b24bd5aa9b5084d7d9b2a4286c2188a1f1f0349 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/CreaterStringLower.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/CreaterStringLower.java
@@ -22,6 +22,10 @@ public class CreaterStringLower extends AbstractBoundaryCreater<StringBoundary>
 
   @Override
   public Optional<StringBoundary> create(StringBoundary b) {
-    return Optional.empty();
+    return Optional.of(StringBoundary.getBuilder()
+        .addValues(b.getValues())
+        .isMatchNoneOfValues(!b.matchesNoneOfValues())
+        .isMatchAny(b.getAmountOfElements() == 0)
+        .build());
   }
 }
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/CreaterStringUpper.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/CreaterStringUpper.java
index 6167e61581f470c41dee78ceff937dac6d489634..00e08a004bc68dcb6183ffcedfb2f7749e4f90f7 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/CreaterStringUpper.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/CreaterStringUpper.java
@@ -22,6 +22,8 @@ public class CreaterStringUpper extends AbstractBoundaryCreater<StringBoundary>
 
   @Override
   public Optional<StringBoundary> create(StringBoundary b) {
+    // is every time empty, because there is no "Upper", the result for "Upper" is
+    // inside the class CreaterStringLower
     return Optional.empty();
   }
 }
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 6394aa81939ba8309432c67752da113cc4341d8d..436dbc0f6b99fddab31fb313f9fd7e22ead350e9 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
@@ -41,8 +41,10 @@ import de.unikoblenz.fgbks.base.utils.boundary.creater.CreaterStringUpper;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
 import org.apache.commons.lang3.Validate;
@@ -117,7 +119,6 @@ public class StringBoundary extends AbstractBoundary<String> {
       matchAny = Validate.notNull(text).isEmpty();
       if (matchAny) {
         values = new String[0];
-        valuesHashes = new int[0];
       } else {
         matchNoneOfValues = text.toLowerCase().startsWith("not");
         text = text.replace('(', '\0').replace(')', '\0').trim();
@@ -125,37 +126,41 @@ public class StringBoundary extends AbstractBoundary<String> {
           text = text.replaceFirst("not", "").trim();
         }
         values = text.split(",");
-        valuesHashes = new int[values.length];
-        for (int i = 0; i < values.length; i++) {
-          values[i] = values[i].replace('"', '\0').trim();
-          valuesHashes[i] = Objects.hashCode(values[i]);
-        }
       }
-      // Sort hashes for later comparisons
-      Arrays.sort(valuesHashes);
+      calcHashes();
     } catch (Exception e) {
       throw new BoundaryParseException("String value is not valid: " + this.getText());
     }
   }
 
+  private void calcHashes() {
+    valuesHashes = new int[values.length];
+    for (int i = 0; i < values.length; i++) {
+      values[i] = values[i].replace('"', '\0').trim();
+      valuesHashes[i] = Objects.hashCode(values[i]);
+    }
+    // Sort hashes for later comparisons
+    Arrays.sort(valuesHashes);
+  }
+
   @Override
   protected void validate() {
     Validate.noNullElements(values);
   }
 
   @Override
-  protected HashMap<BoundaryCheckType, BoundaryCheck> getChecker() {
-    return checkerMap;
+  protected Map<BoundaryCheckType, BoundaryCheck> getChecker() {
+    return Collections.unmodifiableMap(checkerMap);
   }
 
   @Override
-  protected HashMap<BoundaryBiCreaterType, BoundaryBiCreater> getBiCreater() {
-    return biCreaterMap;
+  protected Map<BoundaryBiCreaterType, BoundaryBiCreater> getBiCreater() {
+    return Collections.unmodifiableMap(biCreaterMap);
   }
 
   @Override
-  protected HashMap<BoundaryCreaterType, BoundaryCreater> getCreater() {
-    return createrMap;
+  protected Map<BoundaryCreaterType, BoundaryCreater> getCreater() {
+    return Collections.unmodifiableMap(createrMap);
   }
 
   @Override
@@ -186,8 +191,10 @@ public class StringBoundary extends AbstractBoundary<String> {
 
     public Builder isMatchAny(boolean matchAny) {
       value.matchAny = matchAny;
-      value.matchNoneOfValues = false;
-      value.values = new String[0];
+      if (matchAny) {
+        value.matchNoneOfValues = false;
+        value.values = new String[0];
+      }
       return this;
     }
 
@@ -201,6 +208,10 @@ public class StringBoundary extends AbstractBoundary<String> {
       return this;
     }
 
+    public Builder addValues(String[] values) {
+      return addValues(Validate.notNull(Arrays.asList(values)));
+    }
+
     @Override
     protected void validate() {
       super.validate();
@@ -211,7 +222,8 @@ public class StringBoundary extends AbstractBoundary<String> {
 
     @Override
     public StringBoundary build() {
-      value.values = buildingValues.toArray(new String[buildingValues.size()]);
+      value.values = buildingValues.toArray(new String[0]);
+      value.calcHashes();
       value.text = value.getParsedText();
       return super.build();
     }
diff --git a/dmnverifierapi/src/test/java/de/unikoblenz/fgbks/base/utils/boundary/creater/CreaterStringLowerTest.java b/dmnverifierapi/src/test/java/de/unikoblenz/fgbks/base/utils/boundary/creater/CreaterStringLowerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..9a6635e9ad375c654487a09f079387200cd5b84a
--- /dev/null
+++ b/dmnverifierapi/src/test/java/de/unikoblenz/fgbks/base/utils/boundary/creater/CreaterStringLowerTest.java
@@ -0,0 +1,28 @@
+package de.unikoblenz.fgbks.base.utils.boundary.creater;
+
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import de.unikoblenz.fgbks.base.utils.boundary.impl.StringBoundary;
+import io.quarkus.test.junit.QuarkusTest;
+import org.junit.jupiter.api.Test;
+
+@QuarkusTest
+class CreaterStringLowerTest {
+
+  @Test
+  public void testStringLower() {
+    StringBoundary sb = StringBoundary.getBuilder().addValue("a").build();
+    assertEquals("a", sb.getValues()[0]);
+    assertFalse(sb.isMatchAny());
+    assertFalse(sb.matchesNoneOfValues());
+    assertEquals("\"a\"", sb.getText());
+
+    StringBoundary sb2 = (StringBoundary) sb.create(BoundaryCreaterType.LOWER).get();
+    assertArrayEquals(sb.getValues(), sb2.getValues());
+    assertTrue(sb2.matchesNoneOfValues());
+    assertFalse(sb.isMatchAny());
+  }
+}