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 af0c490975fb8a43bdf93cb1a57fe3a9d83bbf92..13e97a2d07bac2b63a1e44da5eb3d9f39a53ca71 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,14 +2,21 @@ 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.combiner.BoundaryCombineType;
+import de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombiner;
+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.impl.InvalidBoundary;
 import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VTypeRef;
 import java.util.HashMap;
+import java.util.Optional;
 import org.apache.commons.lang3.Validate;
 
 public abstract class AbstractBoundary<T extends Comparable<? super T>> implements Boundary {
 
   private HashMap<BoundaryCheckType, BoundaryCheck> checkFunctions;
+  private HashMap<BoundaryCombineType, BoundaryCombiner> combineFunctions;
+  private HashMap<BoundaryCreaterType, BoundaryCreater> createrFunctions;
   private Class<T> type;
   private String text;
 
@@ -19,6 +26,8 @@ public abstract class AbstractBoundary<T extends Comparable<? super T>> implemen
     parse(text);
     validate();
     checkFunctions = new HashMap<>(getChecker());
+    combineFunctions = new HashMap<>(getCombiner());
+    createrFunctions = new HashMap<>(getCreater());
   }
 
   @Override
@@ -36,11 +45,32 @@ public abstract class AbstractBoundary<T extends Comparable<? super T>> implemen
     if (other instanceof InvalidBoundary) {
       return false;
     }
-    BoundaryCheck checkFunction = getTestFunction(checkType);
+    BoundaryCheck checkFunction = getCheckFunction(checkType);
     if (checkFunction == null || !isValidOperation(checkType, other)) {
       throw new BoundaryOperationNotSupportedException(); // TODO: add error text
     }
-    return checkFunction.check(this, other);
+    return checkFunction.check(this, other); // TODO, remove RAW type
+  }
+
+  @Override
+  public Optional<Boundary> create(BoundaryCreaterType createrType) {
+    BoundaryCreater creater = getCreaterFunction(createrType);
+    if (creater == null || !isValidOperation(createrType)) {
+      throw new BoundaryOperationNotSupportedException(); // TODO: add error text
+    }
+    return creater.create(this);
+  }
+
+  @Override
+  public Optional<Boundary> combine(BoundaryCombineType combineType, Boundary other) {
+    if (other instanceof InvalidBoundary) {
+      return Optional.empty();
+    }
+    BoundaryCombiner combiner = getCombineFunction(combineType);
+    if (combiner == null || !isValidOperation(combineType, other)) {
+      throw new BoundaryOperationNotSupportedException(); // TODO: add error text
+    }
+    return combiner.combine(this, other); // TODO, remove RAW type
   }
 
   public boolean isValidOperation(BoundaryCheckType checkType, Boundary other) {
@@ -51,16 +81,40 @@ public abstract class AbstractBoundary<T extends Comparable<? super T>> implemen
     return checkFunctions.containsKey(Validate.notNull(checkType));
   }
 
