Index: /trunk/sources/HeuristicLab.Core.Views/3.3/VariableView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/VariableView.cs	(revision 2947)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/VariableView.cs	(revision 2948)
@@ -94,5 +94,5 @@
         dataTypeTextBox.Text = Content.Value == null ? "-" : Content.Value.GetType().GetPrettyName();
         dataTypeTextBox.Enabled = Content.Value != null;
-        setValueButton.Enabled = Content.Value == null;
+        setValueButton.Enabled = true;
         clearValueButton.Enabled = Content.Value != null;
         valueGroupBox.Enabled = true;
@@ -107,5 +107,4 @@
         dataTypeTextBox.Text = Content.Value == null ? "-" : Content.Value.GetType().GetPrettyName();
         dataTypeTextBox.Enabled = Content.Value != null;
-        setValueButton.Enabled = Content.Value == null;
         clearValueButton.Enabled = Content.Value != null;
         viewHost.Content = Content.Value;
Index: /trunk/sources/HeuristicLab.Parameters.Views/3.3/ConstrainedValueParameterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Parameters.Views/3.3/ConstrainedValueParameterView.cs	(revision 2947)
+++ /trunk/sources/HeuristicLab.Parameters.Views/3.3/ConstrainedValueParameterView.cs	(revision 2948)
@@ -21,5 +21,5 @@
 
 using System;
-using System.Linq;
+using System.Collections.Generic;
 using HeuristicLab.Collections;
 using HeuristicLab.Core;
@@ -32,6 +32,9 @@
   /// </summary>
   [View("ConstrainedValueParameter View")]
