Index: /branches/Operator Architecture Refactoring/HeuristicLab.AdvancedOptimizationFrontend/3.3/MainForm.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.AdvancedOptimizationFrontend/3.3/MainForm.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.AdvancedOptimizationFrontend/3.3/MainForm.cs	(revision 2033)
@@ -41,11 +41,11 @@
     private class Task {
       public string filename;
-      public IStorable storable;
+      public object instance;
       public IEditor editor;
 
       private Task() { }
-      public Task(string filename, IStorable storable, IEditor editor) {
+      public Task(string filename, object instance, IEditor editor) {
         this.filename = filename;
-        this.storable = storable;
+        this.instance = instance;
         this.editor = editor;
       }
@@ -154,5 +154,5 @@
       Task task = (Task)state;
       try {
-        task.storable = PersistenceManager.Load(task.filename);
+        task.instance = PersistenceManager.Load(task.filename);
       } catch (FileNotFoundException fileNotFoundEx) {
         MessageBox.Show("Sorry couldn't open file \"" + task.filename + "\".\nThe file or plugin \"" + fileNotFoundEx.FileName + "\" is not available.\nPlease make sure you have all necessary plugins installed.",
@@ -175,6 +175,6 @@
       else {
         IEditor editor = null;
-        if (task.storable != null) {
-          IEditable editable = task.storable as IEditable;
+        if (task.instance != null) {
+          IEditable editable = task.instance as IEditable;
           if (editable != null)
             editor = editable.CreateEditor();
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/AtomicOperation.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/AtomicOperation.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/AtomicOperation.cs	(revision 2033)
@@ -72,7 +72,7 @@
     /// <param name="clonedObjects">All already cloned objects. (Needed to avoid cycles.)</param>
     /// <returns>The cloned object as <see cref="AtomicOperation"/>.</returns>
-    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+    public override object Clone(IDictionary<long, object> clonedObjects) {
       AtomicOperation clone = new AtomicOperation();
-      clonedObjects.Add(Guid, clone);
+      clonedObjects.Add(clone.Id, clone);
       clone.myOperator = (IOperator)Auxiliary.Clone(Operator, clonedObjects);
       clone.myScope = (IScope)Auxiliary.Clone(Scope, clonedObjects);
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Auxiliary.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Auxiliary.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Auxiliary.cs	(revision 2033)
@@ -38,7 +38,7 @@
     /// <param name="clonedObjects">A dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
     /// <returns>The cloned object.</returns>
-    public static object Clone(IStorable obj, IDictionary<Guid, object> clonedObjects) {
+    public static object Clone(ICloneable obj, IDictionary<long, object> clonedObjects) {
       object clone;
-      if (clonedObjects.TryGetValue(obj.Guid, out clone))
+      if (clonedObjects.TryGetValue(obj.Id, out clone))
         return clone;
       else
@@ -84,47 +84,4 @@
     }
     #endregion
-
-    #region Constraint Violation Messages
-    /// <summary>
-    /// Shows a warning message box with an OK-Button, indicating that the given constraints were violated and so 
-    /// the operation could not be completed. 
-    /// </summary>
-    /// <param name="violatedConstraints">The constraints that could not be fulfilled.</param>
-    public static void ShowConstraintViolationMessageBox(ICollection<IConstraint> violatedConstraints) {
-      string message = BuildConstraintViolationMessage(violatedConstraints);
-      MessageBox.Show("The following constraints are violated. The operation could not be completed.\n\n" + message,
-                      "Constraint Violation",
-                      MessageBoxButtons.OK,
-                      MessageBoxIcon.Warning);
-    }
-    /// <summary>
-    /// Shows a question message box with a yes-no option, where to choose whether to ignore 
-    /// the given violated constraints and to complete the operation or not.
-    /// </summary>
-    /// <param name="violatedConstraints">The constraints that could not be fulfilled.</param>
-    /// <returns>The result of the choice ("Yes" = 6, "No" = 7).</returns>
-    public static DialogResult ShowIgnoreConstraintViolationMessageBox(ICollection<IConstraint> violatedConstraints) {
-      string message = BuildConstraintViolationMessage(violatedConstraints);
-      return MessageBox.Show("The following constraints are violated. Do you want to complete the operation anyhow?\n\n" + message,
-                             "Constraint Violation",
-                             MessageBoxButtons.YesNo,
-                             MessageBoxIcon.Question);
-    }
-    /// <summary>
-    /// Builds a message out of a given collection of violated constraints, 
-    /// including the constraints type and description.
-    /// </summary>
-    /// <param name="violatedConstraints">The constraints that could not be fulfilled.</param>
-    /// <returns>The message to display.</returns>
-    private static string BuildConstraintViolationMessage(ICollection<IConstraint> violatedConstraints) {
-      StringBuilder sb = new StringBuilder();
-      foreach (IConstraint constraint in violatedConstraints) {
-        sb.AppendLine(constraint.GetType().Name);
-        sb.AppendLine(constraint.Description);
-        sb.AppendLine();
-      }
-      return sb.ToString();
-    }
-    #endregion
   }
 }
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/CallGraph.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/CallGraph.cs	(revision 2033)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/CallGraph.cs	(revision 2033)
@@ -0,0 +1,29 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  public class CallGraph : ItemBase, ICallGraph {
+  }
+}
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/CallNode.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/CallNode.cs	(revision 2033)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/CallNode.cs	(revision 2033)
@@ -0,0 +1,29 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  public class CallNode : ItemBase, ICallNode {
+  }
+}
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/CloneableBase.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/CloneableBase.cs	(revision 2033)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/CloneableBase.cs	(revision 2033)
@@ -0,0 +1,65 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Runtime.InteropServices;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// The base class for all cloneable objects.
+  /// </summary>
+  public abstract class CloneableBase : ICloneable {
+    /// <summary>
+    /// Gets a unique id (memory address) of the current instance. The id is used to
+    /// detect, if an object has already been cloned or not.
+    /// </summary>
+    public long Id {
+      get {
+        GCHandle handle = new GCHandle();
+        handle.Target = this;
+        return GCHandle.ToIntPtr(handle).ToInt64();
+      }
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <remarks>Uses the <see cref="Auxiliary.Clone"/> method of the class <see cref="Auxiliary"/>.</remarks>
+    /// <returns>The clone.</returns>
+    public object Clone() {
+      return Auxiliary.Clone(this, new Dictionary<long, object>());
+    }
+    /// <summary>
+    /// Clones the current instance with the <see cref="M:Activator.CreateInstance"/> 
+    /// method of <see cref="Activator"/>.
+    /// </summary>
+    /// <param name="clonedObjects">All already cloned objects.</param>
+    /// <returns>The clone.</returns>
+    public virtual object Clone(IDictionary<long, object> clonedObjects) {
+      CloneableBase clone = (CloneableBase)Activator.CreateInstance(this.GetType());
+      clonedObjects.Add(clone.Id, clone);
+      return clone;
+    }
+  }
+}
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/CompositeOperation.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/CompositeOperation.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/CompositeOperation.cs	(revision 2033)
@@ -84,7 +84,7 @@
     /// <param name="clonedObjects">A dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
     /// <returns>The cloned operation as <see cref="CompositeOperation"/>.</returns>
-    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+    public override object Clone(IDictionary<long, object> clonedObjects) {
       CompositeOperation clone = new CompositeOperation();
-      clonedObjects.Add(Guid, clone);
+      clonedObjects.Add(clone.Id, clone);
       clone.myExecuteInParallel = ExecuteInParallel;
       for (int i = 0; i < Operations.Count; i++)
Index: anches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ConstrainedItemBase.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ConstrainedItemBase.cs	(revision 2032)
+++ 	(revision )
@@ -1,150 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Xml;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Core {
-  /// <summary>
-  /// Base class for all items that are subjects to restrictions.
-  /// </summary>
-  public abstract class ConstrainedItemBase : ItemBase, IConstrainedItem {
-
-    [Storable]
-    private List<IConstraint> myConstraints;
-    /// <summary>
-    /// Gets all current constraints.
-    /// <note type="caution"> The constraints are returned read-only.</note>
-    /// </summary>
-    public virtual ICollection<IConstraint> Constraints {
-      get { return myConstraints.AsReadOnly(); }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="ConstrainedItemBase"/>.
-    /// </summary>
-    protected ConstrainedItemBase() {
-      myConstraints = new List<IConstraint>();
-    }
-
-    /// <summary>
-    /// Clones the current instance (deep clone).
-    /// </summary>
-    /// <remarks>Calls <see cref="StorableBase.Clone
-    /// (System.Collections.Generic.IDictionary&lt;System.Guid, object&gt;)"/> 
-    /// of base class <see cref="ItemBase"/>.<br/>
-    /// Deep clone through <see cref="Auxiliary.Clone"/> method of helper class 
-    /// <see cref="Auxiliary"/>.</remarks>
-    /// <param name="clonedObjects">Dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
-    /// <returns>The cloned object as <see cref="ConstrainedItemBase"/>.</returns>
-    public override object Clone(IDictionary<Guid, object> clonedObjects) {
-      ConstrainedItemBase clone = (ConstrainedItemBase)base.Clone(clonedObjects);
-      clone.myConstraints.Clear();
-      foreach (IConstraint constraint in Constraints)
-        clone.AddConstraint((IConstraint)Auxiliary.Clone(constraint, clonedObjects));
-      return clone;
-    }
-
-    /// <summary>
-    /// Adds the given <paramref name="constraint"/> to the current list.
-    /// </summary>
-    /// <remarks>Calls <see cref="OnConstraintAdded"/>.</remarks>
-    /// <param name="constraint">The constraint to add.</param>
-    public virtual void AddConstraint(IConstraint constraint) {
-      myConstraints.Add(constraint);
-      OnConstraintAdded(constraint);
-    }
-    /// <summary>
-    /// Removes the given <paramref name="constraint"/> from the current list.
-    /// </summary>
-    /// <remarks>Calls <see cref="OnConstraintRemoved"/> if the constraint can be successfully removed.</remarks>
-    /// <param name="constraint">The constraint to remove.</param>
-    public virtual void RemoveConstraint(IConstraint constraint) {
-      if (myConstraints.Remove(constraint))
-        OnConstraintRemoved(constraint);
-    }
-
-    /// <summary>
-    /// Checks all constraints of the current instance.
-    /// </summary>
-    /// <returns><c>true</c> if all constraints could be fulfilled, <c>false</c> otherwise.</returns>
-    public bool IsValid() {
-      bool result = true;
-      foreach (IConstraint constraint in Constraints)
-        result = result && constraint.Check(this);
-      return result;
-    }
-    /// <summary>
-    /// Checks all constraints of the current instance.
-    /// </summary>
-    /// <param name="violatedConstraints">Output parameter; contains all constraints that could not be
-    /// fulfilled.</param>
-    /// <returns><c>true</c> if all constraints could be fulfilled, <c>false</c> otherwise.</returns>
-    public bool IsValid(out ICollection<IConstraint> violatedConstraints) {
-      bool result = true;
-      violatedConstraints = new List<IConstraint>();
-      foreach (IConstraint constraint in Constraints) {
-        if (!constraint.Check(this)) {
-          result = false;
-          violatedConstraints.Add(constraint);
-        }
-      }
-      return result;
-    }
-
-    /// <summary>
-    /// Creates an instance of <see cref="ConstrainedItemBaseView"/> 
-    /// to represent the current instance visually.
-    /// </summary>
-    /// <returns>The created view as <see cref="ConstrainedItemBaseView"/>.</returns>
-    public override IView CreateView() {
-      return new ConstrainedItemBaseView(this);
-    }
-
-    /// <summary>
-    /// Occurs when a constraint is added.
-    /// </summary>
-    public event EventHandler<ConstraintEventArgs> ConstraintAdded;
-    /// <summary>
-    /// Fires a new <c>ConstraintAdded</c> event.
-    /// </summary>
-    /// <param name="constraint">The constraint that was added.</param>
-    protected virtual void OnConstraintAdded(IConstraint constraint) {
-      if (ConstraintAdded != null)
-        ConstraintAdded(this, new ConstraintEventArgs(constraint));
-    }
-    /// <summary>
-    /// Occurs when a constraint is removed.
-    /// </summary>
-    public event EventHandler<ConstraintEventArgs> ConstraintRemoved;
-    /// <summary>
-    /// Fires a new <c>ConstraintRemoved</c> event.
-    /// </summary>
-    /// <param name="constraint">The constraint that was removed.</param>
-    protected virtual void OnConstraintRemoved(IConstraint constraint) {
-      if (ConstraintRemoved != null)
-        ConstraintRemoved(this, new ConstraintEventArgs(constraint));
-    }
-  }
-}
Index: anches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ConstrainedItemBaseView.Designer.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ConstrainedItemBaseView.Designer.cs	(revision 2032)
+++ 	(revision )
@@ -1,174 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Windows.Forms;
-
-namespace HeuristicLab.Core {
-  partial class ConstrainedItemBaseView {
-    /// <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 (chooseItemDialog != null) chooseItemDialog.Dispose();
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.removeConstraintButton = new System.Windows.Forms.Button();
-      this.addConstraintButton = new System.Windows.Forms.Button();
-      this.splitContainer = new System.Windows.Forms.SplitContainer();
-      this.constraintsGroupBox = new System.Windows.Forms.GroupBox();
-      this.constraintsListView = new System.Windows.Forms.ListView();
-      this.columnHeader3 = new System.Windows.Forms.ColumnHeader();
-      this.constraintDetailsGroupBox = new System.Windows.Forms.GroupBox();
-      this.splitContainer.Panel1.SuspendLayout();
-      this.splitContainer.Panel2.SuspendLayout();
-      this.splitContainer.SuspendLayout();
-      this.constraintsGroupBox.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // removeConstraintButton
-      // 
-      this.removeConstraintButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.removeConstraintButton.Enabled = false;
-      this.removeConstraintButton.Location = new System.Drawing.Point(81, 310);
-      this.removeConstraintButton.Name = "removeConstraintButton";
-      this.removeConstraintButton.Size = new System.Drawing.Size(75, 23);
-      this.removeConstraintButton.TabIndex = 2;
-      this.removeConstraintButton.Text = "&Remove";
-      this.removeConstraintButton.UseVisualStyleBackColor = true;
-      this.removeConstraintButton.Click += new System.EventHandler(this.removeConstraintButton_Click);
-      // 
-      // addConstraintButton
-      // 
-      this.addConstraintButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.addConstraintButton.Location = new System.Drawing.Point(0, 310);
-      this.addConstraintButton.Name = "addConstraintButton";
-      this.addConstraintButton.Size = new System.Drawing.Size(75, 23);
-      this.addConstraintButton.TabIndex = 1;
-      this.addConstraintButton.Text = "&Add...";
-      this.addConstraintButton.UseVisualStyleBackColor = true;
-      this.addConstraintButton.Click += new System.EventHandler(this.addConstraintButton_Click);
-      // 
-      // splitContainer
-      // 
-      this.splitContainer.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.splitContainer.Location = new System.Drawing.Point(0, 0);
-      this.splitContainer.Name = "splitContainer";
-      // 
-      // splitContainer.Panel1
-      // 
-      this.splitContainer.Panel1.Controls.Add(this.constraintsGroupBox);
-      // 
-      // splitContainer.Panel2
-      // 
-      this.splitContainer.Panel2.Controls.Add(this.constraintDetailsGroupBox);
-      this.splitContainer.Size = new System.Drawing.Size(423, 304);
-      this.splitContainer.SplitterDistance = 149;
-      this.splitContainer.TabIndex = 0;
-      // 
-      // constraintsGroupBox
-      // 
-      this.constraintsGroupBox.Controls.Add(this.constraintsListView);
-      this.constraintsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.constraintsGroupBox.Location = new System.Drawing.Point(0, 0);
-      this.constraintsGroupBox.Name = "constraintsGroupBox";
-      this.constraintsGroupBox.Size = new System.Drawing.Size(149, 304);
-      this.constraintsGroupBox.TabIndex = 0;
-      this.constraintsGroupBox.TabStop = false;
-      this.constraintsGroupBox.Text = "&Constraints";
-      // 
-      // constraintsListView
-      // 
-      this.constraintsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
-            this.columnHeader3});
-      this.constraintsListView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.constraintsListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
-      this.constraintsListView.HideSelection = false;
-      this.constraintsListView.Location = new System.Drawing.Point(3, 16);
-      this.constraintsListView.Name = "constraintsListView";
-      this.constraintsListView.ShowItemToolTips = true;
-      this.constraintsListView.Size = new System.Drawing.Size(143, 285);
-      this.constraintsListView.TabIndex = 0;
-      this.constraintsListView.UseCompatibleStateImageBehavior = false;
-      this.constraintsListView.View = System.Windows.Forms.View.Details;
-      this.constraintsListView.SelectedIndexChanged += new System.EventHandler(this.constraintsListView_SelectedIndexChanged);
-      this.constraintsListView.SizeChanged += new System.EventHandler(this.constraintsListView_SizeChanged);
-      this.constraintsListView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.constraintsListView_KeyDown);
-      // 
-      // constraintDetailsGroupBox
-      // 
-      this.constraintDetailsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.constraintDetailsGroupBox.Location = new System.Drawing.Point(0, 0);
-      this.constraintDetailsGroupBox.Name = "constraintDetailsGroupBox";
-      this.constraintDetailsGroupBox.Size = new System.Drawing.Size(270, 304);
-      this.constraintDetailsGroupBox.TabIndex = 0;
-      this.constraintDetailsGroupBox.TabStop = false;
-      this.constraintDetailsGroupBox.Text = "&Details";
-      // 
-      // ConstrainedItemBaseView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.addConstraintButton);
-      this.Controls.Add(this.removeConstraintButton);
-      this.Controls.Add(this.splitContainer);
-      this.Name = "ConstrainedItemBaseView";
-      this.Size = new System.Drawing.Size(423, 333);
-      this.splitContainer.Panel1.ResumeLayout(false);
-      this.splitContainer.Panel2.ResumeLayout(false);
-      this.splitContainer.ResumeLayout(false);
-      this.constraintsGroupBox.ResumeLayout(false);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private ColumnHeader columnHeader3;
-    protected Button removeConstraintButton;
-    protected Button addConstraintButton;
-    protected SplitContainer splitContainer;
-    protected GroupBox constraintsGroupBox;
-    protected ListView constraintsListView;
-    protected GroupBox constraintDetailsGroupBox;
-
-
-  }
-}
Index: anches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ConstrainedItemBaseView.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ConstrainedItemBaseView.cs	(revision 2032)
+++ 	(revision )
@@ -1,182 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Text;
-using System.Windows.Forms;
-
-namespace HeuristicLab.Core {
-  /// <summary>
-  /// The visual representation of an <see cref="IConstrainedItem"/>.
-  /// </summary>
-  public partial class ConstrainedItemBaseView : ViewBase {
-    private ChooseItemDialog chooseItemDialog;
-
-    /// <summary>
-    /// Gets or sets the current item to represent visually.
-    /// </summary>
-    public IConstrainedItem ConstrainedItem {
-      get { return (IConstrainedItem)Item; }
-      set { base.Item = value; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="ConstrainedItemBaseView"/> 
-    /// with the caption "Constrained Item".
-    /// </summary>
-    public ConstrainedItemBaseView() {
-      InitializeComponent();
-      constraintsListView.Columns[0].Width = Math.Max(0, constraintsListView.Width - 25);
-      Caption = "Constrained Item";
-    }
-    /// <summary>
-    /// Initializes a new instance of <see cref="ConstrainedItemBaseView"/> with the given 
-    /// <paramref name="constraintItem"/>.
-    /// </summary>
-    /// <param name="constraintItem">The item to represent visually.</param>
-    public ConstrainedItemBaseView(IConstrainedItem constraintItem)
-      : this() {
-      ConstrainedItem = constraintItem;
-    }
-
-    /// <summary>
-    /// Removes the event handlers from the underlying <see cref="IConstrainedItem"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void RemoveItemEvents() {
-      ConstrainedItem.ConstraintAdded -= new EventHandler<ConstraintEventArgs>(ConstrainedItemBase_ConstraintAdded);
-      ConstrainedItem.ConstraintRemoved -= new EventHandler<ConstraintEventArgs>(ConstrainedItemBase_ConstraintRemoved);
-      base.RemoveItemEvents();
-    }
-    /// <summary>
-    /// Adds event handlers to the underlying <see cref="IConstrainedItem"/>. 
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void AddItemEvents() {
-      base.AddItemEvents();
-      ConstrainedItem.ConstraintAdded += new EventHandler<ConstraintEventArgs>(ConstrainedItemBase_ConstraintAdded);
-      ConstrainedItem.ConstraintRemoved += new EventHandler<ConstraintEventArgs>(ConstrainedItemBase_ConstraintRemoved);
-    }
-
-    /// <summary>
-    /// Updates all controls with the latest data of the model.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void UpdateControls() {
-      base.UpdateControls();
-      constraintDetailsGroupBox.Controls.Clear();
-      if (ConstrainedItem == null) {
-        Caption = "Constrained Item";
-        constraintsListView.Enabled = false;
-        constraintDetailsGroupBox.Enabled = false;
-        removeConstraintButton.Enabled = false;
-      } else {
-        Caption = "Constrained Item (" + ConstrainedItem.GetType().Name + ")";
-        constraintsListView.Enabled = true;
-        constraintsListView.Items.Clear();
-        foreach (IConstraint constraint in ConstrainedItem.Constraints) {
-          ListViewItem item = new ListViewItem();
-          item.Text = constraint.GetType().Name;
-          item.Tag = constraint;
-          constraintsListView.Items.Add(item);
-        }
-        if (constraintsListView.Items.Count > 0)
-          constraintsListView.SelectedIndices.Add(0);
-      }
-    }
-
-    private void constraintsListView_SelectedIndexChanged(object sender, EventArgs e) {
-      if (constraintDetailsGroupBox.Controls.Count > 0)
-        constraintDetailsGroupBox.Controls[0].Dispose();
-      constraintDetailsGroupBox.Controls.Clear();
-      constraintDetailsGroupBox.Enabled = false;
-      removeConstraintButton.Enabled = false;
-      if (constraintsListView.SelectedItems.Count > 0) {
-        removeConstraintButton.Enabled = true;
-      }
-      if (constraintsListView.SelectedItems.Count == 1) {
-        IConstraint constraint = (IConstraint)constraintsListView.SelectedItems[0].Tag;
-        Control view = (Control)constraint.CreateView();
-        if (view != null) {
-          constraintDetailsGroupBox.Controls.Add(view);
-          view.Dock = DockStyle.Fill;
-          constraintDetailsGroupBox.Enabled = true;
-        }
-      }
-    }
-
-    #region Size Changed Events
-    private void constraintsListView_SizeChanged(object sender, EventArgs e) {
-      if (constraintsListView.Columns.Count > 0)
-        constraintsListView.Columns[0].Width = Math.Max(0, constraintsListView.Width - 25);
-    }
-    #endregion
-
-    #region Key Events
-    private void constraintsListView_KeyDown(object sender, KeyEventArgs e) {
-      if (e.KeyCode == Keys.Delete) {
-        if (constraintsListView.SelectedItems.Count > 0) {
-          foreach (ListViewItem item in constraintsListView.SelectedItems)
-            ConstrainedItem.RemoveConstraint((IConstraint)item.Tag);
-        }
-      }
-    }
-    #endregion
-
-    #region Button Events
-    private void addConstraintButton_Click(object sender, EventArgs e) {
-      if (chooseItemDialog == null) {
-        chooseItemDialog = new ChooseItemDialog(typeof(IConstraint));
-        chooseItemDialog.Caption = "Add Constraint";
-      }
-      if (chooseItemDialog.ShowDialog(this) == DialogResult.OK)
-        ConstrainedItem.AddConstraint((IConstraint)chooseItemDialog.Item);
-    }
-    private void removeConstraintButton_Click(object sender, EventArgs e) {
-      if (constraintsListView.SelectedItems.Count > 0) {
-        foreach (ListViewItem item in constraintsListView.SelectedItems)
-          ConstrainedItem.RemoveConstraint((IConstraint)item.Tag);
-      }
-    }
-    #endregion
-
-    #region ConstrainedItemBase Events
-    private void ConstrainedItemBase_ConstraintAdded(object sender, ConstraintEventArgs e) {
-      ListViewItem item = new ListViewItem();
-      item.Text = e.Constraint.GetType().Name;
-      item.Tag = e.Constraint;
-      constraintsListView.Items.Add(item);
-    }
-    private void ConstrainedItemBase_ConstraintRemoved(object sender, ConstraintEventArgs e) {
-      ListViewItem itemToDelete = null;
-      foreach (ListViewItem item in constraintsListView.Items) {
-        if (item.Tag == e.Constraint)
-          itemToDelete = item;
-      }
-      constraintsListView.Items.Remove(itemToDelete);
-    }
-    #endregion
-  }
-}
Index: anches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ConstrainedItemBaseView.resx
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ConstrainedItemBaseView.resx	(revision 2032)
+++ 	(revision )
@@ -1,120 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
Index: anches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ConstraintEventArgs.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ConstraintEventArgs.cs	(revision 2032)
+++ 	(revision )
@@ -1,50 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace HeuristicLab.Core {
-  /// <summary>
-  /// Event arguments to be able to specify the affected constraint.
-  /// </summary>
-  public class ConstraintEventArgs : ItemEventArgs {
-    /// <summary>
-    /// Gets the affected constraint.
-    /// </summary>
-    /// <remarks>Uses property <see cref="ItemEventArgs.Item"/> of base class <see cref="ItemEventArgs"/>.
-    /// No own data storage present.</remarks>
-    public IConstraint Constraint {
-      get { return (IConstraint)Item; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="ConstraintEventArgs"/> with the given
-    /// <paramref name="constraint"/>.
-    /// </summary>
-    /// <remarks>Only calls the constructor of base class <see cref="ItemEventArgs"/>.</remarks>
-    /// <param name="constraint">The affected constraint.</param>
-    public ConstraintEventArgs(IConstraint constraint)
-      : base(constraint) {
-    }
-  }
-}
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/EngineBase.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/EngineBase.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/EngineBase.cs	(revision 2033)
@@ -130,5 +130,5 @@
     /// <param name="clonedObjects">Dictionary of all already clone objects. (Needed to avoid cycles.)</param>
     /// <returns>The cloned object as <see cref="EngineBase"/>.</returns>
-    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+    public override object Clone(IDictionary<long, object> clonedObjects) {
       EngineBase clone = (EngineBase)base.Clone(clonedObjects);
       clone.myOperatorGraph = (IOperatorGraph)Auxiliary.Clone(OperatorGraph, clonedObjects);
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj	(revision 2033)
@@ -113,12 +113,5 @@
       <DependentUpon>ChooseOperatorDialog.cs</DependentUpon>
     </Compile>
-    <Compile Include="ConstrainedItemBase.cs" />
-    <Compile Include="ConstrainedItemBaseView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="ConstrainedItemBaseView.Designer.cs">
-      <DependentUpon>ConstrainedItemBaseView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="ConstraintEventArgs.cs" />
+    <Compile Include="CloneableBase.cs" />
     <Compile Include="AtomicOperation.cs" />
     <Compile Include="CompositeOperation.cs" />
@@ -130,4 +123,18 @@
     </Compile>
     <Compile Include="AliasEventArgs.cs" />
+    <Compile Include="CallGraph.cs" />
+    <Compile Include="CallNode.cs" />
+    <Compile Include="ParameterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ParameterView.Designer.cs">
+      <DependentUpon>ParameterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Parameter.cs" />
+    <Compile Include="ParameterType.cs" />
+    <Compile Include="Interfaces\IParameter.cs" />
+    <Compile Include="Interfaces\ICallNode.cs" />
+    <Compile Include="Interfaces\ICallGraph.cs" />
+    <Compile Include="Interfaces\ICloneable.cs" />
     <Compile Include="KeyValueEventArgs.cs" />
     <Compile Include="OperatorBaseDescriptionView.cs">
@@ -155,6 +162,4 @@
     </Compile>
     <Compile Include="ExceptionEventArgs.cs" />
-    <Compile Include="Interfaces\IConstrainedItem.cs" />
-    <Compile Include="Interfaces\IConstraint.cs" />
     <Compile Include="Interfaces\IItem.cs" />
     <Compile Include="ItemBase.cs" />
@@ -248,10 +253,8 @@
     <Compile Include="Interfaces\IRandom.cs" />
     <Compile Include="OperatorGraph.cs" />
-    <Compile Include="StorableBase.cs" />
     <Compile Include="Scope.cs" />
     <Compile Include="EngineBase.cs" />
     <Compile Include="Interfaces\IEngine.cs" />
     <Compile Include="Interfaces\IOperator.cs" />
-    <Compile Include="Interfaces\IStorable.cs" />
     <Compile Include="PersistenceManager.cs" />
     <Compile Include="HeuristicLabCorePlugin.cs" />
@@ -290,10 +293,10 @@
       <SubType>Designer</SubType>
     </EmbeddedResource>
-    <EmbeddedResource Include="ConstrainedItemBaseView.resx">
-      <DependentUpon>ConstrainedItemBaseView.cs</DependentUpon>
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
     <EmbeddedResource Include="ChooseTypeDialog.resx">
       <DependentUpon>ChooseTypeDialog.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ParameterView.resx">
+      <DependentUpon>ParameterView.cs</DependentUpon>
       <SubType>Designer</SubType>
     </EmbeddedResource>
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/ICallGraph.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/ICallGraph.cs	(revision 2033)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/ICallGraph.cs	(revision 2033)
@@ -0,0 +1,29 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  public interface ICallGraph : IItem {
+  }
+}
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/ICallNode.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/ICallNode.cs	(revision 2033)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/ICallNode.cs	(revision 2033)
@@ -0,0 +1,29 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  public interface ICallNode : IItem {
+  }
+}
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/ICloneable.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/ICloneable.cs	(revision 2033)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/ICloneable.cs	(revision 2033)
@@ -0,0 +1,44 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Interface to represent objects that are cloneable.
+  /// </summary>
+  public interface ICloneable : System.ICloneable {
+    /// <summary>
+    /// Gets a unique id representing the current object. This id is used to check, if an object has 
+    /// already been cloned (to avoid cycles).
+    /// </summary>
+    long Id { get; }
+    /// <summary>
+    /// Clones the current instance, considering already cloned objects.
+    /// </summary>
+    /// <param name="clonedObjects">All already cloned objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object.</returns>
+    object Clone(IDictionary<long, object> clonedObjects);
+  }
+}
Index: anches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IConstrainedItem.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IConstrainedItem.cs	(revision 2032)
+++ 	(revision )
@@ -1,68 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace HeuristicLab.Core {
-  /// <summary>
-  /// Interface to represent items that are subjects to restrictions. 
-  /// </summary>
-  public interface IConstrainedItem : IItem {
-    /// <summary>
-    /// All constraints of the current instance. 
-    /// </summary>
-    ICollection<IConstraint> Constraints { get; }
-
-    /// <summary>
-    /// Adds a constraint to the current instance.
-    /// </summary>
-    /// <param name="constraint">The constraint to add.</param>
-    void AddConstraint(IConstraint constraint);
-    /// <summary>
-    /// Removes a constraint from the current instance.
-    /// </summary>
-    /// <param name="constraint">The constraint to remove.</param>
-    void RemoveConstraint(IConstraint constraint);
-
-    /// <summary>
-    /// Checks whether the current instance fullfills all constraints.
-    /// </summary>
-    /// <returns><c>true</c> if all constraints are fullfilled, <c>false</c> otherwise.</returns>
-    bool IsValid();
-    /// <summary>
-    /// Checks whether the current instance fullfills all constraints.
-    /// </summary>
-    /// <param name="violatedConstraints">Output parameter, all constraints that could not be fullfilled.</param>
-    /// <returns><c>true</c> if all constraints are fullfilled, <c>false</c> otherwise.</returns>
-    bool IsValid(out ICollection<IConstraint> violatedConstraints);
-
-    /// <summary>
-    /// An <see cref="EventHandler"/> for events when a new constraint is added.
-    /// </summary>
-    event EventHandler<ConstraintEventArgs> ConstraintAdded;
-    /// <summary>
-    /// An <see cref="EventHandler"/> for events when a constraint is deleted.
-    /// </summary>
-    event EventHandler<ConstraintEventArgs> ConstraintRemoved;
-  }
-}
Index: anches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IConstraint.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IConstraint.cs	(revision 2032)
+++ 	(revision )
@@ -1,43 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace HeuristicLab.Core {
-  /// <summary>
-  /// Interface to represent restrictions.
-  /// </summary>
-  public interface IConstraint : IItem {
-    /// <summary>
-    /// Gets the description of the current instance.
-    /// </summary>
-    string Description { get; }
-
-    /// <summary>
-    /// Checks whether the given <paramref name="data"/> fulfills the current constraint.
-    /// </summary>
-    /// <param name="data">The item to check.</param>
-    /// <returns><c>true</c> if the current instance could be fulfilled, <c>false</c> otherwise.</returns>
-    bool Check(IItem data);
-  }
-}
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IItem.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IItem.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IItem.cs	(revision 2033)
@@ -28,14 +28,5 @@
   /// Interface to represent (almost) every HeuristicLab object (an object, an operator,...).
   /// </summary>
-  public interface IItem : IStorable, IViewable {
-    /// <summary>
-    /// Fires a new <c>Changed</c> event.
-    /// </summary>
-    void FireChanged();
-
-    /// <summary>
-    /// Occurs when the current instance has changed.
-    /// </summary>
-    event EventHandler Changed;
+  public interface IItem : ICloneable, IViewable {
   }
 }
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IOperator.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IOperator.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IOperator.cs	(revision 2033)
@@ -29,5 +29,5 @@
   /// a basic instruction of an algorithm.
   /// </summary>
-  public interface IOperator : IConstrainedItem {
+  public interface IOperator : IItem {
     /// <summary>
     /// Gets or sets the name of the current instance.
@@ -67,20 +67,4 @@
     void AddSubOperator(IOperator op);
     /// <summary>
-    /// Adds the given sub operator to the current instance if all constraints can be fulfilled.
-    /// </summary>
-    /// <param name="op">The operator to add.</param>
-    /// <returns><c>true</c> if the operator could be added without violating constraints,
-    /// <c>false</c> otherwise.</returns>
-    bool TryAddSubOperator(IOperator op);
-    /// <summary>
-    /// Adds the given sub operator to the current instance if all constraints can be fulfilled.
-    /// </summary>
-    /// <param name="op">The operator to add.</param>
-    /// <param name="violatedConstraints">Output parameter; contains all constraints that could not be
-    /// fulfilled.</param>
-    /// <returns><c>true</c> if the operator could be added without violating constraints,
-    /// <c>false</c> otherwise.</returns>
-    bool TryAddSubOperator(IOperator op, out ICollection<IConstraint> violatedConstraints);
-    /// <summary>
     /// Adds the given sub operator at a the specified <paramref name="index"/>.
     /// </summary>
@@ -89,45 +73,8 @@
     void AddSubOperator(IOperator op, int index);
     /// <summary>
-    /// Adds the given operator at the specified <paramref name="index"/> to the current instance 
-    /// if all constraints can be fulfilled.
-    /// </summary>
-    /// <param name="op">The operator to add.</param>
-    /// <param name="index">The position where to add the operator.</param>
-    /// <returns><c>true</c> if the operator could be added without violating constraints,
-    /// <c>false</c> otherwise.</returns>
-    bool TryAddSubOperator(IOperator op, int index);
-    /// <summary>
-    /// Adds the given operator at the specified <paramref name="index"/> to the current instance 
-    /// if all constraints can be fulfilled.
-    /// </summary>
-    /// <param name="op">The operator to add.</param>
-    /// <param name="index">The position where to add the operator.</param>
-    /// <param name="violatedConstraints">Output parameter; contains all constraints that could not be
-    /// fulfilled.</param>
-    /// <returns><c>true</c> if the operator could be added without violating constraints,
-    /// <c>false</c> otherwise.</returns>
-    bool TryAddSubOperator(IOperator op, int index, out ICollection<IConstraint> violatedConstraints);
-    /// <summary>
     /// Removes a sub operator at the specified <paramref name="index"/>.
     /// </summary>
     /// <param name="index">The position where to delete the operator.</param>
     void RemoveSubOperator(int index);
-    /// <summary>
-    /// Removes a sub operator at the specified <paramref name="index"/> if all constraint can be fulfilled.
-    /// </summary>
-    /// <param name="index">The position where to delete the operator.</param>
-    /// <returns><c>true</c> if the operator could be deleted without violating constraints,
-    /// <c>false</c> otherwise.</returns>
-    bool TryRemoveSubOperator(int index);
-    /// <summary>
-    /// Deletes the operator at the specified <paramref name="index"/>  
-    /// if all constraints can be fulfilled.
-    /// </summary>
-    /// <param name="index">The position where to delete the operator.</param>
-    /// <param name="violatedConstraints">Output parameter; contains all constraints that could not be
-    /// fulfilled.</param>
-    /// <returns><c>true</c> if the operator could be deleted without violating constraints,
-    /// <c>false</c> otherwise.</returns>
-    bool TryRemoveSubOperator(int index, out ICollection<IConstraint> violatedConstraints);
 
     /// <summary>
@@ -143,42 +90,8 @@
     void AddVariableInfo(IVariableInfo variableInfo);
     /// <summary>
-    /// Adds the specified variable info to the current instance, if all constraints can be fulfilled.
-    /// </summary>
-    /// <param name="variableInfo">The variable info to add.</param>
-    /// <returns><c>true</c> if the variable info could be added without violating constraints,
-    /// <c>false</c> otherwise.</returns>
-    bool TryAddVariableInfo(IVariableInfo variableInfo);
-    /// <summary>
-    /// Adds the specified variable info to the current instance, if all constraints can be fulfilled.
-    /// </summary>
-    /// <param name="variableInfo">The variable info to add.</param>
-    /// <param name="violatedConstraints">Output parameter; contains all constraints that could not be
-    /// fulfilled.</param>
-    /// <returns><c>true</c> if the variable info could be added without violating constraints,
-    /// <c>false</c> otherwise.</returns>
-    bool TryAddVariableInfo(IVariableInfo variableInfo, out ICollection<IConstraint> violatedConstraints);
-    /// <summary>
     /// Removes the variable info with the given formal name.
     /// </summary>
     /// <param name="formalName">The formal name of the variable info to remove.</param>
     void RemoveVariableInfo(string formalName);
-    /// <summary>
-    /// Deletes the variable info with the given formal name, 
-    /// if all constraints can be fulfilled.
-    /// </summary>
-    /// <param name="formalName">The formal name of the variable info to remove.</param>
-    /// <returns><c>true</c> if the variable info could be deleted without violating constraints,
-    /// <c>false</c> otherwise.</returns>
-    bool TryRemoveVariableInfo(string formalName);
-    /// <summary>
-    /// Deletes the variable info with the given formal name, 
-    /// if all constraints can be fulfilled.
-    /// </summary>
-    /// <param name="formalName">The formal name of the variable info to remove.</param>
-    /// <param name="violatedConstraints">Output parameter; contains all constraints that could not be
-    /// fulfilled.</param>
-    /// <returns><c>true</c> if the variable info could be deleted without violating constraints,
-    /// <c>false</c> otherwise.</returns>
-    bool TryRemoveVariableInfo(string formalName, out ICollection<IConstraint> violatedConstraints);
 
     /// <summary>
@@ -194,45 +107,9 @@
     void AddVariable(IVariable variable);
     /// <summary>
-    /// Adds the specified <paramref name="variable"/> to the current instance if all constraints can
-    /// be fulfilled.
-    /// </summary>
-    /// <param name="variable">The variable to add.</param>
-    /// <returns><c>true</c> if the variable could be added without violating constraints,
-    /// <c>false</c> otherwise.</returns>
-    bool TryAddVariable(IVariable variable);
-    /// <summary>
-    /// Adds the specified <paramref name="variable"/> to the current instance if all constraints can
-    /// be fulfilled.
-    /// </summary>
-    /// <param name="variable">The variable to add.</param>
-    /// <param name="violatedConstraints">Output parameter; contains all constraints that could 
-    /// not be fulfillled.</param>
-    /// <returns><c>true</c> if the variable could be added without violating constraints,
-    /// <c>false</c> otherwise.</returns>
-    bool TryAddVariable(IVariable variable, out ICollection<IConstraint> violatedConstraints);
-    /// <summary>
     /// Deletes the variable with the specified <paramref name="name"/>.
     /// </summary>
     /// <param name="name">The name of the variable to delete.</param>
     void RemoveVariable(string name);
-    /// <summary>
-    /// Deletes the variable with the specified <paramref name="name"/> if all constraints can be 
-    /// fulfilled.
-    /// </summary>
-    /// <param name="name">The name of the variable to remove.</param>
-    /// <returns><c>true</c> if the variable could be deleted without violating constraints,
-    /// <c>false</c> otherwise.</returns>
-    bool TryRemoveVariable(string name);
-    /// <summary>
-    /// Deletes the variable with the specified <paramref name="name"/> if all constraints can be 
-    /// fulfilled.
-    /// </summary>
-    /// <param name="name">The name of the variable to remove.</param>
-    /// <param name="violatedConstraints">Output parameter; contains all constraints that could 
-    /// not be fulfilled.</param>
-    /// <returns><c>true</c> if the variable could be deleted without violating constraints,
-    /// <c>false</c> otherwise.</returns>
-    bool TryRemoveVariable(string name, out ICollection<IConstraint> violatedConstraints);
-    
+
     /// <inheritdoc cref="GetVariableValue(string, HeuristicLab.Core.IScope, bool)"/>
     /// <typeparam name="T">The type of the value that is searched.</typeparam>       
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IOperatorGraph.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IOperatorGraph.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IOperatorGraph.cs	(revision 2033)
@@ -45,14 +45,8 @@
     void AddOperator(IOperator op);
     /// <summary>
-    /// Removes an operator with the specified <paramref name="guid"/> from the current instance.
+    /// Removes an operator from the current instance.
     /// </summary>
-    /// <param name="guid">The unique id of the operator to remove.</param>
-    void RemoveOperator(Guid guid);
-    /// <summary>
-    /// Gets the operator with the specified <paramref name="guid"/>.
-    /// </summary>
-    /// <param name="guid">The unique id of the operator.</param>
-    /// <returns>The searched operator.</returns>
-    IOperator GetOperator(Guid guid);
+    /// <param name="op">The operator that should be removed.</param>
+    void RemoveOperator(IOperator op);
     /// <summary>
     /// Clears the current instance.
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IOperatorGroup.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IOperatorGroup.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IOperatorGroup.cs	(revision 2033)
@@ -29,5 +29,5 @@
   /// Interface to represent a group of operators.
   /// </summary>
-  public interface IOperatorGroup : IStorable {
+  public interface IOperatorGroup : ICloneable {
     /// <summary>
     /// Gets or sets the name of the current instance.
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IParameter.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IParameter.cs	(revision 2033)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IParameter.cs	(revision 2033)
@@ -0,0 +1,33 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  public interface IParameter : IItem {
+    string Name { get; }
+    string Description { get; }
+    Type DataType { get; }
+    ParamterType Type { get; }
+  }
+}
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IScope.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IScope.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IScope.cs	(revision 2033)
@@ -129,10 +129,4 @@
     void ReorderSubScopes(int[] sequence);
     /// <summary>
-    /// Gets the sub scope with the given <paramref name="guid"/>.
-    /// </summary>
-    /// <param name="guid">The unique identifier of the sub scope.</param>
-    /// <returns>The sub scope with the given <paramref name="guid"/>.</returns>
-    IScope GetScope(Guid guid);
-    /// <summary>
     /// Gets the sub scope with the given <paramref name="name"/>.
     /// </summary>
Index: anches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IStorable.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IStorable.cs	(revision 2032)
+++ 	(revision )
@@ -1,52 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Xml;
-
-namespace HeuristicLab.Core {
-
-  /// <summary>
-  /// Interface to represent objects that are de- and serializeable.
-  /// </summary>
-  public interface IStorable {
-
-    /// <summary>
-    /// Gets the objects unique identifier.
-    /// </summary>
-    Guid Guid { get; }
-
-    /// <summary>
-    /// Clones the current instance (deep clone).
-    /// </summary>
-    /// <returns>The cloned object.</returns>
-    object Clone();
-
-    /// <summary>
-    /// Clones the current instance, considering already cloned objects.
-    /// </summary>
-    /// <param name="clonedObjects">All already cloned objects. (Needed to avoid cycles.)</param>
-    /// <returns>The cloned object.</returns>
-    object Clone(IDictionary<Guid, object> clonedObjects);
-  }
-}
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IViewable.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IViewable.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Interfaces/IViewable.cs	(revision 2033)
@@ -34,4 +34,13 @@
     /// <returns>The created view.</returns>
     IView CreateView();
+
+    /// <summary>
+    /// Fires a new <c>Changed</c> event.
+    /// </summary>
+    void FireChanged();
+    /// <summary>
+    /// Occurs when the current instance has changed.
+    /// </summary>
+    event EventHandler Changed;
   }
 }
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ItemBase.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ItemBase.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ItemBase.cs	(revision 2033)
@@ -31,5 +31,5 @@
   /// </summary>
   [EmptyStorableClass]
-  public abstract class ItemBase : StorableBase, IItem {
+  public abstract class ItemBase : CloneableBase, IItem {
     /// <summary>
     /// Creates a new instance of <see cref="ItemBaseView"/> for 
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/OperatorBase.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/OperatorBase.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/OperatorBase.cs	(revision 2033)
@@ -30,5 +30,5 @@
   /// The base class for all operators.
   /// </summary>
-  public abstract class OperatorBase : ConstrainedItemBase, IOperator {
+  public abstract class OperatorBase : ItemBase, IOperator {
 
     [Storable]
@@ -130,5 +130,5 @@
     /// <param name="clonedObjects">Dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
     /// <returns>The cloned object as <see cref="OperatorBase"/>.</returns>
-    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+    public override object Clone(IDictionary<long, object> clonedObjects) {
       OperatorBase clone = (OperatorBase)base.Clone(clonedObjects);
       clone.myName = Name;
@@ -162,31 +162,4 @@
       OnSubOperatorAdded(subOperator, mySubOperators.Count - 1);
     }
-    /// <inheritdoc cref="IOperator.TryAddSubOperator(HeuristicLab.Core.IOperator)"/>
-    /// <param name="subOperator">The sub operator to add.</param>
-    /// <remarks>Calls <see cref="OnSubOperatorAdded"/>.</remarks>
-    public virtual bool TryAddSubOperator(IOperator subOperator) {
-      mySubOperators.Add(subOperator);
-      if (IsValid()) {
-        OnSubOperatorAdded(subOperator, mySubOperators.Count - 1);
-        return true;
-      } else {
-        mySubOperators.RemoveAt(mySubOperators.Count - 1);
-        return false;
-      }
-    }
-    /// <inheritdoc cref="HeuristicLab.Core.IOperator.TryAddSubOperator(HeuristicLab.Core.IOperator, 
-    /// out System.Collections.Generic.ICollection&lt;HeuristicLab.Core.IConstraint&gt;)"/>
-    /// <param name="subOperator">The sub operator to add.</param>
-    /// <remarks>Calls <see cref="OnSubOperatorAdded"/>.</remarks>
-    public virtual bool TryAddSubOperator(IOperator subOperator, out ICollection<IConstraint> violatedConstraints) {
-      mySubOperators.Add(subOperator);
-      if (IsValid(out violatedConstraints)) {
-        OnSubOperatorAdded(subOperator, mySubOperators.Count - 1);
-        return true;
-      } else {
-        mySubOperators.RemoveAt(mySubOperators.Count - 1);
-        return false;
-      }
-    }
     /// <inheritdoc cref="HeuristicLab.Core.IOperator.AddSubOperator(HeuristicLab.Core.IOperator, int)"/>
     /// <param name="subOperator">The sub operator to add.</param>
@@ -196,31 +169,4 @@
       OnSubOperatorAdded(subOperator, index);
     }
-    /// <inheritdoc cref="IOperator.TryAddSubOperator(HeuristicLab.Core.IOperator, int)"/>
-    /// <param name="subOperator">The sub operator to add.</param>
-    /// <remarks>Calls <see cref="OnSubOperatorAdded"/>.</remarks>
-    public virtual bool TryAddSubOperator(IOperator subOperator, int index) {
-      mySubOperators.Insert(index, subOperator);
-      if (IsValid()) {
-        OnSubOperatorAdded(subOperator, index);
-        return true;
-      } else {
-        mySubOperators.RemoveAt(index);
-        return false;
-      }
-    }
-    /// <inheritdoc cref="IOperator.TryAddSubOperator(HeuristicLab.Core.IOperator, int, out
-    /// System.Collections.Generic.ICollection&lt;HeuristicLab.Core.IConstraint&gt;)"/>
-    /// <param name="subOperator">The sub operator to add.</param>
-    /// <remarks>Calls <see cref="OnSubOperatorAdded"/>.</remarks>
-    public virtual bool TryAddSubOperator(IOperator subOperator, int index, out ICollection<IConstraint> violatedConstraints) {
-      mySubOperators.Insert(index, subOperator);
-      if (IsValid(out violatedConstraints)) {
-        OnSubOperatorAdded(subOperator, index);
-        return true;
-      } else {
-        mySubOperators.RemoveAt(index);
-        return false;
-      }
-    }
     /// <inheritdoc/>
     /// <remarks>Calls <see cref="OnSubOperatorRemoved"/>.</remarks>
@@ -229,30 +175,4 @@
       mySubOperators.RemoveAt(index);
       OnSubOperatorRemoved(op, index);
-    }
-    /// <inheritdoc/>
-    /// <remarks>Calls <see cref="OnSubOperatorRemoved"/>.</remarks>
-    public virtual bool TryRemoveSubOperator(int index) {
-      IOperator op = mySubOperators[index];
-      mySubOperators.RemoveAt(index);
-      if (IsValid()) {
-        OnSubOperatorRemoved(op, index);
-        return true;
-      } else {
-        mySubOperators.Insert(index, op);
-        return false;
-      }
-    }
-    /// <inheritdoc/>
-    /// <remarks>Calls <see cref="OnSubOperatorRemoved"/>.</remarks>
-    public virtual bool TryRemoveSubOperator(int index, out ICollection<IConstraint> violatedConstraints) {
-      IOperator op = mySubOperators[index];
-      mySubOperators.RemoveAt(index);
-      if (IsValid(out violatedConstraints)) {
-        OnSubOperatorRemoved(op, index);
-        return true;
-      } else {
-        mySubOperators.Insert(index, op);
-        return false;
-      }
     }
     #endregion
@@ -274,28 +194,4 @@
     }
     /// <inheritdoc/>
-    /// <remarks>Calls <see cref="OnVariableInfoAdded"/>.</remarks>
-    public virtual bool TryAddVariableInfo(IVariableInfo variableInfo) {
-      myVariableInfos.Add(variableInfo.FormalName, variableInfo);
-      if (IsValid()) {
-        OnVariableInfoAdded(variableInfo);
-        return true;
-      } else {
-        myVariableInfos.Remove(variableInfo.FormalName);
-        return false;
-      }
-    }
-    /// <inheritdoc/>
-    /// <remarks>Calls <see cref="OnVariableInfoAdded"/>.</remarks>
-    public virtual bool TryAddVariableInfo(IVariableInfo variableInfo, out ICollection<IConstraint> violatedConstraints) {
-      myVariableInfos.Add(variableInfo.FormalName, variableInfo);
-      if (IsValid(out violatedConstraints)) {
-        OnVariableInfoAdded(variableInfo);
-        return true;
-      } else {
-        myVariableInfos.Remove(variableInfo.FormalName);
-        return false;
-      }
-    }
-    /// <inheritdoc/>
     /// <remarks>Calls <see cref="OnVariableInfoRemoved"/>.</remarks>
     public virtual void RemoveVariableInfo(string formalName) {
@@ -305,37 +201,4 @@
         OnVariableInfoRemoved(variableInfo);
       }
-    }
-    /// <inheritdoc/>
-    /// <remarks>Calls <see cref="OnVariableInfoRemoved"/>.</remarks>
-    public virtual bool TryRemoveVariableInfo(string formalName) {
-      IVariableInfo variableInfo;
-      if (myVariableInfos.TryGetValue(formalName, out variableInfo)) {
-        myVariableInfos.Remove(formalName);
-        if (IsValid()) {
-          OnVariableInfoRemoved(variableInfo);
-          return true;
-        } else {
-          myVariableInfos.Add(formalName, variableInfo);
-          return false;
-        }
-      }
-      return true;
-    }
-    /// <inheritdoc/>
-    /// <remarks>Calls <see cref="OnVariableInfoRemoved"/>.</remarks>
-    public virtual bool TryRemoveVariableInfo(string formalName, out ICollection<IConstraint> violatedConstraints) {
-      IVariableInfo variableInfo;
-      if (myVariableInfos.TryGetValue(formalName, out variableInfo)) {
-        myVariableInfos.Remove(formalName);
-        if (IsValid(out violatedConstraints)) {
-          OnVariableInfoRemoved(variableInfo);
-          return true;
-        } else {
-          myVariableInfos.Add(formalName, variableInfo);
-          return false;
-        }
-      }
-      violatedConstraints = new List<IConstraint>();
-      return true;
     }
     #endregion
@@ -358,34 +221,4 @@
       variable.NameChanged += new EventHandler(Variable_NameChanged);
       OnVariableAdded(variable);
-    }
-    /// <inheritdoc/>
-    /// <remarks>Calls <see cref="OnVariableAdded"/> and adds <c>NameChanging</c> and <c>NameChanged</c>
-    /// event handlers.</remarks>
-    public virtual bool TryAddVariable(IVariable variable) {
-      myVariables.Add(variable.Name, variable);
-      if (IsValid()) {
-        variable.NameChanging += new EventHandler<NameChangingEventArgs>(Variable_NameChanging);
-        variable.NameChanged += new EventHandler(Variable_NameChanged);
-        OnVariableAdded(variable);
-        return true;
-      } else {
-        myVariableInfos.Remove(variable.Name);
-        return false;
-      }
-    }
-    /// <inheritdoc/>
-    /// <remarks>Calls <see cref="OnVariableAdded"/> and adds <c>NameChanging</c> and <c>NameChanged</c>
-    /// event handlers.</remarks>
-    public virtual bool TryAddVariable(IVariable variable, out ICollection<IConstraint> violatedConstraints) {
-      myVariables.Add(variable.Name, variable);
-      if (IsValid(out violatedConstraints)) {
-        variable.NameChanging += new EventHandler<NameChangingEventArgs>(Variable_NameChanging);
-        variable.NameChanged += new EventHandler(Variable_NameChanged);
-        OnVariableAdded(variable);
-        return true;
-      } else {
-        myVariableInfos.Remove(variable.Name);
-        return false;
-      }
     }
     /// <inheritdoc/>
@@ -400,43 +233,4 @@
         OnVariableRemoved(variable);
       }
-    }
-    /// <inheritdoc/>
-    /// <remarks>Calls <see cref="OnVariableRemoved"/> and removes <c>NameChanging</c> and <c>NameChanged</c>
-    /// event handlers.</remarks>
-    public virtual bool TryRemoveVariable(string name) {
-      IVariable variable;
-      if (myVariables.TryGetValue(name, out variable)) {
-        myVariables.Remove(name);
-        if (IsValid()) {
-          variable.NameChanging -= new EventHandler<NameChangingEventArgs>(Variable_NameChanging);
-          variable.NameChanged -= new EventHandler(Variable_NameChanged);
-          OnVariableRemoved(variable);
-          return true;
-        } else {
-          myVariables.Add(name, variable);
-          return false;
-        }
-      }
-      return true;
-    }
-    /// <inheritdoc/>
-    /// <remarks>Calls <see cref="OnVariableRemoved"/> and removes <c>NameChanging</c> and <c>NameChanged</c>
-    /// event handlers.</remarks>
-    public virtual bool TryRemoveVariable(string name, out ICollection<IConstraint> violatedConstraints) {
-      IVariable variable;
-      if (myVariables.TryGetValue(name, out variable)) {
-        myVariables.Remove(name);
-        if (IsValid(out violatedConstraints)) {
-          variable.NameChanging -= new EventHandler<NameChangingEventArgs>(Variable_NameChanging);
-          variable.NameChanged -= new EventHandler(Variable_NameChanged);
-          OnVariableRemoved(variable);
-          return true;
-        } else {
-          myVariables.Add(name, variable);
-          return false;
-        }
-      }
-      violatedConstraints = new List<IConstraint>();
-      return true;
     }
     private void Variable_NameChanging(object sender, NameChangingEventArgs e) {
@@ -489,4 +283,5 @@
     }
     #endregion
+
     /// <inheritdoc/>
     public virtual IOperation Execute(IScope scope) {
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/OperatorBaseView.Designer.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/OperatorBaseView.Designer.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/OperatorBaseView.Designer.cs	(revision 2033)
@@ -54,5 +54,4 @@
       this.operatorBaseVariablesView = new HeuristicLab.Core.OperatorBaseVariablesView();
       this.constraintsTabPage = new System.Windows.Forms.TabPage();
-      this.constrainedItemBaseView = new HeuristicLab.Core.ConstrainedItemBaseView();
       this.descriptionTabPage = new System.Windows.Forms.TabPage();
       this.operatorBaseDescriptionView = new HeuristicLab.Core.OperatorBaseDescriptionView();
@@ -121,5 +120,4 @@
       // constraintsTabPage
       // 
-      this.constraintsTabPage.Controls.Add(this.constrainedItemBaseView);
       this.constraintsTabPage.Location = new System.Drawing.Point(4, 22);
       this.constraintsTabPage.Name = "constraintsTabPage";
@@ -129,14 +127,4 @@
       this.constraintsTabPage.Text = "Constraints";
       this.constraintsTabPage.UseVisualStyleBackColor = true;
-      // 
-      // constrainedItemBaseView
-      // 
-      this.constrainedItemBaseView.Caption = "Constrained Data";
-      this.constrainedItemBaseView.ConstrainedItem = null;
-      this.constrainedItemBaseView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.constrainedItemBaseView.Location = new System.Drawing.Point(3, 3);
-      this.constrainedItemBaseView.Name = "constrainedItemBaseView";
-      this.constrainedItemBaseView.Size = new System.Drawing.Size(409, 301);
-      this.constrainedItemBaseView.TabIndex = 0;
       // 
       // descriptionTabPage
@@ -184,5 +172,4 @@
     protected TabPage variablesTabPage;
     private TabPage constraintsTabPage;
-    protected ConstrainedItemBaseView constrainedItemBaseView;
     protected OperatorBaseVariableInfosView operatorBaseVariableInfosView;
     protected OperatorBaseVariablesView operatorBaseVariablesView;
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/OperatorBaseView.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/OperatorBaseView.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/OperatorBaseView.cs	(revision 2033)
@@ -68,5 +68,4 @@
       operatorBaseVariableInfosView.Operator = null;
       operatorBaseVariablesView.Operator = null;
-      constrainedItemBaseView.ConstrainedItem = null;
       operatorBaseDescriptionView.Operator = null;
       base.RemoveItemEvents();
@@ -79,5 +78,4 @@
       operatorBaseVariableInfosView.Operator = Operator;
       operatorBaseVariablesView.Operator = Operator;
-      constrainedItemBaseView.ConstrainedItem = Operator;
       operatorBaseDescriptionView.Operator = Operator;
     }
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/OperatorGraph.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/OperatorGraph.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/OperatorGraph.cs	(revision 2033)
@@ -33,10 +33,10 @@
 
     [Storable]
-    private IDictionary<Guid, IOperator> myOperators;
+    private IList<IOperator> myOperators;
     /// <summary>
     /// Gets all operators of the current instance.
     /// </summary>
     public ICollection<IOperator> Operators {
-      get { return myOperators.Values; }
+      get { return myOperators; }
     }
 
@@ -61,5 +61,5 @@
     /// </summary>
     public OperatorGraph() {
-      myOperators = new Dictionary<Guid, IOperator>();
+      myOperators = new List<IOperator>();
     }
 
@@ -80,7 +80,7 @@
     /// <param name="clonedObjects">Dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
     /// <returns>The cloned object as <see cref="OperatorGraph"/>.</returns>
-    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+    public override object Clone(IDictionary<long, object> clonedObjects) {
       OperatorGraph clone = new OperatorGraph();
-      clonedObjects.Add(Guid, clone);
+      clonedObjects.Add(clone.Id, clone);
       foreach (IOperator op in Operators)
         clone.AddOperator((IOperator)Auxiliary.Clone(op, clonedObjects));
@@ -93,6 +93,6 @@
     /// <remarks>Calls <see cref="OnOperatorAdded"/>.</remarks>
     public void AddOperator(IOperator op) {
-      if (!myOperators.ContainsKey(op.Guid)) {
-        myOperators.Add(op.Guid, op);
+      if (!myOperators.Contains(op)) {
+        myOperators.Add(op);
         OnOperatorAdded(op);
 
@@ -103,7 +103,6 @@
     /// <inheritdoc/>
     /// <remarks>Calls <see cref="OnOperatorRemoved"/>.</remarks>
-    public void RemoveOperator(Guid guid) {
-      IOperator op = GetOperator(guid);
-      if (op != null) {
+    public void RemoveOperator(IOperator op) {
+      if (Operators.Contains(op)) {
         foreach (IOperator o in Operators) {
           int i = 0;
@@ -117,26 +116,12 @@
         if (InitialOperator == op)
           InitialOperator = null;
-        myOperators.Remove(op.Guid);
+        myOperators.Remove(op);
         OnOperatorRemoved(op);
       }
     }
     /// <inheritdoc/>
-    public IOperator GetOperator(Guid guid) {
-      IOperator op;
-      if (myOperators.TryGetValue(guid, out op))
-        return op;
-      else
-        return null;
-    }
-    /// <inheritdoc/>
     public void Clear() {
-      Guid[] guids = new Guid[Operators.Count];
-      int i = 0;
-      foreach (IOperator op in Operators) {
-        guids[i] = op.Guid;
-        i++;
-      }
-      for (int j = 0; j < guids.Length; j++)
-        RemoveOperator(guids[j]);
+      while (myOperators.Count > 0)
+        RemoveOperator(myOperators[0]);
     }
 
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/OperatorGraphView.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/OperatorGraphView.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/OperatorGraphView.cs	(revision 2033)
@@ -218,5 +218,5 @@
         if (operatorsListView.SelectedItems.Count > 0) {
           foreach (ListViewItem item in operatorsListView.SelectedItems)
-            OperatorGraph.RemoveOperator(((IOperator)item.Tag).Guid);
+            OperatorGraph.RemoveOperator((IOperator)item.Tag);
         }
       }
@@ -258,5 +258,5 @@
       if (operatorsListView.SelectedItems.Count > 0) {
         foreach (ListViewItem item in operatorsListView.SelectedItems)
-          OperatorGraph.RemoveOperator(((IOperator)item.Tag).Guid);
+          OperatorGraph.RemoveOperator((IOperator)item.Tag);
       }
     }
@@ -350,37 +350,13 @@
               IOperator newParent = (IOperator)node.Parent.Tag;
               int newIndex = node.Index;
-              ICollection<IConstraint> violatedConstraints;
-              ICollection<IConstraint> violatedConstraints2;
-              oldParent.TryRemoveSubOperator(oldIndex, out violatedConstraints);
-              newParent.TryAddSubOperator(op, newIndex, out violatedConstraints2);
-              if ((violatedConstraints.Count == 0) && (violatedConstraints2.Count == 0)) {
-                graphTreeView.SelectedNode = parentNode.Nodes[newIndex];
-              } else {
-                List<IConstraint> allViolatedConstraints = new List<IConstraint>(violatedConstraints);
-                allViolatedConstraints.AddRange(violatedConstraints2);
-                if (Auxiliary.ShowIgnoreConstraintViolationMessageBox(allViolatedConstraints) == DialogResult.Yes) {
-                  if (violatedConstraints.Count > 0)
-                    oldParent.RemoveSubOperator(oldIndex);
-                  if (violatedConstraints2.Count > 0)
-                    newParent.AddSubOperator(op, newIndex);
-                  graphTreeView.SelectedNode = parentNode.Nodes[newIndex];
-                } else {
-                  if (violatedConstraints.Count == 0)
-                    oldParent.AddSubOperator(op, oldIndex);
-                  if (violatedConstraints2.Count == 0)
-                    newParent.RemoveSubOperator(newIndex);
-                }
-              }
+              oldParent.RemoveSubOperator(oldIndex);
+              newParent.AddSubOperator(op, newIndex);
+              graphTreeView.SelectedNode = parentNode.Nodes[newIndex];
             }
           } else {
             if (node != null) {
               IOperator parent = (IOperator)node.Tag;
-              ICollection<IConstraint> violatedConstraints;
-              if (parent.TryAddSubOperator(op, out violatedConstraints)) {
-                graphTreeView.SelectedNode = node.Nodes[node.Nodes.Count - 1];
-              } else if (Auxiliary.ShowIgnoreConstraintViolationMessageBox(violatedConstraints) == DialogResult.Yes) {
-                parent.AddSubOperator(op);
-                graphTreeView.SelectedNode = node.Nodes[node.Nodes.Count - 1];
-              }
+              parent.AddSubOperator(op);
+              graphTreeView.SelectedNode = node.Nodes[node.Nodes.Count - 1];
             }
           }
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/OperatorGroup.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/OperatorGroup.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/OperatorGroup.cs	(revision 2033)
@@ -30,5 +30,5 @@
   /// Representation of a group of operators (can also include subgroups).
   /// </summary>
-  public class OperatorGroup : StorableBase, IOperatorGroup {
+  public class OperatorGroup : CloneableBase, IOperatorGroup {
 
     [Storable]
@@ -84,5 +84,5 @@
     /// <param name="clonedObjects">Dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
     /// <returns>The cloned object as <see cref="OperatorGroup"/>.</returns>
-    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+    public override object Clone(IDictionary<long, object> clonedObjects) {
       OperatorGroup clone = (OperatorGroup)base.Clone(clonedObjects);
       clone.myName = Name;
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/OperatorLibrary.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/OperatorLibrary.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/OperatorLibrary.cs	(revision 2033)
@@ -70,7 +70,7 @@
     /// <param name="clonedObjects">Dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
     /// <returns>The cloned object as <see cref="OperatorLibrary"/>.</returns>
-    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+    public override object Clone(IDictionary<long, object> clonedObjects) {
       OperatorLibrary clone = new OperatorLibrary();
-      clonedObjects.Add(Guid, clone);
+      clonedObjects.Add(clone.Id, clone);
       clone.myGroup = (IOperatorGroup)Auxiliary.Clone(Group, clonedObjects);
       return clone;
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Parameter.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Parameter.cs	(revision 2033)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Parameter.cs	(revision 2033)
@@ -0,0 +1,81 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Core {
+  public class Parameter : ItemBase, IParameter {
+    [Storable]
+    private string myName;
+    public string Name {
+      get { return myName; }
+    }
+
+    [Storable]
+    private string myDescription;
+    public string Description {
+      get { return myDescription; }
+    }
+
+    [Storable]
+    private Type myDataType;
+    public Type DataType {
+      get { return myDataType; }
+    }
+
+    [Storable]
+    private ParamterType myType;
+    public ParamterType Type {
+      get { return myType; }
+    }
+
+    public Parameter() {
+      myName = "Anonymous";
+      myDescription = "";
+      myDataType = null;
+      myType = ParamterType.In;
+    }
+    public Parameter(string name, string description, Type dataType, ParamterType type)
+      : this() {
+      myName = name;
+      myDescription = description;
+      myDataType = dataType;
+      myType = type;
+    }
+
+    public override IView CreateView() {
+      return new ParameterView(this);
+    }
+
+    public override object Clone(IDictionary<long, object> clonedObjects) {
+      Parameter clone = new Parameter();
+      clonedObjects.Add(clone.Id, clone);
+      clone.myName = Name;
+      clone.myDescription = Description;
+      clone.myDataType = DataType;
+      clone.myType = Type;
+      return clone;
+    }
+  }
+}
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ParameterType.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ParameterType.cs	(revision 2033)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ParameterType.cs	(revision 2033)
@@ -0,0 +1,44 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Represents the type of a parameter (input, output, both).
+  /// </summary>
+  public enum ParamterType {
+    /// <summary>
+    /// Value representing an input parameter.
+    /// </summary>
+    In,
+    /// <summary>
+    /// Value representing an output parameter.
+    /// </summary>
+    Out,
+    /// <summary>
+    /// Value representing an input and output parameter.
+    /// </summary>
+    InOut
+  }
+}
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ParameterView.Designer.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ParameterView.Designer.cs	(revision 2033)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ParameterView.Designer.cs	(revision 2033)
@@ -0,0 +1,165 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core {
+  partial class ParameterView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.dataTypeLabel = new System.Windows.Forms.Label();
+      this.dataTypeTextBox = new System.Windows.Forms.TextBox();
+      this.descriptionLabel = new System.Windows.Forms.Label();
+      this.descriptionTextBox = new System.Windows.Forms.TextBox();
+      this.typeLabel = new System.Windows.Forms.Label();
+      this.typeTextBox = new System.Windows.Forms.TextBox();
+      this.nameTextBox = new System.Windows.Forms.TextBox();
+      this.nameLabel = new System.Windows.Forms.Label();
+      this.SuspendLayout();
+      // 
+      // dataTypeLabel
+      // 
+      this.dataTypeLabel.AutoSize = true;
+      this.dataTypeLabel.Location = new System.Drawing.Point(3, 29);
+      this.dataTypeLabel.Name = "dataTypeLabel";
+      this.dataTypeLabel.Size = new System.Drawing.Size(60, 13);
+      this.dataTypeLabel.TabIndex = 2;
+      this.dataTypeLabel.Text = "&Data Type:";
+      // 
+      // dataTypeTextBox
+      // 
+      this.dataTypeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTypeTextBox.Location = new System.Drawing.Point(81, 26);
+      this.dataTypeTextBox.Name = "dataTypeTextBox";
+      this.dataTypeTextBox.ReadOnly = true;
+      this.dataTypeTextBox.Size = new System.Drawing.Size(188, 20);
+      this.dataTypeTextBox.TabIndex = 3;
+      // 
+      // descriptionLabel
+      // 
+      this.descriptionLabel.AutoSize = true;
+      this.descriptionLabel.Location = new System.Drawing.Point(3, 81);
+      this.descriptionLabel.Name = "descriptionLabel";
+      this.descriptionLabel.Size = new System.Drawing.Size(63, 13);
+      this.descriptionLabel.TabIndex = 6;
+      this.descriptionLabel.Text = "&Description:";
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.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.descriptionTextBox.Location = new System.Drawing.Point(81, 78);
+      this.descriptionTextBox.Multiline = true;
+      this.descriptionTextBox.Name = "descriptionTextBox";
+      this.descriptionTextBox.ReadOnly = true;
+      this.descriptionTextBox.Size = new System.Drawing.Size(188, 131);
+      this.descriptionTextBox.TabIndex = 7;
+      // 
+      // typeLabel
+      // 
+      this.typeLabel.AutoSize = true;
+      this.typeLabel.Location = new System.Drawing.Point(3, 55);
+      this.typeLabel.Name = "typeLabel";
+      this.typeLabel.Size = new System.Drawing.Size(34, 13);
+      this.typeLabel.TabIndex = 4;
+      this.typeLabel.Text = "&Type:";
+      // 
+      // typeTextBox
+      // 
+      this.typeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.typeTextBox.Location = new System.Drawing.Point(81, 52);
+      this.typeTextBox.Name = "typeTextBox";
+      this.typeTextBox.ReadOnly = true;
+      this.typeTextBox.Size = new System.Drawing.Size(188, 20);
+      this.typeTextBox.TabIndex = 5;
+      // 
+      // nameTextBox
+      // 
+      this.nameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.nameTextBox.Location = new System.Drawing.Point(81, 0);
+      this.nameTextBox.Name = "nameTextBox";
+      this.nameTextBox.ReadOnly = true;
+      this.nameTextBox.Size = new System.Drawing.Size(188, 20);
+      this.nameTextBox.TabIndex = 1;
+      // 
+      // nameLabel
+      // 
+      this.nameLabel.AutoSize = true;
+      this.nameLabel.Location = new System.Drawing.Point(3, 3);
+      this.nameLabel.Name = "nameLabel";
+      this.nameLabel.Size = new System.Drawing.Size(38, 13);
+      this.nameLabel.TabIndex = 0;
+      this.nameLabel.Text = "&Name:";
+      // 
+      // ParameterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.dataTypeTextBox);
+      this.Controls.Add(this.typeTextBox);
+      this.Controls.Add(this.descriptionTextBox);
+      this.Controls.Add(this.nameTextBox);
+      this.Controls.Add(this.dataTypeLabel);
+      this.Controls.Add(this.typeLabel);
+      this.Controls.Add(this.nameLabel);
+      this.Controls.Add(this.descriptionLabel);
+      this.Name = "ParameterView";
+      this.Size = new System.Drawing.Size(269, 209);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label dataTypeLabel;
+    private System.Windows.Forms.TextBox dataTypeTextBox;
+    private System.Windows.Forms.Label descriptionLabel;
+    private System.Windows.Forms.TextBox descriptionTextBox;
+    private System.Windows.Forms.Label typeLabel;
+    private System.Windows.Forms.TextBox typeTextBox;
+    private System.Windows.Forms.TextBox nameTextBox;
+    private System.Windows.Forms.Label nameLabel;
+  }
+}
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ParameterView.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ParameterView.cs	(revision 2033)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ParameterView.cs	(revision 2033)
@@ -0,0 +1,71 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core {
+  public partial class ParameterView : ViewBase {
+    public IParameter Parameter {
+      get { return (IParameter)Item; }
+      set { base.Item = value; }
+    }
+
+    public ParameterView() {
+      InitializeComponent();
+      Caption = "Parameter";
+    }
+    public ParameterView(IParameter parameter)
+      : this() {
+      Parameter = parameter;
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      Caption = "Parameter";
+      if (Parameter == null) {
+        nameTextBox.Enabled = false;
+        dataTypeTextBox.Enabled = false;
+        typeTextBox.Enabled = false;
+        descriptionTextBox.Enabled = false;
+      } else {
+        Caption = Parameter.Name + " (" + Parameter.GetType().Name + ")";
+        nameTextBox.Text = Parameter.Name;
+        nameTextBox.Enabled = true;
+        dataTypeTextBox.Text = Parameter.DataType.FullName;
+        dataTypeTextBox.Enabled = true;
+        typeTextBox.Text = Parameter.Type.ToString();
+        typeTextBox.Enabled = true;
+        descriptionTextBox.Text = Parameter.Description;
+        descriptionTextBox.Enabled = true;
+      }
+    }
+  }
+}
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ParameterView.resx
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ParameterView.resx	(revision 2033)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/ParameterView.resx	(revision 2033)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/PersistenceManager.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/PersistenceManager.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/PersistenceManager.cs	(revision 2033)
@@ -41,9 +41,9 @@
     /// <param name="instance">The object that should be saved.</param>
     /// <param name="filename">The name of the file where the <paramref name="object"/> should be saved.</param>
-    public static void Save(IStorable instance, string filename) {
+    public static void Save(object instance, string filename) {
       XmlGenerator.Serialize(instance, filename, 0);
     }
 
-    public static void SaveCompressed(IStorable instance, string filename) {
+    public static void SaveCompressed(object instance, string filename) {
       XmlGenerator.Serialize(instance, filename, 9);
     }
@@ -55,5 +55,5 @@
     /// <param name="instance">The object that should be saved.</param>
     /// <param name="stream">The (file) stream where the object should be saved.</param>
-    public static void Save(IStorable instance, Stream stream) {
+    public static void Save(object instance, Stream stream) {
       XmlGenerator.Serialize(instance, stream, ConfigurationService.Instance.GetConfiguration(new XmlFormat()));      
     }
@@ -65,6 +65,6 @@
     /// <param name="filename">The filename of the file where the data is saved.</param>
     /// <returns>The loaded object.</returns>
-    public static IStorable Load(string filename) {
-      return (IStorable)XmlParser.Deserialize(filename);
+    public static object Load(string filename) {
+      return XmlParser.Deserialize(filename);
     }
     /// <summary>
@@ -75,6 +75,6 @@
     /// <param name="stream">The stream from where to load the data.</param>
     /// <returns>The loaded object.</returns>
-    public static IStorable Load(Stream stream) {
-      return (IStorable)XmlParser.Deserialize(stream);
+    public static object Load(Stream stream) {
+      return XmlParser.Deserialize(stream);
     }
 
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Scope.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Scope.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Scope.cs	(revision 2033)
@@ -45,5 +45,5 @@
     
     private IDictionary<string, IVariable> myVariables;
-    /// <inheritdoc/>    
+    /// <inheritdoc/>
     public ICollection<IVariable> Variables {
       get { return myVariables.Values; }
@@ -224,15 +224,4 @@
     }
     /// <inheritdoc/>
-    public IScope GetScope(Guid guid) {
-      if (Guid == guid) return this;
-      else {
-        for (int i = 0; i < mySubScopes.Count; i++) {
-          IScope s = mySubScopes[i].GetScope(guid);
-          if (s != null) return s;
-        }
-      }
-      return null;
-    }
-    /// <inheritdoc/>
     public IScope GetScope(string name) {
       if (Name == name) return this;
@@ -267,5 +256,5 @@
 
     /// <inheritdoc/>
-    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+    public override object Clone(IDictionary<long, object> clonedObjects) {
       Scope clone = (Scope)base.Clone(clonedObjects);
       clone.myName = Name;
Index: anches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/StorableBase.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/StorableBase.cs	(revision 2032)
+++ 	(revision )
@@ -1,70 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Xml;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Core {
-  /// <summary>
-  /// The base class for all storable objects.
-  /// </summary>
-  public abstract class StorableBase : IStorable {
-
-    [Storable]
-    private Guid myGuid;
-    /// <summary>
-    /// Gets the Guid of the item.
-    /// </summary>
-    public Guid Guid {
-      get { return myGuid; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of the class <see cref="StorableBase"/> with a new <see cref="Guid"/>. 
-    /// </summary>
-    protected StorableBase() {
-      myGuid = Guid.NewGuid();
-    }
-
-    /// <summary>
-    /// Clones the current instance (deep clone).
-    /// </summary>
-    /// <remarks>Uses the <see cref="Auxiliary.Clone"/> method of the class <see cref="Auxiliary"/>.</remarks>
-    /// <returns>The clone.</returns>
-    public object Clone() {
-      return Auxiliary.Clone(this, new Dictionary<Guid, object>());
-    }
-    /// <summary>
-    /// Clones the current instance with the <see cref="M:Activator.CreateInstance"/> 
-    /// method of <see cref="Activator"/>.
-    /// </summary>
-    /// <param name="clonedObjects">All already cloned objects.</param>
-    /// <returns>The clone.</returns>
-    public virtual object Clone(IDictionary<Guid, object> clonedObjects) {
-      object clone = Activator.CreateInstance(this.GetType());
-      clonedObjects.Add(Guid, clone);
-      return clone;
-    }
-  }
-}
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Variable.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Variable.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/Variable.cs	(revision 2033)
@@ -102,7 +102,7 @@
     /// <param name="clonedObjects">Dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
     /// <returns>The cloned object as <see cref="Variable"/>.</returns>
-    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+    public override object Clone(IDictionary<long, object> clonedObjects) {
       Variable clone = new Variable();
-      clonedObjects.Add(Guid, clone);
+      clonedObjects.Add(clone.Id, clone);
       clone.myName = Name;
       if (Value != null)
Index: /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/VariableInfo.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/VariableInfo.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.Core/3.3/VariableInfo.cs	(revision 2033)
@@ -145,7 +145,7 @@
     /// <param name="clonedObjects">Dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
     /// <returns>The cloned object as <see cref="VariableInfo"/>.</returns>
-    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+    public override object Clone(IDictionary<long, object> clonedObjects) {
       VariableInfo clone = new VariableInfo();
-      clonedObjects.Add(Guid, clone);
+      clonedObjects.Add(clone.Id, clone);
       clone.myActualName = ActualName;
       clone.myFormalName = FormalName;
Index: /branches/Operator Architecture Refactoring/HeuristicLab.OptimizationFrontend/3.3/MainForm.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.OptimizationFrontend/3.3/MainForm.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.OptimizationFrontend/3.3/MainForm.cs	(revision 2033)
@@ -37,11 +37,11 @@
     private class Task {
       public string filename;
-      public IStorable storable;
+      public object instance;
       public IEditor editor;
 
       private Task() { }
-      public Task(string filename, IStorable storable, IEditor editor) {
+      public Task(string filename, object instance, IEditor editor) {
         this.filename = filename;
-        this.storable = storable;
+        this.instance = instance;
         this.editor = editor;
       }
@@ -145,5 +145,5 @@
       Task task = (Task)state;
       try {
-        task.storable = PersistenceManager.Load(task.filename);
+        task.instance = PersistenceManager.Load(task.filename);
       } catch(FileNotFoundException ex) {
         MessageBox.Show("Sorry couldn't open file \"" + task.filename + "\".\nThe file or plugin \"" + ex.FileName + "\" is not available.\nPlease make sure you have all necessary plugins installed.",
@@ -162,6 +162,6 @@
       else {
         IEditor editor = null;
-        if(task.storable != null) {
-          IEditable editable = task.storable as IEditable;
+        if(task.instance != null) {
+          IEditable editable = task.instance as IEditable;
           if(editable != null)
             editor = editable.CreateEditor();
@@ -200,5 +200,5 @@
     private void AsynchronousSave(object state) {
       Task task = (Task)state;
-      PersistenceManager.Save(task.storable, task.filename);
+      PersistenceManager.Save(task.instance, task.filename);
       SaveFinished(task);
     }
Index: /branches/Operator Architecture Refactoring/HeuristicLab.ThreadParallelEngine/3.3/ThreadParallelEngine.cs
===================================================================
--- /branches/Operator Architecture Refactoring/HeuristicLab.ThreadParallelEngine/3.3/ThreadParallelEngine.cs	(revision 2032)
+++ /branches/Operator Architecture Refactoring/HeuristicLab.ThreadParallelEngine/3.3/ThreadParallelEngine.cs	(revision 2033)
@@ -73,5 +73,5 @@
     /// <inheritdoc/>
     /// <returns>The cloned object as <see cref="ThreadParallelEngine"/>.</returns>
-    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+    public override object Clone(IDictionary<long, object> clonedObjects) {
       ThreadParallelEngine clone = (ThreadParallelEngine)base.Clone(clonedObjects);
       clone.myWorkers = Workers;
