Index: branches/2994-AutoDiffForIntervals/HeuristicLab.Parameters/3.3/ConstrainedValueParameter.cs
===================================================================
--- branches/2994-AutoDiffForIntervals/HeuristicLab.Parameters/3.3/ConstrainedValueParameter.cs	(revision 16671)
+++ branches/2994-AutoDiffForIntervals/HeuristicLab.Parameters/3.3/ConstrainedValueParameter.cs	(revision 16911)
@@ -22,8 +22,8 @@
 using System;
 using System.Linq;
+using HEAL.Attic;
 using HeuristicLab.Collections;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HEAL.Attic;
 
 namespace HeuristicLab.Parameters {
@@ -47,15 +47,9 @@
     public ConstrainedValueParameter() : base() { }
     public ConstrainedValueParameter(string name) : base(name) { }
-    public ConstrainedValueParameter(string name, bool getsCollected) : base(name, getsCollected) { }
     public ConstrainedValueParameter(string name, ItemSet<T> validValues) : base(name, validValues) { }
-    public ConstrainedValueParameter(string name, ItemSet<T> validValues, bool getsCollected) : base(name, validValues, getsCollected) { }
     public ConstrainedValueParameter(string name, ItemSet<T> validValues, T value) : base(name, validValues, value) { }
-    public ConstrainedValueParameter(string name, ItemSet<T> validValues, T value, bool getsCollected) : base(name, validValues, value, getsCollected) { }
     public ConstrainedValueParameter(string name, string description) : base(name, description) { }
-    public ConstrainedValueParameter(string name, string description, bool getsCollected) : base(name, description, getsCollected) { }
     public ConstrainedValueParameter(string name, string description, ItemSet<T> validValues) : base(name, description, validValues) { }
-    public ConstrainedValueParameter(string name, string description, ItemSet<T> validValues, bool getsCollected) : base(name, description, validValues, getsCollected) { }
     public ConstrainedValueParameter(string name, string description, ItemSet<T> validValues, T value) : base(name, description, validValues, value) { }
-    public ConstrainedValueParameter(string name, string description, ItemSet<T> validValues, T value, bool getsCollected) : base(name, description, validValues, value, getsCollected) { }
 
     public override IDeepCloneable Clone(Cloner cloner) {
Index: branches/2994-AutoDiffForIntervals/HeuristicLab.Parameters/3.3/FixedValueParameter.cs
===================================================================
--- branches/2994-AutoDiffForIntervals/HeuristicLab.Parameters/3.3/FixedValueParameter.cs	(revision 16671)
+++ branches/2994-AutoDiffForIntervals/HeuristicLab.Parameters/3.3/FixedValueParameter.cs	(revision 16911)
@@ -21,7 +21,7 @@
 
 using System;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HEAL.Attic;
 
 namespace HeuristicLab.Parameters {
@@ -31,5 +31,5 @@
   [Item("FixedValueParameter", "A parameter whose value is defined in the parameter itself and cannot be set.")]
   [StorableType("7787B99D-5F32-4639-B47A-76CB4D204392")]
-  public class FixedValueParameter<T> : ValueParameter<T>, IFixedValueParameter<T> where T : class,IItem, new() {
+  public class FixedValueParameter<T> : ValueParameter<T>, IFixedValueParameter<T> where T : class, IItem, new() {
 
     public override T Value {
@@ -46,11 +46,7 @@
     public FixedValueParameter() : base() { }
     public FixedValueParameter(string name) : base(name) { }
-    public FixedValueParameter(string name, bool getsCollected) : base(name, getsCollected) { }
     public FixedValueParameter(string name, T value) : base(name, value) { }
-    public FixedValueParameter(string name, T value, bool getsCollected) : base(name, value, getsCollected) { }
     public FixedValueParameter(string name, string description) : base(name, description) { }
-    public FixedValueParameter(string name, string description, bool getsCollected) : base(name, description, getsCollected) { }
     public FixedValueParameter(string name, string description, T value) : base(name, description, value) { }
-    public FixedValueParameter(string name, string description, T value, bool getsCollected) : base(name, description, value, getsCollected) { }
 
     public override IDeepCloneable Clone(Cloner cloner) {
Index: branches/2994-AutoDiffForIntervals/HeuristicLab.Parameters/3.3/OperatorParameter.cs
===================================================================
--- branches/2994-AutoDiffForIntervals/HeuristicLab.Parameters/3.3/OperatorParameter.cs	(revision 16671)
+++ branches/2994-AutoDiffForIntervals/HeuristicLab.Parameters/3.3/OperatorParameter.cs	(revision 16911)
@@ -20,7 +20,7 @@
 #endregion
 
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HEAL.Attic;
 
 namespace HeuristicLab.Parameters {
@@ -36,11 +36,7 @@
     public OperatorParameter() : base("Anonymous") { }
     public OperatorParameter(string name) : base(name) { }
-    public OperatorParameter(string name, bool getsCollected) : base(name, getsCollected) { }
     public OperatorParameter(string name, IOperator value) : base(name, value) { }
-    public OperatorParameter(string name, IOperator value, bool getsCollected) : base(name, value, getsCollected) { }
     public OperatorParameter(string name, string description) : base(name, description) { }
-    public OperatorParameter(string name, string description, bool getsCollected) : base(name, description, getsCollected) { }
     public OperatorParameter(string name, string description, IOperator value) : base(name, description, value) { }
-    public OperatorParameter(string name, string description, IOperator value, bool getsCollected) : base(name, description, value, getsCollected) { }
 
     public override IDeepCloneable Clone(Cloner cloner) {
Index: branches/2994-AutoDiffForIntervals/HeuristicLab.Parameters/3.3/OptionalConstrainedValueParameter.cs
===================================================================
--- branches/2994-AutoDiffForIntervals/HeuristicLab.Parameters/3.3/OptionalConstrainedValueParameter.cs	(revision 16671)
+++ branches/2994-AutoDiffForIntervals/HeuristicLab.Parameters/3.3/OptionalConstrainedValueParameter.cs	(revision 16911)
@@ -22,8 +22,8 @@
 using System;
 using System.Drawing;
+using HEAL.Attic;
 using HeuristicLab.Collections;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HEAL.Attic;
 
 namespace HeuristicLab.Parameters {
@@ -40,5 +40,5 @@
       }
     }
-      
+
     [Storable]
     private ItemSet<T> validValues;
@@ -52,4 +52,5 @@
       get { return this.value; }
       set {
+        if (ReadOnly) throw new InvalidOperationException("Cannot set the value of a readonly parameter.");
         if (value != this.value) {
           if ((value != null) && !validValues.Contains(value)) throw new ArgumentException("Invalid value.");
@@ -74,4 +75,15 @@
     }
 
+    [Storable(DefaultValue = false)]
+    private bool readOnly;
+    public bool ReadOnly {
+      get { return readOnly; }
+      set {
+        if (value == readOnly) return;
+        readOnly = value;
+        OnReadOnlyChanged();
+      }
+    }
+
     [Storable(DefaultValue = true)]
     private bool getsCollected;
@@ -93,4 +105,5 @@
       validValues = cloner.Clone(original.validValues);
       value = cloner.Clone(original.value);
+      readOnly = original.readOnly;
       getsCollected = original.getsCollected;
       Initialize();
@@ -99,4 +112,5 @@
       : base("Anonymous", typeof(T)) {
       this.validValues = new ItemSet<T>();
+      this.readOnly = false;
       this.getsCollected = true;
       Initialize();
@@ -105,11 +119,6 @@
       : base(name, typeof(T)) {
       this.validValues = new ItemSet<T>();
-      this.getsCollected = true;
-      Initialize();
-    }
-    public OptionalConstrainedValueParameter(string name, bool getsCollected)
-      : base(name, typeof(T)) {
-      this.validValues = new ItemSet<T>();
-      this.getsCollected = getsCollected;
+      this.readOnly = false;
+      this.getsCollected = true;
       Initialize();
     }
@@ -117,11 +126,6 @@
       : base(name, typeof(T)) {
       this.validValues = validValues;
-      this.getsCollected = true;
-      Initialize();
-    }
-    public OptionalConstrainedValueParameter(string name, ItemSet<T> validValues, bool getsCollected)
-      : base(name, typeof(T)) {
-      this.validValues = validValues;
-      this.getsCollected = getsCollected;
+      this.readOnly = false;
+      this.getsCollected = true;
       Initialize();
     }
@@ -130,12 +134,6 @@
       this.validValues = validValues;
       this.value = value;
-      this.getsCollected = true;
-      Initialize();
-    }
-    public OptionalConstrainedValueParameter(string name, ItemSet<T> validValues, T value, bool getsCollected)
-      : base(name, typeof(T)) {
-      this.validValues = validValues;
-      this.value = value;
-      this.getsCollected = getsCollected;
+      this.readOnly = false;
+      this.getsCollected = true;
       Initialize();
     }
@@ -143,11 +141,6 @@
       : base(name, description, typeof(T)) {
       this.validValues = new ItemSet<T>();
-      this.getsCollected = true;
-      Initialize();
-    }
-    public OptionalConstrainedValueParameter(string name, string description, bool getsCollected)
-      : base(name, description, typeof(T)) {
-      this.validValues = new ItemSet<T>();
-      this.getsCollected = getsCollected;
+      this.readOnly = false;
+      this.getsCollected = true;
       Initialize();
     }
@@ -155,11 +148,6 @@
       : base(name, description, typeof(T)) {
       this.validValues = validValues;
-      this.getsCollected = true;
-      Initialize();
-    }
-    public OptionalConstrainedValueParameter(string name, string description, ItemSet<T> validValues, bool getsCollected)
-      : base(name, description, typeof(T)) {
-      this.validValues = validValues;
-      this.getsCollected = getsCollected;
+      this.readOnly = false;
+      this.getsCollected = true;
       Initialize();
     }
@@ -168,12 +156,6 @@
       this.validValues = validValues;
       this.value = value;
-      this.getsCollected = true;
-      Initialize();
-    }
-    public OptionalConstrainedValueParameter(string name, string description, ItemSet<T> validValues, T value, bool getsCollected)
-      : base(name, description, typeof(T)) {
-      this.validValues = validValues;
-      this.value = value;
-      this.getsCollected = getsCollected;
+      this.readOnly = false;
+      this.getsCollected = true;
       Initialize();
     }
@@ -212,4 +194,9 @@
       OnToStringChanged();
     }
+    public event EventHandler ReadOnlyChanged;
+    protected virtual void OnReadOnlyChanged() {
+      EventHandler handler = ReadOnlyChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
     public event EventHandler GetsCollectedChanged;
     protected virtual void OnGetsCollectedChanged() {
Index: branches/2994-AutoDiffForIntervals/HeuristicLab.Parameters/3.3/OptionalValueParameter.cs
===================================================================
--- branches/2994-AutoDiffForIntervals/HeuristicLab.Parameters/3.3/OptionalValueParameter.cs	(revision 16671)
+++ branches/2994-AutoDiffForIntervals/HeuristicLab.Parameters/3.3/OptionalValueParameter.cs	(revision 16911)
@@ -22,7 +22,7 @@
 using System;
 using System.Drawing;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HEAL.Attic;
 
 namespace HeuristicLab.Parameters {
@@ -45,4 +45,5 @@
       get { return this.value; }
       set {
+        if (ReadOnly) throw new InvalidOperationException("Cannot set the value of a readonly parameter.");
         if (value != this.value) {
           DeregisterValueEvents();
@@ -63,4 +64,15 @@
           );
         Value = val;
+      }
+    }
+
+    [Storable(DefaultValue = false)]
+    private bool readOnly;
+    public bool ReadOnly {
+      get { return readOnly; }
+      set {
+        if (value == readOnly) return;
+        readOnly = value;
+        OnReadOnlyChanged();
       }
     }
@@ -108,4 +120,5 @@
       : base(original, cloner) {
       value = cloner.Clone(original.value);
+      readOnly = original.readOnly;
       getsCollected = original.getsCollected;
       reactOnValueToStringChangedAndValueItemImageChanged = original.reactOnValueToStringChangedAndValueItemImageChanged;
@@ -114,4 +127,5 @@
     public OptionalValueParameter()
       : base("Anonymous", typeof(T)) {
+      this.readOnly = false;
       this.getsCollected = true;
       this.reactOnValueToStringChangedAndValueItemImageChanged = true;
@@ -119,10 +133,6 @@
     public OptionalValueParameter(string name)
       : base(name, typeof(T)) {
-      this.getsCollected = true;
-      this.reactOnValueToStringChangedAndValueItemImageChanged = true;
-    }
-    public OptionalValueParameter(string name, bool getsCollected)
-      : base(name, typeof(T)) {
-      this.getsCollected = getsCollected;
+      this.readOnly = false;
+      this.getsCollected = true;
       this.reactOnValueToStringChangedAndValueItemImageChanged = true;
     }
@@ -130,12 +140,6 @@
       : base(name, typeof(T)) {
       this.value = value;
-      this.getsCollected = true;
-      this.reactOnValueToStringChangedAndValueItemImageChanged = true;
-      RegisterValueEvents();
-    }
-    public OptionalValueParameter(string name, T value, bool getsCollected)
-      : base(name, typeof(T)) {
-      this.value = value;
-      this.getsCollected = getsCollected;
+      this.readOnly = false;
+      this.getsCollected = true;
       this.reactOnValueToStringChangedAndValueItemImageChanged = true;
       RegisterValueEvents();
@@ -143,23 +147,14 @@
     public OptionalValueParameter(string name, string description)
       : base(name, description, typeof(T)) {
-      this.getsCollected = true;
-      this.reactOnValueToStringChangedAndValueItemImageChanged = true;
-    }
-    public OptionalValueParameter(string name, string description, bool getsCollected)
-      : base(name, description, typeof(T)) {
-      this.getsCollected = getsCollected;
-      this.reactOnValueToStringChangedAndValueItemImageChanged = true;
-    }
+      this.readOnly = false;
+      this.getsCollected = true;
+      this.reactOnValueToStringChangedAndValueItemImageChanged = true;
+    }
+
     public OptionalValueParameter(string name, string description, T value)
       : base(name, description, typeof(T)) {
       this.value = value;
-      this.getsCollected = true;
-      this.reactOnValueToStringChangedAndValueItemImageChanged = true;
-      RegisterValueEvents();
-    }
-    public OptionalValueParameter(string name, string description, T value, bool getsCollected)
-      : base(name, description, typeof(T)) {
-      this.value = value;
-      this.getsCollected = getsCollected;
+      this.readOnly = false;
+      this.getsCollected = true;
       this.reactOnValueToStringChangedAndValueItemImageChanged = true;
       RegisterValueEvents();
@@ -197,4 +192,10 @@
       OnToStringChanged();
     }
+
+    public event EventHandler ReadOnlyChanged;
+    protected virtual void OnReadOnlyChanged() {
+      EventHandler handler = ReadOnlyChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
     public event EventHandler GetsCollectedChanged;
     protected virtual void OnGetsCollectedChanged() {
Index: branches/2994-AutoDiffForIntervals/HeuristicLab.Parameters/3.3/ValueLookupParameter.cs
===================================================================
--- branches/2994-AutoDiffForIntervals/HeuristicLab.Parameters/3.3/ValueLookupParameter.cs	(revision 16671)
+++ branches/2994-AutoDiffForIntervals/HeuristicLab.Parameters/3.3/ValueLookupParameter.cs	(revision 16911)
@@ -22,7 +22,7 @@
 using System;
 using System.Drawing;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HEAL.Attic;
 
 namespace HeuristicLab.Parameters {
@@ -45,4 +45,5 @@
       get { return this.value; }
       set {
+        if (ReadOnly) throw new InvalidOperationException("Cannot set the value of a readonly parameter.");
         if (value != this.value) {
           DeregisterValueEvents();
@@ -66,4 +67,15 @@
     }
 
+    [Storable(DefaultValue = false)]
+    private bool readOnly;
+    public bool ReadOnly {
+      get { return readOnly; }
+      set {
+        if (value == readOnly) return;
+        readOnly = value;
+        OnReadOnlyChanged();
+      }
+    }
+
     [Storable(DefaultValue = true)]
     private bool getsCollected;
@@ -84,4 +96,5 @@
       : base(original, cloner) {
       value = cloner.Clone(original.value);
+      readOnly = original.readOnly;
       getsCollected = original.getsCollected;
       RegisterValueEvents();
@@ -89,4 +102,5 @@
     public ValueLookupParameter()
       : base() {
+      this.readOnly = false;
       this.Hidden = false;
       this.getsCollected = true;
@@ -94,59 +108,35 @@
     public ValueLookupParameter(string name)
       : base(name) {
+      this.readOnly = false;
       this.Hidden = false;
       this.getsCollected = true;
-    }
-    public ValueLookupParameter(string name, bool getsCollected)
-      : base(name) {
-      this.Hidden = false;
-      this.getsCollected = getsCollected;
     }
     public ValueLookupParameter(string name, T value)
       : base(name) {
       this.value = value;
+      this.readOnly = false;
       this.Hidden = false;
       this.getsCollected = true;
       RegisterValueEvents();
     }
-    public ValueLookupParameter(string name, T value, bool getsCollected)
-      : base(name) {
-      this.value = value;
-      this.Hidden = false;
-      this.getsCollected = getsCollected;
-      RegisterValueEvents();
-    }
     public ValueLookupParameter(string name, string description)
       : base(name, description) {
+      this.readOnly = false;
       this.Hidden = false;
       this.getsCollected = true;
-    }
-    public ValueLookupParameter(string name, string description, bool getsCollected)
-      : base(name, description) {
-      this.Hidden = false;
-      this.getsCollected = getsCollected;
     }
     public ValueLookupParameter(string name, string description, T value)
       : base(name, description) {
       this.value = value;
+      this.readOnly = false;
       this.Hidden = false;
       this.getsCollected = true;
       RegisterValueEvents();
     }
-    public ValueLookupParameter(string name, string description, T value, bool getsCollected)
-      : base(name, description) {
-      this.value = value;
-      this.Hidden = false;
-      this.getsCollected = getsCollected;
-      RegisterValueEvents();
-    }
     public ValueLookupParameter(string name, string description, string actualName)
       : base(name, description, actualName) {
+      this.readOnly = false;
       this.Hidden = false;
       this.getsCollected = true;
-    }
-    public ValueLookupParameter(string name, string description, string actualName, bool getsCollected)
-      : base(name, description, actualName) {
-      this.Hidden = false;
-      this.getsCollected = getsCollected;
     }
     #endregion
@@ -177,4 +167,9 @@
       OnToStringChanged();
     }
+    public event EventHandler ReadOnlyChanged;
+    protected virtual void OnReadOnlyChanged() {
+      EventHandler handler = ReadOnlyChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
     public event EventHandler GetsCollectedChanged;
     protected virtual void OnGetsCollectedChanged() {
Index: branches/2994-AutoDiffForIntervals/HeuristicLab.Parameters/3.3/ValueParameter.cs
===================================================================
--- branches/2994-AutoDiffForIntervals/HeuristicLab.Parameters/3.3/ValueParameter.cs	(revision 16671)
+++ branches/2994-AutoDiffForIntervals/HeuristicLab.Parameters/3.3/ValueParameter.cs	(revision 16911)
@@ -22,7 +22,7 @@
 using System;
 using System.Reflection;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HEAL.Attic;
 
 namespace HeuristicLab.Parameters {
@@ -47,12 +47,8 @@
     public ValueParameter() : base() { }
     public ValueParameter(string name) : base(name) { base.Value = CreateDefaultValue(); }
-    public ValueParameter(string name, bool getsCollected) : base(name, getsCollected) { base.Value = CreateDefaultValue(); }
     public ValueParameter(string name, T value) : base(name, value) { }
-    public ValueParameter(string name, T value, bool getsCollected) : base(name, value, getsCollected) { }
     public ValueParameter(string name, string description) : base(name, description) { base.Value = CreateDefaultValue(); }
-    public ValueParameter(string name, string description, bool getsCollected) : base(name, description, getsCollected) { base.Value = CreateDefaultValue(); }
     public ValueParameter(string name, string description, T value) : base(name, description, value) { }
-    public ValueParameter(string name, string description, T value, bool getsCollected) : base(name, description, value, getsCollected) { }
-                                                                                  
+
     protected T CreateDefaultValue() {
       Type type = typeof(T);