+  [Content(typeof(OptionalConstrainedValueParameter<>), true)]
   [Content(typeof(ConstrainedValueParameter<>), true)]
   public partial class ConstrainedValueParameterView<T> : ParameterView where T : class, IItem {
+    private List<T> valueComboBoxItems;
+
     /// <summary>
     /// Gets or sets the variable to represent visually.
@@ -39,6 +42,6 @@
     /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
     /// No own data storage present.</remarks>
-    public new ConstrainedValueParameter<T> Content {
-      get { return (ConstrainedValueParameter<T>)base.Content; }
+    public new OptionalConstrainedValueParameter<T> Content {
+      get { return (OptionalConstrainedValueParameter<T>)base.Content; }
       set { base.Content = value; }
     }
@@ -50,4 +53,5 @@
       InitializeComponent();
       Caption = "ConstrainedValueParameter";
+      valueComboBoxItems = new List<T>();
     }
     /// <summary>
@@ -56,5 +60,5 @@
     /// <remarks>Calls <see cref="VariableView()"/>.</remarks>
     /// <param name="variable">The variable to represent visually.</param>
-    public ConstrainedValueParameterView(ConstrainedValueParameter<T> content)
+    public ConstrainedValueParameterView(OptionalConstrainedValueParameter<T> content)
       : this() {
       Content = content;
@@ -102,9 +106,17 @@
     private void FillValueComboBox() {
       valueComboBox.SelectedIndexChanged -= new EventHandler(valueComboBox_SelectedIndexChanged);
-      valueComboBox.DataSource = null;
+      valueComboBoxItems.Clear();
+      valueComboBox.Items.Clear();
+      if (!(Content is ConstrainedValueParameter<T>)) {
+        valueComboBoxItems.Add(null);
+        valueComboBox.Items.Add("-");
+      }
       if (Content != null) {
-        valueComboBox.DataSource = Content.ValidValues.ToList();
+        foreach (T item in Content.ValidValues) {
+          valueComboBoxItems.Add(item);
+          valueComboBox.Items.Add(item.ToString());
+        }
         valueComboBox.Enabled = valueComboBox.Items.Count > 0;
-        valueComboBox.SelectedItem = Content.Value;
+        valueComboBox.SelectedIndex = valueComboBoxItems.IndexOf(Content.Value);
       }
       valueComboBox.SelectedIndexChanged += new EventHandler(valueComboBox_SelectedIndexChanged);
@@ -116,5 +128,5 @@
         Invoke(new EventHandler(Content_ValueChanged), sender, e);
       else {
-        valueComboBox.SelectedItem = Content.Value;
+        valueComboBox.SelectedIndex = valueComboBoxItems.IndexOf(Content.Value);
         viewHost.Content = Content.Value;
       }
@@ -141,5 +153,5 @@
 
     private void valueComboBox_SelectedIndexChanged(object sender, EventArgs e) {
-      Content.Value = (T)valueComboBox.SelectedItem;
+      Content.Value = valueComboBoxItems[valueComboBox.SelectedIndex];
     }
   }
Index: /trunk/sources/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj	(revision 2947)
+++ /trunk/sources/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj	(revision 2948)
@@ -92,16 +92,4 @@
       <DependentUpon>ConstrainedValueParameterView.cs</DependentUpon>
     </Compile>
-    <Compile Include="OptionalConstrainedValueParameterView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="OptionalConstrainedValueParameterView.Designer.cs">
-      <DependentUpon>OptionalConstrainedValueParameterView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="OptionalValueParameterView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="OptionalValueParameterView.Designer.cs">
-      <DependentUpon>OptionalValueParameterView.cs</DependentUpon>
-    </Compile>
     <Compile Include="ValueLookupParameterView.cs">
       <SubType>UserControl</SubType>
Index: unk/sources/HeuristicLab.Parameters.Views/3.3/OptionalConstrainedValueParameterView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Parameters.Views/3.3/OptionalConstrainedValueParameterView.Designer.cs	(revision 2947)
+++ 	(revision )
@@ -1,141 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Parameters.Views {
-  partial class OptionalConstrainedValueParameterView<T> {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.valueGroupBox = new System.Windows.Forms.GroupBox();
-      this.viewHost = new HeuristicLab.Core.Views.ViewHost();
-      this.valueComboBox = new System.Windows.Forms.ComboBox();
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.valueGroupBox.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // dataTypeLabel
-      // 
-      this.dataTypeLabel.Location = new System.Drawing.Point(3, 55);
-      // 
-      // dataTypeTextBox
-      // 
-      this.dataTypeTextBox.Location = new System.Drawing.Point(80, 52);
-      this.dataTypeTextBox.Size = new System.Drawing.Size(306, 20);
-      // 
-      // nameTextBox
-      // 
-      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
-      this.nameTextBox.Location = new System.Drawing.Point(80, 0);
-      this.nameTextBox.Size = new System.Drawing.Size(306, 20);
-      // 
-      // descriptionTextBox
-      // 
-      this.descriptionTextBox.Location = new System.Drawing.Point(80, 26);
-      this.descriptionTextBox.Size = new System.Drawing.Size(306, 20);
-      // 
-      // valueGroupBox
-      // 
-      this.valueGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.valueGroupBox.Controls.Add(this.viewHost);
-      this.valueGroupBox.Controls.Add(this.valueComboBox);
-      this.valueGroupBox.Location = new System.Drawing.Point(0, 78);
-      this.valueGroupBox.Name = "valueGroupBox";
-      this.valueGroupBox.Size = new System.Drawing.Size(386, 237);
-      this.valueGroupBox.TabIndex = 6;
-      this.valueGroupBox.TabStop = false;
-      this.valueGroupBox.Text = "Value";
-      // 
-      // viewHost
-      // 
-      this.viewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.viewHost.Content = null;
-      this.viewHost.Location = new System.Drawing.Point(6, 46);
-      this.viewHost.Name = "viewHost";
-      this.viewHost.Size = new System.Drawing.Size(374, 185);
-      this.viewHost.TabIndex = 0;
-      this.viewHost.ViewType = null;
-      // 
-      // valueComboBox
-      // 
-      this.valueComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.valueComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
-      this.valueComboBox.FormattingEnabled = true;
-      this.valueComboBox.Location = new System.Drawing.Point(6, 19);
-      this.valueComboBox.Name = "valueComboBox";
-      this.valueComboBox.Size = new System.Drawing.Size(374, 21);
-      this.valueComboBox.TabIndex = 1;
-      this.toolTip.SetToolTip(this.valueComboBox, "Selected Value");
-      this.valueComboBox.SelectedIndexChanged += new System.EventHandler(this.valueComboBox_SelectedIndexChanged);
-      // 
-      // ConstrainedValueParameterView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.valueGroupBox);
-      this.Name = "ConstrainedValueParameterView";
-      this.Size = new System.Drawing.Size(386, 315);
-      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
-      this.Controls.SetChildIndex(this.descriptionLabel, 0);
-      this.Controls.SetChildIndex(this.dataTypeTextBox, 0);
-      this.Controls.SetChildIndex(this.dataTypeLabel, 0);
-      this.Controls.SetChildIndex(this.nameTextBox, 0);
-      this.Controls.SetChildIndex(this.nameLabel, 0);
-      this.Controls.SetChildIndex(this.valueGroupBox, 0);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.valueGroupBox.ResumeLayout(false);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    protected System.Windows.Forms.GroupBox valueGroupBox;
-    protected HeuristicLab.Core.Views.ViewHost viewHost;
-    protected System.Windows.Forms.ComboBox valueComboBox;
-  }
-}
Index: unk/sources/HeuristicLab.Parameters.Views/3.3/OptionalConstrainedValueParameterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Parameters.Views/3.3/OptionalConstrainedValueParameterView.cs	(revision 2947)
+++ 	(revision )
@@ -1,154 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using HeuristicLab.Collections;
-using HeuristicLab.Core;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.Parameters.Views {
-  /// <summary>
-  /// The visual representation of a <see cref="Parameter"/>.
-  /// </summary>
-  [View("OptionalConstrainedValueParameter View")]
-  [Content(typeof(OptionalConstrainedValueParameter<>), true)]
-  public partial class OptionalConstrainedValueParameterView<T> : ParameterView where T : class, IItem {
-    private List<T> valueComboBoxItems;
-
-    /// <summary>
-    /// Gets or sets the variable to represent visually.
-    /// </summary>
-    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
-    /// No own data storage present.</remarks>
-    public new OptionalConstrainedValueParameter<T> Content {
-      get { return (OptionalConstrainedValueParameter<T>)base.Content; }
-      set { base.Content = value; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="VariableView"/> with caption "Variable".
-    /// </summary>
-    public OptionalConstrainedValueParameterView() {
-      InitializeComponent();
-      Caption = "OptionalConstrainedValueParameter";
-      valueComboBoxItems = new List<T>();
-    }
-    /// <summary>
-    /// Initializes a new instance of <see cref="VariableView"/> with the given <paramref name="variable"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="VariableView()"/>.</remarks>
-    /// <param name="variable">The variable to represent visually.</param>
-    public OptionalConstrainedValueParameterView(OptionalConstrainedValueParameter<T> content)
-      : this() {
-      Content = content;
-    }
-
-    /// <summary>
-    /// Removes the eventhandlers from the underlying <see cref="IVariable"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void DeregisterContentEvents() {
-      Content.ValidValues.ItemsAdded -= new CollectionItemsChangedEventHandler<T>(ValidValues_ItemsAdded);
-      Content.ValidValues.ItemsRemoved -= new CollectionItemsChangedEventHandler<T>(ValidValues_ItemsRemoved);
-      Content.ValidValues.CollectionReset -= new CollectionItemsChangedEventHandler<T>(ValidValues_CollectionReset);
-      Content.ValueChanged -= new EventHandler(Content_ValueChanged);
-      base.DeregisterContentEvents();
-    }
-
-    /// <summary>
-    /// Adds eventhandlers to the underlying <see cref="IVariable"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.ValidValues.ItemsAdded += new CollectionItemsChangedEventHandler<T>(ValidValues_ItemsAdded);
-      Content.ValidValues.ItemsRemoved += new CollectionItemsChangedEventHandler<T>(ValidValues_ItemsRemoved);
-      Content.ValidValues.CollectionReset += new CollectionItemsChangedEventHandler<T>(ValidValues_CollectionReset);
-      Content.ValueChanged += new EventHandler(Content_ValueChanged);
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      if (Content == null) {
-        Caption = "OptionalConstrainedValueParameter";
-        viewHost.Content = null;
-        valueGroupBox.Enabled = false;
-        FillValueComboBox();
-      } else {
-        Caption = Content.Name + " (" + Content.GetType().Name + ")";
-        valueGroupBox.Enabled = true;
-        FillValueComboBox();
-        viewHost.Content = Content.Value;
-      }
-    }
-
-    private void FillValueComboBox() {
-      valueComboBox.SelectedIndexChanged -= new EventHandler(valueComboBox_SelectedIndexChanged);
-      valueComboBoxItems.Clear();
-      valueComboBoxItems.Add(null);
-      valueComboBox.Items.Clear();
-      valueComboBox.Items.Add("-");
-      if (Content != null) {
-        foreach (T item in Content.ValidValues) {
-          valueComboBoxItems.Add(item);
-          valueComboBox.Items.Add(item.ToString());
-        }
-        valueComboBox.SelectedIndex = valueComboBoxItems.IndexOf(Content.Value);
-      }
-      valueComboBox.SelectedIndexChanged += new EventHandler(valueComboBox_SelectedIndexChanged);
-    }
-
-    #region Content Events
-    private void Content_ValueChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_ValueChanged), sender, e);
-      else {
-        valueComboBox.SelectedIndex = valueComboBoxItems.IndexOf(Content.Value);
-        viewHost.Content = Content.Value;
-      }
-    }
-    private void ValidValues_ItemsAdded(object sender, CollectionItemsChangedEventArgs<T> e) {
-      if (InvokeRequired)
-        Invoke(new CollectionItemsChangedEventHandler<T>(ValidValues_ItemsAdded), sender, e);
-      else
-        FillValueComboBox();
-    }
-    private void ValidValues_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<T> e) {
-      if (InvokeRequired)
-        Invoke(new CollectionItemsChangedEventHandler<T>(ValidValues_ItemsRemoved), sender, e);
-      else
-        FillValueComboBox();
-    }
-    private void ValidValues_CollectionReset(object sender, CollectionItemsChangedEventArgs<T> e) {
-      if (InvokeRequired)
-        Invoke(new CollectionItemsChangedEventHandler<T>(ValidValues_CollectionReset), sender, e);
-      else
-        FillValueComboBox();
-    }
-    #endregion
-
-    private void valueComboBox_SelectedIndexChanged(object sender, EventArgs e) {
-      Content.Value = valueComboBoxItems[valueComboBox.SelectedIndex];
-    }
-  }
-}
Index: unk/sources/HeuristicLab.Parameters.Views/3.3/OptionalValueParameterView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Parameters.Views/3.3/OptionalValueParameterView.Designer.cs	(revision 2947)
+++ 	(revision )
@@ -1,172 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Parameters.Views {
-  partial class OptionalValueParameterView<T> {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.valueGroupBox = new System.Windows.Forms.GroupBox();
-      this.valuePanel = new System.Windows.Forms.Panel();
-      this.viewHost = new HeuristicLab.Core.Views.ViewHost();
-      this.clearValueButton = new System.Windows.Forms.Button();
-      this.setValueButton = new System.Windows.Forms.Button();
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.valueGroupBox.SuspendLayout();
-      this.valuePanel.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // dataTypeLabel
-      // 
-      this.dataTypeLabel.Location = new System.Drawing.Point(3, 55);
-      // 
-      // dataTypeTextBox
-      // 
-      this.dataTypeTextBox.Location = new System.Drawing.Point(80, 52);
-      this.dataTypeTextBox.Size = new System.Drawing.Size(306, 20);
-      // 
-      // nameTextBox
-      // 
-      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
-      this.nameTextBox.Location = new System.Drawing.Point(80, 0);
-      this.nameTextBox.Size = new System.Drawing.Size(306, 20);
-      // 
-      // descriptionTextBox
-      // 
-      this.descriptionTextBox.Location = new System.Drawing.Point(80, 26);
-      this.descriptionTextBox.Size = new System.Drawing.Size(306, 20);
-      // 
-      // valueGroupBox
-      // 
-      this.valueGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.valueGroupBox.Controls.Add(this.valuePanel);
-      this.valueGroupBox.Controls.Add(this.clearValueButton);
-      this.valueGroupBox.Controls.Add(this.setValueButton);
-      this.valueGroupBox.Location = new System.Drawing.Point(0, 78);
-      this.valueGroupBox.Name = "valueGroupBox";
-      this.valueGroupBox.Size = new System.Drawing.Size(386, 237);
-      this.valueGroupBox.TabIndex = 6;
-      this.valueGroupBox.TabStop = false;
-      this.valueGroupBox.Text = "Value";
-      // 
-      // valuePanel
-      // 
-      this.valuePanel.AllowDrop = true;
-      this.valuePanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.valuePanel.Controls.Add(this.viewHost);
-      this.valuePanel.Location = new System.Drawing.Point(6, 49);
-      this.valuePanel.Name = "valuePanel";
-      this.valuePanel.Size = new System.Drawing.Size(374, 182);
-      this.valuePanel.TabIndex = 0;
-      this.valuePanel.DragOver += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragEnterOver);
-      this.valuePanel.DragDrop += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragDrop);
-      this.valuePanel.DragEnter += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragEnterOver);
-      // 
-      // viewHost
-      // 
-      this.viewHost.Content = null;
-      this.viewHost.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.viewHost.Location = new System.Drawing.Point(0, 0);
-      this.viewHost.Name = "viewHost";
-      this.viewHost.Size = new System.Drawing.Size(374, 182);
-      this.viewHost.TabIndex = 0;
-      this.viewHost.ViewType = null;
-      // 
-      // clearValueButton
-      // 
-      this.clearValueButton.Enabled = false;
-      this.clearValueButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Remove;
-      this.clearValueButton.Location = new System.Drawing.Point(36, 19);
-      this.clearValueButton.Name = "clearValueButton";
-      this.clearValueButton.Size = new System.Drawing.Size(24, 24);
-      this.clearValueButton.TabIndex = 1;
-      this.toolTip.SetToolTip(this.clearValueButton, "Clear Value");
-      this.clearValueButton.UseVisualStyleBackColor = true;
-      this.clearValueButton.Click += new System.EventHandler(this.clearValueButton_Click);
-      // 
-      // setValueButton
-      // 
-      this.setValueButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Add;
-      this.setValueButton.Location = new System.Drawing.Point(6, 19);
-      this.setValueButton.Name = "setValueButton";
-      this.setValueButton.Size = new System.Drawing.Size(24, 24);
-      this.setValueButton.TabIndex = 0;
-      this.toolTip.SetToolTip(this.setValueButton, "Set Value");
-      this.setValueButton.UseVisualStyleBackColor = true;
-      this.setValueButton.Click += new System.EventHandler(this.setValueButton_Click);
-      // 
-      // OptionalValueParameterView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.valueGroupBox);
-      this.Name = "OptionalValueParameterView";
-      this.Size = new System.Drawing.Size(386, 315);
-      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
-      this.Controls.SetChildIndex(this.descriptionLabel, 0);
-      this.Controls.SetChildIndex(this.dataTypeTextBox, 0);
-      this.Controls.SetChildIndex(this.dataTypeLabel, 0);
-      this.Controls.SetChildIndex(this.nameTextBox, 0);
-      this.Controls.SetChildIndex(this.nameLabel, 0);
-      this.Controls.SetChildIndex(this.valueGroupBox, 0);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.valueGroupBox.ResumeLayout(false);
-      this.valuePanel.ResumeLayout(false);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    protected System.Windows.Forms.GroupBox valueGroupBox;
-    protected System.Windows.Forms.Panel valuePanel;
-    protected HeuristicLab.Core.Views.ViewHost viewHost;
-    protected System.Windows.Forms.Button setValueButton;
-    protected System.Windows.Forms.Button clearValueButton;
-  }
-}
Index: unk/sources/HeuristicLab.Parameters.Views/3.3/OptionalValueParameterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Parameters.Views/3.3/OptionalValueParameterView.cs	(revision 2947)
+++ 	(revision )
@@ -1,141 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Windows.Forms;
-using HeuristicLab.Core;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.Parameters.Views {
-  /// <summary>
-  /// The visual representation of a <see cref="Parameter"/>.
-  /// </summary>
-  [View("OptionalValueParameter View")]
-  [Content(typeof(OptionalValueParameter<>), true)]
-  [Content(typeof(IValueParameter<>), false)]
-  public partial class OptionalValueParameterView<T> : ParameterView where T : class, IItem {
-    protected TypeSelectorDialog typeSelectorDialog;
-
-    /// <summary>
-    /// Gets or sets the variable to represent visually.
-    /// </summary>
-    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
-    /// No own data storage present.</remarks>
-    public new IValueParameter<T> Content {
-      get { return (IValueParameter<T>)base.Content; }
-      set { base.Content = value; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="VariableView"/> with caption "Variable".
-    /// </summary>
-    public OptionalValueParameterView() {
-      InitializeComponent();
-      Caption = "OptionalValueParameter";
-    }
-    /// <summary>
-    /// Initializes a new instance of <see cref="VariableView"/> with the given <paramref name="variable"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="VariableView()"/>.</remarks>
-    /// <param name="variable">The variable to represent visually.</param>
-    public OptionalValueParameterView(IValueParameter<T> content)
-      : this() {
-      Content = content;
-    }
-
-    /// <summary>
-    /// Removes the eventhandlers from the underlying <see cref="IVariable"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void DeregisterContentEvents() {
-      Content.ValueChanged -= new EventHandler(Content_ValueChanged);
-      base.DeregisterContentEvents();
-    }
-
-    /// <summary>
-    /// Adds eventhandlers to the underlying <see cref="IVariable"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.ValueChanged += new EventHandler(Content_ValueChanged);
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      if (Content == null) {
-        Caption = "OptionalValueParameter";
-        setValueButton.Enabled = false;
-        clearValueButton.Enabled = false;
-        viewHost.Content = null;
-        valueGroupBox.Enabled = false;
-      } else {
-        Caption = Content.Name + " (" + Content.GetType().Name + ")";
-        setValueButton.Enabled = Content.Value == null;
-        clearValueButton.Enabled = Content.Value != null;
-        valueGroupBox.Enabled = true;
-        viewHost.Content = Content.Value;
-      }
-    }
-
-    protected virtual void Content_ValueChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_ValueChanged), sender, e);
-      else {
-        setValueButton.Enabled = Content.Value == null;
-        clearValueButton.Enabled = Content.Value != null;
-        viewHost.Content = Content.Value;
-      }
-    }
-
-    protected virtual void setValueButton_Click(object sender, EventArgs e) {
-      if (typeSelectorDialog == null) {
-        typeSelectorDialog = new TypeSelectorDialog();
-        typeSelectorDialog.Caption = "Select Value";
-        typeSelectorDialog.TypeSelector.Configure(Content.DataType, false, false);
-      }
-      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK)
-        Content.Value = (T)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
-    }
-    protected virtual void clearValueButton_Click(object sender, EventArgs e) {
-      Content.Value = null;
-    }
-    protected virtual void valuePanel_DragEnterOver(object sender, DragEventArgs e) {
-      e.Effect = DragDropEffects.None;
-      Type type = e.Data.GetData("Type") as Type;
-      if ((type != null) && (Content.DataType.IsAssignableFrom(type))) {
-        if ((e.KeyState & 8) == 8) e.Effect = DragDropEffects.Copy;  // CTRL key
-        else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move;  // SHIFT key
-        else if ((e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link) e.Effect = DragDropEffects.Link;
-        else if ((e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy) e.Effect = DragDropEffects.Copy;
-        else if ((e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move) e.Effect = DragDropEffects.Move;
-      }
-    }
-    protected virtual void valuePanel_DragDrop(object sender, DragEventArgs e) {
-      if (e.Effect != DragDropEffects.None) {
-        T value = e.Data.GetData("Value") as T;
-        if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) value = (T)value.Clone();
-        Content.Value = value;
-      }
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueLookupParameterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueLookupParameterView.cs	(revision 2947)
+++ /trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueLookupParameterView.cs	(revision 2948)
@@ -97,5 +97,5 @@
         actualNameTextBox.Text = Content.ActualName;
         actualNameTextBox.Enabled = true;
-        setValueButton.Enabled = Content.Value == null;
+        setValueButton.Enabled = true;
         clearValueButton.Enabled = Content.Value != null;
         valueGroupBox.Enabled = true;
@@ -114,5 +114,4 @@
         Invoke(new EventHandler(Content_ValueChanged), sender, e);
       else {
-        setValueButton.Enabled = Content.Value == null;
         clearValueButton.Enabled = Content.Value != null;
         viewHost.Content = Content.Value;
Index: /trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueParameterView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueParameterView.Designer.cs	(revision 2947)
+++ /trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueParameterView.Designer.cs	(revision 2948)
@@ -33,4 +33,5 @@
     protected override void Dispose(bool disposing) {
       if (disposing) {
+        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
         if (components != null) components.Dispose();
       }
@@ -48,12 +49,10 @@
       this.valuePanel = new System.Windows.Forms.Panel();
       this.viewHost = new HeuristicLab.Core.Views.ViewHost();
+      this.clearValueButton = new System.Windows.Forms.Button();
+      this.setValueButton = new System.Windows.Forms.Button();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       this.valueGroupBox.SuspendLayout();
       this.valuePanel.SuspendLayout();
       this.SuspendLayout();
-      // 
-      // dataTypeLabel
-      // 
-      this.dataTypeLabel.Location = new System.Drawing.Point(3, 55);
       // 
       // dataTypeTextBox
@@ -80,4 +79,6 @@
                   | System.Windows.Forms.AnchorStyles.Right)));
       this.valueGroupBox.Controls.Add(this.valuePanel);
+      this.valueGroupBox.Controls.Add(this.clearValueButton);
+      this.valueGroupBox.Controls.Add(this.setValueButton);
       this.valueGroupBox.Location = new System.Drawing.Point(0, 78);
       this.valueGroupBox.Name = "valueGroupBox";
@@ -94,7 +95,7 @@
                   | System.Windows.Forms.AnchorStyles.Right)));
       this.valuePanel.Controls.Add(this.viewHost);