-  protected BoundaryCheck getTestFunction(BoundaryCheckType checkType) {
+  public boolean isValidOperation(BoundaryCombineType combineType, Boundary other) {
+    return this.getTypeRef() == other.getTypeRef() && isValidOperation(combineType);
+  }
+
+  public boolean isValidOperation(BoundaryCombineType combineTyp) {
+    return combineFunctions.containsKey(Validate.notNull(combineTyp));
+  }
+
+  public boolean isValidOperation(BoundaryCreaterType createrType) {
+    return createrFunctions.containsKey(Validate.notNull(createrType));
+  }
+
+  protected BoundaryCheck getCheckFunction(BoundaryCheckType checkType) {
     return checkFunctions.get(checkType);
   }
 
+  protected BoundaryCreater getCreaterFunction(BoundaryCreaterType createrType) {
+    return createrFunctions.get(createrType);
+  }
+
+  protected BoundaryCombiner getCombineFunction(BoundaryCombineType combineTypeType) {
+    return combineFunctions.get(combineTypeType);
+  }
+
   protected abstract void parse(String text);
 
   protected abstract void validate();
 
   protected abstract HashMap<BoundaryCheckType, BoundaryCheck> getChecker();
 
+  protected abstract HashMap<BoundaryCombineType, BoundaryCombiner> getCombiner();
+
+  protected abstract HashMap<BoundaryCreaterType, BoundaryCreater> getCreater();
+
   protected abstract String getParsedText();
 
   @Override
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 03a0323bc9c010bbd721c849de3c4180b8702486..07c4709b72219242434420d0be263da487acac58 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
@@ -1,6 +1,20 @@
 package de.unikoblenz.fgbks.base.utils.boundary;
 
 import static de.unikoblenz.fgbks.base.utils.boundary.BoundType.INCLUSIVE;
+import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.IS_EQUAL;
+import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.IS_IN_CONTACT;
+import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.IS_NOT_IN_CONTACT;
+import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.IS_OVERLAPPING;
+import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.IS_SUBSUMPTION;
+import static de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType.SUBSUMES;
+import static de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType.APPEND;
+import static de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType.BETWEEN;
+import static de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType.COMBINE;
+import static de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType.INTERSECTION;
+import static de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType.LOWER_BOUNDS;
+import static de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType.UPPER_BOUNDS;
+import static de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType.LOWER;
+import static de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType.UPPER;
 
 import de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheck;
 import de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType;
@@ -10,6 +24,12 @@ 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;
+import de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType;
+import de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombiner;
+import de.unikoblenz.fgbks.base.utils.boundary.combiner.EmptyCombiner;
+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.EmptyCreater;
 import java.util.HashMap;
 import java.util.Objects;
 import org.apache.commons.lang3.Validate;
@@ -68,12 +88,32 @@ public abstract class AbstractGrowingBoundary<T extends Comparable<? super T>>
   @Override
   protected HashMap<BoundaryCheckType, BoundaryCheck> getChecker() {
     HashMap<BoundaryCheckType, BoundaryCheck> map = new HashMap<>();
-    map.put(BoundaryCheckType.IS_EQUAL, CheckEqual.getInstance());
-    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, CheckIsSubsumption.getInstance());
-    map.put(BoundaryCheckType.SUBSUMES, CheckSubsumes.getInstance());
+    map.put(IS_EQUAL, CheckEqual.getInstance());
+    map.put(IS_IN_CONTACT, CheckInContact.getInstance());
+    map.put(IS_NOT_IN_CONTACT, CheckNotInContact.getInstance());
+    map.put(IS_OVERLAPPING, CheckOverlap.getInstance());
+    map.put(IS_SUBSUMPTION, CheckIsSubsumption.getInstance());
+    map.put(SUBSUMES, CheckSubsumes.getInstance());
+    return map;
+  }
+
+  @Override
+  protected HashMap<BoundaryCombineType, BoundaryCombiner> getCombiner() {
+    HashMap<BoundaryCombineType, BoundaryCombiner> map = new HashMap<>();
+    map.put(INTERSECTION, EmptyCombiner.getInstance());
+    map.put(LOWER_BOUNDS, EmptyCombiner.getInstance());
+    map.put(UPPER_BOUNDS, EmptyCombiner.getInstance());
+    map.put(BETWEEN, EmptyCombiner.getInstance());
+    map.put(APPEND, EmptyCombiner.getInstance());
+    map.put(COMBINE, EmptyCombiner.getInstance());
+    return map;
+  }
+
+  @Override
+  protected HashMap<BoundaryCreaterType, BoundaryCreater> getCreater() {
+    HashMap<BoundaryCreaterType, BoundaryCreater> map = new HashMap<>();
+    map.put(UPPER, EmptyCreater.getInstance());
+    map.put(LOWER, EmptyCreater.getInstance());
     return map;
   }
 
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/Boundary.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/Boundary.java
index 83460cfbc217f751916dba4206f47d592eec7c64..fab3d6b148ff509c00bf1476b12b7a1280d80c47 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/Boundary.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/Boundary.java
@@ -1,7 +1,10 @@
 package de.unikoblenz.fgbks.base.utils.boundary;
 
 import de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType;
+import de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType;
+import de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType;
 import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VTypeRef;
