Index: /trunk/sources/HeuristicLab.Core.Views/3.3/Clipboard.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/Clipboard.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/Clipboard.cs	(revision 3407)
@@ -279,6 +279,12 @@
       }
 
-      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK)
-        AddItem((T)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType());
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          AddItem((T)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType());
+        }
+        catch (Exception ex) {
+          Auxiliary.ShowErrorMessageBox(ex);
+        }
+      }
     }
     private void sortAscendingButton_Click(object sender, EventArgs e) {
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemArrayView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemArrayView.Designer.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemArrayView.Designer.cs	(revision 3407)
@@ -36,4 +36,5 @@
     protected override void Dispose(bool disposing) {
       if (disposing) {
+        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
         foreach (ListViewItem listViewItem in itemsListView.Items) {
           T item = listViewItem.Tag as T;
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemArrayView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemArrayView.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemArrayView.cs	(revision 3407)
@@ -36,4 +36,6 @@
   [Content(typeof(IItemArray<>), false)]
   public partial class ItemArrayView<T> : AsynchronousContentView where T : class, IItem {
+    protected TypeSelectorDialog typeSelectorDialog;
+
     /// <summary>
     /// Gets or sets the scope whose variables to represent visually.
@@ -128,11 +130,20 @@
 
     protected virtual T CreateItem() {
-      try {
-        return (T)Activator.CreateInstance(typeof(T));
-      }
-      catch (Exception ex) {
-        Auxiliary.ShowErrorMessageBox(ex);
-        return null;
-      }
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Item";
+        typeSelectorDialog.TypeSelector.Caption = "Available Items";
+        typeSelectorDialog.TypeSelector.Configure(typeof(T), false, false);
+      }
+
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          return (T)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        }
+        catch (Exception ex) {
+          Auxiliary.ShowErrorMessageBox(ex);
+        }
+      }
+      return null;
     }
     protected virtual ListViewItem CreateListViewItem(T item) {
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemCollectionView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemCollectionView.Designer.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemCollectionView.Designer.cs	(revision 3407)
@@ -37,4 +37,5 @@
     protected override void Dispose(bool disposing) {
       if (disposing) {
+        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
         foreach (ListViewItem item in itemsListView.Items) {
           ((T)item.Tag).ItemImageChanged -= new EventHandler(Item_ItemImageChanged);
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemCollectionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemCollectionView.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemCollectionView.cs	(revision 3407)
@@ -33,4 +33,6 @@
   [Content(typeof(IItemCollection<>), false)]
   public partial class ItemCollectionView<T> : AsynchronousContentView where T : class, IItem {
+    protected TypeSelectorDialog typeSelectorDialog;
+
     public new IItemCollection<T> Content {
       get { return (IItemCollection<T>)base.Content; }
@@ -103,10 +105,20 @@
 
     protected virtual T CreateItem() {
-      try {
-        return (T)Activator.CreateInstance(typeof(T));
-      } catch(Exception ex) {
-        Auxiliary.ShowErrorMessageBox(ex);
-        return null;
-      }
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Item";
+        typeSelectorDialog.TypeSelector.Caption = "Available Items";
+        typeSelectorDialog.TypeSelector.Configure(typeof(T), false, false);
+      }
+
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          return (T)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        }
+        catch (Exception ex) {
+          Auxiliary.ShowErrorMessageBox(ex);
+        }
+      }
+      return null;
     }
     protected virtual ListViewItem CreateListViewItem(T item) {
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemListView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemListView.Designer.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemListView.Designer.cs	(revision 3407)
@@ -36,4 +36,5 @@
     protected override void Dispose(bool disposing) {
       if (disposing) {
+        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
         foreach (ListViewItem item in itemsListView.Items) {
           ((T)item.Tag).ItemImageChanged -= new EventHandler(Item_ItemImageChanged);
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemListView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemListView.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemListView.cs	(revision 3407)
@@ -36,4 +36,6 @@
   [Content(typeof(IItemList<>), false)]
   public partial class ItemListView<T> : AsynchronousContentView where T : class, IItem {
+    protected TypeSelectorDialog typeSelectorDialog;
+
     /// <summary>
     /// Gets or sets the scope whose variables to represent visually.
@@ -131,11 +133,20 @@
 
     protected virtual T CreateItem() {
-      try {
-        return (T)Activator.CreateInstance(typeof(T));
-      }
-      catch (Exception ex) {
-        Auxiliary.ShowErrorMessageBox(ex);
-        return null;
-      }
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Item";
+        typeSelectorDialog.TypeSelector.Caption = "Available Items";
+        typeSelectorDialog.TypeSelector.Configure(typeof(T), false, false);
+      }
+
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          return (T)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        }
+        catch (Exception ex) {
+          Auxiliary.ShowErrorMessageBox(ex);
+        }
+      }
+      return null;
     }
     protected virtual ListViewItem CreateListViewItem(T item) {
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorCollectionView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorCollectionView.Designer.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorCollectionView.Designer.cs	(revision 3407)
@@ -1,3 +1,24 @@
-﻿namespace HeuristicLab.Core.Views {
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Views {
   partial class OperatorCollectionView {
     /// <summary> 
@@ -12,5 +33,4 @@
     protected override void Dispose(bool disposing) {
       if (disposing) {
-        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
         if (components != null) components.Dispose();
       }
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorCollectionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorCollectionView.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorCollectionView.cs	(revision 3407)
@@ -1,3 +1,25 @@
-﻿using System.Windows.Forms;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
 using HeuristicLab.Collections;
 using HeuristicLab.MainForm;
@@ -8,6 +30,4 @@
   [Content(typeof(IItemCollection<IOperator>), false)]
   public partial class OperatorCollectionView : ItemCollectionView<IOperator> {
-    protected TypeSelectorDialog typeSelectorDialog;
-
     /// <summary>
     /// Initializes a new instance of <see cref="VariablesScopeView"/> with caption "Variables Scope View".
@@ -32,12 +52,18 @@
       if (typeSelectorDialog == null) {
         typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Operator";
         typeSelectorDialog.TypeSelector.Caption = "Available Operators";
         typeSelectorDialog.TypeSelector.Configure(typeof(IOperator), false, false);
       }
 
-      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK)
-        return (IOperator)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
-      else
-        return null;
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          return (IOperator)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        }
+        catch (Exception ex) {
+          Auxiliary.ShowErrorMessageBox(ex);
+        }
+      }
+      return null;
     }
   }
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorListView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorListView.Designer.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorListView.Designer.cs	(revision 3407)
@@ -1,3 +1,24 @@
-﻿namespace HeuristicLab.Core.Views {
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Views {
   partial class OperatorListView {
     /// <summary> 
@@ -12,5 +33,4 @@
     protected override void Dispose(bool disposing) {
       if (disposing) {
-        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
         if (components != null) components.Dispose();
       }
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorListView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorListView.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorListView.cs	(revision 3407)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using System.Windows.Forms;
 using HeuristicLab.Collections;
@@ -29,6 +30,4 @@
   [Content(typeof(IItemList<IOperator>), false)]
   public partial class OperatorListView : ItemListView<IOperator> {
-    protected TypeSelectorDialog typeSelectorDialog;
-
     /// <summary>
     /// Initializes a new instance of <see cref="VariablesScopeView"/> with caption "Variables Scope View".
@@ -53,12 +52,18 @@
       if (typeSelectorDialog == null) {
         typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Operator";
         typeSelectorDialog.TypeSelector.Caption = "Available Operators";
         typeSelectorDialog.TypeSelector.Configure(typeof(IOperator), false, false);
       }
 
-      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK)
-        return (IOperator)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
-      else
-        return null;
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          return (IOperator)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        }
+        catch (Exception ex) {
+          Auxiliary.ShowErrorMessageBox(ex);
+        }
+      }
+      return null;
     }
   }
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorSetView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorSetView.Designer.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorSetView.Designer.cs	(revision 3407)
@@ -1,3 +1,24 @@
-﻿namespace HeuristicLab.Core.Views {
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core.Views {
   partial class OperatorSetView {
     /// <summary> 
@@ -12,5 +33,4 @@
     protected override void Dispose(bool disposing) {
       if (disposing) {
-        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
         if (components != null) components.Dispose();
       }
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorSetView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorSetView.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorSetView.cs	(revision 3407)
@@ -1,3 +1,25 @@
-﻿using System.Windows.Forms;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
 using HeuristicLab.Collections;
 using HeuristicLab.MainForm;
@@ -8,6 +30,4 @@
   [Content(typeof(IItemSet<IOperator>), false)]
   public partial class OperatorSetView : ItemSetView<IOperator> {
-    protected TypeSelectorDialog typeSelectorDialog;
-
     /// <summary>
     /// Initializes a new instance of <see cref="VariablesScopeView"/> with caption "Variables Scope View".
@@ -32,12 +52,18 @@
       if (typeSelectorDialog == null) {
         typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Operator";
         typeSelectorDialog.TypeSelector.Caption = "Available Operators";
         typeSelectorDialog.TypeSelector.Configure(typeof(IOperator), false, false);
       }
 
-      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK)
-        return (IOperator)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
-      else
-        return null;
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          return (IOperator)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        }
+        catch (Exception ex) {
+          Auxiliary.ShowErrorMessageBox(ex);
+        }
+      }
+      return null;
     }
   }
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorTreeView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorTreeView.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorTreeView.cs	(revision 3407)
@@ -24,4 +24,5 @@
 using System.ComponentModel;
 using System.Drawing;
+using System.Linq;
 using System.Windows.Forms;
 using HeuristicLab.Collections;
@@ -35,5 +36,5 @@
   [Content(typeof(IOperator), false)]
   public sealed partial class OperatorTreeView : ItemView {
-    private Dictionary<IValueParameter<IOperator>, List<TreeNode>> opParamNodeTable;
+    private Dictionary<IValueParameter, List<TreeNode>> opParamNodeTable;
     private Dictionary<IOperator, List<TreeNode>> operatorNodeTable;
     private Dictionary<IKeyedItemCollection<string, IParameter>, IOperator> parametersOperatorTable;
@@ -66,5 +67,5 @@
       InitializeComponent();
       graphTreeView.Sorted = true;
-      opParamNodeTable = new Dictionary<IValueParameter<IOperator>, List<TreeNode>>();
+      opParamNodeTable = new Dictionary<IValueParameter, List<TreeNode>>();
       operatorNodeTable = new Dictionary<IOperator, List<TreeNode>>();
       parametersOperatorTable = new Dictionary<IKeyedItemCollection<string, IParameter>, IOperator>();
@@ -116,5 +117,5 @@
 
     #region TreeNode Management
-    private TreeNode CreateTreeNode(IValueParameter<IOperator> opParam) {
+    private TreeNode CreateTreeNode(IValueParameter opParam) {
       TreeNode node = new TreeNode();
       node.Text = opParam.Name + ": ";
@@ -127,5 +128,5 @@
       opParamNodeTable[opParam].Add(node);
 
-      FillTreeNode(node, opParam.Value);
+      FillTreeNode(node, (IOperator)opParam.Value);
       return node;
     }
@@ -162,6 +163,6 @@
         else node.ForeColor = graphTreeView.ForeColor;
 
-        foreach (IParameter param in op.Parameters) {
-          if (param is IValueParameter<IOperator>)
+        foreach (IValueParameter param in op.Parameters.OfType<IValueParameter>()) {
+          if (typeof(IOperator).IsAssignableFrom(param.DataType))
             node.Nodes.Add(new TreeNode());
         }
@@ -199,5 +200,5 @@
       ClearTreeNode(node);
 
-      IValueParameter<IOperator> opParam = GetOperatorParameterTag(node);
+      IValueParameter opParam = GetOperatorParameterTag(node);
       if (opParam != null) {
         opParamNodeTable[opParam].Remove(node);
@@ -211,18 +212,16 @@
     }
     private void AddParameterNodes(IOperator op, IEnumerable<IParameter> parameters) {
-      foreach (IParameter param in parameters) {
-        IValueParameter<IOperator> opParam = param as IValueParameter<IOperator>;
-        if (opParam != null) {
+      foreach (IValueParameter param in parameters.OfType<IValueParameter>()) {
+        if (typeof(IOperator).IsAssignableFrom(param.DataType)) {
           foreach (TreeNode node in operatorNodeTable[op])
-            node.Nodes.Add(CreateTreeNode(opParam));
+            node.Nodes.Add(CreateTreeNode(param));
         }
       }
     }
     private void RemoveParameterNodes(IEnumerable<IParameter> parameters) {
-      foreach (IParameter param in parameters) {
-        IValueParameter<IOperator> opParam = param as IValueParameter<IOperator>;
-        if (opParam != null) {
-          while (opParamNodeTable.ContainsKey(opParam))
-            RemoveTreeNode(opParamNodeTable[opParam][0]);
+      foreach (IValueParameter param in parameters.OfType<IValueParameter>()) {
+        if (typeof(IOperator).IsAssignableFrom(param.DataType)) {
+          while (opParamNodeTable.ContainsKey(param))
+            RemoveTreeNode(opParamNodeTable[param][0]);
         }
       }
@@ -235,10 +234,10 @@
         Invoke(new EventHandler(opParam_ValueChanged), sender, e);
       else {
-        IValueParameter<IOperator> opParam = (IValueParameter<IOperator>)sender;
+        IValueParameter opParam = (IValueParameter)sender;
         foreach (TreeNode node in opParamNodeTable[opParam].ToArray())
           ClearTreeNode(node);
         foreach (TreeNode node in opParamNodeTable[opParam]) {
           node.Text = opParam.Name + ": ";
-          FillTreeNode(node, opParam.Value);
+          FillTreeNode(node, (IOperator)opParam.Value);
         }
       }
@@ -265,5 +264,5 @@
         IOperator op = (IOperator)sender;
         foreach (TreeNode node in operatorNodeTable[op]) {
-          IValueParameter<IOperator> opParam = GetOperatorParameterTag(node);
+          IValueParameter opParam = GetOperatorParameterTag(node);
           if (opParam == null)
             node.Text = op.Name + " (" + op.ItemName + ")";
@@ -330,7 +329,6 @@
         node.Nodes.Clear();
         IOperator op = GetOperatorTag(node);
-        foreach (IParameter param in op.Parameters) {
-          IValueParameter<IOperator> opParam = param as IValueParameter<IOperator>;
-          if (opParam != null) node.Nodes.Add(CreateTreeNode(opParam));
+        foreach (IValueParameter param in op.Parameters.OfType<IValueParameter>()) {
+          if (typeof(IOperator).IsAssignableFrom(param.DataType)) node.Nodes.Add(CreateTreeNode(param));
         }
       }
@@ -343,5 +341,5 @@
     private void graphTreeView_KeyDown(object sender, KeyEventArgs e) {
       if (!ReadOnly && (e.KeyCode == Keys.Delete) && (graphTreeView.SelectedNode != null)) {
-        IValueParameter<IOperator> opParam = GetOperatorParameterTag(graphTreeView.SelectedNode);
+        IValueParameter opParam = GetOperatorParameterTag(graphTreeView.SelectedNode);
         if (opParam != null) opParam.Value = null;
       }
@@ -371,5 +369,5 @@
     private void graphTreeView_ItemDrag(object sender, ItemDragEventArgs e) {
       TreeNode node = (TreeNode)e.Item;
-      IValueParameter<IOperator> opParam = GetOperatorParameterTag(node);
+      IValueParameter opParam = GetOperatorParameterTag(node);
       IOperator op = GetOperatorTag(node);
       DataObject data = new DataObject();
@@ -404,5 +402,5 @@
         if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) op = (IOperator)op.Clone();
         TreeNode node = graphTreeView.GetNodeAt(graphTreeView.PointToClient(new Point(e.X, e.Y)));
-        IValueParameter<IOperator> opParam = GetOperatorParameterTag(node);
+        IValueParameter opParam = GetOperatorParameterTag(node);
         opParam.Value = op;
       }
@@ -436,19 +434,19 @@
     }
 
-    private IValueParameter<IOperator> GetOperatorParameterTag(TreeNode node) {
+    private IValueParameter GetOperatorParameterTag(TreeNode node) {
       if (node.Tag != null)
-        return ((Tuple<IValueParameter<IOperator>, IOperator>)node.Tag).Item1;
+        return ((Tuple<IValueParameter, IOperator>)node.Tag).Item1;
       else
         return null;
     }
-    private void SetOperatorParameterTag(TreeNode node, IValueParameter<IOperator> opParam) {
+    private void SetOperatorParameterTag(TreeNode node, IValueParameter opParam) {
       if (node.Tag == null)
-        node.Tag = new Tuple<IValueParameter<IOperator>, IOperator>(opParam, null);
+        node.Tag = new Tuple<IValueParameter, IOperator>(opParam, null);
       else
-        ((Tuple<IValueParameter<IOperator>, IOperator>)node.Tag).Item1 = opParam;
+        ((Tuple<IValueParameter, IOperator>)node.Tag).Item1 = opParam;
     }
     private IOperator GetOperatorTag(TreeNode node) {
       if (node.Tag != null)
-        return ((Tuple<IValueParameter<IOperator>, IOperator>)node.Tag).Item2;
+        return ((Tuple<IValueParameter, IOperator>)node.Tag).Item2;
       else
         return null;
@@ -456,7 +454,7 @@
     private void SetOperatorTag(TreeNode node, IOperator op) {
       if (node.Tag == null)
-        node.Tag = new Tuple<IValueParameter<IOperator>, IOperator>(null, op);
+        node.Tag = new Tuple<IValueParameter, IOperator>(null, op);
       else
-        ((Tuple<IValueParameter<IOperator>, IOperator>)node.Tag).Item2 = op;
+        ((Tuple<IValueParameter, IOperator>)node.Tag).Item2 = op;
     }
 
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterCollectionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterCollectionView.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterCollectionView.cs	(revision 3407)
@@ -55,9 +55,9 @@
       if (createParameterDialog.ShowDialog(this) == DialogResult.OK) {
         IParameter param = createParameterDialog.Parameter;
-        if (Content.ContainsKey(param.Name))
+        if ((param != null) && Content.ContainsKey(param.Name))
           param = (IParameter)Activator.CreateInstance(param.GetType(), GetUniqueName(param.Name), param.Description);
         return param;
-      } else
-        return null;
+      }
+      return null;
     }
   }
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ValueParameterCollectionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ValueParameterCollectionView.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ValueParameterCollectionView.cs	(revision 3407)
@@ -58,9 +58,9 @@
       if (createParameterDialog.ShowDialog(this) == DialogResult.OK) {
         IValueParameter param = (IValueParameter)createParameterDialog.Parameter;
-        if (Content.ContainsKey(param.Name))
+        if ((param != null) && Content.ContainsKey(param.Name))
           param = (IValueParameter)Activator.CreateInstance(param.GetType(), GetUniqueName(param.Name), param.Description);
         return param;
-      } else
-        return null;
+      }
+      return null;
     }
   }
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/VariableView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/VariableView.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/VariableView.cs	(revision 3407)
@@ -123,9 +123,14 @@
       if (typeSelectorDialog == null) {
         typeSelectorDialog = new TypeSelectorDialog();
-        typeSelectorDialog.Caption = "Select Value Type";
+        typeSelectorDialog.Caption = "Select Value";
         typeSelectorDialog.TypeSelector.Configure(typeof(IItem), false, false);
       }
       if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
-        Content.Value = (IItem)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        try {
+          Content.Value = (IItem)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        }
+        catch (Exception ex) {
+          Auxiliary.ShowErrorMessageBox(ex);
+        }
       }
     }
Index: /trunk/sources/HeuristicLab.Core/3.3/OperatorGraph.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/OperatorGraph.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Core/3.3/OperatorGraph.cs	(revision 3407)
@@ -90,5 +90,5 @@
     protected OperatorGraph(bool deserializing) : base(deserializing) { }
 
-    //mkommend: IMPROTANT DO NOT REMOVE THIS PRIVATE EVENT
+    //mkommend: IMPORTANT DO NOT REMOVE THIS PRIVATE EVENT
     //needed to register OperatorGraph events in GraphVisualizationInfo
     public event EventHandler DeserializationFinished;
@@ -144,21 +144,22 @@
       var opParams = from o in Operators
                      from p in o.Parameters
-                     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)
+                     where p is IValueParameter
+                     where typeof(IOperator).IsAssignableFrom(((IValueParameter)p).DataType)
+                     where (((IValueParameter)p).Value != null) && (((IValueParameter)p).Value == op)
+                     select (IValueParameter)p;
+      foreach (IValueParameter opParam in opParams)
         opParam.Value = null;
     }
     private void AddParameter(IParameter param) {
-      IValueParameter<IOperator> opParam = param as IValueParameter<IOperator>;
-      if (opParam != null) {
-        RegisterOperatorParameterEvents(opParam);
-        if (opParam.Value != null) Operators.Add(opParam.Value);
+      IValueParameter valueParam = param as IValueParameter;
+      if ((valueParam != null) && (typeof(IOperator).IsAssignableFrom(valueParam.DataType))) {
+        RegisterOperatorParameterEvents(valueParam);
+        if (valueParam.Value != null) Operators.Add((IOperator)valueParam.Value);
       }
     }
     private void RemoveParameter(IParameter param) {
-      IValueParameter<IOperator> opParam = param as IValueParameter<IOperator>;
-      if (opParam != null) {
-        DeregisterOperatorParameterEvents(opParam);
+      IValueParameter valueParam = param as IValueParameter;
+      if ((valueParam != null) && (typeof(IOperator).IsAssignableFrom(valueParam.DataType))) {
+        DeregisterOperatorParameterEvents(valueParam);
       }
     }
@@ -171,8 +172,10 @@
         foreach (IOperator op in operators) {
           RegisterOperatorEvents(op);
-          foreach (IParameter param in op.Parameters) {
-            IValueParameter<IOperator> opParam = param as IValueParameter<IOperator>;
-            if (opParam != null) RegisterOperatorParameterEvents(opParam);
-          }
+          var opParams = from p in op.Parameters
+                         where p is IValueParameter
+                         where typeof(IOperator).IsAssignableFrom(((IValueParameter)p).DataType)
+                         select (IValueParameter)p;
+          foreach (IValueParameter opParam in opParams)
+            RegisterOperatorParameterEvents(opParam);
         }
       }
@@ -190,8 +193,8 @@
       op.Parameters.CollectionReset -= new CollectionItemsChangedEventHandler<IParameter>(Parameters_CollectionReset);
     }
-    private void RegisterOperatorParameterEvents(IValueParameter<IOperator> opParam) {
+    private void RegisterOperatorParameterEvents(IValueParameter opParam) {
       opParam.ValueChanged += new EventHandler(opParam_ValueChanged);
     }
-    private void DeregisterOperatorParameterEvents(IValueParameter<IOperator> opParam) {
+    private void DeregisterOperatorParameterEvents(IValueParameter opParam) {
       opParam.ValueChanged -= new EventHandler(opParam_ValueChanged);
     }
@@ -234,6 +237,6 @@
     }
     private void opParam_ValueChanged(object sender, EventArgs e) {
-      IValueParameter<IOperator> opParam = (IValueParameter<IOperator>)sender;
-      if (opParam.Value != null) Operators.Add(opParam.Value);
+      IValueParameter opParam = (IValueParameter)sender;
+      if (opParam.Value != null) Operators.Add((IOperator)opParam.Value);
     }
     #endregion
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 3406)
+++ /trunk/sources/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj	(revision 3407)
@@ -92,9 +92,9 @@
     </Compile>
     <None Include="HeuristicLabOperatorsViewsPlugin.cs.frame" />
-    <Compile Include="MultipleCallsOperatorView.cs">
+    <Compile Include="MultiOperatorView.cs">
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Include="MultipleCallsOperatorView.Designer.cs">
-      <DependentUpon>MultipleCallsOperatorView.cs</DependentUpon>
+    <Compile Include="MultiOperatorView.Designer.cs">
+      <DependentUpon>MultiOperatorView.cs</DependentUpon>
     </Compile>
     <Compile Include="OperatorView.cs">
Index: /trunk/sources/HeuristicLab.Operators.Views/3.3/MultiOperatorView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views/3.3/MultiOperatorView.Designer.cs	(revision 3407)
+++ /trunk/sources/HeuristicLab.Operators.Views/3.3/MultiOperatorView.Designer.cs	(revision 3407)
@@ -0,0 +1,184 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Operators.Views {
+  partial class MultiOperatorView<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.tabControl = new System.Windows.Forms.TabControl();
+      this.operatorsTabPage = new System.Windows.Forms.TabPage();
+      this.operatorListView = new HeuristicLab.Core.Views.ItemListView<T>();
+      this.parametersTabPage = new System.Windows.Forms.TabPage();
+      this.parameterCollectionView = new HeuristicLab.Core.Views.ParameterCollectionView();
+      this.breakpointCheckBox = new System.Windows.Forms.CheckBox();
+      this.breakpointLabel = new System.Windows.Forms.Label();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.tabControl.SuspendLayout();
+      this.operatorsTabPage.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.Size = new System.Drawing.Size(414, 20);
+      // 
+      // 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.operatorsTabPage);
+      this.tabControl.Controls.Add(this.parametersTabPage);
+      this.tabControl.Location = new System.Drawing.Point(0, 72);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(486, 410);
+      this.tabControl.TabIndex = 6;
+      // 
+      // operatorsTabPage
+      // 
+      this.operatorsTabPage.Controls.Add(this.operatorListView);
+      this.operatorsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.operatorsTabPage.Name = "operatorsTabPage";
+      this.operatorsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.operatorsTabPage.Size = new System.Drawing.Size(478, 384);
+      this.operatorsTabPage.TabIndex = 0;
+      this.operatorsTabPage.Text = "Operators";
+      this.operatorsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // operatorListView
+      // 
+      this.operatorListView.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.operatorListView.Caption = "Operator List";
+      this.operatorListView.Content = null;
+      this.operatorListView.Location = new System.Drawing.Point(6, 6);
+      this.operatorListView.Name = "operatorListView";
+      this.operatorListView.Size = new System.Drawing.Size(466, 372);
+      this.operatorListView.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;
+      // 
+      // breakpointCheckBox
+      // 
+      this.breakpointCheckBox.AutoSize = true;
+      this.breakpointCheckBox.Location = new System.Drawing.Point(72, 52);
+      this.breakpointCheckBox.Name = "breakpointCheckBox";
+      this.breakpointCheckBox.Size = new System.Drawing.Size(15, 14);
+      this.breakpointCheckBox.TabIndex = 5;
+      this.breakpointCheckBox.UseVisualStyleBackColor = true;
+      this.breakpointCheckBox.CheckedChanged += new System.EventHandler(this.breakpointCheckBox_CheckedChanged);
+      this.toolTip.SetToolTip(this.breakpointCheckBox, "Check if an engine should stop execution each time after this operator has been processed.");
+      // 
+      // breakpointLabel
+      // 
+      this.breakpointLabel.AutoSize = true;
+      this.breakpointLabel.Location = new System.Drawing.Point(3, 52);
+      this.breakpointLabel.Name = "breakpointLabel";
+      this.breakpointLabel.Size = new System.Drawing.Size(61, 13);
+      this.breakpointLabel.TabIndex = 4;
+      this.breakpointLabel.Text = "&Breakpoint:";
+      // 
+      // MultiOperatorView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.breakpointCheckBox);
+      this.Controls.Add(this.breakpointLabel);
+      this.Controls.Add(this.tabControl);
+      this.Name = "MultiOperatorView";
+      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);
+      this.Controls.SetChildIndex(this.breakpointLabel, 0);
+      this.Controls.SetChildIndex(this.breakpointCheckBox, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.tabControl.ResumeLayout(false);
+      this.operatorsTabPage.ResumeLayout(false);
+      this.parametersTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.TabControl tabControl;
+    protected System.Windows.Forms.TabPage operatorsTabPage;
+    protected System.Windows.Forms.TabPage parametersTabPage;
+    protected HeuristicLab.Core.Views.ParameterCollectionView parameterCollectionView;
+    protected HeuristicLab.Core.Views.ItemListView<T> operatorListView;
+    protected System.Windows.Forms.CheckBox breakpointCheckBox;
+    protected System.Windows.Forms.Label breakpointLabel;
+  }
+}
Index: /trunk/sources/HeuristicLab.Operators.Views/3.3/MultiOperatorView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views/3.3/MultiOperatorView.cs	(revision 3407)
+++ /trunk/sources/HeuristicLab.Operators.Views/3.3/MultiOperatorView.cs	(revision 3407)
@@ -0,0 +1,101 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Operators.Views { 
+  /// <summary>
+  /// The base class for visual representations of items.
+  /// </summary>
+  [View("MultiOperator View")]
+  [Content(typeof(MultiOperator<>), true)]
+  public partial class MultiOperatorView<T> : NamedItemView where T : class, IOperator {
+    public new MultiOperator<T> Content {
+      get { return (MultiOperator<T>)base.Content; }
+      set { base.Content = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ItemBaseView"/>.
+    /// </summary>
+    public MultiOperatorView() {
+      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 MultiOperatorView(MultiOperator<T> content)
+      : this() {
+      Content = content;
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the underlying <see cref="IOperatorGraph"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void DeregisterContentEvents() {
+      Content.BreakpointChanged -= new EventHandler(Content_BreakpointChanged);
+      base.DeregisterContentEvents();
+    }
+
+    /// <summary>
+    /// Adds eventhandlers to the underlying <see cref="IOperatorGraph"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.BreakpointChanged += new EventHandler(Content_BreakpointChanged);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        breakpointCheckBox.Checked = false;
+        breakpointCheckBox.Enabled = false;
+        operatorListView.Content = null;
+        parameterCollectionView.Content = null;
+        tabControl.Enabled = false;
+      } else {
+        breakpointCheckBox.Checked = Content.Breakpoint;
+        breakpointCheckBox.Enabled = true;
+        operatorListView.Content = Content.Operators;
+        parameterCollectionView.Content = ((IOperator)Content).Parameters;
+        tabControl.Enabled = true;
+      }
+    }
+
+    protected void Content_BreakpointChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_DescriptionChanged), sender, e);
+      else
+        breakpointCheckBox.Checked = Content.Breakpoint;
+    }
+
+    protected void breakpointCheckBox_CheckedChanged(object sender, System.EventArgs e) {
+      if (Content != null) Content.Breakpoint = breakpointCheckBox.Checked;
+    }
+  }
+}
Index: unk/sources/HeuristicLab.Operators.Views/3.3/MultipleCallsOperatorView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views/3.3/MultipleCallsOperatorView.Designer.cs	(revision 3406)
+++ 	(revision )
@@ -1,184 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Operators.Views {
-  partial class MultipleCallsOperatorView {
-    /// <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.operatorsTabPage = new System.Windows.Forms.TabPage();
-      this.operatorListView = new HeuristicLab.Core.Views.OperatorListView();
-      this.parametersTabPage = new System.Windows.Forms.TabPage();
-      this.parameterCollectionView = new HeuristicLab.Core.Views.ParameterCollectionView();
-      this.breakpointCheckBox = new System.Windows.Forms.CheckBox();
-      this.breakpointLabel = new System.Windows.Forms.Label();
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.tabControl.SuspendLayout();
-      this.operatorsTabPage.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.Size = new System.Drawing.Size(414, 20);
-      // 
-      // 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.operatorsTabPage);
-      this.tabControl.Controls.Add(this.parametersTabPage);
-      this.tabControl.Location = new System.Drawing.Point(0, 72);
-      this.tabControl.Name = "tabControl";
-      this.tabControl.SelectedIndex = 0;
-      this.tabControl.Size = new System.Drawing.Size(486, 410);
-      this.tabControl.TabIndex = 6;
-      // 
-      // operatorsTabPage
-      // 
-      this.operatorsTabPage.Controls.Add(this.operatorListView);
-      this.operatorsTabPage.Location = new System.Drawing.Point(4, 22);
-      this.operatorsTabPage.Name = "operatorsTabPage";
-      this.operatorsTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.operatorsTabPage.Size = new System.Drawing.Size(478, 384);
-      this.operatorsTabPage.TabIndex = 0;
-      this.operatorsTabPage.Text = "Operators";
-      this.operatorsTabPage.UseVisualStyleBackColor = true;
-      // 
-      // operatorListView
-      // 
-      this.operatorListView.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.operatorListView.Caption = "Operator List";
-      this.operatorListView.Content = null;
-      this.operatorListView.Location = new System.Drawing.Point(6, 6);
-      this.operatorListView.Name = "operatorListView";
-      this.operatorListView.Size = new System.Drawing.Size(466, 372);
-      this.operatorListView.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;
-      // 
-      // breakpointCheckBox
-      // 
-      this.breakpointCheckBox.AutoSize = true;
-      this.breakpointCheckBox.Location = new System.Drawing.Point(72, 52);
-      this.breakpointCheckBox.Name = "breakpointCheckBox";
-      this.breakpointCheckBox.Size = new System.Drawing.Size(15, 14);
-      this.breakpointCheckBox.TabIndex = 5;
-      this.breakpointCheckBox.UseVisualStyleBackColor = true;
-      this.breakpointCheckBox.CheckedChanged += new System.EventHandler(this.breakpointCheckBox_CheckedChanged);
-      this.toolTip.SetToolTip(this.breakpointCheckBox, "Check if an engine should stop execution each time after this operator has been processed.");
-      // 
-      // breakpointLabel
-      // 
-      this.breakpointLabel.AutoSize = true;
-      this.breakpointLabel.Location = new System.Drawing.Point(3, 52);
-      this.breakpointLabel.Name = "breakpointLabel";
-      this.breakpointLabel.Size = new System.Drawing.Size(61, 13);
-      this.breakpointLabel.TabIndex = 4;
-      this.breakpointLabel.Text = "&Breakpoint:";
-      // 
-      // MultipleCallsOperatorView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.breakpointCheckBox);
-      this.Controls.Add(this.breakpointLabel);
-      this.Controls.Add(this.tabControl);
-      this.Name = "MultipleCallsOperatorView";
-      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);
-      this.Controls.SetChildIndex(this.breakpointLabel, 0);
-      this.Controls.SetChildIndex(this.breakpointCheckBox, 0);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.tabControl.ResumeLayout(false);
-      this.operatorsTabPage.ResumeLayout(false);
-      this.parametersTabPage.ResumeLayout(false);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    protected System.Windows.Forms.TabControl tabControl;
-    protected System.Windows.Forms.TabPage operatorsTabPage;
-    protected System.Windows.Forms.TabPage parametersTabPage;
-    protected HeuristicLab.Core.Views.ParameterCollectionView parameterCollectionView;
-    protected HeuristicLab.Core.Views.OperatorListView operatorListView;
-    protected System.Windows.Forms.CheckBox breakpointCheckBox;
-    protected System.Windows.Forms.Label breakpointLabel;
-  }
-}
Index: unk/sources/HeuristicLab.Operators.Views/3.3/MultipleCallsOperatorView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views/3.3/MultipleCallsOperatorView.cs	(revision 3406)
+++ 	(revision )
@@ -1,101 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.Operators.Views { 
-  /// <summary>
-  /// The base class for visual representations of items.
-  /// </summary>
-  [View("MultipleCallsOperator View")]
-  [Content(typeof(MultipleCallsOperator), true)]
-  public partial class MultipleCallsOperatorView : NamedItemView {
-    public new MultipleCallsOperator Content {
-      get { return (MultipleCallsOperator)base.Content; }
-      set { base.Content = value; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="ItemBaseView"/>.
-    /// </summary>
-    public MultipleCallsOperatorView() {
-      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 MultipleCallsOperatorView(MultipleCallsOperator content)
-      : this() {
-      Content = content;
-    }
-
-    /// <summary>
-    /// Removes the eventhandlers from the underlying <see cref="IOperatorGraph"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void DeregisterContentEvents() {
-      Content.BreakpointChanged -= new EventHandler(Content_BreakpointChanged);
-      base.DeregisterContentEvents();
-    }
-
-    /// <summary>
-    /// Adds eventhandlers to the underlying <see cref="IOperatorGraph"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.BreakpointChanged += new EventHandler(Content_BreakpointChanged);
-    }
-
-    protected override void OnContentChanged() {
-      base.OnContentChanged();
-      if (Content == null) {
-        breakpointCheckBox.Checked = false;
-        breakpointCheckBox.Enabled = false;
-        operatorListView.Content = null;
-        parameterCollectionView.Content = null;
-        tabControl.Enabled = false;
-      } else {
-        breakpointCheckBox.Checked = Content.Breakpoint;
-        breakpointCheckBox.Enabled = true;
-        operatorListView.Content = Content.Operators;
-        parameterCollectionView.Content = ((IOperator)Content).Parameters;
-        tabControl.Enabled = true;
-      }
-    }
-
-    protected void Content_BreakpointChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_DescriptionChanged), sender, e);
-      else
-        breakpointCheckBox.Checked = Content.Breakpoint;
-    }
-
-    protected void breakpointCheckBox_CheckedChanged(object sender, System.EventArgs e) {
-      if (Content != null) Content.Breakpoint = breakpointCheckBox.Checked;
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj	(revision 3406)
+++ /trunk/sources/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj	(revision 3407)
@@ -91,5 +91,5 @@
     <Compile Include="Assigner.cs" />
     <Compile Include="AlgorithmOperator.cs" />
-    <Compile Include="MultipleCallsOperator.cs" />
+    <Compile Include="MultiOperator.cs" />
     <Compile Include="Operator.cs" />
     <Compile Include="Placeholder.cs" />
Index: /trunk/sources/HeuristicLab.Operators/3.3/MultiOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators/3.3/MultiOperator.cs	(revision 3407)
+++ /trunk/sources/HeuristicLab.Operators/3.3/MultiOperator.cs	(revision 3407)
@@ -0,0 +1,124 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// A base class for operators which apply arbitrary many other operators of a specific type.
+  /// </summary>
+  [Item("MultiOperator<T>", "A base class for operators which apply arbitrary many other operators of a specific type.")]
+  [StorableClass]
+  public abstract class MultiOperator<T> : SingleSuccessorOperator where T : class, IOperator {
+    private List<IValueParameter<T>> operatorParameters;
+
+    [Storable]
+    private ItemList<T> operators;
+    public ItemList<T> Operators {
+      get { return operators; }
+    }
+
+    public MultiOperator()
+      : base() {
+      operators = new ItemList<T>();
+      Initialize();
+    }
+    [StorableConstructor]
+    protected MultiOperator(bool deserializing) : base(deserializing) { }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void Initialize() {
+      if (operators != null) RegisterOperatorsEvents();
+      operatorParameters = new List<IValueParameter<T>>();
+      for (int i = 0; i < Operators.Count; i++) {
+        IValueParameter<T> opParam = (IValueParameter<T>)Parameters[i.ToString()];
+        operatorParameters.Add(opParam);
+        opParam.ValueChanged += new EventHandler(opParam_ValueChanged);
+      }
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      MultiOperator<T> clone = (MultiOperator<T>)base.Clone(cloner);
+      clone.operators = (ItemList<T>)cloner.Clone(operators);
+      clone.Initialize();
+      return clone;
+    }
+
+    private void UpdateOperatorParameters() {
+      foreach (IValueParameter<T> opParam in operatorParameters) {
+        opParam.ValueChanged -= new EventHandler(opParam_ValueChanged);
+        Parameters.Remove(opParam.Name);
+      }
+      operatorParameters.Clear();
+      for (int i = 0; i < Operators.Count; i++) {
+        IValueParameter<T> opParam = new ValueParameter<T>(i.ToString(), string.Empty, Operators[i]);
+        opParam.ValueChanged += new EventHandler(opParam_ValueChanged);
+        Parameters.Add(opParam);
+        operatorParameters.Add(opParam);
+      }
+    }
+
+    #region Events
+    private void RegisterOperatorsEvents() {
+      operators.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<T>>(operators_ItemsAdded);
+      operators.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<T>>(operators_ItemsRemoved);
+      operators.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedItem<T>>(operators_ItemsReplaced);
+      operators.ItemsMoved += new CollectionItemsChangedEventHandler<IndexedItem<T>>(operators_ItemsMoved);
+      operators.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<T>>(operators_CollectionReset);
+    }
+    private void DeregisterOperatorsEvents() {
+      operators.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<T>>(operators_ItemsAdded);
+      operators.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<T>>(operators_ItemsRemoved);
+      operators.ItemsReplaced -= new CollectionItemsChangedEventHandler<IndexedItem<T>>(operators_ItemsReplaced);
+      operators.ItemsMoved -= new CollectionItemsChangedEventHandler<IndexedItem<T>>(operators_ItemsMoved);
+      operators.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<T>>(operators_CollectionReset);
+    }
+    private void operators_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {
+      UpdateOperatorParameters();
+    }
+    private void operators_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {
+      UpdateOperatorParameters();
+    }
+    private void operators_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {
+      foreach (IndexedItem<T> item in e.Items)
+        operatorParameters[item.Index].Value = item.Value;
+    }
+    private void operators_ItemsMoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {
+      foreach (IndexedItem<T> item in e.Items)
+        operatorParameters[item.Index].Value = item.Value;
+    }
+    private void operators_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<T>> e) {
+      UpdateOperatorParameters();
+    }
+    private void opParam_ValueChanged(object sender, EventArgs e) {
+      IValueParameter<T> opParam = (IValueParameter<T>)sender;
+      operators[operatorParameters.IndexOf(opParam)] = opParam.Value;
+    }
+    #endregion
+  }
+}
Index: unk/sources/HeuristicLab.Operators/3.3/MultipleCallsOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators/3.3/MultipleCallsOperator.cs	(revision 3406)
+++ 	(revision )
@@ -1,124 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using HeuristicLab.Collections;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Operators {
-  /// <summary>
-  /// A base class for operators which apply multiple user-defined operators.
-  /// </summary>
-  [Item("MultipleCallsOperator", "A base class for operators which apply multiple user-defined operators.")]
-  [StorableClass]
-  public abstract class MultipleCallsOperator : SingleSuccessorOperator {
-    private List<IValueParameter<IOperator>> operatorParameters;
-
-    [Storable]
-    private OperatorList operators;
-    public OperatorList Operators {
-      get { return operators; }
-    }
-
-    public MultipleCallsOperator()
-      : base() {
-      operators = new OperatorList();
-      Initialize();
-    }
-    [StorableConstructor]
-    protected MultipleCallsOperator(bool deserializing) : base(deserializing) { }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void Initialize() {
-      if (operators != null) RegisterOperatorsEvents();
-      operatorParameters = new List<IValueParameter<IOperator>>();
-      for (int i = 0; i < Operators.Count; i++) {
-        IValueParameter<IOperator> opParam = (IValueParameter<IOperator>)Parameters[i.ToString()];
-        operatorParameters.Add(opParam);
-        opParam.ValueChanged += new EventHandler(opParam_ValueChanged);
-      }
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      MultipleCallsOperator clone = (MultipleCallsOperator)base.Clone(cloner);
-      clone.operators = (OperatorList)cloner.Clone(operators);
-      clone.Initialize();
-      return clone;
-    }
-
-    private void UpdateOperatorParameters() {
-      foreach (IValueParameter<IOperator> opParam in operatorParameters) {
-        opParam.ValueChanged -= new EventHandler(opParam_ValueChanged);
-        Parameters.Remove(opParam.Name);
-      }
-      operatorParameters.Clear();
-      for (int i = 0; i < Operators.Count; i++) {
-        IValueParameter<IOperator> opParam = new ValueParameter<IOperator>(i.ToString(), string.Empty, Operators[i]);
-        opParam.ValueChanged += new EventHandler(opParam_ValueChanged);
-        Parameters.Add(opParam);
-        operatorParameters.Add(opParam);
-      }
-    }
-
-    #region Events
-    private void RegisterOperatorsEvents() {
-      operators.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<IOperator>>(operators_ItemsAdded);
-      operators.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<IOperator>>(operators_ItemsRemoved);
-      operators.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedItem<IOperator>>(operators_ItemsReplaced);
-      operators.ItemsMoved += new CollectionItemsChangedEventHandler<IndexedItem<IOperator>>(operators_ItemsMoved);
-      operators.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<IOperator>>(operators_CollectionReset);
-    }
-    private void DeregisterOperatorsEvents() {
-      operators.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<IOperator>>(operators_ItemsAdded);
-      operators.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<IOperator>>(operators_ItemsRemoved);
-      operators.ItemsReplaced -= new CollectionItemsChangedEventHandler<IndexedItem<IOperator>>(operators_ItemsReplaced);
-      operators.ItemsMoved -= new CollectionItemsChangedEventHandler<IndexedItem<IOperator>>(operators_ItemsMoved);
-      operators.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<IOperator>>(operators_CollectionReset);
-    }
-    private void operators_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOperator>> e) {
-      UpdateOperatorParameters();
-    }
-    private void operators_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOperator>> e) {
-      UpdateOperatorParameters();
-    }
-    private void operators_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOperator>> e) {
-      foreach (IndexedItem<IOperator> item in e.Items)
-        operatorParameters[item.Index].Value = item.Value;
-    }
-    private void operators_ItemsMoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOperator>> e) {
-      foreach (IndexedItem<IOperator> item in e.Items)
-        operatorParameters[item.Index].Value = item.Value;
-    }
-    private void operators_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOperator>> e) {
-      UpdateOperatorParameters();
-    }
-    private void opParam_ValueChanged(object sender, EventArgs e) {
-      IValueParameter<IOperator> opParam = (IValueParameter<IOperator>)sender;
-      operators[operatorParameters.IndexOf(opParam)] = opParam.Value;
-    }
-    #endregion
-  }
-}
Index: /trunk/sources/HeuristicLab.Operators/3.3/SubScopesProcessor.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators/3.3/SubScopesProcessor.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Operators/3.3/SubScopesProcessor.cs	(revision 3407)
@@ -32,5 +32,5 @@
   [Item("SubScopesProcessor", "An operator which contains multiple operators of which each is applied on one sub-scope of the current scope. The first operator is applied on the first sub-scope, the second on the second, and so on.")]
   [StorableClass]