-      this.valuePanel.Location = new System.Drawing.Point(6, 19);
+      this.valuePanel.Location = new System.Drawing.Point(6, 49);
       this.valuePanel.Name = "valuePanel";
-      this.valuePanel.Size = new System.Drawing.Size(374, 212);
+      this.valuePanel.Size = new System.Drawing.Size(374, 182);
       this.valuePanel.TabIndex = 0;
       this.valuePanel.DragOver += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragEnterOver);
@@ -108,7 +109,30 @@
       this.viewHost.Location = new System.Drawing.Point(0, 0);
       this.viewHost.Name = "viewHost";
-      this.viewHost.Size = new System.Drawing.Size(374, 212);
+      this.viewHost.Size = new System.Drawing.Size(374, 182);
       this.viewHost.TabIndex = 0;
       this.viewHost.ViewType = null;
+      // 
+      // clearValueButton
+      // 
+      this.clearValueButton.Enabled = false;
+      this.clearValueButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Remove;
+      this.clearValueButton.Location = new System.Drawing.Point(36, 19);
+      this.clearValueButton.Name = "clearValueButton";
+      this.clearValueButton.Size = new System.Drawing.Size(24, 24);
+      this.clearValueButton.TabIndex = 1;
+      this.toolTip.SetToolTip(this.clearValueButton, "Clear Value");
+      this.clearValueButton.UseVisualStyleBackColor = true;
+      this.clearValueButton.Click += new System.EventHandler(this.setValueButton_Click);
+      // 
+      // setValueButton
+      // 
+      this.setValueButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Add;
+      this.setValueButton.Location = new System.Drawing.Point(6, 19);
+      this.setValueButton.Name = "setValueButton";
+      this.setValueButton.Size = new System.Drawing.Size(24, 24);
+      this.setValueButton.TabIndex = 0;
+      this.toolTip.SetToolTip(this.setValueButton, "Set Value");
+      this.setValueButton.UseVisualStyleBackColor = true;
+      this.setValueButton.Click += new System.EventHandler(this.changeValueButton_Click);
       // 
       // ValueParameterView