+import java.util.Optional;
 
 public interface Boundary extends Comparable<Boundary> {
 
@@ -10,4 +13,8 @@ public interface Boundary extends Comparable<Boundary> {
   String getText();
 
   boolean checkWith(BoundaryCheckType checkType, Boundary other);
+
+  Optional<Boundary> create(BoundaryCreaterType createType);
+
+  Optional<Boundary> combine(BoundaryCombineType combineType, Boundary other);
 }
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 3345d8b4a5e2f2210c2a04258d0bff95e55bcba9..168f5b5f126d56f42aadb130ab4c0fd00d94d4d5 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
@@ -6,6 +6,10 @@ public class CheckStringEqual extends AbstractBoundaryCheck<StringBoundary> {
 
   private static CheckStringEqual instance = new CheckStringEqual();
 
+  private CheckStringEqual() {
+    super();
+  }
+
   public static CheckStringEqual getInstance() {
     return instance;
   }
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 be74a3cbbf9250a312311d58381715331d711b5a..c578c3ef4115022ae8cd247b74f306e440c1f60d 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
@@ -6,6 +6,10 @@ public class CheckStringInContact extends AbstractBoundaryCheck<StringBoundary>
 
   private static CheckStringInContact instance = new CheckStringInContact();
 
+  private CheckStringInContact() {
+    super();
+  }
+
   public static CheckStringInContact getInstance() {
     return instance;
   }
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringNotInContact.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringNotInContact.java
index 5aaa21e0c03282581c4b6452be21b81e25457c92..2bc266afd92ef184c495398bcbef4be32b68ebf1 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringNotInContact.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/checker/CheckStringNotInContact.java
@@ -6,6 +6,10 @@ public class CheckStringNotInContact extends AbstractBoundaryCheck<StringBoundar
 
   private static CheckStringNotInContact instance = new CheckStringNotInContact();
 
+  private CheckStringNotInContact() {
+    super();
+  }
+
   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
index 6c5d0eff6d1993ce27de91a510a1eaf52666a510..954d82beaab50ab6a163656756aa94980d6bf1c9 100644
--- 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
@@ -6,6 +6,10 @@ public class CheckStringOverlap extends AbstractBoundaryCheck<StringBoundary> {
 
   private static CheckStringOverlap instance = new CheckStringOverlap();
 
+  private CheckStringOverlap() {
+    super();
+  }
+
   public static CheckStringOverlap getInstance() {
     return instance;
   }
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
index 5565d5a4f98a68fffb2e17026f6f469c6bbe49a4..cf8390c864a664d8aec75252a35b7d04fd06ee61 100644
--- 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
@@ -6,6 +6,10 @@ public class CheckStringSubsumes extends AbstractBoundaryCheck<StringBoundary> {
 
   private static CheckStringSubsumes instance = new CheckStringSubsumes();
 
+  private CheckStringSubsumes() {
+    super();
+  }
+
   public static CheckStringSubsumes getInstance() {
     return instance;
   }
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
index e21e32b287b25499db71046fd268f1d71d11392d..6ab3e0727401d7b08bb5ab853ce6fe46717a66f2 100644
--- 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
@@ -6,6 +6,10 @@ public class CheckStringSubsumption extends AbstractBoundaryCheck<StringBoundary
 
   private static CheckStringSubsumption instance = new CheckStringSubsumption();
 
+  private CheckStringSubsumption() {
+    super();
+  }
+
   public static CheckStringSubsumption getInstance() {
     return instance;
   }
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/AbstractBoundaryCombiner.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/AbstractBoundaryCombiner.java
new file mode 100644
index 0000000000000000000000000000000000000000..ed0cf6cb6e3639ad6d5c820b0f22e9bbe224efdc
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/AbstractBoundaryCombiner.java
@@ -0,0 +1,5 @@
+package de.unikoblenz.fgbks.base.utils.boundary.combiner;
+
+import de.unikoblenz.fgbks.base.utils.boundary.Boundary;
+
+public abstract class AbstractBoundaryCombiner<T extends Boundary> implements BoundaryCombiner<T> {}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/BoundaryCombineType.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/BoundaryCombineType.java
new file mode 100644
index 0000000000000000000000000000000000000000..bcfcb494b9dd9c31d0cc47d81160e98cfbc49772
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/BoundaryCombineType.java
@@ -0,0 +1,10 @@
+package de.unikoblenz.fgbks.base.utils.boundary.combiner;
+
+public enum BoundaryCombineType {
+  INTERSECTION,
+  LOWER_BOUNDS,
+  UPPER_BOUNDS,
+  BETWEEN,
+  APPEND,
+  COMBINE;
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/BoundaryCombiner.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/BoundaryCombiner.java
new file mode 100644
index 0000000000000000000000000000000000000000..10ce58c733d9f0eb51addd0db1c798edae79152a
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/BoundaryCombiner.java
@@ -0,0 +1,11 @@
+package de.unikoblenz.fgbks.base.utils.boundary.combiner;
+
+import de.unikoblenz.fgbks.base.utils.boundary.Boundary;
+import java.util.Optional;
+
+public interface BoundaryCombiner<T extends Boundary> {
+
+  BoundaryCombineType getType();
+
+  Optional<T> combine(T b1, T b2);
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/EmptyCombiner.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/EmptyCombiner.java
new file mode 100644
index 0000000000000000000000000000000000000000..7bea8da77f8edc010a63b9dc829857eac6798f11
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/combiner/EmptyCombiner.java
@@ -0,0 +1,27 @@
+package de.unikoblenz.fgbks.base.utils.boundary.combiner;
+
+import de.unikoblenz.fgbks.base.utils.boundary.Boundary;
+import java.util.Optional;
+
+public class EmptyCombiner extends AbstractBoundaryCombiner<Boundary> {
+
+  private static final EmptyCombiner instance = new EmptyCombiner();
+
+  private EmptyCombiner() {
+    super();
+  }
+
+  public static EmptyCombiner getInstance() {
+    return instance;
+  }
+
+  @Override
+  public BoundaryCombineType getType() {
+    return null;
+  }
+
+  @Override
+  public Optional<Boundary> combine(Boundary b1, Boundary b2) {
+    return Optional.empty();
+  }
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/AbstractBoundaryCreater.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/AbstractBoundaryCreater.java
new file mode 100644
index 0000000000000000000000000000000000000000..3942dd44adff3b981a6529b0b8dcc7cbce435296
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/AbstractBoundaryCreater.java
@@ -0,0 +1,5 @@
+package de.unikoblenz.fgbks.base.utils.boundary.creater;
+
+import de.unikoblenz.fgbks.base.utils.boundary.Boundary;
+
+public abstract class AbstractBoundaryCreater<T extends Boundary> implements BoundaryCreater<T> {}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/BoundaryCreater.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/BoundaryCreater.java
new file mode 100644
index 0000000000000000000000000000000000000000..112582c2c8e7fec9fef8da5b7e5e643424818bea
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/BoundaryCreater.java
@@ -0,0 +1,11 @@
+package de.unikoblenz.fgbks.base.utils.boundary.creater;
+
+import de.unikoblenz.fgbks.base.utils.boundary.Boundary;
+import java.util.Optional;
+
+public interface BoundaryCreater<T extends Boundary> {
+
+  BoundaryCreaterType getType();
+
+  Optional<T> create(T b);
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/BoundaryCreaterType.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/BoundaryCreaterType.java
new file mode 100644
index 0000000000000000000000000000000000000000..f240c05bb00a0e8bcefc18c15664f4f48d54a0cf
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/BoundaryCreaterType.java
@@ -0,0 +1,6 @@
+package de.unikoblenz.fgbks.base.utils.boundary.creater;
+
+public enum BoundaryCreaterType {
+  LOWER,
+  UPPER;
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/EmptyCreater.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/EmptyCreater.java
new file mode 100644
index 0000000000000000000000000000000000000000..eeec9f3d27e5095fe9d650c84555ffa154baa12e
--- /dev/null
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/creater/EmptyCreater.java
@@ -0,0 +1,27 @@
+package de.unikoblenz.fgbks.base.utils.boundary.creater;
+
+import de.unikoblenz.fgbks.base.utils.boundary.Boundary;
+import java.util.Optional;
+
+public class EmptyCreater extends AbstractBoundaryCreater<Boundary> {
+
+  private static final EmptyCreater instance = new EmptyCreater();
+
+  private EmptyCreater() {
+    super();
+  }
+
+  public static EmptyCreater getInstance() {
+    return instance;
+  }
+
+  @Override
+  public BoundaryCreaterType getType() {
+    return null;
+  }
+
+  @Override
+  public Optional<Boundary> create(Boundary b) {
+    return Optional.empty();
+  }
+}
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/impl/InvalidBoundary.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/impl/InvalidBoundary.java
index 31a98ec19c0021fa91656fddd5b9fc79d8771461..61b30aef1da066173cf39c4e5a8e48e29171da19 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/impl/InvalidBoundary.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/impl/InvalidBoundary.java
@@ -2,7 +2,10 @@ package de.unikoblenz.fgbks.base.utils.boundary.impl;
 
 import de.unikoblenz.fgbks.base.utils.boundary.Boundary;
 import de.unikoblenz.fgbks.base.utils.boundary.checker.BoundaryCheckType;
+import de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType;
+import de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType;
 import de.unikoblenz.fgbks.core.dmn.domain.vdmn.VTypeRef;
+import java.util.Optional;
 
 public class InvalidBoundary implements Boundary {
 
@@ -29,6 +32,16 @@ public class InvalidBoundary implements Boundary {
     return false;
   }
 
+  @Override
+  public Optional<Boundary> create(BoundaryCreaterType createType) {
+    return Optional.empty();
+  }
+
+  @Override
+  public Optional<Boundary> combine(BoundaryCombineType combineType, Boundary other) {
+    return Optional.empty();
+  }
+
   @Override
   public int compareTo(Boundary o) {
     return 0;
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 cd46565008d00336d492468b43abc3e65e1a7582..d1eef32e6ddbf481e2da551b8f782851581f23d2 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
@@ -1,5 +1,14 @@
 package de.unikoblenz.fgbks.base.utils.boundary.impl;
 
+import static de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType.APPEND;
+import static de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType.BETWEEN;
+import static de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType.COMBINE;
+import static de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType.INTERSECTION;
+import static de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType.LOWER_BOUNDS;
+import static de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType.UPPER_BOUNDS;
+import static de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType.LOWER;
+import static de.unikoblenz.fgbks.base.utils.boundary.creater.BoundaryCreaterType.UPPER;
+
 import de.unikoblenz.fgbks.base.utils.boundary.AbstractBoundary;
 import de.unikoblenz.fgbks.base.utils.boundary.Boundary;
 import de.unikoblenz.fgbks.base.utils.boundary.BoundaryParseException;
@@ -11,6 +20,12 @@ 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 de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombineType;
+import de.unikoblenz.fgbks.base.utils.boundary.combiner.BoundaryCombiner;
+import de.unikoblenz.fgbks.base.utils.boundary.combiner.EmptyCombiner;
+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.EmptyCreater;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Objects;
@@ -99,6 +114,26 @@ public class StringBoundary extends AbstractBoundary<String> {
     return map;
   }
 
+  @Override
+  protected HashMap<BoundaryCombineType, BoundaryCombiner> getCombiner() {
+    HashMap<BoundaryCombineType, BoundaryCombiner> map = new HashMap<>();
+    map.put(INTERSECTION, EmptyCombiner.getInstance());
+    map.put(LOWER_BOUNDS, EmptyCombiner.getInstance());
+    map.put(UPPER_BOUNDS, EmptyCombiner.getInstance());
+    map.put(BETWEEN, EmptyCombiner.getInstance());
+    map.put(APPEND, EmptyCombiner.getInstance());
+    map.put(COMBINE, EmptyCombiner.getInstance());
+    return map;
+  }
+
+  @Override
+  protected HashMap<BoundaryCreaterType, BoundaryCreater> getCreater() {
+    HashMap<BoundaryCreaterType, BoundaryCreater> map = new HashMap<>();
+    map.put(UPPER, EmptyCreater.getInstance());
+    map.put(LOWER, EmptyCreater.getInstance());
+    return map;
+  }
+
   @Override
   protected String getParsedText() {
     return (matchNoneOfValues ? "not" : "") + Arrays.toString(values);