Index: /trunk/sources/HeuristicLab.Operators.Views/3.3/CheckedMultiOperatorView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views/3.3/CheckedMultiOperatorView.Designer.cs	(revision 3591)
+++ /trunk/sources/HeuristicLab.Operators.Views/3.3/CheckedMultiOperatorView.Designer.cs	(revision 3591)
@@ -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 CheckedMultiOperatorView<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.CheckedItemListView<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.CheckedItemListView<T> operatorListView;
+    protected System.Windows.Forms.CheckBox breakpointCheckBox;
+    protected System.Windows.Forms.Label breakpointLabel;
+  }
+}
Index: /trunk/sources/HeuristicLab.Operators.Views/3.3/CheckedMultiOperatorView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views/3.3/CheckedMultiOperatorView.cs	(revision 3591)
+++ /trunk/sources/HeuristicLab.Operators.Views/3.3/CheckedMultiOperatorView.cs	(revision 3591)
@@ -0,0 +1,98 @@
+#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 { 
+  [View("CheckedMultiOperator View")]
+  [Content(typeof(CheckedMultiOperator<>), true)]
+  public partial class CheckedMultiOperatorView<T> : NamedItemView where T : class, IOperator {
+    public new CheckedMultiOperator<T> Content {
+      get { return (CheckedMultiOperator<T>)base.Content; }
+      set { base.Content = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="CheckedMultiOperatorView"/>.
+    /// </summary>
+    public CheckedMultiOperatorView() {
+      InitializeComponent();
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the underlying <see cref="CheckedMultiOperator"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="NamedItemView.DeregisterContentEvents"/> of base class <see cref="NamedItemView"/>.</remarks>
+    protected override void DeregisterContentEvents() {
+      Content.BreakpointChanged -= new EventHandler(Content_BreakpointChanged);
+      base.DeregisterContentEvents();
+    }
+
+    /// <summary>
+    /// Adds eventhandlers to the underlying <see cref="CheckedMultiOperator"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="NamedItemView.RegisterContentEvents"/> of base class <see cref="NamedItemView"/>.</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;
+        operatorListView.Content = null;
+        parameterCollectionView.Content = null;
+      } else {
+        breakpointCheckBox.Checked = Content.Breakpoint;
+        operatorListView.Content = Content.Operators;
+        parameterCollectionView.Content = ((IOperator)Content).Parameters;
+      }
+      SetEnabledStateOfControls();
+    }
+
+    protected override void OnReadOnlyChanged() {
+      base.OnReadOnlyChanged();
+      SetEnabledStateOfControls();
+    }
+
+    private void SetEnabledStateOfControls() {
+      breakpointCheckBox.Enabled = Content != null && !ReadOnly;
+      operatorListView.Enabled = Content != null;
+      parameterCollectionView.Enabled = Content != null;
+    }
+
+    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.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj	(revision 3590)
+++ /trunk/sources/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj	(revision 3591)
@@ -92,4 +92,10 @@
     </Compile>
     <None Include="HeuristicLabOperatorsViewsPlugin.cs.frame" />
+    <Compile Include="CheckedMultiOperatorView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="CheckedMultiOperatorView.Designer.cs">
+      <DependentUpon>CheckedMultiOperatorView.cs</DependentUpon>
+    </Compile>
     <Compile Include="MultiOperatorView.cs">
       <SubType>UserControl</SubType>
Index: /trunk/sources/HeuristicLab.Operators.Views/3.3/MultiOperatorView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views/3.3/MultiOperatorView.Designer.cs	(revision 3590)
+++ /trunk/sources/HeuristicLab.Operators.Views/3.3/MultiOperatorView.Designer.cs	(revision 3591)
@@ -47,5 +47,5 @@
       this.tabControl = new System.Windows.Forms.TabControl();
       this.operatorsTabPage = new System.Windows.Forms.TabPage();
-      this.operatorListView = new HeuristicLab.Core.Views.CheckedItemListView<T>();
+      this.operatorListView = new HeuristicLab.Core.Views.ItemListView<T>();
       this.parametersTabPage = new System.Windows.Forms.TabPage();
       this.parameterCollectionView = new HeuristicLab.Core.Views.ParameterCollectionView();
@@ -178,5 +178,5 @@
     protected System.Windows.Forms.TabPage parametersTabPage;
     protected HeuristicLab.Core.Views.ParameterCollectionView parameterCollectionView;
-    protected HeuristicLab.Core.Views.CheckedItemListView<T> operatorListView;
+    protected HeuristicLab.Core.Views.ItemListView<T> operatorListView;
     protected System.Windows.Forms.CheckBox breakpointCheckBox;
     protected System.Windows.Forms.Label breakpointLabel;
Index: /trunk/sources/HeuristicLab.Operators/3.3/CheckedMultiOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators/3.3/CheckedMultiOperator.cs	(revision 3591)
+++ /trunk/sources/HeuristicLab.Operators/3.3/CheckedMultiOperator.cs	(revision 3591)
@@ -0,0 +1,55 @@
+#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, operators can be checked/unchecked.
+  /// </summary>
+  [Item("CheckedMultiOperator<T>", "A base class for operators which apply arbitrary many other operators of a specific type.")]
+  [StorableClass]
+  public abstract class CheckedMultiOperator<T> : MultiOperator<T> where T : class, IOperator {
+    /// <summary>
+    /// Gets the operators of the checked multi operator
+    /// </summary>
+    public new ICheckedItemList<T> Operators {
+      get { return (ICheckedItemList<T>)base.Operators; }
+      protected set { base.Operators = value; }
+    }
+    /// <summary>
+    /// Creates a new instance of CheckedMultiOperator
+    /// </summary>
+    public CheckedMultiOperator()
+      : base() {
+      Operators = new CheckedItemList<T>();
+    }
+    [StorableConstructor]
+    protected CheckedMultiOperator(bool deserializing) : base(deserializing) { }
+  }
+}
Index: /trunk/sources/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj	(revision 3590)
+++ /trunk/sources/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj	(revision 3591)
@@ -85,4 +85,5 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="CheckedMultiOperator.cs" />
     <Compile Include="CombinedOperator.cs" />
     <None Include="HeuristicLabOperatorsPlugin.cs.frame" />
Index: /trunk/sources/HeuristicLab.Operators/3.3/MultiOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators/3.3/MultiOperator.cs	(revision 3590)
+++ /trunk/sources/HeuristicLab.Operators/3.3/MultiOperator.cs	(revision 3591)
@@ -39,14 +39,23 @@
 
     [Storable]
-    private CheckedItemList<T> operators;
-    public CheckedItemList<T> Operators {
+    private IItemList<T> operators;
+    public IItemList<T> Operators {
       get { return operators; }
+      protected set {
+        if (operators != value) {
+          if (value == null) throw new ArgumentException();
+          DeregisterOperatorsEvents();
+          operators = value;
+          RegisterOperatorsEvents();
+        }
+      }
     }
 
     public MultiOperator()
       : base() {
-      operators = new CheckedItemList<T>();
+      this.operators = new ItemList<T>();
       Initialize();
     }
+
     [StorableConstructor]
     protected MultiOperator(bool deserializing) : base(deserializing) { }
@@ -65,5 +74,5 @@
     public override IDeepCloneable Clone(Cloner cloner) {
       MultiOperator<T> clone = (MultiOperator<T>)base.Clone(cloner);
-      clone.operators = (CheckedItemList<T>)cloner.Clone(operators);
+      clone.operators = (IItemList<T>)cloner.Clone(operators);
       clone.Initialize();
       return clone;
Index: /trunk/sources/HeuristicLab.Operators/3.3/StochasticMultiOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators/3.3/StochasticMultiOperator.cs	(revision 3590)
+++ /trunk/sources/HeuristicLab.Operators/3.3/StochasticMultiOperator.cs	(revision 3591)
@@ -36,5 +36,5 @@
   [Item("StochasticMultiOperator<T>", "Base class for stochastic multi operators.")]
   [StorableClass]
-  public abstract class StochasticMultiOperator<T> : MultiOperator<T> where T : class, IOperator {
+  public abstract class StochasticMultiOperator<T> : CheckedMultiOperator<T> where T : class, IOperator {
     /// <summary>
     /// Should return true if the StochasticMultiOperator should create a new child operation with the selected successor
@@ -122,18 +122,18 @@
         throw new InvalidOperationException(Name + ": The list of probabilities has to match the number of operators");
       }
+      IOperator successor = null;
       var checkedOperators = Operators.CheckedItems;
-      if (checkedOperators.Count() == 0) {
-        throw new InvalidOperationException(Name + ": At least one operator must be checked.");
-      }
-      double sum = (from indexedItem in checkedOperators select probabilities[indexedItem.Index]).Sum();
-      if (sum == 0) throw new InvalidOperationException(Name + ": All selected operators have zero probability.");
-      double r = random.NextDouble() * sum;
-      sum = 0;
-      IOperator successor = null;
-      foreach (var indexedItem in checkedOperators) {
-        sum += probabilities[indexedItem.Index];
-        if (sum > r) {
-          successor = indexedItem.Value;
-          break;
+      if (checkedOperators.Count() > 0) {
+        // select a random operator from the checked operators
+        double sum = (from indexedItem in checkedOperators select probabilities[indexedItem.Index]).Sum();
+        if (sum == 0) throw new InvalidOperationException(Name + ": All selected operators have zero probability.");
+        double r = random.NextDouble() * sum;
+        sum = 0;
+        foreach (var indexedItem in checkedOperators) {
+          sum += probabilities[indexedItem.Index];
+          if (sum > r) {
+            successor = indexedItem.Value;
+            break;
+          }
         }
       }
