Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.sln
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.sln	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.sln	(revision 4516)
@@ -0,0 +1,28 @@
+﻿
+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
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.MetaOptimization.Views-3.3", "HeuristicLab.Problems.MetaOptimization.Views\3.3\HeuristicLab.Problems.MetaOptimization.Views-3.3.csproj", "{59567338-A551-4386-8405-A8C0DF3E376D}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{ABBC1DF6-FCC6-4F86-AB75-B6B3A72E7D17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{ABBC1DF6-FCC6-4F86-AB75-B6B3A72E7D17}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{ABBC1DF6-FCC6-4F86-AB75-B6B3A72E7D17}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{ABBC1DF6-FCC6-4F86-AB75-B6B3A72E7D17}.Release|Any CPU.Build.0 = Release|Any CPU
+		{59567338-A551-4386-8405-A8C0DF3E376D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{59567338-A551-4386-8405-A8C0DF3E376D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{59567338-A551-4386-8405-A8C0DF3E376D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{59567338-A551-4386-8405-A8C0DF3E376D}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
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 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/HeuristicLab.Problems.MetaOptimization.Views-3.3.csproj	(revision 4516)
@@ -0,0 +1,167 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{59567338-A551-4386-8405-A8C0DF3E376D}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Problems.MetaOptimization.Views</RootNamespace>
+    <AssemblyName>HeuristicLab.Problems.MetaOptimization.Views-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Collections-3.3">
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Collections-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3">
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Common.Resources-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core.Views-3.3">
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Core.Views-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="HeuristicLab.Data.Views-3.3">
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Data.Views-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm-3.3">
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.MainForm-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm.WindowsForms-3.3">
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.MainForm.WindowsForms-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Parameters-3.3">
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Parameters-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Parameters.Views-3.3">
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Parameters.Views-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="NumericRangeView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="NumericRangeView.Designer.cs">
+      <DependentUpon>NumericRangeView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ObjectSelectorDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="ObjectSelectorDialog.Designer.cs">
+      <DependentUpon>ObjectSelectorDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ParameterConfigurationListView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ParameterConfigurationListView.Designer.cs">
+      <DependentUpon>ParameterConfigurationListView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="NumericParameterConfigurationView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="NumericParameterConfigurationView.Designer.cs">
+      <DependentUpon>NumericParameterConfigurationView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HeuristicLabProblemsMetaOptimizationViewsPlugin.cs" />
+    <Compile Include="ParameterConfigurationView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ParameterConfigurationView.Designer.cs">
+      <DependentUpon>ParameterConfigurationView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="UpdateLocalInstallation.cmd" />
+  </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="NumericRangeView.resx">
+      <DependentUpon>NumericRangeView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ObjectSelectorDialog.resx">
+      <DependentUpon>ObjectSelectorDialog.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ParameterConfigurationListView.resx">
+      <DependentUpon>ParameterConfigurationListView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="NumericParameterConfigurationView.resx">
+      <DependentUpon>NumericParameterConfigurationView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ParameterConfigurationView.resx">
+      <DependentUpon>ParameterConfigurationView.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)</PreBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PostBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call UpdateLocalInstallation.cmd</PostBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/HeuristicLabProblemsMetaOptimizationViewsPlugin.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/HeuristicLabProblemsMetaOptimizationViewsPlugin.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/HeuristicLabProblemsMetaOptimizationViewsPlugin.cs	(revision 4516)
@@ -0,0 +1,32 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Problems.MetaOptimization.Views plugin
+  /// </summary>
+  [Plugin("HeuristicLab.Problems.MetaOptimization.Views", "3.3.0.0")]
+  [PluginFile("HeuristicLab.Problems.MetaOptimization.Views-3.3.dll", PluginFileType.Assembly)]
+  public class HeuristicLabProblemsMetaOptimizationPlugin : PluginBase {
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/NumericParameterConfigurationView.Designer.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/NumericParameterConfigurationView.Designer.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/NumericParameterConfigurationView.Designer.cs	(revision 4516)
@@ -0,0 +1,75 @@
+﻿namespace HeuristicLab.Problems.MetaOptimization.Views {
+  partial class NumericParameterConfigurationView {
+    /// <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.itemListView = new HeuristicLab.Core.Views.ItemCollectionView<INumericRange>();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      this.nameTextBox.Size = new System.Drawing.Size(657, 20);
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Size = new System.Drawing.Size(657, 20);
+      // 
+      // itemListView
+      // 
+      this.itemListView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right | System.Windows.Forms.AnchorStyles.Bottom)));
+      this.itemListView.Caption = "Ranges";
+      this.itemListView.Content = null;
+      this.itemListView.Location = new System.Drawing.Point(0, 56);
+      this.itemListView.Name = "itemListView";
+      this.itemListView.ReadOnly = false;
+      this.itemListView.Size = new System.Drawing.Size(729, 425);
+      this.itemListView.TabIndex = 4;
+      // 
+      // NumericParameterConfigurationView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.itemListView);
+      this.Name = "NumericParameterConfigurationView";
+      this.Size = new System.Drawing.Size(729, 481);
+      this.Controls.SetChildIndex(this.itemListView, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private Core.Views.ItemCollectionView<INumericRange> itemListView;
+
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/NumericParameterConfigurationView.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/NumericParameterConfigurationView.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/NumericParameterConfigurationView.cs	(revision 4516)
@@ -0,0 +1,48 @@
+﻿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;
+
+namespace HeuristicLab.Problems.MetaOptimization.Views {
+  /// <summary>
+  /// The visual representation of a <see cref="ParameterConfiguration"/>.
+  /// </summary>
+  [View("NumericParameterConfiguration View")]
+  [Content(typeof(NumericParameterConfiguration), true)]
+  public partial class NumericParameterConfigurationView : NamedItemView {
+    /// <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 NumericParameterConfiguration Content {
+      get { return (NumericParameterConfiguration)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public NumericParameterConfigurationView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content != null) {
+        itemListView.Content = Content.Ranges;
+      } else {
+        itemListView.Content = null;
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+    }
+
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/NumericParameterConfigurationView.resx
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/NumericParameterConfigurationView.resx	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/NumericParameterConfigurationView.resx	(revision 4516)
@@ -0,0 +1,126 @@
+﻿<?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: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/NumericRangeView.Designer.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/NumericRangeView.Designer.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/NumericRangeView.Designer.cs	(revision 4516)
@@ -0,0 +1,124 @@
+﻿namespace HeuristicLab.Problems.MetaOptimization.Views {
+  partial class NumericRangeView {
+    /// <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.label1 = new System.Windows.Forms.Label();
+      this.label2 = new System.Windows.Forms.Label();
+      this.lowerValueView = new HeuristicLab.Data.Views.StringConvertibleValueView();
+      this.upperValueView = new HeuristicLab.Data.Views.StringConvertibleValueView();
+      this.label3 = new System.Windows.Forms.Label();
+      this.stepSizeValueView = new HeuristicLab.Data.Views.StringConvertibleValueView();
+      this.SuspendLayout();
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(3, 3);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(36, 13);
+      this.label1.TabIndex = 0;
+      this.label1.Text = "Lower";
+      // 
+      // label2
+      // 
+      this.label2.AutoSize = true;
+      this.label2.Location = new System.Drawing.Point(3, 32);
+      this.label2.Name = "label2";
+      this.label2.Size = new System.Drawing.Size(36, 13);
+      this.label2.TabIndex = 1;
+      this.label2.Text = "Upper";
+      // 
+      // lowerValueView
+      // 
+      this.lowerValueView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.lowerValueView.Caption = "StringConvertibleValue View";
+      this.lowerValueView.Content = null;
+      this.lowerValueView.Location = new System.Drawing.Point(38, 0);
+      this.lowerValueView.Name = "lowerValueView";
+      this.lowerValueView.ReadOnly = false;
+      this.lowerValueView.Size = new System.Drawing.Size(396, 23);
+      this.lowerValueView.TabIndex = 2;
+      // 
+      // upperValueView
+      // 
+      this.upperValueView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.upperValueView.Caption = "StringConvertibleValue View";
+      this.upperValueView.Content = null;
+      this.upperValueView.Location = new System.Drawing.Point(38, 29);
+      this.upperValueView.Name = "upperValueView";
+      this.upperValueView.ReadOnly = false;
+      this.upperValueView.Size = new System.Drawing.Size(396, 23);
+      this.upperValueView.TabIndex = 3;
+      // 
+      // label3
+      // 
+      this.label3.AutoSize = true;
+      this.label3.Location = new System.Drawing.Point(3, 61);
+      this.label3.Name = "label3";
+      this.label3.Size = new System.Drawing.Size(29, 13);
+      this.label3.TabIndex = 4;
+      this.label3.Text = "Step";
+      // 
+      // stepSizeValueView
+      // 
+      this.stepSizeValueView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.stepSizeValueView.Caption = "StringConvertibleValue View";
+      this.stepSizeValueView.Content = null;
+      this.stepSizeValueView.Location = new System.Drawing.Point(38, 58);
+      this.stepSizeValueView.Name = "stepSizeValueView";
+      this.stepSizeValueView.ReadOnly = false;
+      this.stepSizeValueView.Size = new System.Drawing.Size(396, 23);
+      this.stepSizeValueView.TabIndex = 5;
+      // 
+      // NumericRangeView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.label3);
+      this.Controls.Add(this.stepSizeValueView);
+      this.Controls.Add(this.label2);
+      this.Controls.Add(this.label1);
+      this.Controls.Add(this.upperValueView);
+      this.Controls.Add(this.lowerValueView);
+      this.Name = "NumericRangeView";
+      this.Size = new System.Drawing.Size(434, 145);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.Label label2;
+    private Data.Views.StringConvertibleValueView lowerValueView;
+    private Data.Views.StringConvertibleValueView upperValueView;
+    private System.Windows.Forms.Label label3;
+    private Data.Views.StringConvertibleValueView stepSizeValueView;
+
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/NumericRangeView.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/NumericRangeView.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/NumericRangeView.cs	(revision 4516)
@@ -0,0 +1,60 @@
+﻿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.Data;
+
+namespace HeuristicLab.Problems.MetaOptimization.Views {
+  /// <summary>
+  /// The visual representation of a <see cref="INumericRange"/>.
+  /// </summary>
+  [View("NumericRange View")]
+  [Content(typeof(INumericRange), true)]
+  public partial class NumericRangeView : 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 INumericRange Content {
+      get { return (INumericRange)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public NumericRangeView() {
+      InitializeComponent();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+    }
+
+    protected override void DeregisterContentEvents() {
+      base.DeregisterContentEvents();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content != null) {
+        lowerValueView.Content = Content.LowerBound;
+        upperValueView.Content = Content.UpperBound;
+        stepSizeValueView.Content = Content.StepSize;
+      } else {
+        lowerValueView.Content = null;
+        upperValueView.Content = null;
+        stepSizeValueView.Content = null;
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+    }
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/NumericRangeView.resx
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/NumericRangeView.resx	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/NumericRangeView.resx	(revision 4516)
@@ -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: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ObjectSelectorDialog.Designer.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ObjectSelectorDialog.Designer.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ObjectSelectorDialog.Designer.cs	(revision 4516)
@@ -0,0 +1,121 @@
+﻿namespace HeuristicLab.Problems.MetaOptimization.Views {
+  partial class ObjectSelectorDialog<T> {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form 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.itemsListView = new System.Windows.Forms.ListView();
+      this.nameColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.descriptionColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.typeColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.cancelButton = new System.Windows.Forms.Button();
+      this.okButton = new System.Windows.Forms.Button();
+      this.SuspendLayout();
+      // 
+      // itemsListView
+      // 
+      this.itemsListView.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.itemsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.nameColumnHeader,
+            this.descriptionColumnHeader,
+            this.typeColumnHeader});
+      this.itemsListView.FullRowSelect = true;
+      this.itemsListView.HideSelection = false;
+      this.itemsListView.Location = new System.Drawing.Point(12, 12);
+      this.itemsListView.MultiSelect = false;
+      this.itemsListView.Name = "itemsListView";
+      this.itemsListView.Size = new System.Drawing.Size(765, 452);
+      this.itemsListView.TabIndex = 2;
+      this.itemsListView.UseCompatibleStateImageBehavior = false;
+      this.itemsListView.View = System.Windows.Forms.View.Details;
+      this.itemsListView.SelectedIndexChanged += new System.EventHandler(this.itemsListView_SelectedIndexChanged);
+      this.itemsListView.DoubleClick += new System.EventHandler(this.itemsListView_DoubleClick);
+      // 
+      // nameColumnHeader
+      // 
+      this.nameColumnHeader.Text = "Name";
+      this.nameColumnHeader.Width = 91;
+      // 
+      // descriptionColumnHeader
+      // 
+      this.descriptionColumnHeader.Text = "Description";
+      this.descriptionColumnHeader.Width = 187;
+      // 
+      // typeColumnHeader
+      // 
+      this.typeColumnHeader.Text = "Type";
+      this.typeColumnHeader.Width = 240;
+      // 
+      // cancelButton
+      // 
+      this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+      this.cancelButton.Location = new System.Drawing.Point(702, 470);
+      this.cancelButton.Name = "cancelButton";
+      this.cancelButton.Size = new System.Drawing.Size(75, 23);
+      this.cancelButton.TabIndex = 5;
+      this.cancelButton.Text = "&Cancel";
+      this.cancelButton.UseVisualStyleBackColor = true;
+      // 
+      // okButton
+      // 
+      this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
+      this.okButton.Enabled = false;
+      this.okButton.Location = new System.Drawing.Point(621, 470);
+      this.okButton.Name = "okButton";
+      this.okButton.Size = new System.Drawing.Size(75, 23);
+      this.okButton.TabIndex = 4;
+      this.okButton.Text = "&OK";
+      this.okButton.UseVisualStyleBackColor = true;
+      this.okButton.Click += new System.EventHandler(this.okButton_Click);
+      // 
+      // ObjectSelectorDialog
+      // 
+      this.AcceptButton = this.okButton;
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.CancelButton = this.cancelButton;
+      this.ClientSize = new System.Drawing.Size(789, 505);
+      this.Controls.Add(this.cancelButton);
+      this.Controls.Add(this.okButton);
+      this.Controls.Add(this.itemsListView);
+      this.Name = "ObjectSelectorDialog";
+      this.Text = "ObjectSelectorDialog";
+      this.Load += new System.EventHandler(this.ObjectSelectorDialog_Load);
+      this.Shown += new System.EventHandler(this.ObjectSelectorDialog_Shown);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.ListView itemsListView;
+    private System.Windows.Forms.ColumnHeader nameColumnHeader;
+    private System.Windows.Forms.ColumnHeader descriptionColumnHeader;
+    private System.Windows.Forms.ColumnHeader typeColumnHeader;
+    private System.Windows.Forms.Button cancelButton;
+    private System.Windows.Forms.Button okButton;
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ObjectSelectorDialog.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ObjectSelectorDialog.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ObjectSelectorDialog.cs	(revision 4516)
@@ -0,0 +1,78 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Problems.MetaOptimization.Views {
+  public partial class ObjectSelectorDialog<T> : Form where T : INamedItem {
+    private bool initialized;
+    private List<IItem> items;
+    private IEnumerable<IGrouping<string, T>> selectableItems;
+
+    private T item;
+    public T Item {
+      get { return item; }
+    }
+
+    public ObjectSelectorDialog(IEnumerable<IGrouping<string, T>> selectableItems) {
+      this.initialized = false;
+      this.items = new List<IItem>();
+      this.item = default(T);
+      this.selectableItems = selectableItems;
+      InitializeComponent();
+    }
+
+    private void ObjectSelectorDialog_Load(object sender, EventArgs e) {
+      if (!initialized) {
+        itemsListView.SmallImageList = new ImageList();
+
+        foreach (IGrouping<string, T> category in selectableItems) {
+          ListViewGroup group = new ListViewGroup(category.Key);
+          itemsListView.Groups.Add(group);
+          foreach (T i in category) {
+            items.Add(i);
+            ListViewItem item = new ListViewItem(new string[] { i.Name, i.Description, i.ItemName }, group);
+            itemsListView.SmallImageList.Images.Add(i.ItemImage);
+            item.ImageIndex = itemsListView.SmallImageList.Images.Count - 1;
+            item.Tag = i;
+            itemsListView.Items.Add(item);
+          }
+        }
+        for (int i = 0; i < itemsListView.Columns.Count; i++)
+          itemsListView.Columns[i].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
+        initialized = true;
+      }
+    }
+
+    private void ObjectSelectorDialog_Shown(object sender, EventArgs e) {
+      item = default(T);
+    }
+
+    private void okButton_Click(object sender, EventArgs e) {
+      if (itemsListView.SelectedItems.Count == 1) {
+        item = (T)itemsListView.SelectedItems[0].Tag;
+        DialogResult = DialogResult.OK;
+        Close();
+      }
+    }
+
+    private void itemsListView_DoubleClick(object sender, EventArgs e) {
+      if (itemsListView.SelectedItems.Count == 1) {
+        item = (T)itemsListView.SelectedItems[0].Tag;
+        DialogResult = DialogResult.OK;
+        Close();
+      }
+    }
+
+    private void itemsListView_SelectedIndexChanged(object sender, EventArgs e) {
+      okButton.Enabled = itemsListView.SelectedItems.Count == 1;
+    }
+
+
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ObjectSelectorDialog.resx
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ObjectSelectorDialog.resx	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ObjectSelectorDialog.resx	(revision 4516)
@@ -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: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationListView.Designer.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationListView.Designer.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationListView.Designer.cs	(revision 4516)
@@ -0,0 +1,59 @@
+﻿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: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationListView.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationListView.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationListView.cs	(revision 4516)
@@ -0,0 +1,103 @@
+﻿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;
+
+namespace HeuristicLab.Problems.MetaOptimization.Views {
+  /// <summary>
+  /// The visual representation of a <see cref="ParameterConfiguration"/>.
+  /// </summary>
+  [View("ParameterConfigurationList View")]
+  [Content(typeof(ParameterConfigurationList), 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 ParameterConfigurationList Content {
+      get { return (ParameterConfigurationList)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public ParameterConfigurationListView() {
+      InitializeComponent();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.CheckedItemsChanged += new Collections.CollectionItemsChangedEventHandler<IParameterConfiguration>(Content_CheckedItemsChanged);
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.CheckedItemsChanged -= new Collections.CollectionItemsChangedEventHandler<IParameterConfiguration>(Content_CheckedItemsChanged);
+      base.DeregisterContentEvents();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      while (itemsListView.Items.Count > 0) RemoveListViewItem(itemsListView.Items[0]);
+      viewHost.Content = null;
+      if (Content != null) {
+        Caption += " (" + Content.GetType().Name + ")";
+        foreach (IParameterConfiguration item in Content.CheckedItems)
+          AddListViewItem(CreateListViewItem(item));
+        AdjustListViewColumnSizes();
+        SortItemsListView(SortOrder.Ascending);
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+    }
+
+    protected override void addButton_Click(object sender, EventArgs e) {
+      var selectorDialog = new ObjectSelectorDialog<IParameterConfiguration>(from c in Content
+                                                                             where !Content.ItemChecked(c)
+                                                                             group c by c.Category);
+      if (selectorDialog.ShowDialog() == DialogResult.OK) {
+        Content.SetItemCheckedState(selectorDialog.Item, true);
+      }
+    }
+
+    protected override void removeButton_Click(object sender, EventArgs e) {
+      if (itemsListView.SelectedItems.Count > 0) {
+        foreach (ListViewItem item in itemsListView.SelectedItems)
+          Content.SetItemCheckedState((IParameterConfiguration)item.Tag, false);
+        itemsListView.SelectedItems.Clear();
+      }
+    }
+
+    private void Content_CheckedItemsChanged(object sender, Collections.CollectionItemsChangedEventArgs<IParameterConfiguration> e) {
+      foreach (IParameterConfiguration item in e.Items) {
+        if (!Content.ItemChecked(item)) {
+          ListViewItem found = FindListViewItem(item);
+          if(found != null)
+            RemoveListViewItem(found);
+        } else {
+          ListViewItem found = FindListViewItem(item);
+          if (found == null)
+            AddListViewItem(CreateListViewItem(item));
+        }
+      }
+    }
+
+    #region Helpers
+    private ListViewItem FindListViewItem(IParameterConfiguration tag) {
+      foreach (ListViewItem item in itemsListView.Items) {
+        if (item.Tag == tag)
+          return item;
+      }
+      return null;
+    }
+    #endregion
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationListView.resx
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationListView.resx	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationListView.resx	(revision 4516)
@@ -0,0 +1,126 @@
+﻿<?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: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationView.Designer.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationView.Designer.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationView.Designer.cs	(revision 4516)
@@ -0,0 +1,73 @@
+﻿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.Location = new System.Drawing.Point(0, 26);
+      this.viewHost.Name = "viewHost";
+      this.viewHost.ReadOnly = false;
+      this.viewHost.Size = new System.Drawing.Size(729, 455);
+      this.viewHost.TabIndex = 7;
+      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(729, 481);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.CheckBox optimizeCheckBox;
+    private MainForm.WindowsForms.ViewHost viewHost;
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationView.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationView.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationView.cs	(revision 4516)
@@ -0,0 +1,53 @@
+﻿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;
+
+namespace HeuristicLab.Problems.MetaOptimization.Views {
+  /// <summary>
+  /// The visual representation of a <see cref="ParameterConfiguration"/>.
+  /// </summary>
+  [View("ParameterConfiguration View")]
+  [Content(typeof(IParameterConfiguration), 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) {
+        optimizeCheckBox.Checked = Content.Optimize;
+        viewHost.Content = Content.Parameter;
+      } else {
+        optimizeCheckBox.Checked = false;
+        viewHost.Content = null;
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+    }
+
+    private void optimizeCheckBox_CheckedChanged(object sender, EventArgs e) {
+
+    }
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationView.resx
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationView.resx	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/ParameterConfigurationView.resx	(revision 4516)
@@ -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: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/Properties/AssemblyInfo.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/Properties/AssemblyInfo.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/Properties/AssemblyInfo.cs	(revision 4516)
@@ -0,0 +1,36 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Problems.MetaOptimization.Views")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("HeuristicLab.Problems.MetaOptimization.Views")]
+[assembly: AssemblyCopyright("Copyright © Microsoft 2010")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("449122a5-638c-4b20-a89e-c00730604735")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/UpdateLocalInstallation.cmd
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/UpdateLocalInstallation.cmd	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/UpdateLocalInstallation.cmd	(revision 4516)
@@ -0,0 +1,5 @@
+set target=C:\Program Files\HeuristicLab 3.3
+
+echo Copying HeuristicLab.Problems.MetaOptimization.Views Assembly
+copy "%ProjectDir%\%Outdir%\HeuristicLab.Problems.MetaOptimization.Views-3.3.dll" "%target%"
+echo ---------------------------
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/obj/Debug/HeuristicLab.Problems.MetaOptimization.Views-3.3.csproj.FileListAbsolute.txt
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/obj/Debug/HeuristicLab.Problems.MetaOptimization.Views-3.3.csproj.FileListAbsolute.txt	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization.Views/3.3/obj/Debug/HeuristicLab.Problems.MetaOptimization.Views-3.3.csproj.FileListAbsolute.txt	(revision 4516)
@@ -0,0 +1,32 @@
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\obj\Debug\ResolveAssemblyReference.cache
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\obj\Debug\HeuristicLab.Problems.MetaOptimization.Views.NumericRangeView.resources
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\obj\Debug\HeuristicLab.Problems.MetaOptimization.Views.ObjectSelectorDialog.resources
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\obj\Debug\HeuristicLab.Problems.MetaOptimization.Views.ParameterConfigurationListView.resources
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\obj\Debug\HeuristicLab.Problems.MetaOptimization.Views.NumericParameterConfigurationView.resources
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\obj\Debug\HeuristicLab.Problems.MetaOptimization.Views.ParameterConfigurationView.resources
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\obj\Debug\ResGen.read.1.tlog
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\obj\Debug\ResGen.write.1.tlog
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\bin\Debug\HeuristicLab.Problems.MetaOptimization.Views-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\bin\Debug\HeuristicLab.Problems.MetaOptimization.Views-3.3.pdb
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\bin\Debug\HeuristicLab.Collections-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\bin\Debug\HeuristicLab.Common-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\bin\Debug\HeuristicLab.Common.Resources-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\bin\Debug\HeuristicLab.Core-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\bin\Debug\HeuristicLab.Core.Views-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\bin\Debug\HeuristicLab.Data.Views-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\bin\Debug\HeuristicLab.MainForm-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\bin\Debug\HeuristicLab.MainForm.WindowsForms-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\bin\Debug\HeuristicLab.Parameters-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\bin\Debug\HeuristicLab.Parameters.Views-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\bin\Debug\HeuristicLab.PluginInfrastructure-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\bin\Debug\HeuristicLab.Problems.MetaOptimization-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\bin\Debug\HeuristicLab.Optimization-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\bin\Debug\HeuristicLab.Operators-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\bin\Debug\HeuristicLab.Persistence-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\bin\Debug\WeifenLuo.WinFormsUI.Docking-2.3.1.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\bin\Debug\ICSharpCode.SharpZipLib.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\bin\Debug\HeuristicLab.Tracing-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\bin\Debug\log4net.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\bin\Debug\HeuristicLab.Problems.MetaOptimization-3.3.pdb
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\obj\Debug\HeuristicLab.Problems.MetaOptimization.Views-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization.Views\3.3\obj\Debug\HeuristicLab.Problems.MetaOptimization.Views-3.3.pdb
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Analyzers/BestQualityAnalyzer.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Analyzers/BestQualityAnalyzer.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Analyzers/BestQualityAnalyzer.cs	(revision 4516)
@@ -0,0 +1,67 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Core;
+using HeuristicLab.Parameters;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  /// <summary>
+  /// TODO An operator for analyzing the best solution of Traveling Salesman Problems given in path representation using city coordinates.
+  /// </summary>
+  [Item("BestQualityAnalyzer", "TODO An operator for analyzing the best solution of Traveling Salesman Problems given in path representation using city coordinates.")]
+  [StorableClass]
+  public sealed class BestQualityAnalyzer : SingleSuccessorOperator, IAnalyzer {
+
+    public ScopeTreeLookupParameter<IParameterSet> ParameterSetParameter {
+      get { return (ScopeTreeLookupParameter<IParameterSet>)Parameters["ParameterSet"]; }
+    }
+    public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
+      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; }
+    }
+    public LookupParameter<IParameterSet> BestSolutionParameter {
+      get { return (LookupParameter<IParameterSet>)Parameters["BestSolution"]; }
+    }
+    public ValueLookupParameter<ResultCollection> ResultsParameter {
+      get { return (ValueLookupParameter<ResultCollection>)Parameters["Results"]; }
+    }
+    public LookupParameter<DoubleValue> BestKnownQualityParameter {
+      get { return (LookupParameter<DoubleValue>)Parameters["BestKnownQuality"]; }
+    }
+    public LookupParameter<IParameterSet> BestKnownSolutionParameter {
+      get { return (LookupParameter<IParameterSet>)Parameters["BestKnownSolution"]; }
+    }
+
+    public BestQualityAnalyzer()
+      : base() {
+      Parameters.Add(new ScopeTreeLookupParameter<IParameterSet>("ParameterSet", "TODO The TSP solutions given in path representation from which the best solution should be analyzed."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "TODO The qualities of the TSP solutions which should be analyzed."));
+      Parameters.Add(new LookupParameter<IParameterSet>("BestSolution", "TODO The best TSP solution."));
+      Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "TODO The result collection where the best TSP solution should be stored."));
+      Parameters.Add(new LookupParameter<DoubleValue>("BestKnownQuality", "TODO The quality of the best known solution of this TSP instance."));
+      Parameters.Add(new LookupParameter<IParameterSet>("BestKnownSolution", "TODO The best known solution of this TSP instance."));
+    }
+
+    public override IOperation Apply() {
+      ItemArray<DoubleValue> qualities = QualityParameter.ActualValue;
+      ResultCollection results = ResultsParameter.ActualValue;
+      DoubleValue bestKnownQuality = BestKnownQualityParameter.ActualValue;
+      ItemArray<IParameterSet> parameterSets = ParameterSetParameter.ActualValue;
+
+      int i = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index;
+
+      if (bestKnownQuality == null || qualities[i].Value < bestKnownQuality.Value) {
+        BestKnownQualityParameter.ActualValue = new DoubleValue(qualities[i].Value);
+        BestKnownSolutionParameter.ActualValue = (IParameterSet)parameterSets[i].Clone();
+      }
+
+      // todo: more
+
+      return base.Apply();
+    }
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Creators/RandomParameterSetCreator.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Creators/RandomParameterSetCreator.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Creators/RandomParameterSetCreator.cs	(revision 4516)
@@ -0,0 +1,45 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  /// <summary>
+  /// An operator which creates a new random permutation of integer values.
+  /// </summary>
+  [Item("RandomParameterSetCreator", "An operator which creates a new set of parameters TODO.")]
+  [StorableClass]
+  public sealed class RandomParameterSetCreator : SingleSuccessorOperator, IParameterSetCreator {
+    public override bool CanChangeName {
+      get { return false; }
+    }
+
+    public ILookupParameter<IRandom> RandomParameter {
+      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
+    }
+    public ILookupParameter<IParameterSet> ParameterSetParameter {
+      get { return (ILookupParameter<IParameterSet>)Parameters["ParameterSet"]; }
+    }
+
+    private ParameterConfigurationList parametersToOptimize;
+    public ParameterConfigurationList ParametersToOptimize {
+      get { return parametersToOptimize; }
+      set { parametersToOptimize = value; }
+    }
+
+    public RandomParameterSetCreator()
+      : base() {
+        Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used to initialize the new random permutation."));
+        Parameters.Add(new LookupParameter<IParameterSet>("ParameterSet", "The new random parameter set."));
+    }
+
+    public override IOperation Apply() {
+      ParameterSetParameter.ActualValue = new ParameterSet(ParametersToOptimize, RandomParameter.ActualValue);
+      return base.Apply();
+    }
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/BooleanParameterConfiguration.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/BooleanParameterConfiguration.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/BooleanParameterConfiguration.cs	(revision 4516)
@@ -0,0 +1,9 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  public class BooleanParameterConfiguration {
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/EnumerableParameterConfiguration.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/EnumerableParameterConfiguration.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/EnumerableParameterConfiguration.cs	(revision 4516)
@@ -0,0 +1,9 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  public class EnumerableParameterConfiguration {
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/NumericParameterConfiguration.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/NumericParameterConfiguration.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/NumericParameterConfiguration.cs	(revision 4516)
@@ -0,0 +1,82 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+using HeuristicLab.Collections;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  public class NumericParameterConfiguration : ParameterConfiguration {
+    private NumericRangeList ranges;
+    public NumericRangeList Ranges {
+      get { return ranges; }
+    }
+
+    protected NumericParameterConfiguration() { }
+    public NumericParameterConfiguration(IParameter parameter, string category)
+      : base(parameter, category) {
+      this.ranges = new NumericRangeList();
+      this.ranges.ItemsAdded += new CollectionItemsChangedEventHandler<INumericRange>(ranges_ItemsAdded);
+      this.ranges.ItemsRemoved += new CollectionItemsChangedEventHandler<INumericRange>(ranges_ItemsRemoved);
+      this.ranges.CollectionReset += new CollectionItemsChangedEventHandler<INumericRange>(ranges_CollectionReset);
+    }
+
+    void ranges_CollectionReset(object sender, CollectionItemsChangedEventArgs<INumericRange> e) {
+      foreach (var i in e.Items) {
+        DeregisterItemEvents(i);
+      }
+      OnToStringChanged();
+    }
+
+    void ranges_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<INumericRange> e) {
+      foreach (var i in e.Items) {
+        DeregisterItemEvents(i);
+      }
+      OnToStringChanged();
+    }
+
+    void ranges_ItemsAdded(object sender, CollectionItemsChangedEventArgs<INumericRange> e) {
+      foreach (var i in e.Items) {
+        RegisterItemEvents(i);
+      }
+      OnToStringChanged();
+    }
+
+    private void DeregisterItemEvents(INumericRange range) {
+      range.ToStringChanged -= new EventHandler(range_ToStringChanged);
+    }
+    private void RegisterItemEvents(INumericRange range) {
+      range.ToStringChanged += new EventHandler(range_ToStringChanged);
+    }
+
+    public IntValue GetRandomValue() {
+      return new IntValue(0);
+    }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      NumericParameterConfiguration clone = (NumericParameterConfiguration)base.Clone(cloner);
+      clone.ranges = new NumericRangeList();
+      foreach (INumericRange range in this.ranges) {
+        clone.ranges.Add(range);
+      }
+      return clone;
+    }
+
+    void range_ToStringChanged(object sender, EventArgs e) {
+      OnToStringChanged();
+    }
+
+    public override string ToString() {
+      return string.Format("{0}: ({1})", base.ToString(), string.Join(",", ranges.Select(r => r.ToString()).ToArray()));
+    }
+
+    public override IParameter GetParameterWithRandomValue(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
+      IParameter clone = (IParameter)this.Parameter.Clone();
+      clone.ActualValue = new IntValue(value);
+      return clone;
+    }
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ParameterConfiguration.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ParameterConfiguration.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ParameterConfiguration.cs	(revision 4516)
@@ -0,0 +1,92 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  public abstract class ParameterConfiguration : IParameterConfiguration {
+    public bool Optimize { get; set; }
+    public IParameter Parameter { get; set; }
+    public string Category { get; set; }
+
+    public ParameterConfiguration() { }
+    public ParameterConfiguration(IParameter parameter, string category) {
+      this.Parameter = parameter;
+      this.Category = category;
+      Parameter.NameChanged += this.NameChanged;
+      Parameter.NameChanging += this.NameChanging;
+      Parameter.DescriptionChanged += this.DescriptionChanged;
+      Parameter.ItemImageChanged += this.ItemImageChanged;
+      parameter.ToStringChanged += this.ToStringChanged;
+    }
+
+    public bool CanChangeDescription {
+      get { return false; }
+    }
+
+    public bool CanChangeName {
+      get { return false; }
+    }
+
+    public string Description {
+      get { return Parameter.Description; }
+      set { throw new NotSupportedException(); }
+    }
+    public string Name {
+      get { return Parameter.Name; }
+      set { throw new NotSupportedException(); }
+    }
+
+    public string ItemDescription {
+      get { return Parameter.ItemDescription; }
+    }
+
+    public System.Drawing.Image ItemImage {
+      get { return Parameter.ItemImage; }
+    }
+
+    public string ItemName {
+      get { return Parameter.ItemName; }
+    }
+
+    public Version ItemVersion {
+      get { return Parameter.ItemVersion; }
+    }
+
+    #region Events
+    public virtual event EventHandler NameChanged;
+    public virtual event EventHandler<CancelEventArgs<string>> NameChanging;
+    public virtual event EventHandler DescriptionChanged;
+    public virtual event EventHandler ItemImageChanged;
+    public virtual event EventHandler ToStringChanged;
+
+    protected virtual void OnToStringChanged() {
+      var handler = ToStringChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    #endregion
+
+    #region Cloning
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      ParameterConfiguration clone = (ParameterConfiguration)Activator.CreateInstance(this.GetType(), true);
+      cloner.RegisterClonedObject(this, clone);
+      clone.Parameter = (IParameter)cloner.Clone(this.Parameter);
+      clone.Optimize = this.Optimize;
+      return clone;
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+    #endregion
+
+    public override string ToString() {
+      return string.Format("{0}.{1}", Category, Parameter.Name);
+    }
+    
+    public abstract IParameter GetParameterWithRandomValue(IRandom random);
+
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ParameterConfigurationList.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ParameterConfigurationList.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ParameterConfigurationList.cs	(revision 4516)
@@ -0,0 +1,18 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  [StorableClass]
+  [Item("ParameterOptimizationInfoList", "Represents a list of parameter configurations.")]
+  public class ParameterConfigurationList : CheckedItemCollection<IParameterConfiguration> {
+    public ParameterConfigurationList() : base() { }
+    public ParameterConfigurationList(IEnumerable<IParameterConfiguration> collection) : base(collection) { }
+    [StorableConstructor]
+    protected ParameterConfigurationList(bool deserializing) : base(deserializing) { }
+    
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ParameterSet.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ParameterSet.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ParameterSet.cs	(revision 4516)
@@ -0,0 +1,26 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  public class ParameterSet : Item, IParameterSet {
+    private List<KeyValuePair<string, IParameter>> parameters;
+    public IEnumerable<KeyValuePair<string, IParameter>> Parameters {
+      get { return parameters; }
+    }
+
+    public ParameterSet() {
+      this.parameters = new List<KeyValuePair<string, IParameter>>();
+    }
+    public ParameterSet(ParameterConfigurationList parametersToOptimize, IRandom random)
+      : this() {
+      foreach (IParameterConfiguration config in parametersToOptimize.CheckedItems) {
+        parameters.Add(new KeyValuePair<string, IParameter>(config.Category, config.GetParameterWithRandomValue(random)));
+      }
+    }
+
+
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/MetaOptimizationEvaluator.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/MetaOptimizationEvaluator.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/MetaOptimizationEvaluator.cs	(revision 4516)
@@ -0,0 +1,68 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Operators;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Optimization;
+using System.Threading;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  /// <summary>
+  /// A base class for operators which evaluate TSP solutions.
+  /// </summary>
+  [Item("MetaOptimizationEvaluator", "A base class for operators which evaluate Meta Optimization solutions.")]
+  [StorableClass]
+  public class MetaOptimizationEvaluator : SingleSuccessorOperator, IMetaOptimizationEvaluator {
+    private bool algorithmStopped;
+
+    public ILookupParameter<DoubleValue> QualityParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters["Quality"]; }
+    }
+
+    public ILookupParameter<IAlgorithm> AlgorithmParameter {
+      get { return (ILookupParameter<IAlgorithm>)Parameters["Algorithm"]; }
+    }
+    public ILookupParameter<IParameterSet> ParameterSetParameter {
+      get { return (ILookupParameter<IParameterSet>)Parameters["ParameterSet"]; }
+    }
+
+    public MetaOptimizationEvaluator()
+      : base() {
+      Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The evaluated quality of the TSP solution."));
+      Parameters.Add(new LookupParameter<IAlgorithm>("Algorithm", "Missing description."));
+      Parameters.Add(new LookupParameter<IParameterSet>("ParameterSet", "Missing description."));
+    }
+
+    public override IOperation Apply() {
+      AlgorithmParameter.ActualValue.Prepare();
+      ParametrizeAlgorithm();
+      algorithmStopped = false;
+      AlgorithmParameter.ActualValue.Stopped += new EventHandler(ActualValue_Stopped);
+      AlgorithmParameter.ActualValue.Start();
+      while (!algorithmStopped) {
+        Thread.Sleep(1000); // wait for algorithm to complete; do not rely on Algorithm.ExecutionState here, because change of ExecutionState happens before Run is added (which causes problems because Algorithm might get cloned when its started already)
+      }
+      AlgorithmParameter.ActualValue.Stopped -= new EventHandler(ActualValue_Stopped);
+      this.QualityParameter.ActualValue = (DoubleValue)AlgorithmParameter.ActualValue.Results["BestQuality"].Value;
+      return base.Apply();
+    }
+
+    void ActualValue_Stopped(object sender, EventArgs e) {
+      algorithmStopped = true;
+    }
+
+    private void ParametrizeAlgorithm() {
+      foreach (KeyValuePair<string, IParameter> parameter in ParameterSetParameter.ActualValue.Parameters) {
+        if (parameter.Key == "Algorithm") {
+          this.AlgorithmParameter.ActualValue.Parameters[parameter.Value.Name].ActualValue = parameter.Value.ActualValue;
+        } else if (parameter.Key == "Problem") {
+          this.AlgorithmParameter.ActualValue.Problem.Parameters[parameter.Value.Name].ActualValue = parameter.Value.ActualValue;
+        }
+      }
+    }
+  }
+}
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 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/HeuristicLab.Problems.MetaOptimization-3.3.csproj	(revision 4516)
@@ -0,0 +1,127 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{ABBC1DF6-FCC6-4F86-AB75-B6B3A72E7D17}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Problems.MetaOptimization</RootNamespace>
+    <AssemblyName>HeuristicLab.Problems.MetaOptimization-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Collections-3.3">
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Collections-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3">
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Common.Resources-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3">
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Data-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Operators-3.3">
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Operators-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3">
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Optimization-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Parameters-3.3">
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Parameters-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Analyzers\BestQualityAnalyzer.cs" />
+    <Compile Include="Creators\RandomParameterSetCreator.cs" />
+    <Compile Include="Encodings\BooleanParameterConfiguration.cs" />
+    <Compile Include="NumericRangeList.cs" />
+    <Compile Include="Encodings\EnumerableParameterConfiguration.cs" />
+    <Compile Include="Interfaces\INumericRange.cs" />
+    <Compile Include="Encodings\NumericParameterConfiguration.cs" />
+    <Compile Include="Encodings\ParameterSet.cs" />
+    <Compile Include="Evaluators\MetaOptimizationEvaluator.cs" />
+    <Compile Include="Interfaces\IMetaOptimizationEvaluator.cs" />
+    <Compile Include="Interfaces\IParameterSet.cs" />
+    <Compile Include="Interfaces\IParameterSetCreator.cs" />
+    <Compile Include="Interfaces\IParameterConfiguration.cs" />
+    <Compile Include="Encodings\ParameterConfiguration.cs" />
+    <Compile Include="Encodings\ParameterConfigurationList.cs" />
+    <Compile Include="NumericRange.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="MetaOptimizationProblem.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <Compile Include="HeuristicLabProblemsMetaOptimizationPlugin.cs" />
+    <None Include="UpdateLocalInstallation.cmd" />
+  </ItemGroup>
+  <ItemGroup />
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)</PreBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PostBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call UpdateLocalInstallation.cmd</PostBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/HeuristicLab.Problems.MetaOptimization-3.3.csproj.user
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/HeuristicLab.Problems.MetaOptimization-3.3.csproj.user	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/HeuristicLab.Problems.MetaOptimization-3.3.csproj.user	(revision 4516)
@@ -0,0 +1,7 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
+    <StartAction>Program</StartAction>
+    <StartProgram>C:\Program Files\heuristicLab 3.3\HeuristicLab 3.3.exe</StartProgram>
+  </PropertyGroup>
+</Project>
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/HeuristicLabProblemsMetaOptimizationPlugin.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/HeuristicLabProblemsMetaOptimizationPlugin.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/HeuristicLabProblemsMetaOptimizationPlugin.cs	(revision 4516)
@@ -0,0 +1,32 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Problems.MetaOptimization plugin
+  /// </summary>
+  [Plugin("HeuristicLab.Problems.MetaOptimization", "3.3.0.0")]
+  [PluginFile("HeuristicLab.Problems.MetaOptimization-3.3.dll", PluginFileType.Assembly)]
+  public class HeuristicLabProblemsMetaOptimizationPlugin : PluginBase {
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/IMetaOptimizationEvaluator.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/IMetaOptimizationEvaluator.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/IMetaOptimizationEvaluator.cs	(revision 4516)
@@ -0,0 +1,12 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Optimization;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  /// <summary>
+  /// An interface which represents an evaluation operator for Meta Optimization Problems.
+  /// </summary>
+  public interface IMetaOptimizationEvaluator : ISingleObjectiveEvaluator {  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/INumericRange.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/INumericRange.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/INumericRange.cs	(revision 4516)
@@ -0,0 +1,19 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  public interface INumericRange : IItem {
+    IntValue LowerBound { get; set; }
+    IntValue UpperBound { get; set; }
+    IntValue StepSize { get; set; }
+
+    event EventHandler LowerBoundChanged;
+    event EventHandler UpperBoundChanged;
+    event EventHandler StepSizeChanged;
+
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/IParameterConfiguration.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/IParameterConfiguration.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/IParameterConfiguration.cs	(revision 4516)
@@ -0,0 +1,15 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  public interface IParameterConfiguration : INamedItem {
+    bool Optimize { get; set; }
+    IParameter Parameter { get; set; }
+    string Category { get; set; }
+
+    IParameter GetParameterWithRandomValue(IRandom random);
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/IParameterSet.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/IParameterSet.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/IParameterSet.cs	(revision 4516)
@@ -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 IParameterSet : IItem {
+    IEnumerable<KeyValuePair<string, IParameter>> Parameters { get; }
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/IParameterSetCreator.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/IParameterSetCreator.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Interfaces/IParameterSetCreator.cs	(revision 4516)
@@ -0,0 +1,15 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Optimization;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  /// <summary>
+  /// An interface which represents an operator for creating permutations.
+  /// </summary>
+  public interface IParameterSetCreator : ISolutionCreator {
+    ParameterConfigurationList ParametersToOptimize { get; set; }
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/MetaOptimizationProblem.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/MetaOptimizationProblem.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/MetaOptimizationProblem.cs	(revision 4516)
@@ -0,0 +1,300 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Drawing;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.Common;
+using HeuristicLab.Parameters;
+using HeuristicLab.Data;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  [Item("Meta Optimization Problem", "Represents a Meta Optimization Problem.")]
+  [Creatable("Problems")]
+  [StorableClass]
+  public sealed class MetaOptimizationProblem : ParameterizedNamedItem, ISingleObjectiveProblem, IStorableContent {
+    public string Filename { get; set; }
+
+    public override Image ItemImage {
+      get { return HeuristicLab.Common.Resources.VS2008ImageLibrary.Type; }
+    }
+
+    #region Parameter Properties
+
+    public ValueParameter<IntValue> RepetitionsParameter {
+      get { return (ValueParameter<IntValue>)Parameters["Repetitions"]; }
+    }
+
+    public ValueParameter<IParameterSetCreator> SolutionCreatorParameter {
+      get { return (ValueParameter<IParameterSetCreator>)Parameters["SolutionCreator"]; }
+    }
+    IParameter IProblem.SolutionCreatorParameter {
+      get { return SolutionCreatorParameter; }
+    }
+
+    public ValueParameter<IMetaOptimizationEvaluator> EvaluatorParameter {
+      get { return (ValueParameter<IMetaOptimizationEvaluator>)Parameters["Evaluator"]; }
+    }
+    IParameter IProblem.EvaluatorParameter {
+      get { return EvaluatorParameter; }
+    }
+
+    public OptionalValueParameter<ParameterSet> BestKnownSolutionParameter {
+      get { return (OptionalValueParameter<ParameterSet>)Parameters["BestKnownSolution"]; }
+    }
+
+    public ValueParameter<BoolValue> MaximizationParameter {
+      get { return (ValueParameter<BoolValue>)Parameters["Maximization"]; }
+    }
+    IParameter ISingleObjectiveProblem.MaximizationParameter {
+      get { return MaximizationParameter; }
+    }
+
+    public OptionalValueParameter<DoubleValue> BestKnownQualityParameter {
+      get { return (OptionalValueParameter<DoubleValue>)Parameters["BestKnownQuality"]; }
+    }
+    IParameter ISingleObjectiveProblem.BestKnownQualityParameter {
+      get { return BestKnownQualityParameter; }
+    }
+
+    public ValueParameter<IAlgorithm> AlgorithmParameter {
+      get { return (ValueParameter<IAlgorithm>)Parameters["Algorithm"]; }
+    }
+    public ValueParameter<ParameterConfigurationList> ParametersToOptimizeParameter {
+      get { return (ValueParameter<ParameterConfigurationList>)Parameters["ParametersToOptimize"]; }
+    }
+    #endregion
+
+    #region Properties
+
+    public IntValue Repetitions {
+      get { return RepetitionsParameter.Value; }
+      set { RepetitionsParameter.Value = value; }
+    }
+
+    public IEnumerable<IOperator> Operators {
+      get { return operators; }
+    }
+
+    IEvaluator IProblem.Evaluator {
+      get { return EvaluatorParameter.Value; }
+    }
+    public IMetaOptimizationEvaluator Evaluator {
+      get { return EvaluatorParameter.Value; }
+      set { EvaluatorParameter.Value = value; }
+    }
+
+    ISolutionCreator IProblem.SolutionCreator {
+      get { return SolutionCreatorParameter.Value; }
+    }
+    public IParameterSetCreator SolutionCreator {
+      get { return SolutionCreatorParameter.Value; }
+    }
+
+    ISingleObjectiveEvaluator ISingleObjectiveProblem.Evaluator {
+      get { return this.Evaluator; }
+    }
+
+    public DoubleValue BestKnownQuality {
+      get { return BestKnownQualityParameter.Value; }
+      set { BestKnownQualityParameter.Value = value; }
+    }
+    public ParameterSet BestKnownSolution {
+      get { return BestKnownSolutionParameter.Value; }
+      set { BestKnownSolutionParameter.Value = value; }
+    }
+
+    public IAlgorithm Algorithm {
+      get { return AlgorithmParameter.Value; }
+      set { AlgorithmParameter.Value = value; }
+    }
+
+    public ParameterConfigurationList ParametersToOptimize {
+      get { return ParametersToOptimizeParameter.Value; }
+      set { ParametersToOptimizeParameter.Value = value; }
+    }
+
+    private BestQualityAnalyzer BestQualityAnalyzer {
+      get { return operators.OfType<BestQualityAnalyzer>().FirstOrDefault(); }
+    }
+    #endregion
+
+    [Storable]
+    private List<IOperator> operators;
+
+    [StorableConstructor]
+    private MetaOptimizationProblem(bool deserializing) : base(deserializing) { }
+    public MetaOptimizationProblem()
+      : base() {
+
+      IParameterSetCreator creator = new RandomParameterSetCreator();
+      MetaOptimizationEvaluator evaluator = new MetaOptimizationEvaluator();
+      ParameterConfigurationList parametersToOptimize = new ParameterConfigurationList();
+
+      Parameters.Add(new ValueParameter<BoolValue>("Maximization", "Set to false as the Traveling Salesman Problem is a minimization problem.", new BoolValue(false)));
+      Parameters.Add(new ValueParameter<IntValue>("Repetitions", "Number of evaluations for one individual.", new IntValue(3)));
+      Parameters.Add(new ValueParameter<IParameterSetCreator>("SolutionCreator", "The operator which should be used to create new TSP solutions.", creator));
+      Parameters.Add(new ValueParameter<IMetaOptimizationEvaluator>("Evaluator", "The operator which should be used to evaluate TSP solutions.", evaluator));
+      Parameters.Add(new OptionalValueParameter<DoubleValue>("BestKnownQuality", "The quality of the best known solution of this TSP instance."));
+      Parameters.Add(new OptionalValueParameter<ParameterSet>("BestKnownSolution", "The best known solution of this TSP instance."));
+
+      Parameters.Add(new ValueParameter<IAlgorithm>("Algorithm", "The algorithm and problem which's parameters should be optimized."));
+      Parameters.Add(new ValueParameter<ParameterConfigurationList>("ParametersToOptimize", "List of parameters that should be optimized.", parametersToOptimize));
+
+      ParameterizeSolutionCreator();
+      ParameterizeEvaluator();
+
+      InitializeOperators();
+      AttachEventHandlers();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      MetaOptimizationProblem clone = (MetaOptimizationProblem)base.Clone(cloner);
+      clone.operators = operators.Select(x => (IOperator)cloner.Clone(x)).ToList();
+      // todo
+      clone.AttachEventHandlers();
+      return clone;
+    }
+
+    #region Helpers
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserializationHook() {
+      AttachEventHandlers();
+    }
+    private void AttachEventHandlers() {
+      SolutionCreatorParameter.ValueChanged += new EventHandler(SolutionCreatorParameter_ValueChanged);
+      EvaluatorParameter.ValueChanged += new EventHandler(EvaluatorParameter_ValueChanged);
+      Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
+      AlgorithmParameter.ValueChanged += new EventHandler(BaseLevelAlgorithmParameter_ValueChanged);
+    }
+    private void InitializeOperators() {
+      operators = new List<IOperator>();
+      operators.Add(new BestQualityAnalyzer());
+      ParameterizeAnalyzer();
+      ParameterizeOperators();
+    }
+    private void ParameterizeSolutionCreator() {
+      SolutionCreator.ParametersToOptimize = this.ParametersToOptimize;
+    }
+    private void ParameterizeEvaluator() {
+    }
+    private void ParameterizeAnalyzer() {
+      BestQualityAnalyzer.ResultsParameter.ActualName = "Results";
+    }
+    private void ParameterizeOperators() {
+    }
+
+    private void AddAlgorithmParameters() {
+      foreach (IParameter parameter in Algorithm.Parameters) {
+        this.ParametersToOptimize.Add(new NumericParameterConfiguration(parameter, "Algorithm"), false);
+      }
+    }
+    private void RemoveAlgorithmParameters() {
+      foreach (IParameter parameter in Algorithm.Parameters) {
+        IParameterConfiguration parameterConfiguration = this.ParametersToOptimize.Single(p => p.Parameter == parameter);
+        if (parameterConfiguration != null) {
+          this.ParametersToOptimize.Remove(parameterConfiguration);
+        }
+      }
+    }
+    private void ClearAlgorithmParameters() {
+      //this.ParametersToOptimize.Clear();
+    }
+
+    private void AddProblemParameters() {
+      foreach (IParameter parameter in Algorithm.Problem.Parameters) {
+        this.ParametersToOptimize.Add(new NumericParameterConfiguration(parameter, "Problem"), false);
+      }
+    }
+    private void RemoveProblemParameters() {
+      foreach (IParameter parameter in Algorithm.Problem.Parameters) {
+        IParameterConfiguration parameterConfiguration = this.ParametersToOptimize.Single(p => p.Parameter == parameter);
+        if (parameterConfiguration != null) {
+          this.ParametersToOptimize.Remove(parameterConfiguration);
+        }
+      }
+    }
+    private void ClearProblemParameters() {
+      //this.ParametersToOptimize.Clear();
+    }
+    #endregion
+
+    #region Events
+    public event EventHandler SolutionCreatorChanged;
+    private void OnSolutionCreatorChanged() {
+      EventHandler handler = SolutionCreatorChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler EvaluatorChanged;
+    private void OnEvaluatorChanged() {
+      EventHandler handler = EvaluatorChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler OperatorsChanged;
+    private void OnOperatorsChanged() {
+      EventHandler handler = OperatorsChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler Reset;
+    private void OnReset() {
+      EventHandler handler = Reset;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    private void SolutionCreatorParameter_ValueChanged(object sender, EventArgs e) {
+      ParameterizeSolutionCreator();
+      ParameterizeEvaluator();
+      ParameterizeAnalyzer();
+      ParameterizeOperators();
+      OnSolutionCreatorChanged();
+    }
+    private void EvaluatorParameter_ValueChanged(object sender, EventArgs e) {
+      Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
+      ParameterizeEvaluator();
+      ParameterizeAnalyzer();
+      OnEvaluatorChanged();
+    }
+    private void Evaluator_QualityParameter_ActualNameChanged(object sender, EventArgs e) {
+      ParameterizeAnalyzer();
+    }
+    void BaseLevelAlgorithmParameter_ValueChanged(object sender, EventArgs e) {
+      ClearAlgorithmParameters();
+      if (Algorithm != null) {
+        Algorithm.ProblemChanged += new EventHandler(BaseLevelAlgorithm_ProblemChanged);
+        AddAlgorithmParameters(); // TODO: When to Detach?
+      }
+      BaseLevelAlgorithm_ProblemChanged(sender, e);
+    }
+
+    void BaseLevelAlgorithm_ProblemChanged(object sender, EventArgs e) {
+      ClearProblemParameters();
+      if (Algorithm.Problem != null) {
+        AddProblemParameters();
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/NumericRange.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/NumericRange.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/NumericRange.cs	(revision 4516)
@@ -0,0 +1,98 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  public class NumericRange : Item, INumericRange {
+    private IntValue lowerBound;
+    public IntValue 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();
+        }
+      }
+    }
+
+    private IntValue upperBound;
+    public IntValue 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();
+        }
+      }
+    }
+
+    private IntValue stepSize;
+    public IntValue 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 NumericRange() {
+      LowerBound = new IntValue(0);
+      UpperBound = new IntValue(0);
+      StepSize = new IntValue(1);
+    }
+
+    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());
+    }
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/NumericRangeList.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/NumericRangeList.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/NumericRangeList.cs	(revision 4516)
@@ -0,0 +1,18 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  [StorableClass]
+  [Item("NumericRangeList", "Represents a list of numeric ranges.")]
+  public class NumericRangeList : ItemCollection<INumericRange> {
+    public NumericRangeList() : base() { }
+    public NumericRangeList(IEnumerable<INumericRange> collection) : base(collection) { }
+    [StorableConstructor]
+    protected NumericRangeList(bool deserializing) : base(deserializing) { }
+    
+  }
+}
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Properties/AssemblyInfo.cs
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Properties/AssemblyInfo.cs	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Properties/AssemblyInfo.cs	(revision 4516)
@@ -0,0 +1,36 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Problems.MetaOptimization")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("HeuristicLab.Problems.MetaOptimization")]
+[assembly: AssemblyCopyright("Copyright © Microsoft 2010")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("99313b3e-2734-4d09-a35d-4eb1db88a88e")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/UpdateLocalInstallation.cmd
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/UpdateLocalInstallation.cmd	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/UpdateLocalInstallation.cmd	(revision 4516)
@@ -0,0 +1,5 @@
+set target=C:\Program Files\HeuristicLab 3.3
+
+echo Copying HeuristicLab.Problems.MetaOptimization Assembly
+copy "%ProjectDir%\%Outdir%\HeuristicLab.Problems.MetaOptimization-3.3.dll" "%target%"
+echo ---------------------------
Index: /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/obj/Debug/HeuristicLab.Problems.MetaOptimization-3.3.csproj.FileListAbsolute.txt
===================================================================
--- /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/obj/Debug/HeuristicLab.Problems.MetaOptimization-3.3.csproj.FileListAbsolute.txt	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/obj/Debug/HeuristicLab.Problems.MetaOptimization-3.3.csproj.FileListAbsolute.txt	(revision 4516)
@@ -0,0 +1,18 @@
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization\3.3\bin\Debug\HeuristicLab.Problems.MetaOptimization-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization\3.3\bin\Debug\HeuristicLab.Problems.MetaOptimization-3.3.pdb
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization\3.3\bin\Debug\HeuristicLab.Collections-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization\3.3\bin\Debug\HeuristicLab.Common-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization\3.3\bin\Debug\HeuristicLab.Common.Resources-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization\3.3\bin\Debug\HeuristicLab.Core-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization\3.3\bin\Debug\HeuristicLab.Data-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization\3.3\bin\Debug\HeuristicLab.Operators-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization\3.3\bin\Debug\HeuristicLab.Optimization-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization\3.3\bin\Debug\HeuristicLab.Parameters-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization\3.3\bin\Debug\HeuristicLab.Persistence-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization\3.3\bin\Debug\HeuristicLab.PluginInfrastructure-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization\3.3\bin\Debug\ICSharpCode.SharpZipLib.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization\3.3\bin\Debug\HeuristicLab.Tracing-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization\3.3\bin\Debug\log4net.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization\3.3\obj\Debug\ResolveAssemblyReference.cache
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization\3.3\obj\Debug\HeuristicLab.Problems.MetaOptimization-3.3.dll
+C:\Users\ch\my\dev\2010\HeuristicLab.MetaOptimization\HeuristicLab.Problems.MetaOptimization\3.3\obj\Debug\HeuristicLab.Problems.MetaOptimization-3.3.pdb
Index: /branches/HeuristicLab.MetaOptimization/MergeConfigs.cmd
===================================================================
--- /branches/HeuristicLab.MetaOptimization/MergeConfigs.cmd	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/MergeConfigs.cmd	(revision 4516)
@@ -0,0 +1,2 @@
+ConfigMerger "%SolutionDir%\ServiceClient.config" "C:\Program Files\HeuristicLab 3.0\HeuristicLab.exe.config"
+
Index: /branches/HeuristicLab.MetaOptimization/PreBuildEvent.cmd
===================================================================
--- /branches/HeuristicLab.MetaOptimization/PreBuildEvent.cmd	(revision 4516)
+++ /branches/HeuristicLab.MetaOptimization/PreBuildEvent.cmd	(revision 4516)
@@ -0,0 +1,1 @@
+SubWCRev "%ProjectDir%\" "%ProjectDir%\Properties\AssemblyInfo.frame" "%ProjectDir%\Properties\AssemblyInfo.cs"