@@ -139,4 +163,6 @@
     protected System.Windows.Forms.Panel valuePanel;
     protected HeuristicLab.Core.Views.ViewHost viewHost;
+    protected System.Windows.Forms.Button setValueButton;
+    protected System.Windows.Forms.Button clearValueButton;
   }
 }
Index: /trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueParameterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueParameterView.cs	(revision 2947)
+++ /trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueParameterView.cs	(revision 2948)
@@ -31,6 +31,10 @@
   /// </summary>
   [View("ValueParameter View")]
+  [Content(typeof(OptionalValueParameter<>), true)]
   [Content(typeof(ValueParameter<>), true)]
+  [Content(typeof(IValueParameter<>), false)]
   public partial class ValueParameterView<T> : ParameterView where T : class, IItem {
+    protected TypeSelectorDialog typeSelectorDialog;
+
     /// <summary>
     /// Gets or sets the variable to represent visually.
@@ -38,6 +42,6 @@
     /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
     /// No own data storage present.</remarks>
-    public new ValueParameter<T> Content {
-      get { return (ValueParameter<T>)base.Content; }
+    public new IValueParameter<T> Content {
+      get { return (IValueParameter<T>)base.Content; }
       set { base.Content = value; }
     }
@@ -55,5 +59,5 @@
     /// <remarks>Calls <see cref="VariableView()"/>.</remarks>
     /// <param name="variable">The variable to represent visually.</param>
-    public ValueParameterView(ValueParameter<T> content)
+    public ValueParameterView(IValueParameter<T> content)
       : this() {
       Content = content;
@@ -82,8 +86,14 @@
       if (Content == null) {
         Caption = "ValueParameter";
+        setValueButton.Enabled = false;
+        clearValueButton.Visible = true;
+        clearValueButton.Enabled = false;
         viewHost.Content = null;
         valueGroupBox.Enabled = false;
       } else {
         Caption = Content.Name + " (" + Content.GetType().Name + ")";
+        setValueButton.Enabled = true;
+        clearValueButton.Visible = !(Content is ValueParameter<T>);
+        clearValueButton.Enabled = Content.Value != null;
         valueGroupBox.Enabled = true;
         viewHost.Content = Content.Value;
@@ -95,8 +105,21 @@
         Invoke(new EventHandler(Content_ValueChanged), sender, e);
       else {
+        clearValueButton.Enabled = Content.Value != null;
         viewHost.Content = Content.Value;
       }
     }
 
+    protected virtual void changeValueButton_Click(object sender, EventArgs e) {
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Value";
+        typeSelectorDialog.TypeSelector.Configure(Content.DataType, false, false);
+      }
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK)
+        Content.Value = (T)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+    }
+    protected virtual void setValueButton_Click(object sender, EventArgs e) {
+      Content.Value = null;
+    }
     protected virtual void valuePanel_DragEnterOver(object sender, DragEventArgs e) {
       e.Effect = DragDropEffects.None;
Index: /trunk/sources/HeuristicLab.Parameters/3.3/ValueParameter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Parameters/3.3/ValueParameter.cs	(revision 2947)
+++ /trunk/sources/HeuristicLab.Parameters/3.3/ValueParameter.cs	(revision 2948)
@@ -35,19 +35,14 @@
       get { return base.Value; }
       set {
-        if (value == null) throw new ArgumentNullException();
+        if ((value == null) && (Value != null)) throw new ArgumentNullException();
         base.Value = value;
       }
     }
 
-    private ValueParameter() : base() { }
+    public ValueParameter() : base() { }
+    public ValueParameter(string name) : base(name) { }
     public ValueParameter(string name, T value) : base(name, value) { }
+    public ValueParameter(string name, string description) : base(name, description) { }
     public ValueParameter(string name, string description, T value) : base(name, description, value) { }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      ValueParameter<T> clone = new ValueParameter<T>(Name, Description, Value);
-      cloner.RegisterClonedObject(this, clone);
-      clone.Value = (T)cloner.Clone(Value);
-      return clone;
-    }
   }
 }
