Index: trunk/sources/HeuristicLab.Core.Views/3.3/OperatorTreeView.cs
===================================================================
--- trunk/sources/HeuristicLab.Core.Views/3.3/OperatorTreeView.cs	(revision 2755)
+++ trunk/sources/HeuristicLab.Core.Views/3.3/OperatorTreeView.cs	(revision 2756)
@@ -38,5 +38,5 @@
   [Content(typeof(IOperator), false)]
   public sealed partial class OperatorTreeView : ItemView {
-    private Dictionary<IOperatorParameter, List<TreeNode>> operatorParameterNodeTable;
+    private Dictionary<IValueParameter<IOperator>, List<TreeNode>> opParamNodeTable;
     private Dictionary<IOperator, List<TreeNode>> operatorNodeTable;
     private Dictionary<IObservableKeyedCollection<string, IParameter>, IOperator> parametersOperatorTable;
@@ -58,5 +58,5 @@
       InitializeComponent();
       graphTreeView.Sorted = true;
-      operatorParameterNodeTable = new Dictionary<IOperatorParameter, List<TreeNode>>();
+      opParamNodeTable = new Dictionary<IValueParameter<IOperator>, List<TreeNode>>();
       operatorNodeTable = new Dictionary<IOperator, List<TreeNode>>();
       parametersOperatorTable = new Dictionary<IObservableKeyedCollection<string, IParameter>, IOperator>();
@@ -94,16 +94,16 @@
 
     #region TreeNode Management
-    private TreeNode CreateTreeNode(IOperatorParameter operatorParameter) {
+    private TreeNode CreateTreeNode(IValueParameter<IOperator> opParam) {
       TreeNode node = new TreeNode();
-      node.Text = operatorParameter.Name + ": ";
-      SetOperatorParameterTag(node, operatorParameter);
-
-      if (!operatorParameterNodeTable.ContainsKey(operatorParameter)) {
-        operatorParameterNodeTable.Add(operatorParameter, new List<TreeNode>());
-        operatorParameter.ValueChanged += new EventHandler(operatorParameter_ValueChanged);
-      }
-      operatorParameterNodeTable[operatorParameter].Add(node);
-
-      IOperator op = operatorParameter.Value;
+      node.Text = opParam.Name + ": ";
+      SetOperatorParameterTag(node, opParam);
+
+      if (!opParamNodeTable.ContainsKey(opParam)) {
+        opParamNodeTable.Add(opParam, new List<TreeNode>());
+        opParam.ValueChanged += new EventHandler(opParam_ValueChanged);
+      }
+      opParamNodeTable[opParam].Add(node);
+
+      IOperator op = opParam.Value;
       if (op == null)
         node.Text += "-";
@@ -139,5 +139,5 @@
 
       foreach (IParameter param in op.Parameters) {
-        if (param is IOperatorParameter)
+        if (param is IValueParameter<IOperator>)
           node.Nodes.Add(new TreeNode());
       }
@@ -167,10 +167,10 @@
       ClearTreeNode(node);
 
-      IOperatorParameter opParam = GetOperatorParameterTag(node);
+      IValueParameter<IOperator> opParam = GetOperatorParameterTag(node);
       if (opParam != null) {
-        operatorParameterNodeTable[opParam].Remove(node);
-        if (operatorParameterNodeTable[opParam].Count == 0) {
-          opParam.ValueChanged -= new EventHandler(operatorParameter_ValueChanged);
-          operatorParameterNodeTable.Remove(opParam);
+        opParamNodeTable[opParam].Remove(node);
+        if (opParamNodeTable[opParam].Count == 0) {
+          opParam.ValueChanged -= new EventHandler(opParam_ValueChanged);
+          opParamNodeTable.Remove(opParam);
         }
       }
@@ -180,5 +180,5 @@
     private void AddParameterNodes(IOperator op, IEnumerable<IParameter> parameters) {
       foreach (IParameter param in parameters) {
-        IOperatorParameter opParam = param as IOperatorParameter;
+        IValueParameter<IOperator> opParam = param as IValueParameter<IOperator>;
         if (opParam != null) {
           foreach (TreeNode node in operatorNodeTable[op])
@@ -189,8 +189,8 @@
     private void RemoveParameterNodes(IEnumerable<IParameter> parameters) {
       foreach (IParameter param in parameters) {
-        IOperatorParameter opParam = param as IOperatorParameter;
+        IValueParameter<IOperator> opParam = param as IValueParameter<IOperator>;
         if (opParam != null) {
-          while (operatorParameterNodeTable.ContainsKey(opParam))
-            RemoveTreeNode(operatorParameterNodeTable[opParam][0]);
+          while (opParamNodeTable.ContainsKey(opParam))
+            RemoveTreeNode(opParamNodeTable[opParam][0]);
         }
       }
@@ -199,12 +199,12 @@
 
     #region Parameter and Operator Events
-    private void operatorParameter_ValueChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(operatorParameter_ValueChanged), sender, e);
-      else {
-        IOperatorParameter opParam = (IOperatorParameter)sender;
-        foreach (TreeNode node in operatorParameterNodeTable[opParam].ToArray())
+    private void opParam_ValueChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(opParam_ValueChanged), sender, e);
+      else {
+        IValueParameter<IOperator> opParam = (IValueParameter<IOperator>)sender;
+        foreach (TreeNode node in opParamNodeTable[opParam].ToArray())
           ClearTreeNode(node);
-        foreach (TreeNode node in operatorParameterNodeTable[opParam]) {
+        foreach (TreeNode node in opParamNodeTable[opParam]) {
           node.Text = opParam.Name + ": ";
           if (opParam.Value == null)
@@ -221,5 +221,5 @@
         IOperator op = (IOperator)sender;
         foreach (TreeNode node in operatorNodeTable[op]) {
-          IOperatorParameter opParam = GetOperatorParameterTag(node);
+          IValueParameter<IOperator> opParam = GetOperatorParameterTag(node);
           if (opParam == null)
             node.Text = op.Name + " (" + op.ItemName + ")";
@@ -287,5 +287,5 @@
         IOperator op = GetOperatorTag(node);
         foreach (IParameter param in op.Parameters) {
-          IOperatorParameter opParam = param as IOperatorParameter;
+          IValueParameter<IOperator> opParam = param as IValueParameter<IOperator>;
           if (opParam != null) node.Nodes.Add(CreateTreeNode(opParam));
         }
@@ -299,5 +299,5 @@
     private void graphTreeView_KeyDown(object sender, KeyEventArgs e) {
       if ((e.KeyCode == Keys.Delete) && (graphTreeView.SelectedNode != null)) {
-        IOperatorParameter opParam = GetOperatorParameterTag(graphTreeView.SelectedNode);
+        IValueParameter<IOperator> opParam = GetOperatorParameterTag(graphTreeView.SelectedNode);
         if (opParam != null) opParam.Value = null;
       }
@@ -324,5 +324,5 @@
     private void graphTreeView_ItemDrag(object sender, ItemDragEventArgs e) {
       TreeNode node = (TreeNode)e.Item;
-      IOperatorParameter opParam = GetOperatorParameterTag(node);
+      IValueParameter<IOperator> opParam = GetOperatorParameterTag(node);
       IOperator op = GetOperatorTag(node);
       DataObject data = new DataObject();
@@ -357,5 +357,5 @@
         if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) op = (IOperator)op.Clone();
         TreeNode node = graphTreeView.GetNodeAt(graphTreeView.PointToClient(new Point(e.X, e.Y)));
-        IOperatorParameter opParam = GetOperatorParameterTag(node);
+        IValueParameter<IOperator> opParam = GetOperatorParameterTag(node);
         opParam.Value = op;
       }
@@ -389,19 +389,19 @@
     }
 
-    private IOperatorParameter GetOperatorParameterTag(TreeNode node) {
+    private IValueParameter<IOperator> GetOperatorParameterTag(TreeNode node) {
       if (node.Tag != null)
-        return ((Tuple<IOperatorParameter, IOperator>)node.Tag).Item1;
+        return ((Tuple<IValueParameter<IOperator>, IOperator>)node.Tag).Item1;
       else
         return null;
     }
-    private void SetOperatorParameterTag(TreeNode node, IOperatorParameter operatorParameter) {
+    private void SetOperatorParameterTag(TreeNode node, IValueParameter<IOperator> opParam) {
       if (node.Tag == null)
-        node.Tag = new Tuple<IOperatorParameter, IOperator>(operatorParameter, null);
-      else
-        ((Tuple<IOperatorParameter, IOperator>)node.Tag).Item1 = operatorParameter;
+        node.Tag = new Tuple<IValueParameter<IOperator>, IOperator>(opParam, null);
+      else
+        ((Tuple<IValueParameter<IOperator>, IOperator>)node.Tag).Item1 = opParam;
     }
     private IOperator GetOperatorTag(TreeNode node) {
       if (node.Tag != null)
-        return ((Tuple<IOperatorParameter, IOperator>)node.Tag).Item2;
+        return ((Tuple<IValueParameter<IOperator>, IOperator>)node.Tag).Item2;
       else
         return null;
@@ -409,7 +409,7 @@
     private void SetOperatorTag(TreeNode node, IOperator op) {
       if (node.Tag == null)
-        node.Tag = new Tuple<IOperatorParameter, IOperator>(null, op);
-      else
-        ((Tuple<IOperatorParameter, IOperator>)node.Tag).Item2 = op;
+        node.Tag = new Tuple<IValueParameter<IOperator>, IOperator>(null, op);
+      else
+        ((Tuple<IValueParameter<IOperator>, IOperator>)node.Tag).Item2 = op;
     }
     #endregion
Index: trunk/sources/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj
===================================================================
--- trunk/sources/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj	(revision 2755)
+++ trunk/sources/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj	(revision 2756)
@@ -104,8 +104,10 @@
     <Compile Include="ChangedEventArgs.cs" />
     <None Include="HeuristicLabCorePlugin.cs.frame" />
+    <Compile Include="Interfaces\IValueLookupParameter.cs" />
+    <Compile Include="Interfaces\IValueParameter.cs" />
+    <Compile Include="Interfaces\ILookupParameter.cs" />
     <Compile Include="ItemArray.cs" />
     <Compile Include="DeepCloneable.cs" />
     <Compile Include="Engine.cs" />
-    <Compile Include="Interfaces\IOperatorParameter.cs" />
     <Compile Include="Interfaces\IScope.cs" />
     <Compile Include="Interfaces\IVariable.cs" />
Index: trunk/sources/HeuristicLab.Core/3.3/Interfaces/ILookupParameter.cs
===================================================================
--- trunk/sources/HeuristicLab.Core/3.3/Interfaces/ILookupParameter.cs	(revision 2756)
+++ trunk/sources/HeuristicLab.Core/3.3/Interfaces/ILookupParameter.cs	(revision 2756)
@@ -0,0 +1,33 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+using System.Xml;
+
+namespace HeuristicLab.Core {
+  public interface ILookupParameter<T> : IParameter where T : class, IItem {
+    string ActualName { get; set; }
+
+    event EventHandler ActualNameChanged;
+  }
+}
Index: trunk/sources/HeuristicLab.Core/3.3/Interfaces/IOperatorParameter.cs
===================================================================
--- trunk/sources/HeuristicLab.Core/3.3/Interfaces/IOperatorParameter.cs	(revision 2755)
+++ 	(revision )
@@ -1,33 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Text;
-using System.Xml;
-
-namespace HeuristicLab.Core {
-  public interface IOperatorParameter : IParameter {
-    IOperator Value { get; set; }
-
-    event EventHandler ValueChanged;
-  }
-}
Index: trunk/sources/HeuristicLab.Core/3.3/Interfaces/IValueLookupParameter.cs
===================================================================
--- trunk/sources/HeuristicLab.Core/3.3/Interfaces/IValueLookupParameter.cs	(revision 2756)
+++ trunk/sources/HeuristicLab.Core/3.3/Interfaces/IValueLookupParameter.cs	(revision 2756)
@@ -0,0 +1,29 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+using System.Xml;
+
+namespace HeuristicLab.Core {
+  public interface IValueLookupParameter<T> : IValueParameter<T>, ILookupParameter<T> where T : class, IItem { }
+}
Index: trunk/sources/HeuristicLab.Core/3.3/Interfaces/IValueParameter.cs
===================================================================
--- trunk/sources/HeuristicLab.Core/3.3/Interfaces/IValueParameter.cs	(revision 2756)
+++ trunk/sources/HeuristicLab.Core/3.3/Interfaces/IValueParameter.cs	(revision 2756)
@@ -0,0 +1,33 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+using System.Xml;
+
+namespace HeuristicLab.Core {
+  public interface IValueParameter<T> : IParameter where T : class, IItem {
+    T Value { get; set; }
+
+    event EventHandler ValueChanged;
+  }
+}
Index: trunk/sources/HeuristicLab.Core/3.3/OperatorGraph.cs
===================================================================
--- trunk/sources/HeuristicLab.Core/3.3/OperatorGraph.cs	(revision 2755)
+++ trunk/sources/HeuristicLab.Core/3.3/OperatorGraph.cs	(revision 2756)
@@ -115,12 +115,12 @@
       var opParams = from o in Operators
                      from p in o.Parameters
-                     where p is IOperatorParameter
-                     where (((IOperatorParameter)p).Value != null) && (((IOperatorParameter)p).Value == op)
-                     select (IOperatorParameter)p;
-      foreach (IOperatorParameter opParam in opParams)
+                     where p is IValueParameter<IOperator>
+                     where (((IValueParameter<IOperator>)p).Value != null) && (((IValueParameter<IOperator>)p).Value == op)
+                     select (IValueParameter<IOperator>)p;
+      foreach (IValueParameter<IOperator> opParam in opParams)
         opParam.Value = null;
     }
     private void AddParameter(IParameter param) {
-      IOperatorParameter opParam = param as IOperatorParameter;
+      IValueParameter<IOperator> opParam = param as IValueParameter<IOperator>;
       if (opParam != null) {
         RegisterOperatorParameterEvents(opParam);
@@ -129,5 +129,5 @@
     }
     private void RemoveParameter(IParameter param) {
-      IOperatorParameter opParam = param as IOperatorParameter;
+      IValueParameter<IOperator> opParam = param as IValueParameter<IOperator>;
       if (opParam != null) {
         DeregisterOperatorParameterEvents(opParam);
@@ -163,8 +163,8 @@
       op.Parameters.CollectionReset -= new CollectionItemsChangedEventHandler<IParameter>(Parameters_CollectionReset);
     }
-    private void RegisterOperatorParameterEvents(IOperatorParameter opParam) {
+    private void RegisterOperatorParameterEvents(IValueParameter<IOperator> opParam) {
       opParam.ValueChanged += new EventHandler(opParam_ValueChanged);
     }
-    private void DeregisterOperatorParameterEvents(IOperatorParameter opParam) {
+    private void DeregisterOperatorParameterEvents(IValueParameter<IOperator> opParam) {
       opParam.ValueChanged -= new EventHandler(opParam_ValueChanged);
     }
@@ -207,5 +207,5 @@
     }
     private void opParam_ValueChanged(object sender, EventArgs e) {
-      IOperatorParameter opParam = (IOperatorParameter)sender;
+      IValueParameter<IOperator> opParam = (IValueParameter<IOperator>)sender;
       if (opParam.Value != null) Operators.Add(opParam.Value);
     }
Index: trunk/sources/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj
===================================================================
--- trunk/sources/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj	(revision 2755)
+++ trunk/sources/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj	(revision 2756)
@@ -58,4 +58,10 @@
     </Compile>
     <None Include="HeuristicLabOperatorsViewsPlugin.cs.frame" />
+    <Compile Include="MultipleSuccessorsOperatorView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="MultipleSuccessorsOperatorView.Designer.cs">
+      <DependentUpon>MultipleSuccessorsOperatorView.cs</DependentUpon>
+    </Compile>
     <Compile Include="HeuristicLabOperatorsViewsPlugin.cs" />
     <Compile Include="OperatorView.cs">
Index: trunk/sources/HeuristicLab.Operators.Views/3.3/MultipleSuccessorsOperatorView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators.Views/3.3/MultipleSuccessorsOperatorView.Designer.cs	(revision 2756)
+++ trunk/sources/HeuristicLab.Operators.Views/3.3/MultipleSuccessorsOperatorView.Designer.cs	(revision 2756)
@@ -0,0 +1,158 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Operators.Views {
+  partial class MultipleSuccessorsOperatorView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.successorsTabPage = new System.Windows.Forms.TabPage();
+      this.successorsListView = new HeuristicLab.Core.Views.OperatorListView();
+      this.parametersTabPage = new System.Windows.Forms.TabPage();
+      this.parameterCollectionView = new HeuristicLab.Core.Views.ParameterCollectionView();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.tabControl.SuspendLayout();
+      this.successorsTabPage.SuspendLayout();
+      this.parametersTabPage.SuspendLayout();
+      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(414, 20);
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.descriptionTextBox.Size = new System.Drawing.Size(414, 86);
+      // 
+      // tabControl
+      // 
+      this.tabControl.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.tabControl.Controls.Add(this.successorsTabPage);
+      this.tabControl.Controls.Add(this.parametersTabPage);
+      this.tabControl.Location = new System.Drawing.Point(0, 118);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(486, 364);
+      this.tabControl.TabIndex = 4;
+      // 
+      // successorsTabPage
+      // 
+      this.successorsTabPage.Controls.Add(this.successorsListView);
+      this.successorsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.successorsTabPage.Name = "successorsTabPage";
+      this.successorsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.successorsTabPage.Size = new System.Drawing.Size(478, 338);
+      this.successorsTabPage.TabIndex = 0;
+      this.successorsTabPage.Text = "Successors";
+      this.successorsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // successorsListView
+      // 
+      this.successorsListView.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.successorsListView.Caption = "Operator List";
+      this.successorsListView.Content = null;
+      this.successorsListView.Location = new System.Drawing.Point(6, 6);
+      this.successorsListView.Name = "successorsListView";
+      this.successorsListView.Size = new System.Drawing.Size(466, 326);
+      this.successorsListView.TabIndex = 0;
+      // 
+      // parametersTabPage
+      // 
+      this.parametersTabPage.Controls.Add(this.parameterCollectionView);
+      this.parametersTabPage.Location = new System.Drawing.Point(4, 22);
+      this.parametersTabPage.Name = "parametersTabPage";
+      this.parametersTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.parametersTabPage.Size = new System.Drawing.Size(478, 338);
+      this.parametersTabPage.TabIndex = 1;
+      this.parametersTabPage.Text = "Parameters";
+      this.parametersTabPage.UseVisualStyleBackColor = true;
+      // 
+      // parameterCollectionView
+      // 
+      this.parameterCollectionView.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.parameterCollectionView.Caption = "ParameterCollection";
+      this.parameterCollectionView.Content = null;
+      this.parameterCollectionView.Location = new System.Drawing.Point(6, 6);
+      this.parameterCollectionView.Name = "parameterCollectionView";
+      this.parameterCollectionView.Size = new System.Drawing.Size(466, 326);
+      this.parameterCollectionView.TabIndex = 0;
+      // 
+      // MultipleSuccessorsOperatorView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl);
+      this.Name = "MultipleSuccessorsOperatorView";
+      this.Size = new System.Drawing.Size(486, 482);
+      this.Controls.SetChildIndex(this.tabControl, 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.tabControl.ResumeLayout(false);
+      this.successorsTabPage.ResumeLayout(false);
+      this.parametersTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.TabControl tabControl;
+    protected System.Windows.Forms.TabPage successorsTabPage;
+    protected System.Windows.Forms.TabPage parametersTabPage;
+    private HeuristicLab.Core.Views.ParameterCollectionView parameterCollectionView;
+    private HeuristicLab.Core.Views.OperatorListView successorsListView;
+  }
+}
Index: trunk/sources/HeuristicLab.Operators.Views/3.3/MultipleSuccessorsOperatorView.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators.Views/3.3/MultipleSuccessorsOperatorView.cs	(revision 2756)
+++ trunk/sources/HeuristicLab.Operators.Views/3.3/MultipleSuccessorsOperatorView.cs	(revision 2756)
@@ -0,0 +1,72 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Operators.Views { 
+  /// <summary>
+  /// The base class for visual representations of items.
+  /// </summary>
+  [Content(typeof(MultipleSuccessorsOperator), true)]
+  public partial class MultipleSuccessorsOperatorView : NamedItemView {
+    public new MultipleSuccessorsOperator Content {
+      get { return (MultipleSuccessorsOperator)base.Content; }
+      set { base.Content = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ItemBaseView"/>.
+    /// </summary>
+    public MultipleSuccessorsOperatorView() {
+      InitializeComponent();
+    }
+    /// <summary>
+    /// Intializes a new instance of <see cref="ItemBaseView"/> with the given <paramref name="item"/>.
+    /// </summary>
+    /// <param name="item">The item that should be displayed.</param>
+    public MultipleSuccessorsOperatorView(MultipleSuccessorsOperator content)
+      : this() {
+      Content = content;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        successorsListView.Content = null;
+        parameterCollectionView.Content = null;
+        tabControl.Enabled = false;
+      } else {
+        successorsListView.Content = Content.Successors;
+        parameterCollectionView.Content = ((IOperator)Content).Parameters;
+        tabControl.Enabled = true;
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Operators/3.3/Counter.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators/3.3/Counter.cs	(revision 2755)
+++ trunk/sources/HeuristicLab.Operators/3.3/Counter.cs	(revision 2756)
@@ -36,21 +36,24 @@
   [Creatable("Test")]
   public sealed class Counter : SingleSuccessorOperator {
-    public ItemParameter<IntData> Value {
-      get { return (ItemParameter<IntData>)Parameters["Value"]; }
+    public LookupParameter<IntData> ValueParameter {
+      get { return (LookupParameter<IntData>)Parameters["Value"]; }
     }
-    public ItemParameter<IntData> Increment {
-      get { return (ItemParameter<IntData>)Parameters["Increment"]; }
+    public ValueLookupParameter<IntData> IncrementParaneter {
+      get { return (ValueLookupParameter<IntData>)Parameters["Increment"]; }
+    }
+    public IntData Increment {
+      get { return IncrementParaneter.Value; }
+      set { IncrementParaneter.Value = value; }
     }
 
     public Counter()
       : base() {
-      Parameters.Add(new ItemParameter<IntData>("Value", "The value which should be incremented."));
-      Parameters.Add(new ItemParameter<IntData>("Increment", "The increment which is added to the value.", new IntData(1)));
+      Parameters.Add(new LookupParameter<IntData>("Value", "The value which should be incremented."));
+      Parameters.Add(new ValueLookupParameter<IntData>("Increment", "The increment which is added to the value.", new IntData(1)));
     }
 
     public override ExecutionContextCollection Apply() {
-      IntData value = (IntData)Value.Value;
-      IntData increment = (IntData)Increment.Value;
-      value.Value += increment.Value;
+      if (ValueParameter.ActualValue == null) ValueParameter.ActualValue = new IntData();
+      ValueParameter.ActualValue.Value += IncrementParaneter.ActualValue.Value;
       return base.Apply();
     }
Index: trunk/sources/HeuristicLab.Operators/3.3/MultipleSuccessorsOperator.cs
===================================================================
--- trunk/sources/HeuristicLab.Operators/3.3/MultipleSuccessorsOperator.cs	(revision 2755)
+++ trunk/sources/HeuristicLab.Operators/3.3/MultipleSuccessorsOperator.cs	(revision 2756)
@@ -38,10 +38,10 @@
   [EmptyStorableClass]
   public abstract class MultipleSuccessorsOperator : Operator {
-    protected IOperatorParameter[] SuccessorParameters {
+    protected IValueParameter<IOperator>[] SuccessorParameters {
       get {
         return (from p in Parameters
-                where p is IOperatorParameter
+                where p is IValueParameter<IOperator>
                 orderby p.Name ascending
-                select (IOperatorParameter)p).ToArray();
+                select (IValueParameter<IOperator>)p).ToArray();
       }
     }
@@ -53,5 +53,5 @@
           successors = new OperatorList();
           var opParams = SuccessorParameters;
-          foreach (IOperatorParameter opParam in opParams) {
+          foreach (IValueParameter<IOperator> opParam in opParams) {
             opParam.ValueChanged += new EventHandler(opParam_ValueChanged);
             successors.Add(opParam.Value);
@@ -73,10 +73,10 @@
     private void UpdateOperatorParameters() {
       var opParams = SuccessorParameters;
-      foreach (IOperatorParameter opParam in opParams) {
+      foreach (IValueParameter<IOperator> opParam in opParams) {
         opParam.ValueChanged -= new EventHandler(opParam_ValueChanged);
         Parameters.Remove(opParam.Name);
       }
       for (int i = 0; i < Successors.Count; i++) {
-        IOperatorParameter opParam = new OperatorParameter(i.ToString(), string.Empty, Successors[i]);
+        IValueParameter<IOperator> opParam = new OperatorParameter(i.ToString(), string.Empty, Successors[i]);
         opParam.ValueChanged += new EventHandler(opParam_ValueChanged);
         Parameters.Add(opParam);
@@ -92,9 +92,9 @@
     private void successors_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOperator>> e) {
       foreach (IndexedItem<IOperator> item in e.Items)
-        ((IOperatorParameter)Parameters[item.Index.ToString()]).Value = item.Value;
+        ((IValueParameter<IOperator>)Parameters[item.Index.ToString()]).Value = item.Value;
     }
     private void successors_ItemsMoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOperator>> e) {
       foreach (IndexedItem<IOperator> item in e.Items)
-        ((IOperatorParameter)Parameters[item.Index.ToString()]).Value = item.Value;
+        ((IValueParameter<IOperator>)Parameters[item.Index.ToString()]).Value = item.Value;
     }
     private void successors_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOperator>> e) {
@@ -102,5 +102,5 @@
     }
     private void opParam_ValueChanged(object sender, EventArgs e) {
-      IOperatorParameter opParam = (IOperatorParameter)sender;
+      IValueParameter<IOperator> opParam = (IValueParameter<IOperator>)sender;
       int index = int.Parse(opParam.Name);
       successors[index] = opParam.Value;
Index: trunk/sources/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj
===================================================================
--- trunk/sources/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj	(revision 2755)
+++ trunk/sources/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj	(revision 2756)
@@ -52,23 +52,17 @@
   <ItemGroup>
     <None Include="HeuristicLabParametersViewsPlugin.cs.frame" />
-    <Compile Include="SubScopesItemParameterView.cs">
+    <Compile Include="ValueLookupParameterView.cs">
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Include="SubScopesItemParameterView.Designer.cs">
-      <DependentUpon>SubScopesItemParameterView.cs</DependentUpon>
+    <Compile Include="ValueLookupParameterView.Designer.cs">
+      <DependentUpon>ValueLookupParameterView.cs</DependentUpon>
     </Compile>
-    <Compile Include="OperatorParameterView.cs">
+    <Compile Include="LookupParameterView.cs">
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Include="OperatorParameterView.Designer.cs">
-      <DependentUpon>OperatorParameterView.cs</DependentUpon>
+    <Compile Include="LookupParameterView.Designer.cs">
+      <DependentUpon>LookupParameterView.cs</DependentUpon>
     </Compile>
     <Compile Include="HeuristicLabParametersViewsPlugin.cs" />
-    <Compile Include="ItemParameterView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="ItemParameterView.Designer.cs">
-      <DependentUpon>ItemParameterView.cs</DependentUpon>
-    </Compile>
     <Compile Include="ParameterView.cs">
       <SubType>UserControl</SubType>
@@ -78,4 +72,10 @@
     </Compile>
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ValueParameterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ValueParameterView.Designer.cs">
+      <DependentUpon>ValueParameterView.cs</DependentUpon>
+    </Compile>
   </ItemGroup>
   <ItemGroup>
Index: trunk/sources/HeuristicLab.Parameters.Views/3.3/ItemParameterView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Parameters.Views/3.3/ItemParameterView.Designer.cs	(revision 2755)
+++ 	(revision )
@@ -1,209 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Parameters.Views {
-  partial class ItemParameterView<T> {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.components = new System.ComponentModel.Container();
-      this.localValueGroupBox = new System.Windows.Forms.GroupBox();
-      this.localValuePanel = new System.Windows.Forms.Panel();
-      this.viewHost = new HeuristicLab.Core.Views.ViewHost();
-      this.clearLocalValueButton = new System.Windows.Forms.Button();
-      this.setLocalValueButton = new System.Windows.Forms.Button();
-      this.actualNameTextBox = new System.Windows.Forms.TextBox();
-      this.actualNameLabel = new System.Windows.Forms.Label();
-      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.localValueGroupBox.SuspendLayout();
-      this.localValuePanel.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // dataTypeLabel
-      // 
-      this.dataTypeLabel.Location = new System.Drawing.Point(3, 123);
-      this.dataTypeLabel.TabIndex = 6;
-      // 
-      // dataTypeTextBox
-      // 
-      this.dataTypeTextBox.Location = new System.Drawing.Point(80, 120);
-      this.dataTypeTextBox.Size = new System.Drawing.Size(306, 20);
-      this.dataTypeTextBox.TabIndex = 7;
-      // 
-      // nameTextBox
-      // 
-      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
-      this.nameTextBox.Location = new System.Drawing.Point(80, 0);
-      this.nameTextBox.Size = new System.Drawing.Size(306, 20);
-      // 
-      // descriptionLabel
-      // 
-      this.descriptionLabel.Location = new System.Drawing.Point(3, 55);
-      this.descriptionLabel.TabIndex = 4;
-      // 
-      // descriptionTextBox
-      // 
-      this.descriptionTextBox.Location = new System.Drawing.Point(80, 52);
-      this.descriptionTextBox.Size = new System.Drawing.Size(306, 62);
-      this.descriptionTextBox.TabIndex = 5;
-      // 
-      // localValueGroupBox
-      // 
-      this.localValueGroupBox.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.localValueGroupBox.Controls.Add(this.localValuePanel);
-      this.localValueGroupBox.Controls.Add(this.clearLocalValueButton);
-      this.localValueGroupBox.Controls.Add(this.setLocalValueButton);
-      this.localValueGroupBox.Location = new System.Drawing.Point(0, 146);
-      this.localValueGroupBox.Name = "localValueGroupBox";
-      this.localValueGroupBox.Size = new System.Drawing.Size(386, 169);
-      this.localValueGroupBox.TabIndex = 10;
-      this.localValueGroupBox.TabStop = false;
-      this.localValueGroupBox.Text = "Local &Value:";
-      // 
-      // localValuePanel
-      // 
-      this.localValuePanel.AllowDrop = true;
-      this.localValuePanel.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.localValuePanel.Controls.Add(this.viewHost);
-      this.localValuePanel.Location = new System.Drawing.Point(6, 48);
-      this.localValuePanel.Name = "localValuePanel";
-      this.localValuePanel.Size = new System.Drawing.Size(374, 115);
-      this.localValuePanel.TabIndex = 0;
-      this.localValuePanel.DragOver += new System.Windows.Forms.DragEventHandler(this.localValuePanel_DragEnterOver);
-      this.localValuePanel.DragDrop += new System.Windows.Forms.DragEventHandler(this.localValuePanel_DragDrop);
-      this.localValuePanel.DragEnter += new System.Windows.Forms.DragEventHandler(this.localValuePanel_DragEnterOver);
-      // 
-      // viewHost
-      // 
-      this.viewHost.Content = null;
-      this.viewHost.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.viewHost.Location = new System.Drawing.Point(0, 0);
-      this.viewHost.Name = "viewHost";
-      this.viewHost.Size = new System.Drawing.Size(374, 115);
-      this.viewHost.TabIndex = 0;
-      // 
-      // clearLocalValueButton
-      // 
-      this.clearLocalValueButton.Enabled = false;
-      this.clearLocalValueButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Remove;
-      this.clearLocalValueButton.Location = new System.Drawing.Point(35, 19);
-      this.clearLocalValueButton.Name = "clearLocalValueButton";
-      this.clearLocalValueButton.Size = new System.Drawing.Size(23, 23);
-      this.clearLocalValueButton.TabIndex = 9;
-      this.toolTip.SetToolTip(this.clearLocalValueButton, "Clear Value");
-      this.clearLocalValueButton.UseVisualStyleBackColor = true;
-      this.clearLocalValueButton.Click += new System.EventHandler(this.clearLocalValueButton_Click);
-      // 
-      // setLocalValueButton
-      // 
-      this.setLocalValueButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Add;
-      this.setLocalValueButton.Location = new System.Drawing.Point(6, 19);
-      this.setLocalValueButton.Name = "setLocalValueButton";
-      this.setLocalValueButton.Size = new System.Drawing.Size(23, 23);
-      this.setLocalValueButton.TabIndex = 8;
-      this.toolTip.SetToolTip(this.setLocalValueButton, "Set Value");
-      this.setLocalValueButton.UseVisualStyleBackColor = true;
-      this.setLocalValueButton.Click += new System.EventHandler(this.setLocalValueButton_Click);
-      // 
-      // actualNameTextBox
-      // 
-      this.actualNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.actualNameTextBox.Location = new System.Drawing.Point(80, 26);
-      this.actualNameTextBox.Name = "actualNameTextBox";
-      this.actualNameTextBox.Size = new System.Drawing.Size(306, 20);
-      this.actualNameTextBox.TabIndex = 3;
-      this.actualNameTextBox.Validated += new System.EventHandler(this.actualNameTextBox_Validated);
-      // 
-      // actualNameLabel
-      // 
-      this.actualNameLabel.AutoSize = true;
-      this.actualNameLabel.Location = new System.Drawing.Point(3, 29);
-      this.actualNameLabel.Name = "actualNameLabel";
-      this.actualNameLabel.Size = new System.Drawing.Size(71, 13);
-      this.actualNameLabel.TabIndex = 2;
-      this.actualNameLabel.Text = "&Actual Name:";
-      // 
-      // ItemParameterView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.localValueGroupBox);
-      this.Controls.Add(this.actualNameTextBox);
-      this.Controls.Add(this.actualNameLabel);
-      this.Name = "ItemParameterView";
-      this.Size = new System.Drawing.Size(386, 315);
-      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
-      this.Controls.SetChildIndex(this.descriptionLabel, 0);
-      this.Controls.SetChildIndex(this.dataTypeTextBox, 0);
-      this.Controls.SetChildIndex(this.actualNameLabel, 0);
-      this.Controls.SetChildIndex(this.dataTypeLabel, 0);
-      this.Controls.SetChildIndex(this.nameTextBox, 0);
-      this.Controls.SetChildIndex(this.actualNameTextBox, 0);
-      this.Controls.SetChildIndex(this.nameLabel, 0);
-      this.Controls.SetChildIndex(this.localValueGroupBox, 0);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.localValueGroupBox.ResumeLayout(false);
-      this.localValuePanel.ResumeLayout(false);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    protected System.Windows.Forms.GroupBox localValueGroupBox;
-    protected System.Windows.Forms.TextBox actualNameTextBox;
-    protected System.Windows.Forms.Label actualNameLabel;
-    protected System.Windows.Forms.Panel localValuePanel;
-    protected HeuristicLab.Core.Views.ViewHost viewHost;
-    protected System.Windows.Forms.Button setLocalValueButton;
-    protected System.Windows.Forms.ToolTip toolTip;
-    protected System.Windows.Forms.Button clearLocalValueButton;
-  }
-}
Index: trunk/sources/HeuristicLab.Parameters.Views/3.3/ItemParameterView.cs
===================================================================
--- trunk/sources/HeuristicLab.Parameters.Views/3.3/ItemParameterView.cs	(revision 2755)
+++ 	(revision )
@@ -1,160 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.Core;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.Parameters.Views {
-  /// <summary>
-  /// The visual representation of a <see cref="Parameter"/>.
-  /// </summary>
-  [Content(typeof(ItemParameter<>), true)]
-  public partial class ItemParameterView<T> : ParameterView where T : class, IItem {
-    protected TypeSelectorDialog typeSelectorDialog;
-
-    /// <summary>
-    /// Gets or sets the variable to represent visually.
-    /// </summary>
-    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
-    /// No own data storage present.</remarks>
-    public new ItemParameter<T> Content {
-      get { return (ItemParameter<T>)base.Content; }
-      set { base.Content = value; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="VariableView"/> with caption "Variable".
-    /// </summary>
-    public ItemParameterView() {
-      InitializeComponent();
-      Caption = "ItemParameter";
-    }
-    /// <summary>
-    /// Initializes a new instance of <see cref="VariableView"/> with the given <paramref name="variable"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="VariableView()"/>.</remarks>
-    /// <param name="variable">The variable to represent visually.</param>
-    public ItemParameterView(ItemParameter<T> content)
-      : this() {
-      Content = content;
-    }
-
-    /// <summary>
-    /// Removes the eventhandlers from the underlying <see cref="IVariable"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void DeregisterContentEvents() {
-      Content.ActualNameChanged -= new EventHandler(Content_ActualNameChanged);
-      Content.LocalValueChanged -= new EventHandler(Content_LocalValueChanged);
-      base.DeregisterContentEvents();
-    }
-
-    /// <summary>
-    /// Adds eventhandlers to the underlying <see cref="IVariable"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.ActualNameChanged += new EventHandler(Content_ActualNameChanged);
-      Content.LocalValueChanged += new EventHandler(Content_LocalValueChanged);
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      if (Content == null) {
-        Caption = "ItemParameter";
-        actualNameTextBox.Text = "-";
-        actualNameTextBox.Enabled = false;
-        setLocalValueButton.Enabled = false;
-        clearLocalValueButton.Enabled = false;
-        localValueGroupBox.Enabled = false;
-        viewHost.Content = null;
-      } else {
-        Caption = Content.Name + " (" + Content.GetType().Name + ")";
-        actualNameTextBox.Text = Content.ActualName;
-        actualNameTextBox.Enabled = Content.LocalValue == null;
-        setLocalValueButton.Enabled = Content.LocalValue == null;
-        clearLocalValueButton.Enabled = Content.LocalValue != null;
-        localValueGroupBox.Enabled = true;
-        viewHost.Content = Content.LocalValue;
-      }
-    }
-
-    protected virtual void Content_ActualNameChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_ActualNameChanged), sender, e);
-      else
-        actualNameTextBox.Text = Content.ActualName;
-    }
-    protected virtual void Content_LocalValueChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_LocalValueChanged), sender, e);
-      else {
-        actualNameTextBox.Enabled = Content.LocalValue == null;
-        setLocalValueButton.Enabled = Content.LocalValue == null;
-        clearLocalValueButton.Enabled = Content.LocalValue != null;
-        viewHost.Content = Content.LocalValue;
-      }
-    }
-
-    protected virtual void actualNameTextBox_Validated(object sender, EventArgs e) {
-      Content.ActualName = actualNameTextBox.Text;
-    }
-    protected virtual void setLocalValueButton_Click(object sender, EventArgs e) {
-      if (typeSelectorDialog == null) {
-        typeSelectorDialog = new TypeSelectorDialog();
-        typeSelectorDialog.Caption = "Select Local Value Type";
-      }
-      typeSelectorDialog.TypeSelector.Configure(Content.DataType, false, false);
-      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK)
-        Content.LocalValue = (T)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
-    }
-    protected virtual void clearLocalValueButton_Click(object sender, EventArgs e) {
-      Content.LocalValue = null;
-    }
-    protected virtual void localValuePanel_DragEnterOver(object sender, DragEventArgs e) {
-      e.Effect = DragDropEffects.None;
-      Type type = e.Data.GetData("Type") as Type;
-      if ((type != null) && (Content.DataType.IsAssignableFrom(type))) {
-        if ((e.KeyState & 8) == 8) e.Effect = DragDropEffects.Copy;  // CTRL key
-        else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move;  // SHIFT key
-        else if ((e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link) e.Effect = DragDropEffects.Link;
-        else if ((e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy) e.Effect = DragDropEffects.Copy;
-        else if ((e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move) e.Effect = DragDropEffects.Move;
-      }
-    }
-    protected virtual void localValuePanel_DragDrop(object sender, DragEventArgs e) {
-      if (e.Effect != DragDropEffects.None) {
-        T item = e.Data.GetData("Value") as T;
-        if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) item = (T)item.Clone();
-        Content.LocalValue = item;
-      }
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.Parameters.Views/3.3/LookupParameterView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Parameters.Views/3.3/LookupParameterView.Designer.cs	(revision 2756)
+++ trunk/sources/HeuristicLab.Parameters.Views/3.3/LookupParameterView.Designer.cs	(revision 2756)
@@ -0,0 +1,127 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Parameters.Views {
+  partial class LookupParameterView<T> {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.actualNameTextBox = new System.Windows.Forms.TextBox();
+      this.actualNameLabel = new System.Windows.Forms.Label();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // dataTypeLabel
+      // 
+      this.dataTypeLabel.Location = new System.Drawing.Point(3, 123);
+      this.dataTypeLabel.TabIndex = 6;
+      // 
+      // dataTypeTextBox
+      // 
+      this.dataTypeTextBox.Location = new System.Drawing.Point(80, 120);
+      this.dataTypeTextBox.Size = new System.Drawing.Size(306, 20);
+      this.dataTypeTextBox.TabIndex = 7;
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      this.nameTextBox.Location = new System.Drawing.Point(80, 0);
+      this.nameTextBox.Size = new System.Drawing.Size(306, 20);
+      // 
+      // descriptionLabel
+      // 
+      this.descriptionLabel.Location = new System.Drawing.Point(3, 55);
+      this.descriptionLabel.TabIndex = 4;
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Location = new System.Drawing.Point(80, 52);
+      this.descriptionTextBox.Size = new System.Drawing.Size(306, 62);
+      this.descriptionTextBox.TabIndex = 5;
+      // 
+      // actualNameTextBox
+      // 
+      this.actualNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.actualNameTextBox.Location = new System.Drawing.Point(80, 26);
+      this.actualNameTextBox.Name = "actualNameTextBox";
+      this.actualNameTextBox.Size = new System.Drawing.Size(306, 20);
+      this.actualNameTextBox.TabIndex = 3;
+      this.actualNameTextBox.Validated += new System.EventHandler(this.actualNameTextBox_Validated);
+      // 
+      // actualNameLabel
+      // 
+      this.actualNameLabel.AutoSize = true;
+      this.actualNameLabel.Location = new System.Drawing.Point(3, 29);
+      this.actualNameLabel.Name = "actualNameLabel";
+      this.actualNameLabel.Size = new System.Drawing.Size(71, 13);
+      this.actualNameLabel.TabIndex = 2;
+      this.actualNameLabel.Text = "&Actual Name:";
+      // 
+      // LookupParameterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.actualNameTextBox);
+      this.Controls.Add(this.actualNameLabel);
+      this.Name = "LookupParameterView";
+      this.Size = new System.Drawing.Size(386, 143);
+      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
+      this.Controls.SetChildIndex(this.descriptionLabel, 0);
+      this.Controls.SetChildIndex(this.dataTypeTextBox, 0);
+      this.Controls.SetChildIndex(this.actualNameLabel, 0);
+      this.Controls.SetChildIndex(this.dataTypeLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.actualNameTextBox, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.TextBox actualNameTextBox;
+    protected System.Windows.Forms.Label actualNameLabel;
+  }
+}
Index: trunk/sources/HeuristicLab.Parameters.Views/3.3/LookupParameterView.cs
===================================================================
--- trunk/sources/HeuristicLab.Parameters.Views/3.3/LookupParameterView.cs	(revision 2756)
+++ trunk/sources/HeuristicLab.Parameters.Views/3.3/LookupParameterView.cs	(revision 2756)
@@ -0,0 +1,110 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Parameters.Views {
+  /// <summary>
+  /// The visual representation of a <see cref="Parameter"/>.
+  /// </summary>
+  [Content(typeof(LookupParameter<>), true)]
+  [Content(typeof(SubScopesLookupParameter<>), true)]
+  [Content(typeof(ILookupParameter<>), false)]
+  public partial class LookupParameterView<T> : ParameterView where T : class, IItem {
+    /// <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 ILookupParameter<T> Content {
+      get { return (ILookupParameter<T>)base.Content; }
+      set { base.Content = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableView"/> with caption "Variable".
+    /// </summary>
+    public LookupParameterView() {
+      InitializeComponent();
+      Caption = "LookupParameter";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableView"/> with the given <paramref name="variable"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="VariableView()"/>.</remarks>
+    /// <param name="variable">The variable to represent visually.</param>
+    public LookupParameterView(ILookupParameter<T> content)
+      : this() {
+      Content = content;
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the underlying <see cref="IVariable"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void DeregisterContentEvents() {
+      Content.ActualNameChanged -= new EventHandler(Content_ActualNameChanged);
+      base.DeregisterContentEvents();
+    }
+
+    /// <summary>
+    /// Adds eventhandlers to the underlying <see cref="IVariable"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ActualNameChanged += new EventHandler(Content_ActualNameChanged);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        Caption = "LookupParameter";
+        actualNameTextBox.Text = "-";
+        actualNameTextBox.Enabled = false;
+      } else {
+        Caption = Content.Name + " (" + Content.GetType().Name + ")";
+        actualNameTextBox.Text = Content.ActualName;
+        actualNameTextBox.Enabled = true;
+      }
+    }
+
+    protected virtual void Content_ActualNameChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ActualNameChanged), sender, e);
+      else
+        actualNameTextBox.Text = Content.ActualName;
+    }
+
+    protected virtual void actualNameTextBox_Validated(object sender, EventArgs e) {
+      Content.ActualName = actualNameTextBox.Text;
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Parameters.Views/3.3/OperatorParameterView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Parameters.Views/3.3/OperatorParameterView.Designer.cs	(revision 2755)
+++ 	(revision )
@@ -1,180 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Parameters.Views {
-  partial class OperatorParameterView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.components = new System.ComponentModel.Container();
-      this.valueGroupBox = new System.Windows.Forms.GroupBox();
-      this.valuePanel = new System.Windows.Forms.Panel();
-      this.viewHost = new HeuristicLab.Core.Views.ViewHost();
-      this.clearValueButton = new System.Windows.Forms.Button();
-      this.setValueButton = new System.Windows.Forms.Button();
-      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.valueGroupBox.SuspendLayout();
-      this.valuePanel.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // dataTypeLabel
-      // 
-      this.dataTypeLabel.TabIndex = 6;
-      // 
-      // dataTypeTextBox
-      // 
-      this.dataTypeTextBox.Location = new System.Drawing.Point(80, 94);
-      this.dataTypeTextBox.Size = new System.Drawing.Size(306, 20);
-      this.dataTypeTextBox.TabIndex = 7;
-      // 
-      // nameTextBox
-      // 
-      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
-      this.nameTextBox.Location = new System.Drawing.Point(80, 0);
-      this.nameTextBox.Size = new System.Drawing.Size(306, 20);
-      // 
-      // descriptionLabel
-      // 
-      this.descriptionLabel.TabIndex = 4;
-      // 
-      // descriptionTextBox
-      // 
-      this.descriptionTextBox.Location = new System.Drawing.Point(80, 26);
-      this.descriptionTextBox.Size = new System.Drawing.Size(306, 62);
-      this.descriptionTextBox.TabIndex = 5;
-      // 
-      // valueGroupBox
-      // 
-      this.valueGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.valueGroupBox.Controls.Add(this.valuePanel);
-      this.valueGroupBox.Controls.Add(this.clearValueButton);
-      this.valueGroupBox.Controls.Add(this.setValueButton);
-      this.valueGroupBox.Location = new System.Drawing.Point(0, 120);
-      this.valueGroupBox.Name = "valueGroupBox";
-      this.valueGroupBox.Size = new System.Drawing.Size(386, 195);
-      this.valueGroupBox.TabIndex = 10;
-      this.valueGroupBox.TabStop = false;
-      this.valueGroupBox.Text = "&Value:";
-      // 
-      // valuePanel
-      // 
-      this.valuePanel.AllowDrop = true;
-      this.valuePanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.valuePanel.Controls.Add(this.viewHost);
-      this.valuePanel.Location = new System.Drawing.Point(6, 48);
-      this.valuePanel.Name = "valuePanel";
-      this.valuePanel.Size = new System.Drawing.Size(374, 141);
-      this.valuePanel.TabIndex = 0;
-      this.valuePanel.DragOver += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragEnterOver);
-      this.valuePanel.DragDrop += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragDrop);
-      this.valuePanel.DragEnter += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragEnterOver);
-      // 
-      // viewHost
-      // 
-      this.viewHost.Content = null;
-      this.viewHost.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.viewHost.Location = new System.Drawing.Point(0, 0);
-      this.viewHost.Name = "viewHost";
-      this.viewHost.Size = new System.Drawing.Size(374, 141);
-      this.viewHost.TabIndex = 0;
-      // 
-      // clearValueButton
-      // 
-      this.clearValueButton.Enabled = false;
-      this.clearValueButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Remove;
-      this.clearValueButton.Location = new System.Drawing.Point(35, 19);
-      this.clearValueButton.Name = "clearValueButton";
-      this.clearValueButton.Size = new System.Drawing.Size(23, 23);
-      this.clearValueButton.TabIndex = 9;
-      this.toolTip.SetToolTip(this.clearValueButton, "Clear Value");
-      this.clearValueButton.UseVisualStyleBackColor = true;
-      this.clearValueButton.Click += new System.EventHandler(this.clearValueButton_Click);
-      // 
-      // setValueButton
-      // 
-      this.setValueButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Add;
-      this.setValueButton.Location = new System.Drawing.Point(6, 19);
-      this.setValueButton.Name = "setValueButton";
-      this.setValueButton.Size = new System.Drawing.Size(23, 23);
-      this.setValueButton.TabIndex = 8;
-      this.toolTip.SetToolTip(this.setValueButton, "Set Value");
-      this.setValueButton.UseVisualStyleBackColor = true;
-      this.setValueButton.Click += new System.EventHandler(this.setValueButton_Click);
-      // 
-      // OperatorParameterView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.valueGroupBox);
-      this.Name = "OperatorParameterView";
-      this.Size = new System.Drawing.Size(386, 315);
-      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
-      this.Controls.SetChildIndex(this.descriptionLabel, 0);
-      this.Controls.SetChildIndex(this.dataTypeTextBox, 0);
-      this.Controls.SetChildIndex(this.dataTypeLabel, 0);
-      this.Controls.SetChildIndex(this.nameTextBox, 0);
-      this.Controls.SetChildIndex(this.nameLabel, 0);
-      this.Controls.SetChildIndex(this.valueGroupBox, 0);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.valueGroupBox.ResumeLayout(false);
-      this.valuePanel.ResumeLayout(false);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    protected System.Windows.Forms.GroupBox valueGroupBox;
-    protected System.Windows.Forms.Panel valuePanel;
-    protected HeuristicLab.Core.Views.ViewHost viewHost;
-    protected System.Windows.Forms.Button setValueButton;
-    protected System.Windows.Forms.ToolTip toolTip;
-    protected System.Windows.Forms.Button clearValueButton;
-  }
-}
Index: trunk/sources/HeuristicLab.Parameters.Views/3.3/OperatorParameterView.cs
===================================================================
--- trunk/sources/HeuristicLab.Parameters.Views/3.3/OperatorParameterView.cs	(revision 2755)
+++ 	(revision )
@@ -1,145 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.Core;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.Parameters.Views {
-  /// <summary>
-  /// The visual representation of a <see cref="Parameter"/>.
-  /// </summary>
-  [Content(typeof(OperatorParameter), true)]
-  [Content(typeof(IOperatorParameter), false)]
-  public partial class OperatorParameterView : ParameterView {
-    protected TypeSelectorDialog typeSelectorDialog;
-
-    /// <summary>
-    /// Gets or sets the variable to represent visually.
-    /// </summary>
-    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
-    /// No own data storage present.</remarks>
-    public new IOperatorParameter Content {
-      get { return (IOperatorParameter)base.Content; }
-      set { base.Content = value; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="VariableView"/> with caption "Variable".
-    /// </summary>
-    public OperatorParameterView() {
-      InitializeComponent();
-      Caption = "OperatorParameter";
-    }
-    /// <summary>
-    /// Initializes a new instance of <see cref="VariableView"/> with the given <paramref name="variable"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="VariableView()"/>.</remarks>
-    /// <param name="variable">The variable to represent visually.</param>
-    public OperatorParameterView(IOperatorParameter content)
-      : this() {
-      Content = content;
-    }
-
-    /// <summary>
-    /// Removes the eventhandlers from the underlying <see cref="IVariable"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void DeregisterContentEvents() {
-      Content.ValueChanged -= new EventHandler(Content_ValueChanged);
-      base.DeregisterContentEvents();
-    }
-
-    /// <summary>
-    /// Adds eventhandlers to the underlying <see cref="IVariable"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.ValueChanged += new EventHandler(Content_ValueChanged);
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      if (Content == null) {
-        Caption = "OperatorParameter";
-        setValueButton.Enabled = false;
-        clearValueButton.Enabled = false;
-        valueGroupBox.Enabled = false;
-        viewHost.Content = null;
-      } else {
-        Caption = Content.Name + " (" + Content.GetType().Name + ")";
-        setValueButton.Enabled = Content.Value == null;
-        clearValueButton.Enabled = Content.Value != null;
-        valueGroupBox.Enabled = true;
-        viewHost.Content = Content.Value;
-      }
-    }
-
-    protected virtual void Content_ValueChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_ValueChanged), sender, e);
-      else {
-        setValueButton.Enabled = Content.Value == null;
-        clearValueButton.Enabled = Content.Value != null;
-        viewHost.Content = Content.Value;
-      }
-    }
-
-    protected virtual void setValueButton_Click(object sender, EventArgs e) {
-      if (typeSelectorDialog == null) {
-        typeSelectorDialog = new TypeSelectorDialog();
-        typeSelectorDialog.Caption = "Select Operator";
-        typeSelectorDialog.TypeSelector.Configure(Content.DataType, false, false);
-      }
-      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK)
-        Content.Value = (IOperator)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
-    }
-    protected virtual void clearValueButton_Click(object sender, EventArgs e) {
-      Content.Value = null;
-    }
-    protected virtual void valuePanel_DragEnterOver(object sender, DragEventArgs e) {
-      e.Effect = DragDropEffects.None;
-      Type type = e.Data.GetData("Type") as Type;
-      if ((type != null) && (Content.DataType.IsAssignableFrom(type))) {
-        if ((e.KeyState & 8) == 8) e.Effect = DragDropEffects.Copy;  // CTRL key
-        else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move;  // SHIFT key
-        else if ((e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link) e.Effect = DragDropEffects.Link;
-        else if ((e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy) e.Effect = DragDropEffects.Copy;
-        else if ((e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move) e.Effect = DragDropEffects.Move;
-      }
-    }
-    protected virtual void valuePanel_DragDrop(object sender, DragEventArgs e) {
-      if (e.Effect != DragDropEffects.None) {
-        IOperator value = e.Data.GetData("Value") as IOperator;
-        if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) value = (IOperator)value.Clone();
-        Content.Value = value;
-      }
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.Parameters.Views/3.3/SubScopesItemParameterView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Parameters.Views/3.3/SubScopesItemParameterView.Designer.cs	(revision 2755)
+++ 	(revision )
@@ -1,131 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Parameters.Views {
-  partial class SubScopesItemParameterView<T> {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.components = new System.ComponentModel.Container();
-      this.actualNameTextBox = new System.Windows.Forms.TextBox();
-      this.actualNameLabel = new System.Windows.Forms.Label();
-      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.SuspendLayout();
-      // 
-      // dataTypeLabel
-      // 
-      this.dataTypeLabel.Location = new System.Drawing.Point(3, 123);
-      this.dataTypeLabel.TabIndex = 6;
-      // 
-      // dataTypeTextBox
-      // 
-      this.dataTypeTextBox.Location = new System.Drawing.Point(80, 120);
-      this.dataTypeTextBox.Size = new System.Drawing.Size(306, 20);
-      this.dataTypeTextBox.TabIndex = 7;
-      // 
-      // nameTextBox
-      // 
-      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
-      this.nameTextBox.Location = new System.Drawing.Point(80, 0);
-      this.nameTextBox.Size = new System.Drawing.Size(306, 20);
-      // 
-      // descriptionLabel
-      // 
-      this.descriptionLabel.Location = new System.Drawing.Point(3, 55);
-      this.descriptionLabel.TabIndex = 4;
-      // 
-      // descriptionTextBox
-      // 
-      this.descriptionTextBox.Location = new System.Drawing.Point(80, 52);
-      this.descriptionTextBox.Size = new System.Drawing.Size(306, 62);
-      this.descriptionTextBox.TabIndex = 5;
-      // 
-      // actualNameTextBox
-      // 
-      this.actualNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.actualNameTextBox.Location = new System.Drawing.Point(80, 26);
-      this.actualNameTextBox.Name = "actualNameTextBox";
-      this.actualNameTextBox.Size = new System.Drawing.Size(306, 20);
-      this.actualNameTextBox.TabIndex = 3;
-      this.actualNameTextBox.Validated += new System.EventHandler(this.actualNameTextBox_Validated);
-      // 
-      // actualNameLabel
-      // 
-      this.actualNameLabel.AutoSize = true;
-      this.actualNameLabel.Location = new System.Drawing.Point(3, 29);
-      this.actualNameLabel.Name = "actualNameLabel";
-      this.actualNameLabel.Size = new System.Drawing.Size(71, 13);
-      this.actualNameLabel.TabIndex = 2;
-      this.actualNameLabel.Text = "&Actual Name:";
-      // 
-      // SubScopesItemParameterView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.actualNameTextBox);
-      this.Controls.Add(this.actualNameLabel);
-      this.Name = "SubScopesItemParameterView";
-      this.Size = new System.Drawing.Size(386, 143);
-      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
-      this.Controls.SetChildIndex(this.descriptionLabel, 0);
-      this.Controls.SetChildIndex(this.dataTypeTextBox, 0);
-      this.Controls.SetChildIndex(this.actualNameLabel, 0);
-      this.Controls.SetChildIndex(this.dataTypeLabel, 0);
-      this.Controls.SetChildIndex(this.nameTextBox, 0);
-      this.Controls.SetChildIndex(this.actualNameTextBox, 0);
-      this.Controls.SetChildIndex(this.nameLabel, 0);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    protected System.Windows.Forms.TextBox actualNameTextBox;
-    protected System.Windows.Forms.Label actualNameLabel;
-    protected System.Windows.Forms.ToolTip toolTip;
-  }
-}
Index: trunk/sources/HeuristicLab.Parameters.Views/3.3/SubScopesItemParameterView.cs
===================================================================
--- trunk/sources/HeuristicLab.Parameters.Views/3.3/SubScopesItemParameterView.cs	(revision 2755)
+++ 	(revision )
@@ -1,110 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.Core;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.Parameters.Views {
-  /// <summary>
-  /// The visual representation of a <see cref="Parameter"/>.
-  /// </summary>
-  [Content(typeof(SubScopesItemParameter<>), true)]
-  public partial class SubScopesItemParameterView<T> : ParameterView where T : class, IItem {
-    protected TypeSelectorDialog typeSelectorDialog;
-
-    /// <summary>
-    /// Gets or sets the variable to represent visually.
-    /// </summary>
-    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
-    /// No own data storage present.</remarks>
-    public new SubScopesItemParameter<T> Content {
-      get { return (SubScopesItemParameter<T>)base.Content; }
-      set { base.Content = value; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="VariableView"/> with caption "Variable".
-    /// </summary>
-    public SubScopesItemParameterView() {
-      InitializeComponent();
-      Caption = "SubScopesItemParameter";
-    }
-    /// <summary>
-    /// Initializes a new instance of <see cref="VariableView"/> with the given <paramref name="variable"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="VariableView()"/>.</remarks>
-    /// <param name="variable">The variable to represent visually.</param>
-    public SubScopesItemParameterView(SubScopesItemParameter<T> content)
-      : this() {
-      Content = content;
-    }
-
-    /// <summary>
-    /// Removes the eventhandlers from the underlying <see cref="IVariable"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void DeregisterContentEvents() {
-      Content.ActualNameChanged -= new EventHandler(Content_ActualNameChanged);
-      base.DeregisterContentEvents();
-    }
-
-    /// <summary>
-    /// Adds eventhandlers to the underlying <see cref="IVariable"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.ActualNameChanged += new EventHandler(Content_ActualNameChanged);
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      if (Content == null) {
-        Caption = "SubScopesItemParameter";
-        actualNameTextBox.Text = "-";
-        actualNameTextBox.Enabled = false;
-      } else {
-        Caption = Content.Name + " (" + Content.GetType().Name + ")";
-        actualNameTextBox.Text = Content.ActualName;
-        actualNameTextBox.Enabled = true;
-      }
-    }
-
-    protected virtual void Content_ActualNameChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_ActualNameChanged), sender, e);
-      else
-        actualNameTextBox.Text = Content.ActualName;
-    }
-
-    protected virtual void actualNameTextBox_Validated(object sender, EventArgs e) {
-      Content.ActualName = actualNameTextBox.Text;
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueLookupParameterView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueLookupParameterView.Designer.cs	(revision 2756)
+++ trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueLookupParameterView.Designer.cs	(revision 2756)
@@ -0,0 +1,209 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Parameters.Views {
+  partial class ValueLookupParameterView<T> {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      this.valueGroupBox = new System.Windows.Forms.GroupBox();
+      this.valuePanel = new System.Windows.Forms.Panel();
+      this.viewHost = new HeuristicLab.Core.Views.ViewHost();
+      this.clearValueButton = new System.Windows.Forms.Button();
+      this.setValueButton = new System.Windows.Forms.Button();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.actualNameTextBox = new System.Windows.Forms.TextBox();
+      this.actualNameLabel = new System.Windows.Forms.Label();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.valueGroupBox.SuspendLayout();
+      this.valuePanel.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // dataTypeLabel
+      // 
+      this.dataTypeLabel.Location = new System.Drawing.Point(3, 123);
+      this.dataTypeLabel.TabIndex = 6;
+      // 
+      // dataTypeTextBox
+      // 
+      this.dataTypeTextBox.Location = new System.Drawing.Point(80, 120);
+      this.dataTypeTextBox.Size = new System.Drawing.Size(306, 20);
+      this.dataTypeTextBox.TabIndex = 7;
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      this.nameTextBox.Location = new System.Drawing.Point(80, 0);
+      this.nameTextBox.Size = new System.Drawing.Size(306, 20);
+      // 
+      // descriptionLabel
+      // 
+      this.descriptionLabel.Location = new System.Drawing.Point(3, 55);
+      this.descriptionLabel.TabIndex = 4;
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Location = new System.Drawing.Point(80, 52);
+      this.descriptionTextBox.Size = new System.Drawing.Size(306, 62);
+      this.descriptionTextBox.TabIndex = 5;
+      // 
+      // valueGroupBox
+      // 
+      this.valueGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.valueGroupBox.Controls.Add(this.valuePanel);
+      this.valueGroupBox.Controls.Add(this.clearValueButton);
+      this.valueGroupBox.Controls.Add(this.setValueButton);
+      this.valueGroupBox.Location = new System.Drawing.Point(0, 146);
+      this.valueGroupBox.Name = "valueGroupBox";
+      this.valueGroupBox.Size = new System.Drawing.Size(386, 169);
+      this.valueGroupBox.TabIndex = 8;
+      this.valueGroupBox.TabStop = false;
+      this.valueGroupBox.Text = "&Value:";
+      // 
+      // valuePanel
+      // 
+      this.valuePanel.AllowDrop = true;
+      this.valuePanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.valuePanel.Controls.Add(this.viewHost);
+      this.valuePanel.Location = new System.Drawing.Point(6, 48);
+      this.valuePanel.Name = "valuePanel";
+      this.valuePanel.Size = new System.Drawing.Size(374, 115);
+      this.valuePanel.TabIndex = 0;
+      this.valuePanel.DragOver += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragEnterOver);
+      this.valuePanel.DragDrop += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragDrop);
+      this.valuePanel.DragEnter += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragEnterOver);
+      // 
+      // viewHost
+      // 
+      this.viewHost.Content = null;
+      this.viewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.viewHost.Location = new System.Drawing.Point(0, 0);
+      this.viewHost.Name = "viewHost";
+      this.viewHost.Size = new System.Drawing.Size(374, 115);
+      this.viewHost.TabIndex = 0;
+      // 
+      // clearValueButton
+      // 
+      this.clearValueButton.Enabled = false;
+      this.clearValueButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Remove;
+      this.clearValueButton.Location = new System.Drawing.Point(35, 19);
+      this.clearValueButton.Name = "clearValueButton";
+      this.clearValueButton.Size = new System.Drawing.Size(23, 23);
+      this.clearValueButton.TabIndex = 1;
+      this.toolTip.SetToolTip(this.clearValueButton, "Clear Value");
+      this.clearValueButton.UseVisualStyleBackColor = true;
+      this.clearValueButton.Click += new System.EventHandler(this.clearValueButton_Click);
+      // 
+      // setValueButton
+      // 
+      this.setValueButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Add;
+      this.setValueButton.Location = new System.Drawing.Point(6, 19);
+      this.setValueButton.Name = "setValueButton";
+      this.setValueButton.Size = new System.Drawing.Size(23, 23);
+      this.setValueButton.TabIndex = 0;
+      this.toolTip.SetToolTip(this.setValueButton, "Set Value");
+      this.setValueButton.UseVisualStyleBackColor = true;
+      this.setValueButton.Click += new System.EventHandler(this.setValueButton_Click);
+      // 
+      // actualNameTextBox
+      // 
+      this.actualNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.actualNameTextBox.Location = new System.Drawing.Point(80, 26);
+      this.actualNameTextBox.Name = "actualNameTextBox";
+      this.actualNameTextBox.Size = new System.Drawing.Size(306, 20);
+      this.actualNameTextBox.TabIndex = 3;
+      this.actualNameTextBox.Validated += new System.EventHandler(this.actualNameTextBox_Validated);
+      // 
+      // actualNameLabel
+      // 
+      this.actualNameLabel.AutoSize = true;
+      this.actualNameLabel.Location = new System.Drawing.Point(3, 29);
+      this.actualNameLabel.Name = "actualNameLabel";
+      this.actualNameLabel.Size = new System.Drawing.Size(71, 13);
+      this.actualNameLabel.TabIndex = 2;
+      this.actualNameLabel.Text = "&Actual Name:";
+      // 
+      // ValueLookupParameterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.actualNameTextBox);
+      this.Controls.Add(this.actualNameLabel);
+      this.Controls.Add(this.valueGroupBox);
+      this.Name = "ValueLookupParameterView";
+      this.Size = new System.Drawing.Size(386, 315);
+      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
+      this.Controls.SetChildIndex(this.descriptionLabel, 0);
+      this.Controls.SetChildIndex(this.dataTypeTextBox, 0);
+      this.Controls.SetChildIndex(this.dataTypeLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.valueGroupBox, 0);
+      this.Controls.SetChildIndex(this.actualNameLabel, 0);
+      this.Controls.SetChildIndex(this.actualNameTextBox, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.valueGroupBox.ResumeLayout(false);
+      this.valuePanel.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.GroupBox valueGroupBox;
+    protected System.Windows.Forms.Panel valuePanel;
+    protected HeuristicLab.Core.Views.ViewHost viewHost;
+    protected System.Windows.Forms.Button setValueButton;
+    protected System.Windows.Forms.ToolTip toolTip;
+    protected System.Windows.Forms.Button clearValueButton;
+    protected System.Windows.Forms.TextBox actualNameTextBox;
+    protected System.Windows.Forms.Label actualNameLabel;
+  }
+}
Index: trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueLookupParameterView.cs
===================================================================
--- trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueLookupParameterView.cs	(revision 2756)
+++ trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueLookupParameterView.cs	(revision 2756)
@@ -0,0 +1,160 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Parameters.Views {
+  /// <summary>
+  /// The visual representation of a <see cref="Parameter"/>.
+  /// </summary>
+  [Content(typeof(ValueLookupParameter<>), true)]
+  [Content(typeof(IValueLookupParameter<>), false)]
+  public partial class ValueLookupParameterView<T> : ParameterView where T : class, IItem {
+    protected TypeSelectorDialog typeSelectorDialog;
+
+    /// <summary>
+    /// Gets or sets the variable to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public new IValueLookupParameter<T> Content {
+      get { return (IValueLookupParameter<T>)base.Content; }
+      set { base.Content = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableView"/> with caption "Variable".
+    /// </summary>
+    public ValueLookupParameterView() {
+      InitializeComponent();
+      Caption = "ValueLookupParameter";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableView"/> with the given <paramref name="variable"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="VariableView()"/>.</remarks>
+    /// <param name="variable">The variable to represent visually.</param>
+    public ValueLookupParameterView(IValueLookupParameter<T> content)
+      : this() {
+      Content = content;
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the underlying <see cref="IVariable"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void DeregisterContentEvents() {
+      Content.ActualNameChanged -= new EventHandler(Content_ActualNameChanged);
+      Content.ValueChanged -= new EventHandler(Content_ValueChanged);
+      base.DeregisterContentEvents();
+    }
+
+    /// <summary>
+    /// Adds eventhandlers to the underlying <see cref="IVariable"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ActualNameChanged += new EventHandler(Content_ActualNameChanged);
+      Content.ValueChanged += new EventHandler(Content_ValueChanged);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        Caption = "ValueLookupParameter";
+        actualNameTextBox.Text = "-";
+        actualNameTextBox.Enabled = false;
+        setValueButton.Enabled = false;
+        clearValueButton.Enabled = false;
+        valueGroupBox.Enabled = false;
+        viewHost.Content = null;
+      } else {
+        Caption = Content.Name + " (" + Content.GetType().Name + ")";
+        actualNameTextBox.Text = Content.ActualName;
+        actualNameTextBox.Enabled = true;
+        setValueButton.Enabled = Content.Value == null;
+        clearValueButton.Enabled = Content.Value != null;
+        valueGroupBox.Enabled = true;
+        viewHost.Content = Content.Value;
+      }
+    }
+
+    protected virtual void Content_ActualNameChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ActualNameChanged), sender, e);
+      else
+        actualNameTextBox.Text = Content.ActualName;
+    }
+    protected virtual void Content_ValueChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ValueChanged), sender, e);
+      else {
+        setValueButton.Enabled = Content.Value == null;
+        clearValueButton.Enabled = Content.Value != null;
+        viewHost.Content = Content.Value;
+      }
+    }
+
+    protected virtual void actualNameTextBox_Validated(object sender, EventArgs e) {
+      Content.ActualName = actualNameTextBox.Text;
+    }
+    protected virtual void setValueButton_Click(object sender, EventArgs e) {
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Value";
+        typeSelectorDialog.TypeSelector.Configure(Content.DataType, false, false);
+      }
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK)
+        Content.Value = (T)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+    }
+    protected virtual void clearValueButton_Click(object sender, EventArgs e) {
+      Content.Value = null;
+    }
+    protected virtual void valuePanel_DragEnterOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      Type type = e.Data.GetData("Type") as Type;
+      if ((type != null) && (Content.DataType.IsAssignableFrom(type))) {
+        if ((e.KeyState & 8) == 8) e.Effect = DragDropEffects.Copy;  // CTRL key
+        else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move;  // SHIFT key
+        else if ((e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link) e.Effect = DragDropEffects.Link;
+        else if ((e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy) e.Effect = DragDropEffects.Copy;
+        else if ((e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move) e.Effect = DragDropEffects.Move;
+      }
+    }
+    protected virtual void valuePanel_DragDrop(object sender, DragEventArgs e) {
+      if (e.Effect != DragDropEffects.None) {
+        T value = e.Data.GetData("Value") as T;
+        if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) value = (T)value.Clone();
+        Content.Value = value;
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueParameterView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueParameterView.Designer.cs	(revision 2756)
+++ trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueParameterView.Designer.cs	(revision 2756)
@@ -0,0 +1,170 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Parameters.Views {
+  partial class ValueParameterView<T> {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      this.valueGroupBox = new System.Windows.Forms.GroupBox();
+      this.valuePanel = new System.Windows.Forms.Panel();
+      this.viewHost = new HeuristicLab.Core.Views.ViewHost();
+      this.clearValueButton = new System.Windows.Forms.Button();
+      this.setValueButton = new System.Windows.Forms.Button();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.valueGroupBox.SuspendLayout();
+      this.valuePanel.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // dataTypeTextBox
+      // 
+      this.dataTypeTextBox.Location = new System.Drawing.Point(80, 94);
+      this.dataTypeTextBox.Size = new System.Drawing.Size(306, 20);
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      this.nameTextBox.Location = new System.Drawing.Point(80, 0);
+      this.nameTextBox.Size = new System.Drawing.Size(306, 20);
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Location = new System.Drawing.Point(80, 26);
+      this.descriptionTextBox.Size = new System.Drawing.Size(306, 62);
+      // 
+      // valueGroupBox
+      // 
+      this.valueGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.valueGroupBox.Controls.Add(this.valuePanel);
+      this.valueGroupBox.Controls.Add(this.clearValueButton);
+      this.valueGroupBox.Controls.Add(this.setValueButton);
+      this.valueGroupBox.Location = new System.Drawing.Point(0, 120);
+      this.valueGroupBox.Name = "valueGroupBox";
+      this.valueGroupBox.Size = new System.Drawing.Size(386, 195);
+      this.valueGroupBox.TabIndex = 6;
+      this.valueGroupBox.TabStop = false;
+      this.valueGroupBox.Text = "&Value:";
+      // 
+      // valuePanel
+      // 
+      this.valuePanel.AllowDrop = true;
+      this.valuePanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.valuePanel.Controls.Add(this.viewHost);
+      this.valuePanel.Location = new System.Drawing.Point(6, 48);
+      this.valuePanel.Name = "valuePanel";
+      this.valuePanel.Size = new System.Drawing.Size(374, 141);
+      this.valuePanel.TabIndex = 0;
+      this.valuePanel.DragOver += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragEnterOver);
+      this.valuePanel.DragDrop += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragDrop);
+      this.valuePanel.DragEnter += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragEnterOver);
+      // 
+      // viewHost
+      // 
+      this.viewHost.Content = null;
+      this.viewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.viewHost.Location = new System.Drawing.Point(0, 0);
+      this.viewHost.Name = "viewHost";
+      this.viewHost.Size = new System.Drawing.Size(374, 141);
+      this.viewHost.TabIndex = 0;
+      // 
+      // clearValueButton
+      // 
+      this.clearValueButton.Enabled = false;
+      this.clearValueButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Remove;
+      this.clearValueButton.Location = new System.Drawing.Point(35, 19);
+      this.clearValueButton.Name = "clearValueButton";
+      this.clearValueButton.Size = new System.Drawing.Size(23, 23);
+      this.clearValueButton.TabIndex = 1;
+      this.toolTip.SetToolTip(this.clearValueButton, "Clear Value");
+      this.clearValueButton.UseVisualStyleBackColor = true;
+      this.clearValueButton.Click += new System.EventHandler(this.clearValueButton_Click);
+      // 
+      // setValueButton
+      // 
+      this.setValueButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Add;
+      this.setValueButton.Location = new System.Drawing.Point(6, 19);
+      this.setValueButton.Name = "setValueButton";
+      this.setValueButton.Size = new System.Drawing.Size(23, 23);
+      this.setValueButton.TabIndex = 0;
+      this.toolTip.SetToolTip(this.setValueButton, "Set Value");
+      this.setValueButton.UseVisualStyleBackColor = true;
+      this.setValueButton.Click += new System.EventHandler(this.setValueButton_Click);
+      // 
+      // ValueParameterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.valueGroupBox);
+      this.Name = "ValueParameterView";
+      this.Size = new System.Drawing.Size(386, 315);
+      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
+      this.Controls.SetChildIndex(this.descriptionLabel, 0);
+      this.Controls.SetChildIndex(this.dataTypeTextBox, 0);
+      this.Controls.SetChildIndex(this.dataTypeLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.valueGroupBox, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.valueGroupBox.ResumeLayout(false);
+      this.valuePanel.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.GroupBox valueGroupBox;
+    protected System.Windows.Forms.Panel valuePanel;
+    protected HeuristicLab.Core.Views.ViewHost viewHost;
+    protected System.Windows.Forms.Button setValueButton;
+    protected System.Windows.Forms.ToolTip toolTip;
+    protected System.Windows.Forms.Button clearValueButton;
+  }
+}
Index: trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueParameterView.cs
===================================================================
--- trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueParameterView.cs	(revision 2756)
+++ trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueParameterView.cs	(revision 2756)
@@ -0,0 +1,145 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Parameters.Views {
+  /// <summary>
+  /// The visual representation of a <see cref="Parameter"/>.
+  /// </summary>
+  [Content(typeof(ValueParameter<>), true)]
+  [Content(typeof(IValueParameter<>), false)]
+  public partial class ValueParameterView<T> : ParameterView where T : class, IItem {
+    protected TypeSelectorDialog typeSelectorDialog;
+
+    /// <summary>
+    /// Gets or sets the variable to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public new IValueParameter<T> Content {
+      get { return (IValueParameter<T>)base.Content; }
+      set { base.Content = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableView"/> with caption "Variable".
+    /// </summary>
+    public ValueParameterView() {
+      InitializeComponent();
+      Caption = "ValueParameter";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableView"/> with the given <paramref name="variable"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="VariableView()"/>.</remarks>
+    /// <param name="variable">The variable to represent visually.</param>
+    public ValueParameterView(IValueParameter<T> content)
+      : this() {
+      Content = content;
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the underlying <see cref="IVariable"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void DeregisterContentEvents() {
+      Content.ValueChanged -= new EventHandler(Content_ValueChanged);
+      base.DeregisterContentEvents();
+    }
+
+    /// <summary>
+    /// Adds eventhandlers to the underlying <see cref="IVariable"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ValueChanged += new EventHandler(Content_ValueChanged);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        Caption = "ValueParameter";
+        setValueButton.Enabled = false;
+        clearValueButton.Enabled = false;
+        valueGroupBox.Enabled = false;
+        viewHost.Content = null;
+      } else {
+        Caption = Content.Name + " (" + Content.GetType().Name + ")";
+        setValueButton.Enabled = Content.Value == null;
+        clearValueButton.Enabled = Content.Value != null;
+        valueGroupBox.Enabled = true;
+        viewHost.Content = Content.Value;
+      }
+    }
+
+    protected virtual void Content_ValueChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ValueChanged), sender, e);
+      else {
+        setValueButton.Enabled = Content.Value == null;
+        clearValueButton.Enabled = Content.Value != null;
+        viewHost.Content = Content.Value;
+      }
+    }
+
+    protected virtual void setValueButton_Click(object sender, EventArgs e) {
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Value";
+        typeSelectorDialog.TypeSelector.Configure(Content.DataType, false, false);
+      }
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK)
+        Content.Value = (T)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+    }
+    protected virtual void clearValueButton_Click(object sender, EventArgs e) {
+      Content.Value = null;
+    }
+    protected virtual void valuePanel_DragEnterOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      Type type = e.Data.GetData("Type") as Type;
+      if ((type != null) && (Content.DataType.IsAssignableFrom(type))) {
+        if ((e.KeyState & 8) == 8) e.Effect = DragDropEffects.Copy;  // CTRL key
+        else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move;  // SHIFT key
+        else if ((e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link) e.Effect = DragDropEffects.Link;
+        else if ((e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy) e.Effect = DragDropEffects.Copy;
+        else if ((e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move) e.Effect = DragDropEffects.Move;
+      }
+    }
+    protected virtual void valuePanel_DragDrop(object sender, DragEventArgs e) {
+      if (e.Effect != DragDropEffects.None) {
+        T value = e.Data.GetData("Value") as T;
+        if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) value = (T)value.Clone();
+        Content.Value = value;
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj
===================================================================
--- trunk/sources/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj	(revision 2755)
+++ trunk/sources/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj	(revision 2756)
@@ -50,8 +50,10 @@
   <ItemGroup>
     <None Include="HeuristicLabParametersPlugin.cs.frame" />
-    <Compile Include="SubScopesItemParameter.cs" />
+    <Compile Include="LookupParameter.cs" />
+    <Compile Include="SubScopesLookupParameter.cs" />
+    <Compile Include="ValueLookupParameter.cs" />
+    <Compile Include="ValueParameter.cs" />
     <Compile Include="ScopeParameter.cs" />
     <Compile Include="HeuristicLabParametersPlugin.cs" />
-    <Compile Include="ItemParameter.cs" />
     <Compile Include="OperatorParameter.cs" />
     <Compile Include="Parameter.cs" />
@@ -66,4 +68,8 @@
       <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
       <Name>HeuristicLab.Collections-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common\3.2\HeuristicLab.Common-3.2.csproj">
+      <Project>{1FC004FC-59AF-4249-B1B6-FF25873A20E4}</Project>
+      <Name>HeuristicLab.Common-3.2</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
Index: trunk/sources/HeuristicLab.Parameters/3.3/HeuristicLabParametersPlugin.cs.frame
===================================================================
--- trunk/sources/HeuristicLab.Parameters/3.3/HeuristicLabParametersPlugin.cs.frame	(revision 2755)
+++ trunk/sources/HeuristicLab.Parameters/3.3/HeuristicLabParametersPlugin.cs.frame	(revision 2756)
@@ -32,4 +32,5 @@
   [PluginFile("HeuristicLab.Parameters-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.2")]
   [PluginDependency("HeuristicLab.Core", "3.3")]
   [PluginDependency("HeuristicLab.Persistence", "3.3")]
Index: trunk/sources/HeuristicLab.Parameters/3.3/ItemParameter.cs
===================================================================
--- trunk/sources/HeuristicLab.Parameters/3.3/ItemParameter.cs	(revision 2755)
+++ 	(revision )
@@ -1,159 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Text;
-using System.Xml;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Parameters {
-  /// <summary>
-  /// A generic parameter which represents an instance of type T.
-  /// </summary>
-  [Item("ItemParameter<T>", "A generic parameter which represents an instance of type T.")]
-  public class ItemParameter<T> : Parameter where T : class, IItem {
-    [Storable]
-    private string actualName;
-    public string ActualName {
-      get { return actualName; }
-      set {
-        if (value == null) throw new ArgumentNullException();
-        if (!actualName.Equals(value)) {
-          actualName = value;
-          OnActualNameChanged();
-        }
-      }
-    }
-
-    private T localValue;
-    [Storable]
-    public T LocalValue {
-      get { return this.localValue; }
-      set {
-        if (value != this.localValue) {
-          if ((value != null) && (!DataType.IsInstanceOfType(value))) throw new ArgumentException("Static value does not match data type of parameter");
-          if (this.localValue != null) this.localValue.Changed -= new ChangedEventHandler(LocalValue_Changed);
-          this.localValue = value;
-          if (this.localValue != null) this.localValue.Changed += new ChangedEventHandler(LocalValue_Changed);
-          OnLocalValueChanged();
-        }
-      }
-    }
-
-    public T Value {
-      get { return GetValue(); }
-      set { SetValue(value); }
-    }
-
-    public ItemParameter()
-      : base("Anonymous", null, typeof(T)) {
-      actualName = Name;
-      LocalValue = null;
-    }
-    public ItemParameter(string name, string description)
-      : base(name, description, typeof(T)) {
-      actualName = Name;
-      LocalValue = null;
-    }
-    public ItemParameter(string name, string description, T localValue)
-      : base(name, description, typeof(T)) {
-      actualName = Name;
-      LocalValue = localValue;
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      ItemParameter<T> clone = (ItemParameter<T>)base.Clone(cloner);
-      clone.actualName = actualName;
-      clone.LocalValue = (T)cloner.Clone(localValue);
-      return clone;
-    }
-
-    public override string ToString() {
-      return string.Format("{0}: {1} ({2})", Name, LocalValue != null ? LocalValue.ToString() : ActualName, DataType.Name);
-    }
-
-    protected ItemParameter<T> GetParameter(out string name) {
-      ItemParameter<T> param = this;
-      ExecutionContext current = ExecutionContext;
-      name = param.Name;
-      while (param != null) {
-        if (param.LocalValue != null) return param;
-        name = param.ActualName;
-        current = current.Parent;
-        while ((current != null) && !current.Operator.Parameters.ContainsKey(name))
-          current = current.Parent;
-        if (current != null)
-          param = (ItemParameter<T>)current.Operator.Parameters[actualName];
-        else
-          param = null;
-      }
-      return null;
-    }
-    protected IVariable GetVariable(string name) {
-      IScope scope = ExecutionContext.Scope;
-      while ((scope != null) && !scope.Variables.ContainsKey(name))
-        scope = scope.Parent;
-      return scope != null ? scope.Variables[actualName] : null;
-    }
-    protected virtual T GetValue() {
-      string name;
-      // try to get local value from context stack
-      ItemParameter<T> param = GetParameter(out name);
-      if (param != null) return param.Value;
-      else {
-        // try to get variable from scope
-        IVariable var = GetVariable(name);
-        if (var != null) return (T)var.Value;
-      }
-      return null;
-    }
-    protected virtual void SetValue(T value) {
-      string name;
-      // try to get local value from context stack
-      ItemParameter<T> param = GetParameter(out name);
-      if (param != null) param.Value = value;
-      else {
-        // try to get variable from scope
-        IVariable var = GetVariable(name);
-        if (var != null) var.Value = value;
-        else ExecutionContext.Scope.Variables.Add(new Variable(name, value));
-      }
-    }
-
-    public event EventHandler ActualNameChanged;
-    private void OnActualNameChanged() {
-      if (ActualNameChanged != null)
-        ActualNameChanged(this, new EventArgs());
-      OnChanged();
-    }
-    public event EventHandler LocalValueChanged;
-    private void OnLocalValueChanged() {
-      if (LocalValueChanged != null)
-        LocalValueChanged(this, new EventArgs());
-      OnChanged();
-    }
-    private void LocalValue_Changed(object sender, ChangedEventArgs e) {
-      OnChanged(e);
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.Parameters/3.3/LookupParameter.cs
===================================================================
--- trunk/sources/HeuristicLab.Parameters/3.3/LookupParameter.cs	(revision 2756)
+++ trunk/sources/HeuristicLab.Parameters/3.3/LookupParameter.cs	(revision 2756)
@@ -0,0 +1,134 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+using System.Xml;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Parameters {
+  /// <summary>
+  /// A parameter whose value is retrieved from the scope.
+  /// </summary>
+  [Item("LookupParameter<T>", "A parameter whose value is retrieved from the scope.")]
+  public class LookupParameter<T> : Parameter, ILookupParameter<T> where T : class, IItem {
+    [Storable]
+    private string actualName;
+    public string ActualName {
+      get { return actualName; }
+      set {
+        if (value == null) throw new ArgumentNullException();
+        if (!actualName.Equals(value)) {
+          actualName = value;
+          OnActualNameChanged();
+        }
+      }
+    }
+    public T ActualValue {
+      get { return GetActualValue(); }
+      set { SetActualValue(value); }
+    }
+
+    public LookupParameter()
+      : base("Anonymous", typeof(T)) {
+      actualName = Name;
+    }
+    public LookupParameter(string name)
+      : base(name, typeof(T)) {
+      actualName = Name;
+    }
+    public LookupParameter(string name, string description)
+      : base(name, description, typeof(T)) {
+      actualName = Name;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      LookupParameter<T> clone = (LookupParameter<T>)base.Clone(cloner);
+      clone.actualName = actualName;
+      return clone;
+    }
+
+    public override string ToString() {
+      return string.Format("{0}: {1} ({2})", Name, ActualName, DataType.Name);
+    }
+
+    private IVariable LookupVariable(string name) {
+      IScope scope = ExecutionContext.Scope;
+      while ((scope != null) && !scope.Variables.ContainsKey(name))
+        scope = scope.Parent;
+      return scope != null ? scope.Variables[actualName] : null;
+    }
+    protected virtual T GetActualValue() {
+      string name = TranslateName(Name, ExecutionContext);
+      IVariable var = LookupVariable(name);
+      if (var != null) {
+        T value = var.Value as T;
+        if (value == null)
+          throw new InvalidOperationException(
+            string.Format("Type mismatch. Variable \"{0}\" does not contain a \"{1}\".",
+                          name,
+                          typeof(T).GetPrettyName())
+          );
+        return value;
+      }
+      return null;
+    }
+    protected virtual void SetActualValue(T value) {
+      string name = TranslateName(Name, ExecutionContext);
+      IVariable var = LookupVariable(name);
+      if (var != null) var.Value = value;
+      else ExecutionContext.Scope.Variables.Add(new Variable(name, value));
+    }
+
+    public event EventHandler ActualNameChanged;
+    private void OnActualNameChanged() {
+      if (ActualNameChanged != null)
+        ActualNameChanged(this, new EventArgs());
+      OnChanged();
+    }
+
+    public static string TranslateName(string name, ExecutionContext context) {
+      string currentName = name;
+      ExecutionContext currentContext = context;
+      IParameter param;
+      ILookupParameter<T> lookupParam;
+
+      while (currentContext != null) {
+        currentContext.Operator.Parameters.TryGetValue(currentName, out param);
+        if (param != null) {
+          lookupParam = param as ILookupParameter<T>;
+          if (lookupParam == null)
+            throw new InvalidOperationException(
+              string.Format("Parameter look-up chain broken. Parameter \"{0}\" is not an \"{1}\".",
+                            currentName,
+                            typeof(ILookupParameter<T>).GetPrettyName())
+            );
+          currentName = lookupParam.ActualName;
+        }
+        currentContext = currentContext.Parent;
+      }
+      return currentName;
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Parameters/3.3/OperatorParameter.cs
===================================================================
--- trunk/sources/HeuristicLab.Parameters/3.3/OperatorParameter.cs	(revision 2755)
+++ trunk/sources/HeuristicLab.Parameters/3.3/OperatorParameter.cs	(revision 2756)
@@ -32,49 +32,23 @@
   /// </summary>
   [Item("OperatorParameter", "A parameter which represents an operator.")]
+  [EmptyStorableClass]
   [Creatable("Test")]
-  public class OperatorParameter : Parameter, IOperatorParameter {
-    private IOperator value;
-    [Storable]
-    public IOperator Value {
-      get { return this.value; }
-      set {
-        if (value != this.value) {
-          if (this.value != null) this.value.Changed -= new ChangedEventHandler(Value_Changed);
-          this.value = value;
-          if (this.value != null) this.value.Changed += new ChangedEventHandler(Value_Changed);
-          OnValueChanged();
-        }
-      }
+  public class OperatorParameter : ValueParameter<IOperator> {
+    public OperatorParameter()
+      : base("Anonymous") {
     }
-
-    public OperatorParameter()
-      : base("Anonymous", null, typeof(IOperator)) {
+    public OperatorParameter(string name)
+      : base(name) {
+    }
+    public OperatorParameter(string name, IOperator value)
+      : base(name, value) {
+      Value = value;
     }
     public OperatorParameter(string name, string description)
-      : base(name, description, typeof(IOperator)) {
+      : base(name, description) {
     }
     public OperatorParameter(string name, string description, IOperator value)
-      : base(name, description, typeof(IOperator)) {
+      : base(name, description, value) {
       Value = value;
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      OperatorParameter clone = (OperatorParameter)base.Clone(cloner);
-      clone.Value = (IOperator)cloner.Clone(value);
-      return clone;
-    }
-
-    public override string ToString() {
-      return string.Format("{0}: {1} ({2})", Name, Value != null ? Value.ToString() : "null", DataType.Name);
-    }
-
-    public event EventHandler ValueChanged;
-    private void OnValueChanged() {
-      if (ValueChanged != null)
-        ValueChanged(this, new EventArgs());
-      OnChanged();
-    }
-    private void Value_Changed(object sender, ChangedEventArgs e) {
-      OnChanged(e);
     }
   }
Index: trunk/sources/HeuristicLab.Parameters/3.3/Parameter.cs
===================================================================
--- trunk/sources/HeuristicLab.Parameters/3.3/Parameter.cs	(revision 2755)
+++ trunk/sources/HeuristicLab.Parameters/3.3/Parameter.cs	(revision 2756)
@@ -56,4 +56,9 @@
       dataType = typeof(IItem);
     }
+    protected Parameter(string name, Type dataType)
+      : base(name) {
+      if (dataType == null) throw new ArgumentNullException();
+      this.dataType = dataType;
+    }
     protected Parameter(string name, string description, Type dataType)
       : base(name, description) {
Index: trunk/sources/HeuristicLab.Parameters/3.3/ScopeParameter.cs
===================================================================
--- trunk/sources/HeuristicLab.Parameters/3.3/ScopeParameter.cs	(revision 2755)
+++ trunk/sources/HeuristicLab.Parameters/3.3/ScopeParameter.cs	(revision 2756)
@@ -40,5 +40,8 @@
 
     public ScopeParameter()
-      : base("Anonymous", null, typeof(IScope)) {
+      : base("Anonymous", typeof(IScope)) {
+    }
+    public ScopeParameter(string name)
+      : base(name, typeof(IScope)) {
     }
     public ScopeParameter(string name, string description)
Index: trunk/sources/HeuristicLab.Parameters/3.3/SubScopesItemParameter.cs
===================================================================
--- trunk/sources/HeuristicLab.Parameters/3.3/SubScopesItemParameter.cs	(revision 2755)
+++ 	(revision )
@@ -1,113 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Text;
-using System.Xml;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Parameters {
-  /// <summary>
-  /// A generic parameter representing instances of type T which are collected from the sub-scopes of the current scope.
-  /// </summary>
-  [Item("SubScopesItemParameter<T>", "A generic parameter representing instances of type T which are collected from the sub-scopes of the current scope.")]
-  public class SubScopesItemParameter<T> : Parameter where T : class, IItem {
-    [Storable]
-    private string actualName;
-    public string ActualName {
-      get { return actualName; }
-      set {
-        if (value == null) throw new ArgumentNullException();
-        if (!actualName.Equals(value)) {
-          actualName = value;
-          OnActualNameChanged();
-        }
-      }
-    }
-
-    public T[] Values {
-      get { return GetValues(); }
-      set { SetValues(value); }
-    }
-
-    public SubScopesItemParameter()
-      : base("Anonymous", null, typeof(T)) {
-      actualName = Name;
-    }
-    public SubScopesItemParameter(string name, string description)
-      : base(name, description, typeof(T)) {
-      actualName = Name;
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      SubScopesItemParameter<T> clone = (SubScopesItemParameter<T>)base.Clone(cloner);
-      clone.actualName = actualName;
-      return clone;
-    }
-
-    public override string ToString() {
-      return string.Format("{0}: {1} ({2})", Name, ActualName, DataType.Name);
-    }
-
-    protected string GetActualName() {
-      string name = Name;
-      ExecutionContext current = ExecutionContext;
-      while (current != null) {
-        if (current.Operator.Parameters.ContainsKey(name))
-          name = ((SubScopesItemParameter<T>)current.Operator.Parameters[name]).ActualName;
-        current = current.Parent;
-      }
-      return name;
-    }
-    protected virtual T[] GetValues() {
-      string name = GetActualName();
-      IScope scope = ExecutionContext.Scope;
-      T[] value = new T[scope.SubScopes.Count];
-      IVariable var;
-
-      for (int i = 0; i < value.Length; i++) {
-        scope.SubScopes[i].Variables.TryGetValue(name, out var);
-        if (var != null) value[i] = (T)var.Value;
-      }
-      return value;
-    }
-    protected virtual void SetValues(T[] values) {
-      string name = GetActualName();
-      IScope scope = ExecutionContext.Scope;
-      IVariable var;
-
-      for (int i = 0; i < values.Length; i++) {
-        scope.SubScopes[i].Variables.TryGetValue(name, out var);
-        if (var != null) var.Value = values[i];
-        else scope.SubScopes[i].Variables.Add(new Variable(name, values[i]));
-      }
-    }
-
-    public event EventHandler ActualNameChanged;
-    private void OnActualNameChanged() {
-      if (ActualNameChanged != null)
-        ActualNameChanged(this, new EventArgs());
-      OnChanged();
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.Parameters/3.3/SubScopesLookupParameter.cs
===================================================================
--- trunk/sources/HeuristicLab.Parameters/3.3/SubScopesLookupParameter.cs	(revision 2756)
+++ trunk/sources/HeuristicLab.Parameters/3.3/SubScopesLookupParameter.cs	(revision 2756)
@@ -0,0 +1,118 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+using System.Xml;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Parameters {
+  /// <summary>
+  /// A generic parameter representing instances of type T which are collected from the sub-scopes of the current scope.
+  /// </summary>
+  [Item("SubScopesLookupParameter<T>", "A generic parameter representing instances of type T which are collected from the sub-scopes of the current scope.")]
+  public class SubScopesLookupParameter<T> : Parameter, ILookupParameter<T> where T : class, IItem {
+    [Storable]
+    private string actualName;
+    public string ActualName {
+      get { return actualName; }
+      set {
+        if (value == null) throw new ArgumentNullException();
+        if (!actualName.Equals(value)) {
+          actualName = value;
+          OnActualNameChanged();
+        }
+      }
+    }
+
+    public T[] ActualValues {
+      get { return GetActualValues(); }
+      set { SetActualValues(value); }
+    }
+
+    public SubScopesLookupParameter()
+      : base("Anonymous", typeof(T)) {
+      actualName = Name;
+    }
+    public SubScopesLookupParameter(string name)
+      : base(name, typeof(T)) {
+      actualName = Name;
+    }
+    public SubScopesLookupParameter(string name, string description)
+      : base(name, description, typeof(T)) {
+      actualName = Name;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      SubScopesLookupParameter<T> clone = (SubScopesLookupParameter<T>)base.Clone(cloner);
+      clone.actualName = actualName;
+      return clone;
+    }
+
+    public override string ToString() {
+      return string.Format("{0}: {1} ({2})", Name, ActualName, DataType.Name);
+    }
+
+    protected virtual T[] GetActualValues() {
+      string name = LookupParameter<T>.TranslateName(Name, ExecutionContext);
+      IScope scope = ExecutionContext.Scope;
+      T[] values = new T[scope.SubScopes.Count];
+      IVariable var;
+      T value;
+
+      for (int i = 0; i < values.Length; i++) {
+        scope.SubScopes[i].Variables.TryGetValue(name, out var);
+        if (var != null) {
+          value = var.Value as T;
+          if (value == null)
+            throw new InvalidOperationException(
+              string.Format("Type mismatch. Variable \"{0}\" does not contain a \"{1}\".",
+                            name,
+                            typeof(T).GetPrettyName())
+            );
+          values[i] = value;
+        }
+      }
+      return values;
+    }
+    protected virtual void SetActualValues(T[] values) {
+      string name = LookupParameter<T>.TranslateName(Name, ExecutionContext);
+      IScope scope = ExecutionContext.Scope;
+      IVariable var;
+
+      for (int i = 0; i < values.Length; i++) {
+        scope.SubScopes[i].Variables.TryGetValue(name, out var);
+        if (var != null) var.Value = values[i];
+        else scope.SubScopes[i].Variables.Add(new Variable(name, values[i]));
+      }
+    }
+
+    public event EventHandler ActualNameChanged;
+    private void OnActualNameChanged() {
+      if (ActualNameChanged != null)
+        ActualNameChanged(this, new EventArgs());
+      OnChanged();
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Parameters/3.3/ValueLookupParameter.cs
===================================================================
--- trunk/sources/HeuristicLab.Parameters/3.3/ValueLookupParameter.cs	(revision 2756)
+++ trunk/sources/HeuristicLab.Parameters/3.3/ValueLookupParameter.cs	(revision 2756)
@@ -0,0 +1,187 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+using System.Xml;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Parameters {
+  /// <summary>
+  /// A parameter whose value is either defined it the parameter itself or is retrieved from the scope.
+  /// </summary>
+  [Item("ValueLookupParameter<T>", "A parameter whose value is either defined it the parameter itself or is retrieved from the scope.")]
+  public class ValueLookupParameter<T> : Parameter, IValueLookupParameter<T> where T : class, IItem {
+    [Storable]
+    private string actualName;
+    public string ActualName {
+      get { return actualName; }
+      set {
+        if (value == null) throw new ArgumentNullException();
+        if (!actualName.Equals(value)) {
+          actualName = value;
+          OnActualNameChanged();
+        }
+      }
+    }
+
+    private T value;
+    [Storable]
+    public T Value {
+      get { return this.value; }
+      set {
+        if (value != this.value) {
+          if (this.value != null) this.value.Changed -= new ChangedEventHandler(Value_Changed);
+          this.value = value;
+          if (this.value != null) this.value.Changed += new ChangedEventHandler(Value_Changed);
+          OnValueChanged();
+        }
+      }
+    }
+
+    public T ActualValue {
+      get { return GetActualValue(); }
+      set { SetActualValue(value); }
+    }
+
+    public ValueLookupParameter()
+      : base("Anonymous", typeof(T)) {
+      actualName = Name;
+    }
+    public ValueLookupParameter(string name)
+      : base(name, typeof(T)) {
+      actualName = Name;
+    }
+    public ValueLookupParameter(string name, T value)
+      : base(name, typeof(T)) {
+      actualName = Name;
+      Value = value;
+    }
+    public ValueLookupParameter(string name, string description)
+      : base(name, description, typeof(T)) {
+      actualName = Name;
+    }
+    public ValueLookupParameter(string name, string description, T value)
+      : base(name, description, typeof(T)) {
+      actualName = Name;
+      Value = value;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      ValueLookupParameter<T> clone = (ValueLookupParameter<T>)base.Clone(cloner);
+      clone.actualName = actualName;
+      clone.Value = (T)cloner.Clone(value);
+      return clone;
+    }
+
+    public override string ToString() {
+      return string.Format("{0}: {1} ({2})", Name, Value != null ? Value.ToString() : ActualName, DataType.Name);
+    }
+
+    private IValueParameter<T> GetParameter(out string name) {
+      IValueParameter<T> valueParam = this;
+      ILookupParameter<T> lookupParam = this;
+      ExecutionContext current = ExecutionContext;
+
+      name = Name;
+      while ((valueParam != null) && (lookupParam != null)) {
+        if ((valueParam != null) && (valueParam.Value != null)) return valueParam;
+        if (lookupParam != null) name = lookupParam.ActualName;
+
+        current = current.Parent;
+        while ((current != null) && !current.Operator.Parameters.ContainsKey(name))
+          current = current.Parent;
+
+        if (current != null) {
+          valueParam = current.Operator.Parameters[name] as IValueParameter<T>;
+          lookupParam = current.Operator.Parameters[name] as ILookupParameter<T>;
+          if ((valueParam == null) && (lookupParam == null))
+            throw new InvalidOperationException(
+              string.Format("Parameter look-up chain broken. Parameter \"{0}\" is not an \"{1}\" or an \"{2}\".",
+                            name,
+                            typeof(IValueParameter<T>).GetPrettyName(),
+                            typeof(ILookupParameter<T>).GetPrettyName())
+            );
+        } else {
+          valueParam = null;
+          lookupParam = null;
+        }
+      }
+      return null;
+    }
+    private IVariable LookupVariable(string name) {
+      IScope scope = ExecutionContext.Scope;
+      while ((scope != null) && !scope.Variables.ContainsKey(name))
+        scope = scope.Parent;
+      return scope != null ? scope.Variables[actualName] : null;
+    }
+    protected virtual T GetActualValue() {
+      string name;
+      // try to get local value from context stack
+      IValueParameter<T> param = GetParameter(out name);
+      if (param != null) return param.Value;
+      else {  // try to get variable from scope
+        IVariable var = LookupVariable(name);
+        if (var != null) {
+          T value = var.Value as T;
+          if (value == null)
+            throw new InvalidOperationException(
+              string.Format("Type mismatch. Variable \"{0}\" does not contain a \"{1}\".",
+                            name,
+                            typeof(T).GetPrettyName())
+            );
+          return value;
+        }
+      }
+      return null;
+    }
+    protected virtual void SetActualValue(T value) {
+      string name;
+      // try to get local value from context stack
+      IValueParameter<T> param = GetParameter(out name);
+      if (param != null) param.Value = value;
+      else {  // try to get variable from scope
+        IVariable var = LookupVariable(name);
+        if (var != null) var.Value = value;
+        else ExecutionContext.Scope.Variables.Add(new Variable(name, value));
+      }
+    }
+
+    public event EventHandler ActualNameChanged;
+    private void OnActualNameChanged() {
+      if (ActualNameChanged != null)
+        ActualNameChanged(this, new EventArgs());
+      OnChanged();
+    }
+    public event EventHandler ValueChanged;
+    private void OnValueChanged() {
+      if (ValueChanged != null)
+        ValueChanged(this, new EventArgs());
+      OnChanged();
+    }
+    private void Value_Changed(object sender, ChangedEventArgs e) {
+      OnChanged(e);
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Parameters/3.3/ValueParameter.cs
===================================================================
--- trunk/sources/HeuristicLab.Parameters/3.3/ValueParameter.cs	(revision 2756)
+++ trunk/sources/HeuristicLab.Parameters/3.3/ValueParameter.cs	(revision 2756)
@@ -0,0 +1,87 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Parameters {
+  /// <summary>
+  /// A parameter whose value is defined it the parameter itself.
+  /// </summary>
+  [Item("ValueParameter<T>", "A parameter whose value is defined it the parameter itself.")]
+  public class ValueParameter<T> : Parameter, IValueParameter<T> where T : class, IItem {
+    private T value;
+    [Storable]
+    public T Value {
+      get { return this.value; }
+      set {
+        if (value != this.value) {
+          if (this.value != null) this.value.Changed -= new ChangedEventHandler(Value_Changed);
+          this.value = value;
+          if (this.value != null) this.value.Changed += new ChangedEventHandler(Value_Changed);
+          OnValueChanged();
+        }
+      }
+    }
+
+    public ValueParameter()
+      : base("Anonymous", typeof(T)) {
+    }
+    public ValueParameter(string name)
+      : base(name, typeof(T)) {
+    }
+    public ValueParameter(string name, T value)
+      : base(name, typeof(T)) {
+      Value = value;
+    }
+    public ValueParameter(string name, string description)
+      : base(name, description, typeof(T)) {
+    }
+    public ValueParameter(string name, string description, T value)
+      : base(name, description, typeof(T)) {
+      Value = value;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      ValueParameter<T> clone = (ValueParameter<T>)base.Clone(cloner);
+      clone.Value = (T)cloner.Clone(value);
+      return clone;
+    }
+
+    public override string ToString() {
+      return string.Format("{0}: {1} ({2})", Name, Value != null ? Value.ToString() : "null", DataType.Name);
+    }
+
+    public event EventHandler ValueChanged;
+    private void OnValueChanged() {
+      if (ValueChanged != null)
+        ValueChanged(this, new EventArgs());
+      OnChanged();
+    }
+    private void Value_Changed(object sender, ChangedEventArgs e) {
+      OnChanged(e);
+    }
+  }
+}
