Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.sln
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.sln	(revision 4980)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.sln	(revision 4981)
@@ -2,6 +2,4 @@
 Microsoft Visual Studio Solution File, Format Version 11.00
 # Visual Studio 2010
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{9E843318-7235-4B2B-81A7-160FDDADD9E1}"
-EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.MetaOptimization-3.3", "HeuristicLab.Problems.MetaOptimization\3.3\HeuristicLab.Problems.MetaOptimization-3.3.csproj", "{ABBC1DF6-FCC6-4F86-AB75-B6B3A72E7D17}"
 EndProject
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/HeuristicLab.Problems.MetaOptimization.Views-3.3.csproj
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/HeuristicLab.Problems.MetaOptimization.Views-3.3.csproj	(revision 4980)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/HeuristicLab.Problems.MetaOptimization.Views-3.3.csproj	(revision 4981)
@@ -85,4 +85,10 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="OptimizableView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OptimizableView.Designer.cs">
+      <DependentUpon>OptimizableView.cs</DependentUpon>
+    </Compile>
     <Compile Include="ValueConfigurationViews\ValueConfigurationCheckedItemList.cs">
       <SubType>UserControl</SubType>
@@ -103,24 +109,6 @@
       <DependentUpon>ObjectSelectorDialog.cs</DependentUpon>
     </Compile>
-    <Compile Include="ParameterConfigurationViews\ParameterConfigurationListView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="ParameterConfigurationViews\ParameterConfigurationListView.Designer.cs">
-      <DependentUpon>ParameterConfigurationListView.cs</DependentUpon>
-    </Compile>
     <Compile Include="HeuristicLabProblemsMetaOptimizationViewsPlugin.cs" />
-    <Compile Include="ParameterConfigurationViews\ParameterConfigurationView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="ParameterConfigurationViews\ParameterConfigurationView.Designer.cs">
-      <DependentUpon>ParameterConfigurationView.cs</DependentUpon>
-    </Compile>
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="ValueConfigurationViews\ValueConfigurationView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="ValueConfigurationViews\ValueConfigurationView.Designer.cs">
-      <DependentUpon>ValueConfigurationView.cs</DependentUpon>
-    </Compile>
     <Compile Include="ValueConfigurationViews\ValueView.cs">
       <SubType>UserControl</SubType>
@@ -135,10 +123,7 @@
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\..\HeuristicLab.Problems.MetaOptimization\3.3\HeuristicLab.Problems.MetaOptimization-3.3.csproj">
-      <Project>{ABBC1DF6-FCC6-4F86-AB75-B6B3A72E7D17}</Project>
-      <Name>HeuristicLab.Problems.MetaOptimization-3.3</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
+    <EmbeddedResource Include="OptimizableView.resx">
+      <DependentUpon>OptimizableView.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="ValueConfigurationViews\NumericRangeView.resx">
       <DependentUpon>NumericRangeView.cs</DependentUpon>
@@ -147,16 +132,16 @@
       <DependentUpon>ObjectSelectorDialog.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="ParameterConfigurationViews\ParameterConfigurationListView.resx">
-      <DependentUpon>ParameterConfigurationListView.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="ParameterConfigurationViews\ParameterConfigurationView.resx">
-      <DependentUpon>ParameterConfigurationView.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="ValueConfigurationViews\ValueConfigurationView.resx">
-      <DependentUpon>ValueConfigurationView.cs</DependentUpon>
-    </EmbeddedResource>
     <EmbeddedResource Include="ValueConfigurationViews\ValueView.resx">
       <DependentUpon>ValueView.cs</DependentUpon>
     </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <Folder Include="ParameterConfigurationViews\" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.MetaOptimization\3.3\HeuristicLab.Problems.MetaOptimization-3.3.csproj">