-  public sealed class SubScopesProcessor : MultipleCallsOperator {
+  public sealed class SubScopesProcessor : MultiOperator<IOperator> {
     public ValueLookupParameter<BoolValue> ParallelParameter {
       get { return (ValueLookupParameter<BoolValue>)Parameters["Parallel"]; }
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/AlgorithmView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/AlgorithmView.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/AlgorithmView.cs	(revision 3407)
@@ -176,8 +176,14 @@
         problemTypeSelectorDialog = new TypeSelectorDialog();
         problemTypeSelectorDialog.Caption = "Select Problem";
+        problemTypeSelectorDialog.TypeSelector.Caption = "Available Problems";
         problemTypeSelectorDialog.TypeSelector.Configure(Content.ProblemType, false, false);
       }
       if (problemTypeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
-        Content.Problem = (IProblem)problemTypeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        try {
+          Content.Problem = (IProblem)problemTypeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        }
+        catch (Exception ex) {
+          Auxiliary.ShowErrorMessageBox(ex);
+        }
       }
     }
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/BatchRunView.cs	(revision 3407)
@@ -166,8 +166,14 @@
         algorithmTypeSelectorDialog = new TypeSelectorDialog();
         algorithmTypeSelectorDialog.Caption = "Select Algorithm";
+        algorithmTypeSelectorDialog.TypeSelector.Caption = "Available Algorithms";
         algorithmTypeSelectorDialog.TypeSelector.Configure(typeof(IAlgorithm), false, false);
       }
       if (algorithmTypeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
-        Content.Algorithm = (IAlgorithm)algorithmTypeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        try {
+          Content.Algorithm = (IAlgorithm)algorithmTypeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        }
+        catch (Exception ex) {
+          Auxiliary.ShowErrorMessageBox(ex);
+        }
       }
     }
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/OptimizerListView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/OptimizerListView.Designer.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/OptimizerListView.Designer.cs	(revision 3407)
@@ -33,5 +33,4 @@
     protected override void Dispose(bool disposing) {
       if (disposing) {
-        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
         if (components != null) components.Dispose();
       }
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/OptimizerListView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/OptimizerListView.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/OptimizerListView.cs	(revision 3407)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using System.Windows.Forms;
 using HeuristicLab.Collections;
@@ -31,6 +32,4 @@
   [Content(typeof(IItemList<IOptimizer>), false)]
   public partial class OptimizerListView : ItemListView<IOptimizer> {
-    protected TypeSelectorDialog typeSelectorDialog;
-
     /// <summary>
     /// Initializes a new instance of <see cref="VariablesScopeView"/> with caption "Variables Scope View".
@@ -55,12 +54,18 @@
       if (typeSelectorDialog == null) {
         typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Optimizer";
         typeSelectorDialog.TypeSelector.Caption = "Available Optimizers";
         typeSelectorDialog.TypeSelector.Configure(typeof(IOptimizer), false, false);
       }
 
-      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK)
-        return typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType() as IOptimizer;
-      else
-        return null;
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          return (IOptimizer)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        }
+        catch (Exception ex) {
+          Auxiliary.ShowErrorMessageBox(ex);
+        }
+      }
+      return null;
     }
   }
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/ResultCollectionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/ResultCollectionView.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/ResultCollectionView.cs	(revision 3407)
@@ -56,8 +56,5 @@
 
     protected override IResult CreateItem() {
-      IResult item = new Result();
-      if (Content.ContainsKey(item.Name))
-        item = new Result(GetUniqueName(item.Name), typeof(IItem));
-      return item;
+      return null;
     }
   }
Index: /trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueLookupParameterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueLookupParameterView.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueLookupParameterView.cs	(revision 3407)
@@ -138,6 +138,12 @@
         typeSelectorDialog.TypeSelector.Configure(Content.DataType, false, false);
       }
-      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK)
-        Content.Value = (T)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          Content.Value = (T)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        }
+        catch (Exception ex) {
+          Auxiliary.ShowErrorMessageBox(ex);
+        }
+      }
     }
     protected virtual void clearValueButton_Click(object sender, EventArgs e) {
Index: /trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueParameterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueParameterView.cs	(revision 3406)
+++ /trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueParameterView.cs	(revision 3407)
@@ -126,6 +126,12 @@
         typeSelectorDialog.TypeSelector.Configure(Content.DataType, false, false);
       }
-      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK)
-        Content.Value = (T)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          Content.Value = (T)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        }
+        catch (Exception ex) {
+          Auxiliary.ShowErrorMessageBox(ex);
+        }
+      }
     }
     protected virtual void setValueButton_Click(object sender, EventArgs e) {
