Index: /trunk/sources/HeuristicLab.Common/3.2/EventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.Common/3.2/EventArgs.cs	(revision 2844)
+++ /trunk/sources/HeuristicLab.Common/3.2/EventArgs.cs	(revision 2845)
@@ -21,7 +21,4 @@
 
 using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
 
 namespace HeuristicLab.Common {
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj	(revision 2844)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj	(revision 2845)
@@ -70,4 +70,16 @@
   <ItemGroup>
     <None Include="HeuristicLabCoreViewsPlugin.cs.frame" />
+    <Compile Include="OperatorTreeView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OperatorTreeView.Designer.cs">
+      <DependentUpon>OperatorTreeView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ParameterizedNamedItemView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ParameterizedNamedItemView.Designer.cs">
+      <DependentUpon>ParameterizedNamedItemView.cs</DependentUpon>
+    </Compile>
     <Compile Include="ValueParameterCollectionView.cs">
       <SubType>UserControl</SubType>
@@ -124,10 +136,4 @@
     <Compile Include="OperatorsSidebar.Designer.cs">
       <DependentUpon>OperatorsSidebar.cs</DependentUpon>
-    </Compile>
-    <Compile Include="OperatorTreeView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="OperatorTreeView.Designer.cs">
-      <DependentUpon>OperatorTreeView.cs</DependentUpon>
     </Compile>
     <Compile Include="TypeSelectorDialog.cs">
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterizedNamedItemView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterizedNamedItemView.Designer.cs	(revision 2845)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterizedNamedItemView.Designer.cs	(revision 2845)
@@ -0,0 +1,97 @@
+#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 ParameterizedNamedItemView {
+    /// <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.parameterCollectionView = new HeuristicLab.Core.Views.ParameterCollectionView();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      this.nameTextBox.Size = new System.Drawing.Size(418, 20);
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.descriptionTextBox.Size = new System.Drawing.Size(418, 87);
+      // 
+      // 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.Location = new System.Drawing.Point(0, 119);
+      this.parameterCollectionView.Name = "parameterCollectionView";
+      this.parameterCollectionView.Size = new System.Drawing.Size(490, 234);
+      this.parameterCollectionView.TabIndex = 4;
+      // 
+      // ParameterizedNamedItemView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.parameterCollectionView);
+      this.Name = "ParameterizedNamedItemView";
+      this.Size = new System.Drawing.Size(490, 353);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
+      this.Controls.SetChildIndex(this.parameterCollectionView, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected ParameterCollectionView parameterCollectionView;
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterizedNamedItemView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterizedNamedItemView.cs	(revision 2845)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterizedNamedItemView.cs	(revision 2845)
@@ -0,0 +1,60 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Core.Views {
+  /// <summary>
+  /// The base class for visual representations of items.
+  /// </summary>
+  [Content(typeof(ParameterizedNamedItem), true)]
+  [Content(typeof(IParameterizedNamedItem), false)]
+  public partial class ParameterizedNamedItemView : NamedItemView {
+    public new IParameterizedNamedItem Content {
+      get { return (IParameterizedNamedItem)base.Content; }
+      set { base.Content = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ItemBaseView"/>.
+    /// </summary>
+    public ParameterizedNamedItemView() {
+      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 ParameterizedNamedItemView(IParameterizedNamedItem content)
+      : this() {
+      Content = content;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        parameterCollectionView.Content = null;
+      } else {
+        parameterCollectionView.Content = Content.Parameters;
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj	(revision 2844)
+++ /trunk/sources/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj	(revision 2845)
@@ -104,4 +104,5 @@
     <Compile Include="ChangedEventArgs.cs" />
     <None Include="HeuristicLabCorePlugin.cs.frame" />
+    <Compile Include="Interfaces\IParameterizedNamedItem.cs" />
     <Compile Include="Interfaces\IParameterizedItem.cs" />
     <Compile Include="Interfaces\IAtomicOperation.cs" />
@@ -109,4 +110,5 @@
     <Compile Include="Interfaces\IOperation.cs" />
     <Compile Include="OperationCollection.cs" />
+    <Compile Include="ParameterizedNamedItem.cs" />
     <Compile Include="ValueParameterCollection.cs" />
     <Compile Include="Interfaces\IValueLookupParameter.cs" />
Index: /trunk/sources/HeuristicLab.Core/3.3/Interfaces/IOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/Interfaces/IOperator.cs	(revision 2844)
+++ /trunk/sources/HeuristicLab.Core/3.3/Interfaces/IOperator.cs	(revision 2845)
@@ -27,5 +27,5 @@
   /// a basic instruction of an algorithm.
   /// </summary>
-  public interface IOperator : INamedItem, IParameterizedItem {
+  public interface IOperator : IParameterizedNamedItem {
     /// <summary>
     /// Gets or sets a boolean value whether the engine should stop here during the run.
Index: /trunk/sources/HeuristicLab.Core/3.3/Interfaces/IParameterizedNamedItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/Interfaces/IParameterizedNamedItem.cs	(revision 2845)
+++ /trunk/sources/HeuristicLab.Core/3.3/Interfaces/IParameterizedNamedItem.cs	(revision 2845)
@@ -0,0 +1,27 @@
+#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 {
+  /// <summary>
+  /// An interface which represents an item which has a name and contains parameters.
+  /// </summary>
+  public interface IParameterizedNamedItem : INamedItem, IParameterizedItem { }
+}
Index: /trunk/sources/HeuristicLab.Core/3.3/ParameterizedNamedItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/ParameterizedNamedItem.cs	(revision 2845)
+++ /trunk/sources/HeuristicLab.Core/3.3/ParameterizedNamedItem.cs	(revision 2845)
@@ -0,0 +1,89 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Collections;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// A base class for items which have a name and contain parameters.
+  /// </summary>
+  [Item("ParameterizedNamedItem", "A base class for items which have a name and contain parameters.")]
+  public abstract class ParameterizedNamedItem : NamedItem, IParameterizedNamedItem {
+    private ParameterCollection parameters;
+    [Storable]
+    protected ParameterCollection Parameters {
+      get { return parameters; }
+      private set {
+        if (parameters != null) parameters.Changed -= new ChangedEventHandler(Parameters_Changed);
+        parameters = value;
+        readOnlyParameters = null;
+        if (parameters != null) parameters.Changed += new ChangedEventHandler(Parameters_Changed);
+      }
+    }
+    private ReadOnlyObservableKeyedCollection<string, IParameter> readOnlyParameters;
+    IObservableKeyedCollection<string, IParameter> IParameterizedItem.Parameters {
+      get {
+        if (readOnlyParameters == null) readOnlyParameters = parameters.AsReadOnly();
+        return readOnlyParameters;
+      }
+    }
+
+    protected ParameterizedNamedItem() {
+      Name = ItemName;
+      Description = ItemDescription;
+      Parameters = new ParameterCollection();
+      readOnlyParameters = null;
+    }
+    protected ParameterizedNamedItem(string name)
+      : base(name) {
+      Description = ItemDescription;
+      Parameters = new ParameterCollection();
+      readOnlyParameters = null;
+    }
+    protected ParameterizedNamedItem(string name, ParameterCollection parameters)
+      : base(name) {
+      Description = ItemDescription;
+      Parameters = parameters;
+      readOnlyParameters = null;
+    }
+    protected ParameterizedNamedItem(string name, string description)
+      : base(name, description) {
+      Parameters = new ParameterCollection();
+      readOnlyParameters = null;
+    }
+    protected ParameterizedNamedItem(string name, string description, ParameterCollection parameters)
+      : base(name, description) {
+      Parameters = parameters;
+      readOnlyParameters = null;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      ParameterizedNamedItem clone = (ParameterizedNamedItem)base.Clone(cloner);
+      clone.Parameters = (ParameterCollection)cloner.Clone(parameters);
+      return clone;
+    }
+
+    private void Parameters_Changed(object sender, ChangedEventArgs e) {
+      OnChanged(e);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Operators.Views/3.3/OperatorView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views/3.3/OperatorView.Designer.cs	(revision 2844)
+++ /trunk/sources/HeuristicLab.Operators.Views/3.3/OperatorView.Designer.cs	(revision 2845)
@@ -45,7 +45,14 @@
     /// </summary>
     private void InitializeComponent() {
-      this.parameterCollectionView = new HeuristicLab.Core.Views.ParameterCollectionView();
+      this.breakpointLabel = new System.Windows.Forms.Label();
+      this.breakpointCheckBox = new System.Windows.Forms.CheckBox();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       this.SuspendLayout();
+      // 
+      // parameterCollectionView
+      // 
+      this.parameterCollectionView.Location = new System.Drawing.Point(0, 139);
+      this.parameterCollectionView.Size = new System.Drawing.Size(490, 214);
+      this.parameterCollectionView.TabIndex = 6;
       // 
       // nameTextBox
@@ -53,22 +60,23 @@
       this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
       this.errorProvider.SetIconPadding(this.nameTextBox, 2);
-      this.nameTextBox.Size = new System.Drawing.Size(418, 20);
       // 
-      // descriptionTextBox
+      // breakpointLabel
       // 
-      this.descriptionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.descriptionTextBox.Size = new System.Drawing.Size(418, 87);
+      this.breakpointLabel.AutoSize = true;
+      this.breakpointLabel.Location = new System.Drawing.Point(3, 120);
+      this.breakpointLabel.Name = "breakpointLabel";
+      this.breakpointLabel.Size = new System.Drawing.Size(61, 13);
+      this.breakpointLabel.TabIndex = 4;
+      this.breakpointLabel.Text = "&Breakpoint:";
       // 
-      // parameterCollectionView
+      // breakpointCheckBox
       // 
-      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.Location = new System.Drawing.Point(0, 119);
-      this.parameterCollectionView.Name = "parameterCollectionView";
-      this.parameterCollectionView.Size = new System.Drawing.Size(490, 234);
-      this.parameterCollectionView.TabIndex = 4;
+      this.breakpointCheckBox.AutoSize = true;
+      this.breakpointCheckBox.Location = new System.Drawing.Point(72, 119);
+      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);
       // 
       // OperatorView
@@ -76,7 +84,9 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.parameterCollectionView);
+      this.Controls.Add(this.breakpointLabel);
+      this.Controls.Add(this.breakpointCheckBox);
       this.Name = "OperatorView";
-      this.Size = new System.Drawing.Size(490, 353);
+      this.Controls.SetChildIndex(this.breakpointCheckBox, 0);
+      this.Controls.SetChildIndex(this.breakpointLabel, 0);
       this.Controls.SetChildIndex(this.nameTextBox, 0);
       this.Controls.SetChildIndex(this.nameLabel, 0);
@@ -92,5 +102,6 @@
     #endregion
 
-    protected HeuristicLab.Core.Views.ParameterCollectionView parameterCollectionView;
+    private System.Windows.Forms.Label breakpointLabel;
+    private System.Windows.Forms.CheckBox breakpointCheckBox;
 
   }
Index: /trunk/sources/HeuristicLab.Operators.Views/3.3/OperatorView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views/3.3/OperatorView.cs	(revision 2844)
+++ /trunk/sources/HeuristicLab.Operators.Views/3.3/OperatorView.cs	(revision 2845)
@@ -23,4 +23,5 @@
 using HeuristicLab.Core.Views;
 using HeuristicLab.MainForm;
+using System;
 
 namespace HeuristicLab.Operators.Views {
@@ -30,5 +31,5 @@
   [Content(typeof(Operator), true)]
   [Content(typeof(IOperator), false)]
-  public partial class OperatorView : NamedItemView {
+  public partial class OperatorView : ParameterizedNamedItemView {
     public new IOperator Content {
       get { return (IOperator)base.Content; }
@@ -51,11 +52,41 @@
     }
 
+    /// <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) {
-        parameterCollectionView.Content = null;
+        breakpointCheckBox.Checked = false;
+        breakpointCheckBox.Enabled = false;
       } else {
-        parameterCollectionView.Content = ((IOperator)Content).Parameters;
+        breakpointCheckBox.Checked = Content.Breakpoint;
       }
+    }
+
+    private void Content_BreakpointChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_DescriptionChanged), sender, e);
+      else
+        breakpointCheckBox.Checked = Content.Breakpoint;
+    }
+
+    private void breakpointCheckBox_CheckedChanged(object sender, System.EventArgs e) {
+      if (Content != null) Content.Breakpoint = breakpointCheckBox.Checked;
     }
   }
Index: /trunk/sources/HeuristicLab.Operators/3.3/Operator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators/3.3/Operator.cs	(revision 2844)
+++ /trunk/sources/HeuristicLab.Operators/3.3/Operator.cs	(revision 2845)
@@ -22,5 +22,4 @@
 using System;
 using System.Drawing;
-using HeuristicLab.Collections;
 using HeuristicLab.Core;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
@@ -31,5 +30,5 @@
   /// </summary>
   [Item("Operator", "Base class for operators.")]
-  public abstract class Operator : NamedItem, IOperator {
+  public abstract class Operator : ParameterizedNamedItem, IOperator {
     public override Image ItemImage {
       get { return HeuristicLab.Common.Resources.VS2008ImageLibrary.Method; }
@@ -37,23 +36,4 @@
     public override bool CanChangeDescription {
       get { return false; }
-    }
-
-    private ParameterCollection parameters;
-    [Storable]
-    protected ParameterCollection Parameters {
-      get { return parameters;}
-      private set {
-        if (parameters != null) parameters.Changed -= new ChangedEventHandler(Parameters_Changed);
-        parameters = value;
-        readOnlyParameters = null;
-        if (parameters != null) parameters.Changed += new ChangedEventHandler(Parameters_Changed);
-      }
-    }
-    private ReadOnlyObservableKeyedCollection<string, IParameter> readOnlyParameters;
-    IObservableKeyedCollection<string, IParameter> IParameterizedItem.Parameters {
-      get {
-        if (readOnlyParameters == null) readOnlyParameters = parameters.AsReadOnly();
-        return readOnlyParameters;
-      }
     }
 
@@ -103,8 +83,26 @@
     /// the canceled flag to <c>false</c> and the name of the operator to the type name. 
     /// </summary>
-    protected Operator() {
-      Name = ItemName;
-      Parameters = new ParameterCollection();
-      readOnlyParameters = null;
+    protected Operator()
+      : base() {
+      canceled = false;
+      breakpoint = false;
+    }
+    protected Operator(string name)
+      : base(name) {
+      canceled = false;
+      breakpoint = false;
+    }
+    protected Operator(string name, ParameterCollection parameters)
+      : base(name, parameters) {
+      canceled = false;
+      breakpoint = false;
+    }
+    protected Operator(string name, string description)
+      : base(name, description) {
+      canceled = false;
+      breakpoint = false;
+    }
+    protected Operator(string name, string description, ParameterCollection parameters)
+      : base(name, description, parameters) {
       canceled = false;
       breakpoint = false;
@@ -119,5 +117,4 @@
     public override IDeepCloneable Clone(Cloner cloner) {
       Operator clone = (Operator)base.Clone(cloner);
-      clone.Parameters = (ParameterCollection)cloner.Clone(parameters);
       clone.canceled = canceled;
       clone.breakpoint = breakpoint;
@@ -178,8 +175,4 @@
       }
     }
-
-    private void Parameters_Changed(object sender, ChangedEventArgs e) {
-      OnChanged(e);
-    }
   }
 }
Index: /trunk/sources/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj	(revision 2844)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj	(revision 2845)
@@ -51,4 +51,5 @@
   <ItemGroup>
     <None Include="HeuristicLabOptimizationPlugin.cs.frame" />
+    <Compile Include="IAlgorithm.cs" />
     <Compile Include="HeuristicLabOptimizationPlugin.cs" />
     <Compile Include="IProblem.cs" />
@@ -68,4 +69,8 @@
       <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
       <Name>HeuristicLab.Common.Resources-3.2</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common\3.2\HeuristicLab.Common-3.2.csproj">
+      <Project>{1FC004FC-59AF-4249-B1B6-FF25873A20E4}</Project>
+      <Name>HeuristicLab.Common-3.2</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
Index: /trunk/sources/HeuristicLab.Optimization/3.3/HeuristicLabOptimizationPlugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/HeuristicLabOptimizationPlugin.cs.frame	(revision 2844)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/HeuristicLabOptimizationPlugin.cs.frame	(revision 2845)
@@ -29,4 +29,5 @@
   [PluginFile("HeuristicLab.Optimization-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.2")]
   [PluginDependency("HeuristicLab.Common.Resources", "3.2")]
   [PluginDependency("HeuristicLab.Core", "3.3")]
Index: /trunk/sources/HeuristicLab.Optimization/3.3/IAlgorithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/IAlgorithm.cs	(revision 2845)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/IAlgorithm.cs	(revision 2845)
@@ -0,0 +1,47 @@
+#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;
+
+namespace HeuristicLab.Optimization {
+  /// <summary>
+  /// Interface to represent an algorithm.
+  /// </summary>
+  public interface IAlgorithm : IParameterizedNamedItem {
+    IProblem Problem { get; set; }
+    TimeSpan ExecutionTime { get; }
+    bool Running { get; }
+    bool Finished { get; }
+
+    void Prepare();
+    void Start();
+    void Stop();
+
+    event EventHandler ExecutionTimeChanged;
+    event EventHandler Prepared;
+    event EventHandler Started;
+    event EventHandler Stopped;
+    event EventHandler<EventArgs<Exception>> ExceptionOccurred;
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Optimization/3.3/IProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/IProblem.cs	(revision 2844)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/IProblem.cs	(revision 2845)
@@ -26,4 +26,4 @@
   /// Interface to represent a problem.
   /// </summary>
-  public interface IProblem : INamedItem, IParameterizedItem { }
+  public interface IProblem : IParameterizedNamedItem { }
 }
Index: /trunk/sources/HeuristicLab.Optimization/3.3/Problem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/Problem.cs	(revision 2844)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/Problem.cs	(revision 2845)
@@ -21,7 +21,5 @@
 
 using System.Drawing;
-using HeuristicLab.Collections;
 using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Optimization {
@@ -30,43 +28,14 @@
   /// </summary>
   [Item("Problem", "Base class for problems.")]
-  public abstract class Problem : NamedItem, IProblem {
+  public abstract class Problem : ParameterizedNamedItem, IProblem {
     public override Image ItemImage {
       get { return HeuristicLab.Common.Resources.VS2008ImageLibrary.Type; }
     }
 
-    private ParameterCollection parameters;
-    [Storable]
-    protected ParameterCollection Parameters {
-      get { return parameters;}
-      private set {
-        if (parameters != null) parameters.Changed -= new ChangedEventHandler(Parameters_Changed);
-        parameters = value;
-        readOnlyParameters = null;
-        if (parameters != null) parameters.Changed += new ChangedEventHandler(Parameters_Changed);
-      }
-    }
-    private ReadOnlyObservableKeyedCollection<string, IParameter> readOnlyParameters;
-    IObservableKeyedCollection<string, IParameter> IParameterizedItem.Parameters {
-      get {
-        if (readOnlyParameters == null) readOnlyParameters = parameters.AsReadOnly();
-        return readOnlyParameters;
-      }
-    }
-
-    protected Problem() {
-      Name = ItemName;
-      Parameters = new ParameterCollection();
-      readOnlyParameters = null;
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      Problem clone = (Problem)base.Clone(cloner);
-      clone.Parameters = (ParameterCollection)cloner.Clone(parameters);
-      return clone;
-    }
-
-    private void Parameters_Changed(object sender, ChangedEventArgs e) {
-      OnChanged(e);
-    }
+    protected Problem() : base() { }
+    protected Problem(string name) : base(name) { }
+    protected Problem(string name, ParameterCollection parameters) : base(name, parameters) { }
+    protected Problem(string name, string description) : base(name, description) { }
+    protected Problem(string name, string description, ParameterCollection parameters) : base(name, description, parameters) { }
   }
 }