+      <Project>{ABBC1DF6-FCC6-4F86-AB75-B6B3A72E7D17}</Project>
+      <Name>HeuristicLab.Problems.MetaOptimization-3.3</Name>
+    </ProjectReference>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/OptimizableView.Designer.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/OptimizableView.Designer.cs	(revision 4981)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/OptimizableView.Designer.cs	(revision 4981)
@@ -0,0 +1,74 @@
+﻿namespace HeuristicLab.Problems.MetaOptimization.Views.ValueConfigurationViews {
+  partial class OptimizableView {
+    /// <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 && (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.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.optimizeCheckBox = new System.Windows.Forms.CheckBox();
+      this.SuspendLayout();
+      // 
+      // 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.Caption = "View";
+      this.viewHost.Content = null;
+      this.viewHost.Enabled = false;
+      this.viewHost.Location = new System.Drawing.Point(0, 21);
+      this.viewHost.Name = "viewHost";
+      this.viewHost.ReadOnly = false;
+      this.viewHost.Size = new System.Drawing.Size(513, 345);
+      this.viewHost.TabIndex = 0;
+      this.viewHost.ViewType = null;
+      // 
+      // optimizeCheckBox
+      // 
+      this.optimizeCheckBox.AutoSize = true;
+      this.optimizeCheckBox.Location = new System.Drawing.Point(3, 3);
+      this.optimizeCheckBox.Name = "optimizeCheckBox";
+      this.optimizeCheckBox.Size = new System.Drawing.Size(66, 17);
+      this.optimizeCheckBox.TabIndex = 1;
+      this.optimizeCheckBox.Text = "Optimize";
+      this.optimizeCheckBox.UseVisualStyleBackColor = true;
+      this.optimizeCheckBox.CheckedChanged += new System.EventHandler(this.optimizeCheckBox_CheckedChanged);
+      // 
+      // OptimizableView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.optimizeCheckBox);
+      this.Controls.Add(this.viewHost);
+      this.Name = "OptimizableView";
+      this.Size = new System.Drawing.Size(513, 366);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private MainForm.WindowsForms.ViewHost viewHost;
+    private System.Windows.Forms.CheckBox optimizeCheckBox;
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/OptimizableView.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/OptimizableView.cs	(revision 4981)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/OptimizableView.cs	(revision 4981)
@@ -0,0 +1,93 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.Parameters;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Problems.MetaOptimization.Views.ValueConfigurationViews {
+  [View("IOptimizable View")]
+  [Content(typeof(IOptimizable), IsDefaultView = false)]
+  [Content(typeof(ParameterConfiguration), IsDefaultView = true)]
+  [Content(typeof(ValueConfiguration), IsDefaultView = true)]
+  public sealed partial class OptimizableView : ItemView {
+    public new IOptimizable Content {
+      get { return (IOptimizable)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public OptimizableView() {
+      InitializeComponent();
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.OptimizeChanged -= new EventHandler(Content_OptimizeChanged);
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.OptimizeChanged += new EventHandler(Content_OptimizeChanged);
+    }
+
+    #region Event Handlers (Content)
+    void Content_OptimizeChanged(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(Content_OptimizeChanged), sender, e);
+      } else {
+        this.optimizeCheckBox.Checked = Content.Optimize;
+        if (Content.Optimize) {
+          this.viewHost.ViewType = null;
+          if (Content is IParameterConfiguration) {
+            // this is a shortcut if only one possible ValueConfiguration is available
+            //if (((IParameterConfiguration)Content).ValueConfigurations.Count == 1) {
+            //  IValueConfiguration vc = ((IParameterConfiguration)Content).ValueConfigurations.First();
+            //  vc.Optimize = true;
+            //  this.viewHost.Content = vc;
+            //} else {
+            //  this.viewHost.Content = ((IParameterConfiguration)Content).ValueConfigurations;
+            //}
+            this.viewHost.Content = ((IParameterConfiguration)Content).ValueConfigurations;
+          } else if (Content is IValueConfiguration) {
+            if (Content.ConstrainedValue.ValueDataType == typeof(IntValue) ||
+                Content.ConstrainedValue.ValueDataType == typeof(DoubleValue)) {
+              this.viewHost.Content = ((IValueConfiguration)Content).RangeConstraint;
+            } else {
+              this.viewHost.Content = ((IValueConfiguration)Content).ParameterConfigurations;
+            }
+          } else {
+            throw new NotSupportedException("Only IParameterConfiguration and IValueConfiguration types are allowed.");
+          }
+        } else {
+          this.viewHost.Content = Content.ConstrainedValue;
+        }
+      }
+    }
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content != null) {
+        Content_OptimizeChanged(this, EventArgs.Empty);
+      } else {
+        this.viewHost.Content = null;
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+    }
+
+    #region Event Handlers (child controls)
+    private void optimizeCheckBox_CheckedChanged(object sender, EventArgs e) {
+      Content.Optimize = optimizeCheckBox.Checked;
+    }
+    #endregion
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/OptimizableView.resx
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/OptimizableView.resx	(revision 4981)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/OptimizableView.resx	(revision 4981)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: anches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationViews/ParameterConfigurationListView.Designer.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationViews/ParameterConfigurationListView.Designer.cs	(revision 4980)
+++ 	(revision )
@@ -1,59 +1,0 @@
-﻿namespace HeuristicLab.Problems.MetaOptimization.Views {
-  partial class ParameterConfigurationListView {
-    /// <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 && (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.optimizeCheckBox = new System.Windows.Forms.CheckBox();
-      this.SuspendLayout();
-
-
-      // 
-      // optimizeCheckBox
-      // 
-      this.optimizeCheckBox.AutoSize = true;
-      this.optimizeCheckBox.Location = new System.Drawing.Point(72, 52);
-      this.optimizeCheckBox.Name = "optimizeCheckBox";
-      this.optimizeCheckBox.Size = new System.Drawing.Size(66, 17);
-      this.optimizeCheckBox.TabIndex = 4;
-      this.optimizeCheckBox.Text = "Optimize";
-      this.optimizeCheckBox.UseVisualStyleBackColor = true;
-
-      // 
-      // ParameterConfigurationView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.optimizeCheckBox);
-      this.Name = "ParameterConfigurationView";
-      this.Size = new System.Drawing.Size(729, 481);
-
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.CheckBox optimizeCheckBox;
-  }
-}
Index: anches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationViews/ParameterConfigurationListView.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationViews/ParameterConfigurationListView.cs	(revision 4980)
+++ 	(revision )
@@ -1,48 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.MainForm;
-using HeuristicLab.Core.Views;
-using HeuristicLab.Core;
-using HeuristicLab.PluginInfrastructure;
-using HeuristicLab.Collections;
-
-namespace HeuristicLab.Problems.MetaOptimization.Views {
-  /// <summary>
-  /// The visual representation of a <see cref="ParameterConfiguration"/>.
-  /// </summary>
-  [View("ParameterConfigurationList View")]
-  [Content(typeof(IItemList<IParameterConfiguration>), true)]
-  public partial class ParameterConfigurationListView : ItemCollectionView<IParameterConfiguration> {
-    /// <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 IItemList<IParameterConfiguration> Content {
-      get { return (IItemList<IParameterConfiguration>)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public ParameterConfigurationListView() {
-      InitializeComponent();
-    }
-
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-    }
-
-    protected override void DeregisterContentEvents() {
-      base.DeregisterContentEvents();
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-    }
-  }
-}
Index: anches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationViews/ParameterConfigurationListView.resx
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationViews/ParameterConfigurationListView.resx	(revision 4980)
+++ 	(revision )
@@ -1,126 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>107, 17</value>
-  </metadata>
-  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-</root>
Index: anches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationViews/ParameterConfigurationView.Designer.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationViews/ParameterConfigurationView.Designer.cs	(revision 4980)
+++ 	(revision )
@@ -1,74 +1,0 @@
-﻿namespace HeuristicLab.Problems.MetaOptimization.Views {
-  partial class ParameterConfigurationView {
-    /// <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 && (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.optimizeCheckBox = new System.Windows.Forms.CheckBox();
-      this.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.SuspendLayout();
-      // 
-      // optimizeCheckBox
-      // 
-      this.optimizeCheckBox.AutoSize = true;
-      this.optimizeCheckBox.Location = new System.Drawing.Point(3, 3);
-      this.optimizeCheckBox.Name = "optimizeCheckBox";
-      this.optimizeCheckBox.Size = new System.Drawing.Size(66, 17);
-      this.optimizeCheckBox.TabIndex = 4;
-      this.optimizeCheckBox.Text = "Optimize";
-      this.optimizeCheckBox.UseVisualStyleBackColor = true;
-      this.optimizeCheckBox.CheckedChanged += new System.EventHandler(this.optimizeCheckBox_CheckedChanged);
-      // 
-      // 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.Caption = "View";
-      this.viewHost.Content = null;
-      this.viewHost.Enabled = false;
-      this.viewHost.Location = new System.Drawing.Point(0, 26);
-      this.viewHost.Name = "viewHost";
-      this.viewHost.ReadOnly = false;
-      this.viewHost.Size = new System.Drawing.Size(556, 447);
-      this.viewHost.TabIndex = 5;
-      this.viewHost.ViewType = null;
-      // 
-      // ParameterConfigurationView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.viewHost);
-      this.Controls.Add(this.optimizeCheckBox);
-      this.Name = "ParameterConfigurationView";
-      this.Size = new System.Drawing.Size(556, 473);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.CheckBox optimizeCheckBox;
-    private MainForm.WindowsForms.ViewHost viewHost;
-  }
-}
Index: anches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationViews/ParameterConfigurationView.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationViews/ParameterConfigurationView.cs	(revision 4980)
+++ 	(revision )
@@ -1,79 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.MainForm;
-using HeuristicLab.Core.Views;
-using HeuristicLab.Core;
-using HeuristicLab.Collections;
-
-namespace HeuristicLab.Problems.MetaOptimization.Views {
-  /// <summary>
-  /// The visual representation of a <see cref="ParameterConfiguration"/>.
-  /// </summary>
-  [View("ParameterConfiguration View")]
-  [Content(typeof(IParameterConfiguration), false)]
-  [Content(typeof(ParameterConfiguration), true)]
-  public partial class ParameterConfigurationView : ItemView {
-    /// <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 IParameterConfiguration Content {
-      get { return (IParameterConfiguration)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public ParameterConfigurationView() {
-      InitializeComponent();
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      if (Content != null) {
-        this.optimizeCheckBox.Checked = Content.OptimizationEnabled;
-      }
-      SetEnabledStateOfControls();
-    }
-
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.OptimizationEnabledChanged += new EventHandler(Content_OptimizationEnabledChanged);
-    }
-
-    protected override void DeregisterContentEvents() {
-      Content.OptimizationEnabledChanged -= new EventHandler(Content_OptimizationEnabledChanged);
-      base.DeregisterContentEvents();
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
-      if (Content != null) {
-        if (Content.OptimizationEnabled) {
-          viewHost.ViewType = null;
-          viewHost.Content = Content.ValueConfigurations;
-        } else {
-          viewHost.ViewType = typeof(ValueView);
-          viewHost.Content = Content.ActualValueConfiguration;
-        }
-      } else {
-        viewHost.Content = null;
-      }
-    }
-
-    void Content_OptimizationEnabledChanged(object sender, EventArgs e) {
-      optimizeCheckBox.Checked = Content.OptimizationEnabled;
-      SetEnabledStateOfControls();
-    }
-
-    private void optimizeCheckBox_CheckedChanged(object sender, EventArgs e) {
-      Content.OptimizationEnabled = optimizeCheckBox.Checked;
-      SetEnabledStateOfControls();
-    }
-  }
-}
Index: anches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationViews/ParameterConfigurationView.resx
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationViews/ParameterConfigurationView.resx	(revision 4980)
+++ 	(revision )
@@ -1,120 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ValueConfigurationViews/NumericRangeView.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ValueConfigurationViews/NumericRangeView.cs	(revision 4980)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ValueConfigurationViews/NumericRangeView.cs	(revision 4981)
@@ -16,6 +16,6 @@
   /// The visual representation of a <see cref="IIntegerRange"/>.
   /// </summary>
-  [View("NumericRange View")]
-  [Content(typeof(IRange<IntValue>), true)]
+  [View("IntValueRange View")]
+  [Content(typeof(IRange<IntValue>), false)]
   public partial class IntValueRangeView : ItemView {
     /// <summary>
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ValueConfigurationViews/ValueConfigurationCheckedItemList.Designer.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ValueConfigurationViews/ValueConfigurationCheckedItemList.Designer.cs	(revision 4980)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ValueConfigurationViews/ValueConfigurationCheckedItemList.Designer.cs	(revision 4981)
@@ -1,4 +1,4 @@
 ﻿namespace HeuristicLab.Problems.MetaOptimization.Views {
-  partial class ValueConfigurationCheckedItemList {
+  partial class ValueConfigurationCheckedItemCollectionView {
     /// <summary> 
     /// Required designer variable.
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ValueConfigurationViews/ValueConfigurationCheckedItemList.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ValueConfigurationViews/ValueConfigurationCheckedItemList.cs	(revision 4980)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ValueConfigurationViews/ValueConfigurationCheckedItemList.cs	(revision 4981)
@@ -9,12 +9,71 @@
 using HeuristicLab.MainForm;
 using HeuristicLab.Core;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
 
 namespace HeuristicLab.Problems.MetaOptimization.Views {
   [View("ValueConfigurationList View")]
-  [Content(typeof(CheckedItemList<IValueConfiguration>), true)]
-  [Content(typeof(ICheckedItemList<IValueConfiguration>), true)]
-  public partial class ValueConfigurationCheckedItemList : CheckedItemListView<IValueConfiguration> {
-    public ValueConfigurationCheckedItemList() {
+  [Content(typeof(ICheckedValueConfigurationCollection), IsDefaultView = true)]
+  public sealed partial class ValueConfigurationCheckedItemCollectionView : CheckedItemCollectionView<IValueConfiguration> {
+    public new ICheckedValueConfigurationCollection Content {
+      get { return (ICheckedValueConfigurationCollection)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public ValueConfigurationCheckedItemCollectionView() {
       InitializeComponent();
+    }
+
+    protected override void DeregisterContentEvents() {
+      // TODO: Deregister your event handlers here
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      // TODO: Register your event handlers here
+    }
+
+    #region Event Handlers (Content)
+    // TODO: Put event handlers of the content here
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        // TODO: Add code when content has been changed and is null
+      } else {
+        // TODO: Add code when content has been changed and is not null
+      }
+    }
+
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      // TODO: Enable or disable controls based on whether the content is null or the view is set readonly
+    }
+
+    #region Event Handlers (child controls)
+    // TODO: Put event handlers of child controls here.
+    #endregion
+
+    protected override IValueConfiguration CreateItem() {
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Item";
+        typeSelectorDialog.TypeSelector.Caption = "Available Items";
+        typeSelectorDialog.TypeSelector.Configure(Content.ValueDataType, false, true);
+      }
+
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          IItem value = (IItem)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+          return new ValueConfiguration(value, value.GetType());
+        }
+        catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(this, ex);
+        }
+      }
+      return null;
     }
   }
Index: anches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ValueConfigurationViews/ValueConfigurationView.Designer.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ValueConfigurationViews/ValueConfigurationView.Designer.cs	(revision 4980)
+++ 	(revision )
@@ -1,59 +1,0 @@
-﻿namespace HeuristicLab.Problems.MetaOptimization.Views.ValueConfigurationViews {
-  partial class ValueConfigurationView {
-    /// <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 && (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.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.SuspendLayout();
-      // 
-      // 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.Caption = "View";
-      this.viewHost.Content = null;
-      this.viewHost.Enabled = false;
-      this.viewHost.Location = new System.Drawing.Point(0, 0);
-      this.viewHost.Name = "viewHost";
-      this.viewHost.ReadOnly = false;
-      this.viewHost.Size = new System.Drawing.Size(513, 366);
-      this.viewHost.TabIndex = 0;
-      this.viewHost.ViewType = null;
-      // 
-      // ValueConfigurationView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.viewHost);
-      this.Name = "ValueConfigurationView";
-      this.Size = new System.Drawing.Size(513, 366);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private MainForm.WindowsForms.ViewHost viewHost;
-  }
-}
Index: anches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ValueConfigurationViews/ValueConfigurationView.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ValueConfigurationViews/ValueConfigurationView.cs	(revision 4980)
+++ 	(revision )
@@ -1,35 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.Problems.MetaOptimization.Views.ValueConfigurationViews {
-  [View("ValueConfiguration View")]
-  [Content(typeof(IValueConfiguration), false)]
-  [Content(typeof(ValueConfiguration), true)]
-  public partial class ValueConfigurationView : ItemView {
-    public new IValueConfiguration Content {
-      get { return (IValueConfiguration)base.Content; }
-      set { base.Content = value; }
-    }
-
-    public ValueConfigurationView() {
-      InitializeComponent();
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      if (Content != null) {
-        this.viewHost.Content = Content.ParameterConfigurations;
-      } else {
-        this.viewHost.Content = null;
-      }
-      SetEnabledStateOfControls();
-    }
-  }
-}
Index: anches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ValueConfigurationViews/ValueConfigurationView.resx
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ValueConfigurationViews/ValueConfigurationView.resx	(revision 4980)
+++ 	(revision )
@@ -1,120 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ValueConfigurationViews/ValueView.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ValueConfigurationViews/ValueView.cs	(revision 4980)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ValueConfigurationViews/ValueView.cs	(revision 4981)
@@ -15,9 +15,9 @@
 namespace HeuristicLab.Problems.MetaOptimization.Views {
   [View("Value View")]
-  [Content(typeof(IValueConfiguration), false)]
+  [Content(typeof(ConstrainedValue), true)]
   public partial class ValueView : ItemView {
 
-    public new IValueConfiguration Content {
-      get { return (IValueConfiguration)base.Content; }
+    public new ConstrainedValue Content {
+      get { return (ConstrainedValue)base.Content; }
       set { base.Content = value; }
     }
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ParameterConfigurations/ParameterConfiguration.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ParameterConfigurations/ParameterConfiguration.cs	(revision 4980)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ParameterConfigurations/ParameterConfiguration.cs	(revision 4981)
@@ -14,16 +14,16 @@
 
     [Storable]
-    protected bool optimizationEnabled;
-    public bool OptimizationEnabled {
-      get { return optimizationEnabled; }
+    protected bool optimize;
+    public bool Optimize {
+      get { return optimize; }
       set {
-        if (optimizationEnabled != value) {
-          optimizationEnabled = value;
-          if (optimizationEnabled) {
+        if (optimize != value) {
+          optimize = value;
+          if (optimize) {
             PopulateValueConfigurations();
           } else {
             this.ValueConfigurations.Clear();
           }
-          OnOptimizationEnabledChanged();
+          OnOptimizeChanged();
         }
       }
@@ -62,6 +62,6 @@
     }
 
-    protected ICheckedItemList<IValueConfiguration> valueConfigurations;
-    public ICheckedItemList<IValueConfiguration> ValueConfigurations {
+    protected ICheckedValueConfigurationCollection valueConfigurations;
+    public ICheckedValueConfigurationCollection ValueConfigurations {
       get { return this.valueConfigurations; }
       protected set { this.valueConfigurations = value; }
@@ -75,7 +75,13 @@
     }
 
+    public ConstrainedValue ConstrainedValue {
+      get { return actualValueConfiguration.ConstrainedValue; }
+      set { actualValueConfiguration.ConstrainedValue = value; }
+    }
+    
     // store parameter reference only for name/description/image/...
     private IValueParameter parameter;
 
+    #region Constructors and Cloning
     public ParameterConfiguration(string parameterName, IValueParameter valueParameter) {
       this.ParameterName = parameterName;
@@ -84,7 +90,7 @@
       this.valueDataType = valueParameter.DataType;
       this.validValues = GetValidValues();
-      this.ValueConfigurations = new CheckedItemList<IValueConfiguration>();
+      this.ValueConfigurations = new CheckedValueConfigurationCollection(this.valueDataType);
       this.ActualValueConfiguration = new ValueConfiguration(valueParameter.Value, valueParameter.DataType);
-      if (OptimizationEnabled) {
+      if (Optimize) {
         PopulateValueConfigurations();
       }
@@ -94,5 +100,6 @@
     [StorableConstructor]
     protected ParameterConfiguration(bool deserializing) { }
-    protected ParameterConfiguration(ParameterConfiguration original, Cloner cloner) : base(original, cloner) {
+    protected ParameterConfiguration(ParameterConfiguration original, Cloner cloner)
+      : base(original, cloner) {
       this.ParameterName = original.ParameterName;
       this.parameterDataType = original.parameterDataType;
@@ -102,9 +109,10 @@
       this.ValueConfigurations = cloner.Clone(original.ValueConfigurations);
       this.ActualValueConfiguration = cloner.Clone(original.ActualValueConfiguration);
-      this.OptimizationEnabled = original.optimizationEnabled;
+      this.Optimize = original.optimize;
     }
     public override IDeepCloneable Clone(Cloner cloner) {
       return new ParameterConfiguration(this, cloner);
     }
+    #endregion
 
     private void PopulateValueConfigurations() {
@@ -118,23 +126,23 @@
     }
 
-    void ValidValues_CheckedItemsChanged(object sender, Collections.CollectionItemsChangedEventArgs<Collections.IndexedItem<IItem>> e) {
-      var oldItems = e.OldItems.Select(x => x.Value);
-      var newItems = e.Items.Select(x => x.Value);
-      var intersection = oldItems.Intersect(newItems);
-      var removedItems = oldItems.Where(x => !intersection.Contains(x));
-      var addedItems = newItems.Where(x => !intersection.Contains(x));
-
-      foreach (var item in removedItems) {
-        RemoveValueConfiguration(item);
-      }
-      foreach (var item in addedItems) {
-        this.ValueConfigurations.Add(new ValueConfiguration(item, item.GetType()));
-      }
-    }
-
-    private void RemoveValueConfiguration(IItem item) {
-      IValueConfiguration vc = this.ValueConfigurations.Single(x => x.ValueDataType == item.GetType());
-      this.ValueConfigurations.Remove(vc);
-    }
+    //void ValidValues_CheckedItemsChanged(object sender, Collections.CollectionItemsChangedEventArgs<Collections.IndexedItem<IItem>> e) {
+    //  var oldItems = e.OldItems.Select(x => x.Value);
+    //  var newItems = e.Items.Select(x => x.Value);
+    //  var intersection = oldItems.Intersect(newItems);
+    //  var removedItems = oldItems.Where(x => !intersection.Contains(x));
+    //  var addedItems = newItems.Where(x => !intersection.Contains(x));
+
+    //  foreach (var item in removedItems) {
+    //    RemoveValueConfiguration(item);
+    //  }
+    //  foreach (var item in addedItems) {
+    //    this.ValueConfigurations.Add(new ValueConfiguration(item, item.GetType()));
+    //  }
+    //}
+
+    //private void RemoveValueConfiguration(IItem item) {
+    //  IValueConfiguration vc = this.ValueConfigurations.Single(x => x.ValueDataType == item.GetType());
+    //  this.ValueConfigurations.Remove(vc);
+    //}
 
     #region INamedItem Properties
@@ -198,7 +206,7 @@
     }
 
-    public virtual event EventHandler OptimizationEnabledChanged;
-    protected virtual void OnOptimizationEnabledChanged() {
-      var handler = OptimizationEnabledChanged;
+    public virtual event EventHandler OptimizeChanged;
+    protected virtual void OnOptimizeChanged() {
+      var handler = OptimizeChanged;
       if (handler != null) handler(this, EventArgs.Empty);
     }
@@ -206,5 +214,5 @@
 
     public override string ToString() {
-      return string.Format("{0}", ParameterName);
+      return string.Format("{0}: {1}", ParameterName, ConstrainedValue.Value);
     }
 
@@ -217,5 +225,4 @@
       return null;
     }
-
   }
 }
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/RangeConstraints/ConstrainedValue.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/RangeConstraints/ConstrainedValue.cs	(revision 4981)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/RangeConstraints/ConstrainedValue.cs	(revision 4981)
@@ -0,0 +1,62 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  [StorableClass]
+  public class ConstrainedValue : Item {
+    [Storable]
+    protected Type valueDataType;
+    public Type ValueDataType {
+      get { return this.valueDataType; }
+      protected set { this.valueDataType = value; }
+    }
+
+    [Storable]
+    protected IItem value;
+    public IItem Value {
+      get { return value; }
+      set {
+        if (this.value != value) {
+          if(this.value != null) DeregisterEvents();
+          this.value = value;
+          if(this.value != null) RegisterEvents();
+          OnToStringChanged();
+        }
+      }
+    }
+
+    private void RegisterEvents() {
+      this.value.ToStringChanged += new EventHandler(value_ToStringChanged);
+    }
+    private void DeregisterEvents() {
+      this.value.ToStringChanged -= new EventHandler(value_ToStringChanged);
+    }
+    
+    public ConstrainedValue() { }
+    public ConstrainedValue(IItem value, Type valueDataType) {
+      this.Value = value;
+      this.ValueDataType = valueDataType;
+    }
+    protected ConstrainedValue(ConstrainedValue original, Cloner cloner) : base(original, cloner) {
+      this.valueDataType = original.valueDataType;
+      this.value = cloner.Clone(value);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ConstrainedValue(this, cloner);
+    }
+
+    void value_ToStringChanged(object sender, EventArgs e) {
+      OnToStringChanged();
+    }
+
+    public override string ToString() {
+      return value != null ? value.ToString() : base.ToString();
+    }
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/RangeConstraints/Range.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/RangeConstraints/Range.cs	(revision 4981)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/RangeConstraints/Range.cs	(revision 4981)
@@ -0,0 +1,196 @@
+﻿using System;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  [StorableClass]
+  public class Range<T> : Item, IRange<T> where T : class, IStringConvertibleValue, IDeepCloneable {
+    [Storable]
+    private T lowerBound;
+    public T LowerBound {
+      get { return lowerBound; }
+      set {
+        if (lowerBound != value) {
+          if (lowerBound != null) {
+            lowerBound.ValueChanged -= new EventHandler(lowerBound_ToStringChanged);
+          }
+          lowerBound = value;
+          if (lowerBound != null) {
+            lowerBound.ValueChanged += new EventHandler(lowerBound_ToStringChanged);
+          }
+          OnLowerBoundChanged();
+        }
+      }
+    }
+
+    [Storable]
+    private T upperBound;
+    public T UpperBound {
+      get { return upperBound; }
+      set {
+        if (upperBound != value) {
+          if (upperBound != null) {
+            upperBound.ValueChanged -= new EventHandler(upperBound_ToStringChanged);
+          }
+          upperBound = value;
+          if (upperBound != null) {
+            upperBound.ValueChanged += new EventHandler(upperBound_ToStringChanged);
+          }
+          OnUpperBoundChanged();
+        }
+      }
+    }
+
+    [Storable]
+    private T stepSize;
+    public T StepSize {
+      get { return stepSize; }
+      set {
+        if (stepSize != value) {
+          if (stepSize != null) {
+            stepSize.ValueChanged -= new EventHandler(upperBound_ToStringChanged);
+          }
+          stepSize = value;
+          if (stepSize != null) {
+            stepSize.ValueChanged += new EventHandler(stepSize_ToStringChanged);
+          }
+          OnStepSizeChanged();
+        }
+      }
+    }
+
+    #region IRange Members
+    object IRange.LowerBound {
+      get { return lowerBound; }
+      set { lowerBound = (T)value; }
+    }
+    object IRange.UpperBound {
+      get { return upperBound; }
+      set { upperBound = (T)value; }
+    }
+    object IRange.StepSize {
+      get { return stepSize; }
+      set { stepSize = (T)value; }
+    }
+    #endregion
+
+    #region Constructors and Cloning
+    public Range(T lowerBound, T upperBound, T stepSize) {
+      this.LowerBound = lowerBound;
+      this.UpperBound = upperBound;
+      this.StepSize = stepSize;
+    }
+
+    [StorableConstructor]
+    protected Range(bool deserializing) : base(deserializing) { }
+    protected Range(Range<T> original, Cloner cloner)
+      : base(original, cloner) {
+      this.LowerBound = cloner.Clone(original.LowerBound);
+      this.UpperBound = cloner.Clone(original.UpperBound);
+      this.StepSize = cloner.Clone(original.StepSize);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Range<T>(this, cloner);
+    }
+    #endregion
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      if (lowerBound != null) {
+        lowerBound.ValueChanged += new EventHandler(lowerBound_ToStringChanged);
+      }
+      if (upperBound != null) {
+        upperBound.ValueChanged += new EventHandler(upperBound_ToStringChanged);
+      }
+      if (stepSize != null) {
+        stepSize.ValueChanged += new EventHandler(stepSize_ToStringChanged);
+      }
+    }
+
+    #region Events
+    private void lowerBound_ToStringChanged(object sender, EventArgs e) {
+      OnToStringChanged();
+    }
+    private void upperBound_ToStringChanged(object sender, EventArgs e) {
+      OnToStringChanged();
+    }
+    private void stepSize_ToStringChanged(object sender, EventArgs e) {
+      OnToStringChanged();
+    }
+    #endregion
+
+    #region Eventhandler
+    public event EventHandler LowerBoundChanged;
+    private void OnLowerBoundChanged() {
+      var handler = LowerBoundChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler UpperBoundChanged;
+    private void OnUpperBoundChanged() {
+      var handler = UpperBoundChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler StepSizeChanged;
+    private void OnStepSizeChanged() {
+      var handler = StepSizeChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler ValueChanged;
+    private void OnValueChanged() {
+      var handler = ValueChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    #endregion
+
+    public override string ToString() {
+      return string.Format("{0},{1}:{2}", LowerBound.ToString(), UpperBound.ToString(), StepSize.ToString());
+    }
+
+    #region IStringConvertibleValue Members
+
+    public string GetValue() {
+      return this.ToString();
+    }
+    public bool ReadOnly {
+      get { return false; }
+    }
+    public bool SetValue(string value) {
+      var parts1 = value.Split(':');
+      if (parts1.Length != 2) return false;
+      var parts2 = parts1[0].Split(',');
+      if (parts2.Length != 2) return false;
+
+      return
+        lowerBound.SetValue(parts2[0]) &&
+        upperBound.SetValue(parts2[1]) &&
+        stepSize.SetValue(parts1[1]);
+    }
+    public bool Validate(string value, out string errorMessage) {
+      // TODO: check that upper is larger than lower
+      T lower = (T)lowerBound.Clone();
+      T upper = (T)upperBound.Clone();
+      T step = (T)stepSize.Clone();
+
+      var parts1 = value.Split(':');
+      if (parts1.Length != 2) {
+        errorMessage = "Could not parse range."; return false;
+      }
+      var parts2 = parts1[0].Split(',');
+      if (parts2.Length != 2) {
+        errorMessage = "Could not parse range."; return false;
+      }
+
+      if (lowerBound.SetValue(parts2[0]) &&
+          upperBound.SetValue(parts2[1]) &&
+          stepSize.SetValue(parts1[1])) {
+        errorMessage = string.Empty; return true;
+      } else {
+        errorMessage = "Could not parse range."; return false;
+      }
+    }
+
+    #endregion
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ValueConfigurations/CheckedValueConfigurationCollection.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ValueConfigurations/CheckedValueConfigurationCollection.cs	(revision 4981)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ValueConfigurations/CheckedValueConfigurationCollection.cs	(revision 4981)
@@ -0,0 +1,21 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  // todo: check that at least 1 elements needs to be selected
+  // todo: control creatable item types
+  public class CheckedValueConfigurationCollection : CheckedItemCollection<IValueConfiguration>, ICheckedValueConfigurationCollection {
+
+    protected Type valueDataType;
+    public Type ValueDataType {
+      get { return valueDataType; }
+    }
+
+    public CheckedValueConfigurationCollection(Type valueDataType) {
+      this.valueDataType = valueDataType;
+    }
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ValueConfigurations/ValueConfiguration.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ValueConfigurations/ValueConfiguration.cs	(revision 4980)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ValueConfigurations/ValueConfiguration.cs	(revision 4981)
@@ -1,39 +1,68 @@
 ﻿using System;
+using System.Linq;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Data;
+using System.Drawing;
 
 namespace HeuristicLab.Problems.MetaOptimization {
-  [StorableClass]
-  public class ValueConfiguration : DeepCloneable, IValueConfiguration {
-    [Storable]
-    protected IItemList<IParameterConfiguration> parameterConfigurations = new ItemList<IParameterConfiguration>();
-    public IItemList<IParameterConfiguration> ParameterConfigurations {
+  // TODO: ItemName/Descr, storability
+  public class ValueConfiguration : Item, IValueConfiguration {
+    protected bool optimize;
+    public bool Optimize {
+      get { return optimize; }
+      set {
+        if (optimize != value) {
+          optimize = value;
+          if (optimize) {
+            ClearParameterConfigurations();
+            PopulateParameterConfigurations();
+          } else {
+            ClearParameterConfigurations();
+          }
+          OnOptimizeChanged();
+          OnToStringChanged();
+        }
+      }
+    }
+
+    protected IItemCollection<IParameterConfiguration> parameterConfigurations = new ItemCollection<IParameterConfiguration>();
+    public IItemCollection<IParameterConfiguration> ParameterConfigurations {
       get { return this.parameterConfigurations; }
       protected set { this.parameterConfigurations = value; }
     }
 
-    protected IItem value;
-    public IItem Value {
-      get { return value; }
+    protected ConstrainedValue constrainedValue;
+    public ConstrainedValue ConstrainedValue {
+      get { return constrainedValue; }
       set {
-        if (this.value != value) {
-          ClearChildParameterConfigurations();
-          this.value = value;
-          if (this.value is IParameterizedNamedItem) AddChildParameterConfigurations(this.value as IParameterizedNamedItem);
+        if (this.constrainedValue != value) {
+          ClearParameterConfigurations();
+          this.constrainedValue = value;
+          PopulateParameterConfigurations();
           OnValueChanged();
+          OnToStringChanged();
         }
       }
     }
 
-    protected Type valueDataType;
-    public Type ValueDataType {
-      get { return this.valueDataType; }
-      protected set { this.valueDataType = value; }
+    protected IRange rangeConstraint;
+    public IRange RangeConstraint {
+      get { return rangeConstraint; }
     }
-
+    
+    #region Constructors and Cloning
     public ValueConfiguration(IItem value, Type valueDataType) {
-      this.Value = value;
-      this.ValueDataType = valueDataType;
+      this.parameterConfigurations = new ItemList<IParameterConfiguration>();
+      this.ConstrainedValue = new ConstrainedValue(value, valueDataType);
+      if (constrainedValue.ValueDataType == typeof(IntValue)) {
+        rangeConstraint = new Range<IntValue>(new IntValue(0), (IntValue)value, new IntValue(1));
+      } else if (constrainedValue.ValueDataType == typeof(DoubleValue)) {
+        rangeConstraint = new Range<DoubleValue>(new DoubleValue(0), (DoubleValue)value, new DoubleValue(0.1));
+      } else {
+        rangeConstraint = null;
+      }
+      RegisterEvents();
     }
 
@@ -43,53 +72,57 @@
     protected ValueConfiguration(ValueConfiguration original, Cloner cloner) : base(original, cloner) {
       this.ParameterConfigurations = cloner.Clone(original.ParameterConfigurations);
-      this.Value = cloner.Clone(original.Value);
-      this.ValueDataType = original.ValueDataType;
-
+      this.ConstrainedValue = cloner.Clone(original.ConstrainedValue);
+      this.rangeConstraint = cloner.Clone(original.RangeConstraint);
+      RegisterEvents();
     }
     public override IDeepCloneable Clone(Cloner cloner) {
       return new ValueConfiguration(this, cloner);
     }
+    #endregion
 
-    protected virtual void AddChildParameterConfigurations(IParameterizedNamedItem parameterizedItem) {
-      foreach (var childParameter in parameterizedItem.Parameters) {
-        var pc = ParameterConfiguration.Create(parameterizedItem, childParameter);
-        if (pc != null) this.ParameterConfigurations.Add(pc);
+    protected virtual void PopulateParameterConfigurations() {
+      if (this.constrainedValue.Value is IParameterizedNamedItem) {
+        var parameterizedItem = this.constrainedValue.Value as IParameterizedNamedItem;
+        foreach (var childParameter in parameterizedItem.Parameters) {
+          var pc = ParameterConfiguration.Create(parameterizedItem, childParameter);
+          if (pc != null) this.ParameterConfigurations.Add(pc);
+        }
       }
     }
-    protected virtual void ClearChildParameterConfigurations() {
+    protected virtual void ClearParameterConfigurations() {
       ParameterConfigurations.Clear();
     }
-    
-    #region IItem Members
-    public string ItemDescription {
-      get { return value.ItemDescription; }
+
+    private void RegisterEvents() {
+      if (this.RangeConstraint != null) this.RangeConstraint.ToStringChanged += new EventHandler(RangeConstraint_ToStringChanged);
+      if (this.ConstrainedValue != null) this.ConstrainedValue.ToStringChanged += new EventHandler(ConstrainedValue_ToStringChanged);
+    }
+    private void DeregisterEvents() {
+      if (this.RangeConstraint != null) this.RangeConstraint.ToStringChanged += new EventHandler(RangeConstraint_ToStringChanged);
+      if (this.ConstrainedValue != null) this.ConstrainedValue.ToStringChanged += new EventHandler(ConstrainedValue_ToStringChanged);
     }
 
-    public System.Drawing.Image ItemImage {
-      get { return value.ItemImage; }
+    void ConstrainedValue_ToStringChanged(object sender, EventArgs e) {
+      OnToStringChanged();
+    }
+    void RangeConstraint_ToStringChanged(object sender, EventArgs e) {
+      OnToStringChanged();
     }
 
-    public string ItemName {
-      get { return value.ItemDescription; }
+    #region IItem Members
+    public override string ItemDescription {
+      get { return (constrainedValue != null && constrainedValue.Value != null) ? constrainedValue.Value.ItemDescription : base.ItemDescription; }
     }
 
-    public Version ItemVersion {
-      get { return value.ItemVersion; }
+    public override Image ItemImage {
+      get { return (constrainedValue != null && constrainedValue.Value != null) ? constrainedValue.Value.ItemImage : base.ItemImage; }
+    }
+
+    public override string ItemName {
+      get { return (constrainedValue != null && constrainedValue.Value != null) ? constrainedValue.Value.ItemDescription : base.ItemName; }
     }
     #endregion
 
-    #region Events
-    public virtual event EventHandler ItemImageChanged;
-    protected virtual void OnItemImageChanged(object sender, EventArgs e) {
-      var handler = ItemImageChanged;
-      if (handler != null) handler(sender, e);
-    }
-
-    public virtual event EventHandler ToStringChanged;
-    protected virtual void OnStringChanged(object sender, EventArgs e) {
-      var handler = ToStringChanged;
-      if (handler != null) handler(this, e); // important to set 'this' as sender
-    }
-
+    #region Event Handlers
     public virtual event EventHandler ValueChanged;
     protected virtual void OnValueChanged() {
@@ -97,8 +130,23 @@
       if (handler != null) handler(this, EventArgs.Empty);
     }
+
+    public virtual event EventHandler OptimizeChanged;
+    protected virtual void OnOptimizeChanged() {
+      var handler = OptimizeChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
     #endregion
 
     public override string ToString() {
-      return value.ItemName;
+      if (ConstrainedValue != null && ConstrainedValue.Value != null) {
+        if(Optimize) {
+          return string.Format("{0}: {1}", ConstrainedValue.Value.ItemName, RangeConstraint);
+        } else {
+          return string.Format("{0}: {1}", ConstrainedValue.Value.ItemName, ConstrainedValue.Value);
+        }        
+      } else {
+        return base.ToString();
+      }
+
     }
   }
Index: anches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ValueTypeParameterConfiguration.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ValueTypeParameterConfiguration.cs	(revision 4980)
+++ 	(revision )
@@ -1,80 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Data;
-using HeuristicLab.Core;
-using HeuristicLab.Collections;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Common;
-
-namespace HeuristicLab.Problems.MetaOptimization {
-  [StorableClass]
-  public abstract class ValueTypeParameterConfiguration<T> : ParameterConfiguration where T : class, IItem, IStringConvertibleValue, IDeepCloneable {
-    [Storable]
-    private IItemList<IRange<T>> ranges;
-    public IItemList<IRange<T>> Ranges {
-      get { return ranges; }
-    }
-
-    public ValueTypeParameterConfiguration(string parameterName, IValueParameter valueParameter) : base(parameterName, valueParameter) {
-      this.ranges = new ItemList<IRange<T>>();
-      this.ranges.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<IRange<T>>>(ranges_ItemsAdded);
-      this.ranges.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<IRange<T>>>(ranges_ItemsRemoved);
-      this.ranges.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<IRange<T>>>(ranges_CollectionReset);
-    }
-
-    protected ValueTypeParameterConfiguration() { }
-    [StorableConstructor]
-    protected ValueTypeParameterConfiguration(bool deserializing) : base(deserializing) { }
-    protected ValueTypeParameterConfiguration(ValueTypeParameterConfiguration<T> original, Cloner cloner) : base(original, cloner) {
-      this.ranges = cloner.Clone(original.Ranges);
-    }
-
-    void ranges_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<IRange<T>>> e) {
-      foreach (var i in e.Items) {
-        DeregisterItemEvents(i.Value);
-      }
-      OnStringChanged(sender, e);
-    }
-
-    void ranges_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<IRange<T>>> e) {
-      foreach (var i in e.Items) {
-        DeregisterItemEvents(i.Value);
-      }
-      OnStringChanged(sender, e);
-    }
-
-    void ranges_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IRange<T>>> e) {
-      foreach (var i in e.Items) {
-        RegisterItemEvents(i.Value);
-      }
-      OnStringChanged(sender, e);
-    }
-
-    private void DeregisterItemEvents(IRange<T> range) {
-      range.ToStringChanged -= new EventHandler(range_ToStringChanged);
-    }
-    private void RegisterItemEvents(IRange<T> range) {
-      range.ToStringChanged += new EventHandler(range_ToStringChanged);
-    }
-
-    public IntValue GetRandomValue() {
-      return new IntValue(0);
-    }
-    
-    void range_ToStringChanged(object sender, EventArgs e) {
-      OnStringChanged(sender, e);
-    }
-
-    public override string ToString() {
-      return string.Format("{0}: ({1})", base.ToString(), string.Join(",", ranges.Select(r => r.ToString()).ToArray()));
-    }
-
-    //public override void SetRandomValue(IRandom random) {
-    //  int rangeIndex = random.Next(ranges.Count);
-    //  int value = random.Next(ranges.ElementAt(rangeIndex).LowerBound.Value, ranges.ElementAt(rangeIndex).UpperBound.Value); // TODO: respect StepSize parameter
-    //  this.Parameter.ActualValue = new IntValue(value);
-    //}
-  }
-}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/HeuristicLab.Problems.MetaOptimization-3.3.csproj
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/HeuristicLab.Problems.MetaOptimization-3.3.csproj	(revision 4980)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/HeuristicLab.Problems.MetaOptimization-3.3.csproj	(revision 4981)
@@ -88,5 +88,11 @@
   <ItemGroup>
     <Compile Include="Analyzers\BestParameterConfigurationAnalyzer.cs" />
+    <Compile Include="Encodings\RangeConstraints\ConstrainedValue.cs">
+      <SubType>Code</SubType>
+    </Compile>
     <Compile Include="Encodings\ValueConfigurations\ValueConfiguration.cs" />
+    <Compile Include="Encodings\ValueConfigurations\CheckedValueConfigurationCollection.cs" />
+    <Compile Include="Interfaces\ICheckedValueConfigurationCollection.cs" />
+    <Compile Include="Interfaces\IOptimizable.cs" />
     <Compile Include="Interfaces\IParameterConfigurationCreator.cs" />
     <Compile Include="Creators\RandomParameterConfigurationCreator.cs" />
@@ -99,5 +105,5 @@
     <Compile Include="Encodings\ParameterConfigurations\ParameterConfiguration.cs" />
     <Compile Include="Interfaces\IValueConfiguration.cs" />
-    <Compile Include="Range.cs" />
+    <Compile Include="Encodings\RangeConstraints\Range.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="MetaOptimizationProblem.cs" />
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/ICheckedValueConfigurationCollection.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/ICheckedValueConfigurationCollection.cs	(revision 4981)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/ICheckedValueConfigurationCollection.cs	(revision 4981)
@@ -0,0 +1,11 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  public interface ICheckedValueConfigurationCollection : ICheckedItemCollection<IValueConfiguration> {
+    Type ValueDataType { get; }
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/IOptimizable.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/IOptimizable.cs	(revision 4981)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/IOptimizable.cs	(revision 4981)
@@ -0,0 +1,14 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  public interface IOptimizable : IItem {
+    bool Optimize { get; set; }
+    ConstrainedValue ConstrainedValue { get; set; }
+    event EventHandler OptimizeChanged;
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/IParameterConfiguration.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/IParameterConfiguration.cs	(revision 4980)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/IParameterConfiguration.cs	(revision 4981)
@@ -2,16 +2,14 @@
 using HeuristicLab.Core;
 using System.Collections.Generic;
+using HeuristicLab.Data;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Problems.MetaOptimization {
-  public interface IParameterConfiguration : INamedItem {
-    bool OptimizationEnabled { get; set; }
+  public interface IParameterConfiguration : IOptimizable, INamedItem {
     string ParameterName { get; set; }
     Type ParameterDataType { get; }
-    ICheckedItemList<IValueConfiguration> ValueConfigurations { get; }
+    ICheckedValueConfigurationCollection ValueConfigurations { get; }
     IValueConfiguration ActualValueConfiguration { get; set; }
-    Type ValueDataType { get; }
     IEnumerable<IItem> ValidValues { get; }
-
-    event EventHandler OptimizationEnabledChanged;
   }
 }
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/IRange.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/IRange.cs	(revision 4980)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/IRange.cs	(revision 4981)
@@ -5,8 +5,8 @@
 
 namespace HeuristicLab.Problems.MetaOptimization {
-  public interface IRange<T> : IItem where T : class, IItem, IStringConvertibleValue, IDeepCloneable {
-    T LowerBound { get; set; }
-    T UpperBound { get; set; }
-    T StepSize { get; set; }
+  public interface IRange : IItem, IStringConvertibleValue {
+    object LowerBound { get; set; }
+    object UpperBound { get; set; }
+    object StepSize { get; set; }
 
     event EventHandler LowerBoundChanged;
@@ -14,3 +14,9 @@
     event EventHandler StepSizeChanged;
   }
+
+  public interface IRange<T> : IRange, IItem where T : class {
+    new T LowerBound { get; set; }
+    new T UpperBound { get; set; }
+    new T StepSize { get; set; }
+  }
 }
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/IValueConfiguration.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/IValueConfiguration.cs	(revision 4980)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/IValueConfiguration.cs	(revision 4981)
@@ -1,11 +1,10 @@
 ﻿using System;
 using HeuristicLab.Core;
+using HeuristicLab.Data;
 
 namespace HeuristicLab.Problems.MetaOptimization {
-  public interface IValueConfiguration : IItem {
-    IItem Value { get; set; }
-    Type ValueDataType { get; }
-    IItemList<IParameterConfiguration> ParameterConfigurations { get; }
-
+  public interface IValueConfiguration : IOptimizable, IItem {
+    IItemCollection<IParameterConfiguration> ParameterConfigurations { get; }
+    IRange RangeConstraint { get; }
     event EventHandler ValueChanged;
   }
Index: anches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Range.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Range.cs	(revision 4980)
+++ 	(revision )
@@ -1,125 +1,0 @@
-﻿using System;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Problems.MetaOptimization {
-  [StorableClass]
-  public class Range<T> : Item, IRange<T> where T : class, IItem, IStringConvertibleValue, IDeepCloneable {
-    [Storable]
-    private T lowerBound;
-    public T LowerBound {
-      get { return lowerBound; }
-      set {
-        if (lowerBound != value) {
-          if (lowerBound != null) {
-            lowerBound.ValueChanged -= new EventHandler(lowerBound_ValueChanged);
-          }
-          lowerBound = value;
-          if (lowerBound != null) {
-            lowerBound.ValueChanged += new EventHandler(lowerBound_ValueChanged);
-          }
-          OnLowerBoundChanged();
-        }
-      }
-    }
-
-    [Storable]
-    private T upperBound;
-    public T UpperBound {
-      get { return upperBound; }
-      set {
-        if (upperBound != value) {
-          if (upperBound != null) {
-            upperBound.ValueChanged -= new EventHandler(upperBound_ValueChanged);
-          }
-          upperBound = value;
-          if (upperBound != null) {
-            upperBound.ValueChanged += new EventHandler(upperBound_ValueChanged);
-          }
-          OnUpperBoundChanged();
-        }
-      }
-    }
-
-    [Storable]
-    private T stepSize;
-    public T StepSize {
-      get { return stepSize; }
-      set {
-        if (stepSize != value) {
-          if (stepSize != null) {
-            stepSize.ValueChanged -= new EventHandler(upperBound_ValueChanged);
-          }
-          stepSize = value;
-          if (stepSize != null) {
-            stepSize.ValueChanged += new EventHandler(stepSize_ValueChanged);
-          }
-          OnStepSizeChanged();
-        }
-      }
-    }
-
-    public Range() {
-      LowerBound = Activator.CreateInstance<T>();
-      UpperBound = Activator.CreateInstance<T>();
-      StepSize = Activator.CreateInstance<T>(); // todo: stepsize should be != 0
-    }
-
-    [StorableConstructor]
-    protected Range(bool deserializing) : base(deserializing) { }
-    protected Range(Range<T> original, Cloner cloner) : base(original, cloner) {
-      this.LowerBound = cloner.Clone(original.LowerBound);
-      this.UpperBound = cloner.Clone(original.UpperBound);
-      this.StepSize = cloner.Clone(original.StepSize);
-    }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new Range<T>(this, cloner);
-    }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-      if (lowerBound != null) {
-        lowerBound.ValueChanged += new EventHandler(lowerBound_ValueChanged);
-      }
-      if (upperBound != null) {
-        upperBound.ValueChanged += new EventHandler(upperBound_ValueChanged);
-      }
-      if (stepSize != null) {
-        stepSize.ValueChanged += new EventHandler(stepSize_ValueChanged);
-      }
-    }
-
-    void lowerBound_ValueChanged(object sender, EventArgs e) {
-      OnToStringChanged();
-    }
-    void upperBound_ValueChanged(object sender, EventArgs e) {
-      OnToStringChanged();
-    }
-    void stepSize_ValueChanged(object sender, EventArgs e) {
-      OnToStringChanged();
-    }
-
-    public event EventHandler LowerBoundChanged;
-    private void OnLowerBoundChanged() {
-      var handler = LowerBoundChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public event EventHandler UpperBoundChanged;
-    private void OnUpperBoundChanged() {
-      var handler = UpperBoundChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-    public event EventHandler StepSizeChanged;
-    private void OnStepSizeChanged() {
-      var handler = StepSizeChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public override string ToString() {
-      return string.Format("[{0},{1}:{2}]", LowerBound.ToString(), UpperBound.ToString(), StepSize.ToString());
-    }
-  }
-}
