Index: branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Interval/IntervalConstraint.cs
===================================================================
--- branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Interval/IntervalConstraint.cs	(revision 17765)
+++ branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Interval/IntervalConstraint.cs	(revision 17767)
@@ -23,4 +23,5 @@
 using System;
 using System.Collections.Generic;
+using System.Linq;
 using HEAL.Attic;
 using HeuristicLab.Common;
@@ -114,13 +115,9 @@
     }
 
-    [Storable]
-    private /*IDictionary<string, Interval>*/ IEnumerable<Region> regions; //= new Dictionary<string, Interval>();
-    public IEnumerable<Region> Regions
-    {
+    [Storable] private IEnumerable<Region> regions;
+    public IEnumerable<Region> Regions {
       get => regions;
-      set
-      {
-        if (regions != value)
-        {
+      set {
+        if (regions != value) {
           regions = value;
           UpdateExpression();
@@ -132,11 +129,8 @@
     [Storable]
     private double weight = 1.0;
-    public double Weight
-    {
+    public double Weight {
       get => weight;
-      set
-      {
-        if(weight != value)
-        {
+      set {
+        if (weight != value) {
           weight = value;
           UpdateExpression();
@@ -149,12 +143,13 @@
     private IntervalConstraint(StorableConstructorFlag _) : base(_) { }
 
-    public IntervalConstraint(string   expression, string variable, string target, int numberOfDerivations,
-                              Interval interval, double weight, bool enabled) 
-      : this(expression, variable, target, numberOfDerivations, 
-             interval, new List<Region>(), weight, enabled) { }
-
     public IntervalConstraint(string expression, string variable, string target, int numberOfDerivations,
-                              Interval interval, IEnumerable<Region> regions, double weight, bool enabled)
-    {
+                              Interval interval, double weight, bool enabled)
+      : this(expression, variable, target, numberOfDerivations,
+             interval, Enumerable.Empty<Region>(), weight, enabled) { }
+
+    public IntervalConstraint(string expression, string variable, string target, int numberOfDerivations,
+                              Interval interval, IEnumerable<Region> regions, double weight, bool enabled) {
+      this.regions = regions;
+      this.weight = weight;
       this.expression = expression;
       this.variable = variable;
@@ -162,6 +157,4 @@
       this.numberOfDerivations = numberOfDerivations;
       this.interval = interval;
-      this.regions = regions;
-      this.weight = weight;
       this.enabled = enabled;
     }
@@ -173,11 +166,11 @@
     private IntervalConstraint(IntervalConstraint original, Cloner cloner)
       : base(original, cloner) {
-      Expression          = original.Expression;
-      Variable            = original.Variable;
-      Target              = original.Target;
+      Regions = new List<Region>(original.Regions?.Select(r => cloner.Clone(r)) ?? Enumerable.Empty<Region>());
+      Expression = original.Expression;
+      Variable = original.Variable;
+      Target = original.Target;
       NumberOfDerivations = original.NumberOfDerivations;
-      Interval            = original.Interval;
-      Regions             = original.Regions;
-      Enabled             = original.Enabled;
+      Interval = original.Interval;
+      Enabled = original.Enabled;
     }
 
@@ -213,11 +206,14 @@
                                    Interval?.UpperBound,
                                    "]");
-        foreach(var region in Regions)
-          expression += $", {region.VariableName}=({region.Interval.LowerBound} .. {region.Interval.UpperBound})";
+        if(Regions != null) {
+          foreach (var region in Regions)
+            expression += $", {region.VariableName}=({region.Interval.LowerBound} .. {region.Interval.UpperBound})";
+        }
+        
         Expression = expression;
         return;
       }
 
-      expression = string.Format("∂{6}{1}/∂{0}{6} in {2}{3} .. {4}{5}", 
+      expression = string.Format("∂{6}{1}/∂{0}{6} in {2}{3} .. {4}{5}",
                                  Variable,
                                  Target,
@@ -227,6 +223,8 @@
                                  "]",
                                  GetDerivationString(numberOfDerivations));
-      foreach (var region in Regions)
-        expression += $", {region.VariableName}=({region.Interval.LowerBound} .. {region.Interval.UpperBound})";
+      if (Regions != null) {
+        foreach (var region in Regions)
+          expression += $", {region.VariableName}=({region.Interval.LowerBound} .. {region.Interval.UpperBound})";
+      }
       Expression = expression;
     }
Index: branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Interval/Region.cs
===================================================================
--- branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Interval/Region.cs	(revision 17765)
+++ branches/3073_IA_constraint_splitting/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Interval/Region.cs	(revision 17767)
@@ -17,5 +17,5 @@
       get => variableName;
       private set {
-        if(variableName != value) {
+        if(variableName == null || variableName != value) {
           variableName = value;
           OnChanged();
@@ -26,7 +26,7 @@
     [Storable] private Interval interval;
     public Interval Interval {
-      get => Interval;
+      get => interval;
       private set {
-        if (!interval.Equals(value)) {
+        if (interval == null || !interval.Equals(value)) {
           interval = value;
           OnChanged();
@@ -34,4 +34,7 @@
       }
     }
+
+    [StorableConstructor]
+    private Region(StorableConstructorFlag _) : base(_) { }
 
     public Region(string variableName, Interval interval) {
