Index: /trunk/sources/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj	(revision 2663)
+++ /trunk/sources/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj	(revision 2664)
@@ -49,4 +49,5 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="ObservableKeyedCollection.cs" />
     <Compile Include="ReadOnlyObservableSet.cs" />
     <Compile Include="IObservableSet.cs" />
@@ -64,5 +65,4 @@
     <Compile Include="IObservableCollection.cs" />
     <Compile Include="IObservableDictionary.cs" />
-    <Compile Include="ObservableKeyedCollectionBase.cs" />
     <Compile Include="ObservableCollection.cs" />
     <Compile Include="IndexedItem.cs" />
Index: /trunk/sources/HeuristicLab.Collections/3.3/ObservableKeyedCollection.cs
===================================================================
--- /trunk/sources/HeuristicLab.Collections/3.3/ObservableKeyedCollection.cs	(revision 2664)
+++ /trunk/sources/HeuristicLab.Collections/3.3/ObservableKeyedCollection.cs	(revision 2664)
@@ -0,0 +1,290 @@
+﻿#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;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Collections {
+  [Serializable]
+  public abstract class ObservableKeyedCollection<TKey, TItem> : IObservableKeyedCollection<TKey, TItem> {
+    [Storable]
+    private Dictionary<TKey, TItem> dict;
+
+    #region Properties
+    public int Count {
+      get { return dict.Count; }
+    }
+    public IEqualityComparer<TKey> Comparer {
+      get { return dict.Comparer; }
+    }
+    bool ICollection<TItem>.IsReadOnly {
+      get { return ((ICollection<KeyValuePair<TKey, TItem>>)dict).IsReadOnly; }
+    }
+
+    public TItem this[TKey key] {
+      get {
+        return dict[key];
+      }
+    }
+    #endregion
+
+    #region Constructors
+    protected ObservableKeyedCollection() {
+      dict = new Dictionary<TKey, TItem>();
+    }
+    protected ObservableKeyedCollection(int capacity) {
+      dict = new Dictionary<TKey, TItem>(capacity);
+    }
+    protected ObservableKeyedCollection(IEqualityComparer<TKey> comparer) {
+      dict = new Dictionary<TKey, TItem>(comparer);
+    }
+    protected ObservableKeyedCollection(IEnumerable<TItem> collection) {
+      if (collection == null) throw new ArgumentNullException();
+      dict = new Dictionary<TKey, TItem>();
+      foreach (TItem item in collection)
+        dict.Add(GetKeyForItem(item), item);
+      OnItemsAdded(collection);
+    }
+    protected ObservableKeyedCollection(int capacity, IEqualityComparer<TKey> comparer) {
+      dict = new Dictionary<TKey, TItem>(capacity, comparer);
+    }
+    protected ObservableKeyedCollection(IEnumerable<TItem> collection, IEqualityComparer<TKey> comparer) {
+      if (collection == null) throw new ArgumentNullException();
+      dict = new Dictionary<TKey, TItem>(comparer);
+      foreach (TItem item in collection)
+        dict.Add(GetKeyForItem(item), item);
+      OnItemsAdded(collection);
+    }
+    #endregion
+
+    protected abstract TKey GetKeyForItem(TItem item);
+    protected void UpdateItemKey(TItem item) {
+      if (item == null) throw new ArgumentNullException();
+      TKey oldKey = default(TKey);
+      bool oldKeyFound = false;
+      foreach (KeyValuePair<TKey, TItem> entry in dict) {
+        if (entry.Value.Equals(item)) {
+          oldKey = entry.Key;
+          oldKeyFound = true;
+          break;
+        }
+      }
+      if (!oldKeyFound) throw new ArgumentException("Item not found");
+      dict.Remove(oldKey);
+      dict.Add(GetKeyForItem(item), item);
+      OnPropertyChanged("Item[]");
+      OnItemsReplaced(new TItem[] { item }, new TItem[] { item });
+    }
+
+    #region Access
+    public bool ContainsKey(TKey key) {
+      return dict.ContainsKey(key);
+    }
+    public bool Contains(TItem item) {
+      return dict.ContainsValue(item);
+    }
+
+    public bool TryGetValue(TKey key, out TItem item) {
+      return dict.TryGetValue(key, out item);
+    }
+
+    public bool Exists(Predicate<TItem> match) {
+      if (match == null) throw new ArgumentNullException();
+      foreach (TItem item in dict.Values) {
+        if (match(item)) return true;
+      }
+      return false;
+    }
+
+    public TItem Find(Predicate<TItem> match) {
+      if (match == null) throw new ArgumentNullException();
+      foreach (TItem item in dict.Values) {
+        if (match(item)) return item;
+      }
+      return default(TItem);
+    }
+    public ICollection<TItem> FindAll(Predicate<TItem> match) {
+      if (match == null) throw new ArgumentNullException();
+      List<TItem> result = new List<TItem>();
+      foreach (TItem item in dict.Values) {
+        if (match(item)) result.Add(item);
+      }
+      return result;
+    }
+    #endregion
+
+    #region Manipulation
+    public void Add(TItem item) {
+      dict.Add(GetKeyForItem(item), item);
+      OnPropertyChanged("Item[]");
+      OnPropertyChanged("Count");
+      OnItemsAdded(new TItem[] { item });
+    }
+    public void AddRange(IEnumerable<TItem> collection) {
+      if (collection == null) throw new ArgumentNullException();
+      bool empty = true;
+      foreach (TItem item in collection) {
+        dict.Add(GetKeyForItem(item), item);
+        empty = false;
+      }
+      if (!empty) {
+        OnPropertyChanged("Item[]");
+        OnPropertyChanged("Count");
+        OnItemsAdded(collection);
+      }
+    }
+
+    public bool Remove(TKey key) {
+      TItem item;
+      if (TryGetValue(key, out item)) {
+        dict.Remove(key);
+        OnPropertyChanged("Item[]");
+        OnPropertyChanged("Count");
+        OnItemsRemoved(new TItem[] { item });
+        return true;
+      }
+      return false;
+    }
+    public bool Remove(TItem item) {
+      if (dict.Remove(GetKeyForItem(item))) {
+        OnPropertyChanged("Item[]");
+        OnPropertyChanged("Count");
+        OnItemsRemoved(new TItem[] { item });
+        return true;
+      }
+      return false;
+    }
+    public void RemoveRange(IEnumerable<TItem> collection) {
+      if (collection == null) throw new ArgumentNullException();
+      List<TItem> items = new List<TItem>();
+      foreach (TItem item in collection) {
+        if (dict.Remove(GetKeyForItem(item)))
+          items.Add(item);
+      }
+      if (items.Count > 0) {
+        OnPropertyChanged("Item[]");
+        OnPropertyChanged("Count");
+        OnItemsRemoved(items);
+      }
+    }
+    public int RemoveAll(Predicate<TItem> match) {
+      ICollection<TItem> items = FindAll(match);
+      RemoveRange(items);
+      return items.Count;
+    }
+
+    public void Clear() {
+      if (dict.Count > 0) {
+        TItem[] items = dict.Values.ToArray();
+        dict.Clear();
+        OnPropertyChanged("Item[]");
+        OnPropertyChanged("Count");
+        OnCollectionReset(new TItem[0], items);
+      }
+    }
+    #endregion
+
+    #region Conversion
+    public ReadOnlyObservableKeyedCollection<TKey, TItem> AsReadOnly() {
+      return new ReadOnlyObservableKeyedCollection<TKey, TItem>(this);
+    }
+    public TItem[] ToArray() {
+      return dict.Values.ToArray();
+    }
+    public void CopyTo(TItem[] array, int arrayIndex) {
+      dict.Values.CopyTo(array, arrayIndex);
+    }
+    public ICollection<TOutput> ConvertAll<TOutput>(Converter<TItem, TOutput> converter) {
+      if (converter == null) throw new ArgumentNullException();
+      List<TOutput> result = new List<TOutput>();
+      foreach (TItem item in dict.Values)
+        result.Add(converter(item));
+      return result;
+    }
+    #endregion
+
+    #region Processing
+    public void ForEach(Action<TItem> action) {
+      if (action == null) throw new ArgumentNullException();
+      foreach (TItem item in dict.Values)
+        action(item);
+    }
+    public bool TrueForAll(Predicate<TItem> match) {
+      if (match == null) throw new ArgumentNullException();
+      foreach (TItem item in dict.Values)
+        if (! match(item)) return false;
+      return true;
+    }
+    #endregion
+
+    #region Enumeration
+    public IEnumerator<TItem> GetEnumerator() {
+      return dict.Values.GetEnumerator();
+    }
+    IEnumerator IEnumerable.GetEnumerator() {
+      return dict.Values.GetEnumerator();
+    }
+    #endregion
+
+    #region Events
+    [field: NonSerialized]
+    public event CollectionItemsChangedEventHandler<TItem> ItemsAdded;
+    protected virtual void OnItemsAdded(IEnumerable<TItem> items) {
+      if (ItemsAdded != null)
+        ItemsAdded(this, new CollectionItemsChangedEventArgs<TItem>(items));
+    }
+
+    [field: NonSerialized]
+    public event CollectionItemsChangedEventHandler<TItem> ItemsRemoved;
+    protected virtual void OnItemsRemoved(IEnumerable<TItem> items) {
+      if (ItemsRemoved != null)
+        ItemsRemoved(this, new CollectionItemsChangedEventArgs<TItem>(items));
+    }
+
+    [field: NonSerialized]
+    public event CollectionItemsChangedEventHandler<TItem> ItemsReplaced;
+    protected virtual void OnItemsReplaced(IEnumerable<TItem> items, IEnumerable<TItem> oldItems) {
+      if (ItemsReplaced != null)
+        ItemsReplaced(this, new CollectionItemsChangedEventArgs<TItem>(items, oldItems));
+    }
+
+    [field: NonSerialized]
+    public event CollectionItemsChangedEventHandler<TItem> CollectionReset;
+    protected virtual void OnCollectionReset(IEnumerable<TItem> items, IEnumerable<TItem> oldItems) {
+      if (CollectionReset != null)
+        CollectionReset(this, new CollectionItemsChangedEventArgs<TItem>(items, oldItems));
+    }
+
+    [field: NonSerialized]
+    public event PropertyChangedEventHandler PropertyChanged;
+    protected virtual void OnPropertyChanged(string propertyName) {
+      if (PropertyChanged != null)
+        PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+    }
+    #endregion
+  }
+}
Index: unk/sources/HeuristicLab.Collections/3.3/ObservableKeyedCollectionBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Collections/3.3/ObservableKeyedCollectionBase.cs	(revision 2663)
+++ 	(revision )
@@ -1,290 +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;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.ComponentModel;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Collections {
-  [Serializable]
-  public abstract class ObservableKeyedCollectionBase<TKey, TItem> : IObservableKeyedCollection<TKey, TItem> {
-    [Storable]
-    private Dictionary<TKey, TItem> dict;
-
-    #region Properties
-    public int Count {
-      get { return dict.Count; }
-    }
-    public IEqualityComparer<TKey> Comparer {
-      get { return dict.Comparer; }
-    }
-    bool ICollection<TItem>.IsReadOnly {
-      get { return ((ICollection<KeyValuePair<TKey, TItem>>)dict).IsReadOnly; }
-    }
-
-    public TItem this[TKey key] {
-      get {
-        return dict[key];
-      }
-    }
-    #endregion
-
-    #region Constructors
-    protected ObservableKeyedCollectionBase() {
-      dict = new Dictionary<TKey, TItem>();
-    }
-    protected ObservableKeyedCollectionBase(int capacity) {
-      dict = new Dictionary<TKey, TItem>(capacity);
-    }
-    protected ObservableKeyedCollectionBase(IEqualityComparer<TKey> comparer) {
-      dict = new Dictionary<TKey, TItem>(comparer);
-    }
-    protected ObservableKeyedCollectionBase(IEnumerable<TItem> collection) {
-      if (collection == null) throw new ArgumentNullException();
-      dict = new Dictionary<TKey, TItem>();
-      foreach (TItem item in collection)
-        dict.Add(GetKeyForItem(item), item);
-      OnItemsAdded(collection);
-    }
-    protected ObservableKeyedCollectionBase(int capacity, IEqualityComparer<TKey> comparer) {
-      dict = new Dictionary<TKey, TItem>(capacity, comparer);
-    }
-    protected ObservableKeyedCollectionBase(IEnumerable<TItem> collection, IEqualityComparer<TKey> comparer) {
-      if (collection == null) throw new ArgumentNullException();
-      dict = new Dictionary<TKey, TItem>(comparer);
-      foreach (TItem item in collection)
-        dict.Add(GetKeyForItem(item), item);
-      OnItemsAdded(collection);
-    }
-    #endregion
-
-    protected abstract TKey GetKeyForItem(TItem item);
-    protected void UpdateItemKey(TItem item) {
-      if (item == null) throw new ArgumentNullException();
-      TKey oldKey = default(TKey);
-      bool oldKeyFound = false;
-      foreach (KeyValuePair<TKey, TItem> entry in dict) {
-        if (entry.Value.Equals(item)) {
-          oldKey = entry.Key;
-          oldKeyFound = true;
-          break;
-        }
-      }
-      if (!oldKeyFound) throw new ArgumentException("Item not found");
-      dict.Remove(oldKey);
-      dict.Add(GetKeyForItem(item), item);
-      OnPropertyChanged("Item[]");
-      OnItemsReplaced(new TItem[] { item }, new TItem[] { item });
-    }
-
-    #region Access
-    public bool ContainsKey(TKey key) {
-      return dict.ContainsKey(key);
-    }
-    public bool Contains(TItem item) {
-      return dict.ContainsValue(item);
-    }
-
-    public bool TryGetValue(TKey key, out TItem item) {
-      return dict.TryGetValue(key, out item);
-    }
-
-    public bool Exists(Predicate<TItem> match) {
-      if (match == null) throw new ArgumentNullException();
-      foreach (TItem item in dict.Values) {
-        if (match(item)) return true;
-      }
-      return false;
-    }
-
-    public TItem Find(Predicate<TItem> match) {
-      if (match == null) throw new ArgumentNullException();
-      foreach (TItem item in dict.Values) {
-        if (match(item)) return item;
-      }
-      return default(TItem);
-    }
-    public ICollection<TItem> FindAll(Predicate<TItem> match) {
-      if (match == null) throw new ArgumentNullException();
-      List<TItem> result = new List<TItem>();
-      foreach (TItem item in dict.Values) {
-        if (match(item)) result.Add(item);
-      }
-      return result;
-    }
-    #endregion
-
-    #region Manipulation
-    public void Add(TItem item) {
-      dict.Add(GetKeyForItem(item), item);
-      OnPropertyChanged("Item[]");
-      OnPropertyChanged("Count");
-      OnItemsAdded(new TItem[] { item });
-    }
-    public void AddRange(IEnumerable<TItem> collection) {
-      if (collection == null) throw new ArgumentNullException();
-      bool empty = true;
-      foreach (TItem item in collection) {
-        dict.Add(GetKeyForItem(item), item);
-        empty = false;
-      }
-      if (!empty) {
-        OnPropertyChanged("Item[]");
-        OnPropertyChanged("Count");
-        OnItemsAdded(collection);
-      }
-    }
-
-    public bool Remove(TKey key) {
-      TItem item;
-      if (TryGetValue(key, out item)) {
-        dict.Remove(key);
-        OnPropertyChanged("Item[]");
-        OnPropertyChanged("Count");
-        OnItemsRemoved(new TItem[] { item });
-        return true;
-      }
-      return false;
-    }
-    public bool Remove(TItem item) {
-      if (dict.Remove(GetKeyForItem(item))) {
-        OnPropertyChanged("Item[]");
-        OnPropertyChanged("Count");
-        OnItemsRemoved(new TItem[] { item });
-        return true;
-      }
-      return false;
-    }
-    public void RemoveRange(IEnumerable<TItem> collection) {
-      if (collection == null) throw new ArgumentNullException();
-      List<TItem> items = new List<TItem>();
-      foreach (TItem item in collection) {
-        if (dict.Remove(GetKeyForItem(item)))
-          items.Add(item);
-      }
-      if (items.Count > 0) {
-        OnPropertyChanged("Item[]");
-        OnPropertyChanged("Count");
-        OnItemsRemoved(items);
-      }
-    }
-    public int RemoveAll(Predicate<TItem> match) {
-      ICollection<TItem> items = FindAll(match);
-      RemoveRange(items);
-      return items.Count;
-    }
-
-    public void Clear() {
-      if (dict.Count > 0) {
-        TItem[] items = dict.Values.ToArray();
-        dict.Clear();
-        OnPropertyChanged("Item[]");
-        OnPropertyChanged("Count");
-        OnCollectionReset(new TItem[0], items);
-      }
-    }
-    #endregion
-
-    #region Conversion
-    public ReadOnlyObservableKeyedCollection<TKey, TItem> AsReadOnly() {
-      return new ReadOnlyObservableKeyedCollection<TKey, TItem>(this);
-    }
-    public TItem[] ToArray() {
-      return dict.Values.ToArray();
-    }
-    public void CopyTo(TItem[] array, int arrayIndex) {
-      dict.Values.CopyTo(array, arrayIndex);
-    }
-    public ICollection<TOutput> ConvertAll<TOutput>(Converter<TItem, TOutput> converter) {
-      if (converter == null) throw new ArgumentNullException();
-      List<TOutput> result = new List<TOutput>();
-      foreach (TItem item in dict.Values)
-        result.Add(converter(item));
-      return result;
-    }
-    #endregion
-
-    #region Processing
-    public void ForEach(Action<TItem> action) {
-      if (action == null) throw new ArgumentNullException();
-      foreach (TItem item in dict.Values)
-        action(item);
-    }
-    public bool TrueForAll(Predicate<TItem> match) {
-      if (match == null) throw new ArgumentNullException();
-      foreach (TItem item in dict.Values)
-        if (! match(item)) return false;
-      return true;
-    }
-    #endregion
-
-    #region Enumeration
-    public IEnumerator<TItem> GetEnumerator() {
-      return dict.Values.GetEnumerator();
-    }
-    IEnumerator IEnumerable.GetEnumerator() {
-      return dict.Values.GetEnumerator();
-    }
-    #endregion
-
-    #region Events
-    [field: NonSerialized]
-    public event CollectionItemsChangedEventHandler<TItem> ItemsAdded;
-    protected virtual void OnItemsAdded(IEnumerable<TItem> items) {
-      if (ItemsAdded != null)
-        ItemsAdded(this, new CollectionItemsChangedEventArgs<TItem>(items));
-    }
-
-    [field: NonSerialized]
-    public event CollectionItemsChangedEventHandler<TItem> ItemsRemoved;
-    protected virtual void OnItemsRemoved(IEnumerable<TItem> items) {
-      if (ItemsRemoved != null)
-        ItemsRemoved(this, new CollectionItemsChangedEventArgs<TItem>(items));
-    }
-
-    [field: NonSerialized]
-    public event CollectionItemsChangedEventHandler<TItem> ItemsReplaced;
-    protected virtual void OnItemsReplaced(IEnumerable<TItem> items, IEnumerable<TItem> oldItems) {
-      if (ItemsReplaced != null)
-        ItemsReplaced(this, new CollectionItemsChangedEventArgs<TItem>(items, oldItems));
-    }
-
-    [field: NonSerialized]
-    public event CollectionItemsChangedEventHandler<TItem> CollectionReset;
-    protected virtual void OnCollectionReset(IEnumerable<TItem> items, IEnumerable<TItem> oldItems) {
-      if (CollectionReset != null)
-        CollectionReset(this, new CollectionItemsChangedEventArgs<TItem>(items, oldItems));
-    }
-
-    [field: NonSerialized]
-    public event PropertyChangedEventHandler PropertyChanged;
-    protected virtual void OnPropertyChanged(string propertyName) {
-      if (PropertyChanged != null)
-        PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
-    }
-    #endregion
-  }
-}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/DefaultItemView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/DefaultItemView.Designer.cs	(revision 2664)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/DefaultItemView.Designer.cs	(revision 2664)
@@ -0,0 +1,76 @@
+#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.Views {
+  partial class DefaultItemView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.messageLabel = new System.Windows.Forms.Label();
+      this.SuspendLayout();
+      // 
+      // messageLabel
+      // 
+      this.messageLabel.Anchor = System.Windows.Forms.AnchorStyles.Top;
+      this.messageLabel.AutoSize = true;
+      this.messageLabel.Location = new System.Drawing.Point(55, 0);
+      this.messageLabel.Name = "messageLabel";
+      this.messageLabel.Size = new System.Drawing.Size(91, 13);
+      this.messageLabel.TabIndex = 0;
+      this.messageLabel.Text = "No view available";
+      // 
+      // DataBaseView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.messageLabel);
+      this.Name = "DataBaseView";
+      this.Size = new System.Drawing.Size(201, 46);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label messageLabel;
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/DefaultItemView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/DefaultItemView.cs	(revision 2664)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/DefaultItemView.cs	(revision 2664)
@@ -0,0 +1,52 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Core.Views { 
+  /// <summary>
+  /// The base class for visual representations of items.
+  /// </summary>
+  [Content(typeof(Item), true)]
+  public partial class DefaultItemView : ItemView {
+    /// <summary>
+    /// Initializes a new instance of <see cref="ItemBaseView"/>.
+    /// </summary>
+    public DefaultItemView() {
+      InitializeComponent();
+    }
+    /// <summary>
+    /// Intializes a new instance of <see cref="ItemBaseView"/> with the given <paramref name="item"/>.
+    /// </summary>
+    /// <param name="item">The item that should be displayed.</param>
+    public DefaultItemView(Item item)
+      : this() {
+      Item = item;
+    }
+  }
+}
Index: unk/sources/HeuristicLab.Core.Views/3.3/EngineBaseView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/EngineBaseView.Designer.cs	(revision 2663)
+++ 	(revision )
@@ -1,192 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Core.Views {
-  partial class EngineBaseView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.components = new System.ComponentModel.Container();
-      this.executionTimeTextBox = new System.Windows.Forms.TextBox();
-      this.executionTimeLabel = new System.Windows.Forms.Label();
-      this.splitContainer = new System.Windows.Forms.SplitContainer();
-      this.operatorGraphView = new HeuristicLab.Core.Views.OperatorGraphView();
-      this.scopeView = new HeuristicLab.Core.Views.ScopeView();
-      this.resetButton = new System.Windows.Forms.Button();
-      this.stopButton = new System.Windows.Forms.Button();
-      this.startButton = new System.Windows.Forms.Button();
-      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
-      this.splitContainer.Panel1.SuspendLayout();
-      this.splitContainer.Panel2.SuspendLayout();
-      this.splitContainer.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // executionTimeTextBox
-      // 
-      this.executionTimeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.executionTimeTextBox.Location = new System.Drawing.Point(661, 620);
-      this.executionTimeTextBox.Name = "executionTimeTextBox";
-      this.executionTimeTextBox.ReadOnly = true;
-      this.executionTimeTextBox.Size = new System.Drawing.Size(141, 20);
-      this.executionTimeTextBox.TabIndex = 4;
-      // 
-      // executionTimeLabel
-      // 
-      this.executionTimeLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.executionTimeLabel.AutoSize = true;
-      this.executionTimeLabel.Location = new System.Drawing.Point(572, 623);
-      this.executionTimeLabel.Name = "executionTimeLabel";
-      this.executionTimeLabel.Size = new System.Drawing.Size(83, 13);
-      this.executionTimeLabel.TabIndex = 3;
-      this.executionTimeLabel.Text = "&Execution Time:";
-      // 
-      // 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.operatorGraphView);
-      // 
-      // splitContainer.Panel2
-      // 
-      this.splitContainer.Panel2.Controls.Add(this.scopeView);
-      this.splitContainer.Size = new System.Drawing.Size(802, 611);
-      this.splitContainer.SplitterDistance = 401;
-      this.splitContainer.TabIndex = 0;
-      // 
-      // operatorGraphView
-      // 
-      this.operatorGraphView.Caption = "Operator Graph";
-      this.operatorGraphView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.operatorGraphView.Item = null;
-      this.operatorGraphView.Location = new System.Drawing.Point(0, 0);
-      this.operatorGraphView.Name = "operatorGraphView";
-      this.operatorGraphView.OperatorGraph = null;
-      this.operatorGraphView.Size = new System.Drawing.Size(401, 611);
-      this.operatorGraphView.TabIndex = 0;
-      // 
-      // scopeView
-      // 
-      this.scopeView.Caption = "Scope";
-      this.scopeView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.scopeView.Item = null;
-      this.scopeView.Location = new System.Drawing.Point(0, 0);
-      this.scopeView.Name = "scopeView";
-      this.scopeView.Scope = null;
-      this.scopeView.Size = new System.Drawing.Size(397, 611);
-      this.scopeView.TabIndex = 0;
-      // 
-      // resetButton
-      // 
-      this.resetButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.resetButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Restart;
-      this.resetButton.Location = new System.Drawing.Point(58, 617);
-      this.resetButton.Name = "resetButton";
-      this.resetButton.Size = new System.Drawing.Size(23, 23);
-      this.resetButton.TabIndex = 2;
-      this.toolTip.SetToolTip(this.resetButton, "Reset Engine");
-      this.resetButton.UseVisualStyleBackColor = true;
-      this.resetButton.Click += new System.EventHandler(this.resetButton_Click);
-      // 
-      // stopButton
-      // 
-      this.stopButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.stopButton.Enabled = false;
-      this.stopButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Stop;
-      this.stopButton.Location = new System.Drawing.Point(29, 617);
-      this.stopButton.Name = "stopButton";
-      this.stopButton.Size = new System.Drawing.Size(23, 23);
-      this.stopButton.TabIndex = 1;
-      this.toolTip.SetToolTip(this.stopButton, "Stop Engine");
-      this.stopButton.UseVisualStyleBackColor = true;
-      this.stopButton.Click += new System.EventHandler(this.stopButton_Click);
-      // 
-      // startButton
-      // 
-      this.startButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.startButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Play;
-      this.startButton.Location = new System.Drawing.Point(0, 617);
-      this.startButton.Name = "startButton";
-      this.startButton.Size = new System.Drawing.Size(23, 23);
-      this.startButton.TabIndex = 0;
-      this.toolTip.SetToolTip(this.startButton, "Start Engine");
-      this.startButton.UseVisualStyleBackColor = true;
-      this.startButton.Click += new System.EventHandler(this.startButton_Click);
-      // 
-      // EngineBaseView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.executionTimeTextBox);
-      this.Controls.Add(this.executionTimeLabel);
-      this.Controls.Add(this.splitContainer);
-      this.Controls.Add(this.resetButton);
-      this.Controls.Add(this.stopButton);
-      this.Controls.Add(this.startButton);
-      this.Name = "EngineBaseView";
-      this.Size = new System.Drawing.Size(802, 640);
-      this.splitContainer.Panel1.ResumeLayout(false);
-      this.splitContainer.Panel2.ResumeLayout(false);
-      this.splitContainer.ResumeLayout(false);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    protected System.Windows.Forms.TextBox executionTimeTextBox;
-    protected System.Windows.Forms.Label executionTimeLabel;
-    protected System.Windows.Forms.SplitContainer splitContainer;
-    protected System.Windows.Forms.Button resetButton;
-    protected System.Windows.Forms.Button stopButton;
-    protected System.Windows.Forms.Button startButton;
-    protected HeuristicLab.Core.Views.OperatorGraphView operatorGraphView;
-    protected HeuristicLab.Core.Views.ScopeView scopeView;
-    private System.Windows.Forms.ToolTip toolTip;
-
-  }
-}
Index: unk/sources/HeuristicLab.Core.Views/3.3/EngineBaseView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/EngineBaseView.cs	(revision 2663)
+++ 	(revision )
@@ -1,192 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.Core;
-using HeuristicLab.Common;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.Core.Views {
-  /// <summary>
-  /// Base class for editors of engines.
-  /// </summary>
-  [Content(typeof(EngineBase), true)]
-  public partial class EngineBaseView : ItemViewBase {
-    private int executionTimeCounter;
-
-    /// <summary>
-    /// Gets or sets the current engine.
-    /// </summary>
-    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="EditorBase"/>.</remarks>
-    public EngineBase Engine {
-      get { return (EngineBase)Item; }
-      set { base.Item = value; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="EngineBaseEditor"/>.
-    /// </summary>
-    public EngineBaseView() {
-      InitializeComponent();
-    }
-    public EngineBaseView(EngineBase engine)
-      : this() {
-      Engine = engine;
-    }
-
-    /// <summary>
-    /// Removes the event handlers from the underlying <see cref="IEngine"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void DeregisterObjectEvents() {
-      Engine.OperatorGraphChanged -= new EventHandler(Engine_OperatorGraphChanged);
-      Engine.Initialized -= new EventHandler(Engine_Initialized);
-      Engine.Started -= new EventHandler(Engine_Started);
-      Engine.Stopped -= new EventHandler(Engine_Stopped);
-      Engine.ExecutionTimeChanged -= new EventHandler(Engine_ExecutionTimeChanged);
-      Engine.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(Engine_ExceptionOccurred);
-      base.DeregisterObjectEvents();
-    }
-
-    /// <summary>
-    /// Adds event handlers to the underlying <see cref="IEngine"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void RegisterObjectEvents() {
-      base.RegisterObjectEvents();
-      Engine.OperatorGraphChanged += new EventHandler(Engine_OperatorGraphChanged);
-      Engine.Initialized += new EventHandler(Engine_Initialized);
-      Engine.Started += new EventHandler(Engine_Started);
-      Engine.Stopped += new EventHandler(Engine_Stopped);
-      Engine.ExecutionTimeChanged += new EventHandler(Engine_ExecutionTimeChanged);
-      Engine.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(Engine_ExceptionOccurred);
-    }
-
-    /// <summary>
-    /// Updates all controls with the latest data of the model.
-    /// </summary>
-    /// <remarks>Calls <see cref="EditorBase.UpdateControls"/> of base class <see cref="EditorBase"/>.</remarks>
-    protected override void OnObjectChanged() {
-      base.OnObjectChanged();
-      stopButton.Enabled = false;
-      if (Engine == null) {
-        operatorGraphView.Enabled = false;
-        scopeView.Enabled = false;
-        startButton.Enabled = false;
-        resetButton.Enabled = false;
-        executionTimeTextBox.Enabled = false;
-      } else {
-        operatorGraphView.OperatorGraph = Engine.OperatorGraph;
-        scopeView.Scope = Engine.GlobalScope;
-        startButton.Enabled = !Engine.Finished;
-        resetButton.Enabled = true;
-        UpdateExecutionTimeTextBox();
-        executionTimeTextBox.Enabled = true;
-      }
-    }
-
-    #region Engine Events
-    private void Engine_OperatorGraphChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Engine_OperatorGraphChanged), sender, e);
-      else
-        operatorGraphView.OperatorGraph = Engine.OperatorGraph;
-    }
-    private void Engine_Initialized(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Engine_Initialized), sender, e);
-      else {
-        operatorGraphView.Enabled = true;
-        scopeView.Enabled = true;
-        startButton.Enabled = !Engine.Finished;
-        stopButton.Enabled = false;
-        resetButton.Enabled = true;
-        UpdateExecutionTimeTextBox();
-      }
-    }
-    private void Engine_Started(object sender, EventArgs e) {
-      executionTimeCounter = 0;
-      if (InvokeRequired)
-        Invoke(new EventHandler(Engine_Started), sender, e);
-      else {
-        operatorGraphView.Enabled = false;
-        scopeView.Enabled = false;
-        startButton.Enabled = false;
-        stopButton.Enabled = true;
-        resetButton.Enabled = false;
-        UpdateExecutionTimeTextBox();
-      }
-    }
-    private void Engine_Stopped(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Engine_Stopped), sender, e);
-      else {
-        operatorGraphView.Enabled = true;
-        scopeView.Enabled = true;
-        startButton.Enabled = !Engine.Finished;
-        stopButton.Enabled = false;
-        resetButton.Enabled = true;
-        UpdateExecutionTimeTextBox();
-      }
-    }
-    private void Engine_ExecutionTimeChanged(object sender, EventArgs e) {
-      executionTimeCounter++;
-      if ((executionTimeCounter == 100) || !Engine.Running) {
-        executionTimeCounter = 0;
-        UpdateExecutionTimeTextBox();
-      }
-    }
-    private void Engine_ExceptionOccurred(object sender, EventArgs<Exception> e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler<EventArgs<Exception>>(Engine_ExceptionOccurred), sender, e);
-      else
-        Auxiliary.ShowErrorMessageBox(e.Value);
-    }
-    #endregion
-
-    #region Button events
-    private void startButton_Click(object sender, EventArgs e) {
-      Engine.Start();
-    }
-    private void stopButton_Click(object sender, EventArgs e) {
-      Engine.Stop();
-    }
-    private void resetButton_Click(object sender, EventArgs e) {
-      Engine.Initialize();
-    }
-    #endregion
-
-    #region Helpers
-    private void UpdateExecutionTimeTextBox() {
-      if (InvokeRequired)
-        Invoke(new Action(UpdateExecutionTimeTextBox));
-      else
-        executionTimeTextBox.Text = Engine.ExecutionTime.ToString();
-    }
-    #endregion
-  }
-}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/EngineView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/EngineView.Designer.cs	(revision 2664)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/EngineView.Designer.cs	(revision 2664)
@@ -0,0 +1,192 @@
+#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.Views {
+  partial class EngineView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      this.executionTimeTextBox = new System.Windows.Forms.TextBox();
+      this.executionTimeLabel = new System.Windows.Forms.Label();
+      this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.operatorGraphView = new HeuristicLab.Core.Views.OperatorGraphView();
+      this.scopeView = new HeuristicLab.Core.Views.ScopeView();
+      this.resetButton = new System.Windows.Forms.Button();
+      this.stopButton = new System.Windows.Forms.Button();
+      this.startButton = new System.Windows.Forms.Button();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // executionTimeTextBox
+      // 
+      this.executionTimeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.executionTimeTextBox.Location = new System.Drawing.Point(661, 620);
+      this.executionTimeTextBox.Name = "executionTimeTextBox";
+      this.executionTimeTextBox.ReadOnly = true;
+      this.executionTimeTextBox.Size = new System.Drawing.Size(141, 20);
+      this.executionTimeTextBox.TabIndex = 4;
+      // 
+      // executionTimeLabel
+      // 
+      this.executionTimeLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.executionTimeLabel.AutoSize = true;
+      this.executionTimeLabel.Location = new System.Drawing.Point(572, 623);
+      this.executionTimeLabel.Name = "executionTimeLabel";
+      this.executionTimeLabel.Size = new System.Drawing.Size(83, 13);
+      this.executionTimeLabel.TabIndex = 3;
+      this.executionTimeLabel.Text = "&Execution Time:";
+      // 
+      // 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.operatorGraphView);
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.scopeView);
+      this.splitContainer.Size = new System.Drawing.Size(802, 611);
+      this.splitContainer.SplitterDistance = 401;
+      this.splitContainer.TabIndex = 0;
+      // 
+      // operatorGraphView
+      // 
+      this.operatorGraphView.Caption = "Operator Graph";
+      this.operatorGraphView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorGraphView.Item = null;
+      this.operatorGraphView.Location = new System.Drawing.Point(0, 0);
+      this.operatorGraphView.Name = "operatorGraphView";
+      this.operatorGraphView.OperatorGraph = null;
+      this.operatorGraphView.Size = new System.Drawing.Size(401, 611);
+      this.operatorGraphView.TabIndex = 0;
+      // 
+      // scopeView
+      // 
+      this.scopeView.Caption = "Scope";
+      this.scopeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.scopeView.Item = null;
+      this.scopeView.Location = new System.Drawing.Point(0, 0);
+      this.scopeView.Name = "scopeView";
+      this.scopeView.Scope = null;
+      this.scopeView.Size = new System.Drawing.Size(397, 611);
+      this.scopeView.TabIndex = 0;
+      // 
+      // resetButton
+      // 
+      this.resetButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.resetButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Restart;
+      this.resetButton.Location = new System.Drawing.Point(58, 617);
+      this.resetButton.Name = "resetButton";
+      this.resetButton.Size = new System.Drawing.Size(23, 23);
+      this.resetButton.TabIndex = 2;
+      this.toolTip.SetToolTip(this.resetButton, "Reset Engine");
+      this.resetButton.UseVisualStyleBackColor = true;
+      this.resetButton.Click += new System.EventHandler(this.resetButton_Click);
+      // 
+      // stopButton
+      // 
+      this.stopButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.stopButton.Enabled = false;
+      this.stopButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Stop;
+      this.stopButton.Location = new System.Drawing.Point(29, 617);
+      this.stopButton.Name = "stopButton";
+      this.stopButton.Size = new System.Drawing.Size(23, 23);
+      this.stopButton.TabIndex = 1;
+      this.toolTip.SetToolTip(this.stopButton, "Stop Engine");
+      this.stopButton.UseVisualStyleBackColor = true;
+      this.stopButton.Click += new System.EventHandler(this.stopButton_Click);
+      // 
+      // startButton
+      // 
+      this.startButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.startButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Play;
+      this.startButton.Location = new System.Drawing.Point(0, 617);
+      this.startButton.Name = "startButton";
+      this.startButton.Size = new System.Drawing.Size(23, 23);
+      this.startButton.TabIndex = 0;
+      this.toolTip.SetToolTip(this.startButton, "Start Engine");
+      this.startButton.UseVisualStyleBackColor = true;
+      this.startButton.Click += new System.EventHandler(this.startButton_Click);
+      // 
+      // EngineBaseView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.executionTimeTextBox);
+      this.Controls.Add(this.executionTimeLabel);
+      this.Controls.Add(this.splitContainer);
+      this.Controls.Add(this.resetButton);
+      this.Controls.Add(this.stopButton);
+      this.Controls.Add(this.startButton);
+      this.Name = "EngineBaseView";
+      this.Size = new System.Drawing.Size(802, 640);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      this.splitContainer.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.TextBox executionTimeTextBox;
+    protected System.Windows.Forms.Label executionTimeLabel;
+    protected System.Windows.Forms.SplitContainer splitContainer;
+    protected System.Windows.Forms.Button resetButton;
+    protected System.Windows.Forms.Button stopButton;
+    protected System.Windows.Forms.Button startButton;
+    protected HeuristicLab.Core.Views.OperatorGraphView operatorGraphView;
+    protected HeuristicLab.Core.Views.ScopeView scopeView;
+    private System.Windows.Forms.ToolTip toolTip;
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/EngineView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/EngineView.cs	(revision 2664)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/EngineView.cs	(revision 2664)
@@ -0,0 +1,192 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Common;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Core.Views {
+  /// <summary>
+  /// Base class for editors of engines.
+  /// </summary>
+  [Content(typeof(Engine), true)]
+  public partial class EngineView : ItemView {
+    private int executionTimeCounter;
+
+    /// <summary>
+    /// Gets or sets the current engine.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="EditorBase"/>.</remarks>
+    public Engine Engine {
+      get { return (Engine)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="EngineBaseEditor"/>.
+    /// </summary>
+    public EngineView() {
+      InitializeComponent();
+    }
+    public EngineView(Engine engine)
+      : this() {
+      Engine = engine;
+    }
+
+    /// <summary>
+    /// Removes the event handlers from the underlying <see cref="IEngine"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void DeregisterObjectEvents() {
+      Engine.OperatorGraphChanged -= new EventHandler(Engine_OperatorGraphChanged);
+      Engine.Initialized -= new EventHandler(Engine_Initialized);
+      Engine.Started -= new EventHandler(Engine_Started);
+      Engine.Stopped -= new EventHandler(Engine_Stopped);
+      Engine.ExecutionTimeChanged -= new EventHandler(Engine_ExecutionTimeChanged);
+      Engine.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(Engine_ExceptionOccurred);
+      base.DeregisterObjectEvents();
+    }
+
+    /// <summary>
+    /// Adds event handlers to the underlying <see cref="IEngine"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void RegisterObjectEvents() {
+      base.RegisterObjectEvents();
+      Engine.OperatorGraphChanged += new EventHandler(Engine_OperatorGraphChanged);
+      Engine.Initialized += new EventHandler(Engine_Initialized);
+      Engine.Started += new EventHandler(Engine_Started);
+      Engine.Stopped += new EventHandler(Engine_Stopped);
+      Engine.ExecutionTimeChanged += new EventHandler(Engine_ExecutionTimeChanged);
+      Engine.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(Engine_ExceptionOccurred);
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    /// <remarks>Calls <see cref="EditorBase.UpdateControls"/> of base class <see cref="EditorBase"/>.</remarks>
+    protected override void OnObjectChanged() {
+      base.OnObjectChanged();
+      stopButton.Enabled = false;
+      if (Engine == null) {
+        operatorGraphView.Enabled = false;
+        scopeView.Enabled = false;
+        startButton.Enabled = false;
+        resetButton.Enabled = false;
+        executionTimeTextBox.Enabled = false;
+      } else {
+        operatorGraphView.OperatorGraph = Engine.OperatorGraph;
+        scopeView.Scope = Engine.GlobalScope;
+        startButton.Enabled = !Engine.Finished;
+        resetButton.Enabled = true;
+        UpdateExecutionTimeTextBox();
+        executionTimeTextBox.Enabled = true;
+      }
+    }
+
+    #region Engine Events
+    private void Engine_OperatorGraphChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Engine_OperatorGraphChanged), sender, e);
+      else
+        operatorGraphView.OperatorGraph = Engine.OperatorGraph;
+    }
+    private void Engine_Initialized(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Engine_Initialized), sender, e);
+      else {
+        operatorGraphView.Enabled = true;
+        scopeView.Enabled = true;
+        startButton.Enabled = !Engine.Finished;
+        stopButton.Enabled = false;
+        resetButton.Enabled = true;
+        UpdateExecutionTimeTextBox();
+      }
+    }
+    private void Engine_Started(object sender, EventArgs e) {
+      executionTimeCounter = 0;
+      if (InvokeRequired)
+        Invoke(new EventHandler(Engine_Started), sender, e);
+      else {
+        operatorGraphView.Enabled = false;
+        scopeView.Enabled = false;
+        startButton.Enabled = false;
+        stopButton.Enabled = true;
+        resetButton.Enabled = false;
+        UpdateExecutionTimeTextBox();
+      }
+    }
+    private void Engine_Stopped(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Engine_Stopped), sender, e);
+      else {
+        operatorGraphView.Enabled = true;
+        scopeView.Enabled = true;
+        startButton.Enabled = !Engine.Finished;
+        stopButton.Enabled = false;
+        resetButton.Enabled = true;
+        UpdateExecutionTimeTextBox();
+      }
+    }
+    private void Engine_ExecutionTimeChanged(object sender, EventArgs e) {
+      executionTimeCounter++;
+      if ((executionTimeCounter == 100) || !Engine.Running) {
+        executionTimeCounter = 0;
+        UpdateExecutionTimeTextBox();
+      }
+    }
+    private void Engine_ExceptionOccurred(object sender, EventArgs<Exception> e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler<EventArgs<Exception>>(Engine_ExceptionOccurred), sender, e);
+      else
+        Auxiliary.ShowErrorMessageBox(e.Value);
+    }
+    #endregion
+
+    #region Button events
+    private void startButton_Click(object sender, EventArgs e) {
+      Engine.Start();
+    }
+    private void stopButton_Click(object sender, EventArgs e) {
+      Engine.Stop();
+    }
+    private void resetButton_Click(object sender, EventArgs e) {
+      Engine.Initialize();
+    }
+    #endregion
+
+    #region Helpers
+    private void UpdateExecutionTimeTextBox() {
+      if (InvokeRequired)
+        Invoke(new Action(UpdateExecutionTimeTextBox));
+      else
+        executionTimeTextBox.Text = Engine.ExecutionTime.ToString();
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj	(revision 2663)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj	(revision 2664)
@@ -59,9 +59,39 @@
     </Compile>
     <Compile Include="Auxiliary.cs" />
-    <Compile Include="EngineBaseView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="EngineBaseView.Designer.cs">
-      <DependentUpon>EngineBaseView.cs</DependentUpon>
+    <Compile Include="DefaultItemView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="DefaultItemView.Designer.cs">
+      <DependentUpon>DefaultItemView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="EngineView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="EngineView.Designer.cs">
+      <DependentUpon>EngineView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ItemParameterView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ItemParameterView.Designer.cs">
+      <DependentUpon>ItemParameterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ItemView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ItemView.Designer.cs">
+      <DependentUpon>ItemView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="NamedItemView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="NamedItemView.Designer.cs">
+      <DependentUpon>NamedItemView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ObjectView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ObjectView.Designer.cs">
+      <DependentUpon>ObjectView.cs</DependentUpon>
     </Compile>
     <Compile Include="OperatorGraphView.cs">
@@ -101,10 +131,4 @@
       <DependentUpon>ViewHost.cs</DependentUpon>
     </Compile>
-    <Compile Include="ParameterBaseView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="ParameterBaseView.Designer.cs">
-      <DependentUpon>ParameterBaseView.cs</DependentUpon>
-    </Compile>
     <Compile Include="OperatorCollectionView.cs">
       <SubType>UserControl</SubType>
@@ -150,16 +174,4 @@
     </Compile>
     <Compile Include="IObjectView.cs" />
-    <Compile Include="ObjectViewBase.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="ObjectViewBase.Designer.cs">
-      <DependentUpon>ObjectViewBase.cs</DependentUpon>
-    </Compile>
-    <Compile Include="NamedItemBaseView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="NamedItemBaseView.Designer.cs">
-      <DependentUpon>NamedItemBaseView.cs</DependentUpon>
-    </Compile>
     <Compile Include="ParameterView.cs">
       <SubType>UserControl</SubType>
@@ -193,16 +205,4 @@
     </Compile>
     <Compile Include="HeuristicLabCoreViewsPlugin.cs" />
-    <Compile Include="ItemBaseView.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="ItemBaseView.Designer.cs">
-      <DependentUpon>ItemBaseView.cs</DependentUpon>
-    </Compile>
-    <Compile Include="ItemViewBase.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="ItemViewBase.Designer.cs">
-      <DependentUpon>ItemViewBase.cs</DependentUpon>
-    </Compile>
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="VariableView.cs">
Index: unk/sources/HeuristicLab.Core.Views/3.3/ItemBaseView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemBaseView.Designer.cs	(revision 2663)
+++ 	(revision )
@@ -1,76 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Core.Views {
-  partial class ItemBaseView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.messageLabel = new System.Windows.Forms.Label();
-      this.SuspendLayout();
-      // 
-      // messageLabel
-      // 
-      this.messageLabel.Anchor = System.Windows.Forms.AnchorStyles.Top;
-      this.messageLabel.AutoSize = true;
-      this.messageLabel.Location = new System.Drawing.Point(55, 0);
-      this.messageLabel.Name = "messageLabel";
-      this.messageLabel.Size = new System.Drawing.Size(91, 13);
-      this.messageLabel.TabIndex = 0;
-      this.messageLabel.Text = "No view available";
-      // 
-      // DataBaseView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.messageLabel);
-      this.Name = "DataBaseView";
-      this.Size = new System.Drawing.Size(201, 46);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.Label messageLabel;
-  }
-}
Index: unk/sources/HeuristicLab.Core.Views/3.3/ItemBaseView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemBaseView.cs	(revision 2663)
+++ 	(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.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.Core.Views { 
-  /// <summary>
-  /// The base class for visual representations of items.
-  /// </summary>
-  [Content(typeof(ItemBase), true)]
-  public partial class ItemBaseView : ItemViewBase {
-    /// <summary>
-    /// Initializes a new instance of <see cref="ItemBaseView"/>.
-    /// </summary>
-    public ItemBaseView() {
-      InitializeComponent();
-    }
-    /// <summary>
-    /// Intializes a new instance of <see cref="ItemBaseView"/> with the given <paramref name="item"/>.
-    /// </summary>
-    /// <param name="item">The item that should be displayed.</param>
-    public ItemBaseView(ItemBase item)
-      : this() {
-      Item = item;
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemCollectionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemCollectionView.cs	(revision 2663)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemCollectionView.cs	(revision 2664)
@@ -32,5 +32,5 @@
 
 namespace HeuristicLab.Core.Views {
-  public partial class ItemCollectionView<T> : ObjectViewBase where T : class, IItem {
+  public partial class ItemCollectionView<T> : ObjectView where T : class, IItem {
     public IObservableCollection<T> ItemCollection {
       get { return (IObservableCollection<T>)Object; }
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemListView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemListView.cs	(revision 2663)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemListView.cs	(revision 2664)
@@ -35,5 +35,5 @@
   /// The visual representation of all variables in a specified scope.
   /// </summary>
-  public partial class ItemListView<T> : ObjectViewBase where T : class, IItem {
+  public partial class ItemListView<T> : ObjectView where T : class, IItem {
     /// <summary>
     /// Gets or sets the scope whose variables to represent visually.
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemParameterView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemParameterView.Designer.cs	(revision 2664)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemParameterView.Designer.cs	(revision 2664)
@@ -0,0 +1,201 @@
+#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.Views {
+  partial class ItemParameterView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      this.valueGroupBox = new System.Windows.Forms.GroupBox();
+      this.valuePanel = new System.Windows.Forms.Panel();
+      this.viewHost = new HeuristicLab.Core.Views.ViewHost();
+      this.actualNameTextBox = new System.Windows.Forms.TextBox();
+      this.actualNameLabel = new System.Windows.Forms.Label();
+      this.setValueButton = new System.Windows.Forms.Button();
+      this.clearValueButton = new System.Windows.Forms.Button();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.valueGroupBox.SuspendLayout();
+      this.valuePanel.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // dataTypeLabel
+      // 
+      this.dataTypeLabel.Location = new System.Drawing.Point(3, 123);
+      this.dataTypeLabel.TabIndex = 6;
+      // 
+      // dataTypeTextBox
+      // 
+      this.dataTypeTextBox.Location = new System.Drawing.Point(80, 120);
+      this.dataTypeTextBox.Size = new System.Drawing.Size(306, 20);
+      this.dataTypeTextBox.TabIndex = 7;
+      // 
+      // nameTextBox
+      // 
+      this.nameTextBox.Size = new System.Drawing.Size(306, 20);
+      // 
+      // descriptionLabel
+      // 
+      this.descriptionLabel.Location = new System.Drawing.Point(3, 55);
+      this.descriptionLabel.TabIndex = 4;
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Location = new System.Drawing.Point(80, 52);
+      this.descriptionTextBox.Size = new System.Drawing.Size(306, 62);
+      this.descriptionTextBox.TabIndex = 5;
+      // 
+      // valueGroupBox
+      // 
+      this.valueGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.valueGroupBox.Controls.Add(this.valuePanel);
+      this.valueGroupBox.Controls.Add(this.clearValueButton);
+      this.valueGroupBox.Controls.Add(this.setValueButton);
+      this.valueGroupBox.Location = new System.Drawing.Point(0, 146);
+      this.valueGroupBox.Name = "valueGroupBox";
+      this.valueGroupBox.Size = new System.Drawing.Size(386, 169);
+      this.valueGroupBox.TabIndex = 10;
+      this.valueGroupBox.TabStop = false;
+      this.valueGroupBox.Text = "&Value:";
+      // 
+      // valuePanel
+      // 
+      this.valuePanel.AllowDrop = true;
+      this.valuePanel.Controls.Add(this.viewHost);
+      this.valuePanel.Location = new System.Drawing.Point(3, 48);
+      this.valuePanel.Name = "valuePanel";
+      this.valuePanel.Size = new System.Drawing.Size(380, 118);
+      this.valuePanel.TabIndex = 0;
+      this.valuePanel.DragOver += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragEnterOver);
+      this.valuePanel.DragDrop += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragDrop);
+      this.valuePanel.DragEnter += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragEnterOver);
+      // 
+      // viewHost
+      // 
+      this.viewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.viewHost.Location = new System.Drawing.Point(0, 0);
+      this.viewHost.Name = "viewHost";
+      this.viewHost.Object = null;
+      this.viewHost.Size = new System.Drawing.Size(380, 118);
+      this.viewHost.TabIndex = 0;
+      // 
+      // actualNameTextBox
+      // 
+      this.actualNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.actualNameTextBox.Location = new System.Drawing.Point(80, 26);
+      this.actualNameTextBox.Name = "actualNameTextBox";
+      this.actualNameTextBox.Size = new System.Drawing.Size(306, 20);
+      this.actualNameTextBox.TabIndex = 3;
+      this.actualNameTextBox.Validated += new System.EventHandler(this.actualNameTextBox_Validated);
+      // 
+      // actualNameLabel
+      // 
+      this.actualNameLabel.AutoSize = true;
+      this.actualNameLabel.Location = new System.Drawing.Point(3, 29);
+      this.actualNameLabel.Name = "actualNameLabel";
+      this.actualNameLabel.Size = new System.Drawing.Size(71, 13);
+      this.actualNameLabel.TabIndex = 2;
+      this.actualNameLabel.Text = "&Actual Name:";
+      // 
+      // setValueButton
+      // 
+      this.setValueButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Add;
+      this.setValueButton.Location = new System.Drawing.Point(6, 19);
+      this.setValueButton.Name = "setValueButton";
+      this.setValueButton.Size = new System.Drawing.Size(23, 23);
+      this.setValueButton.TabIndex = 8;
+      this.toolTip.SetToolTip(this.setValueButton, "Set Value");
+      this.setValueButton.UseVisualStyleBackColor = true;
+      this.setValueButton.Click += new System.EventHandler(this.setValueButton_Click);
+      // 
+      // clearValueButton
+      // 
+      this.clearValueButton.Enabled = false;
+      this.clearValueButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Remove;
+      this.clearValueButton.Location = new System.Drawing.Point(35, 19);
+      this.clearValueButton.Name = "clearValueButton";
+      this.clearValueButton.Size = new System.Drawing.Size(23, 23);
+      this.clearValueButton.TabIndex = 9;
+      this.toolTip.SetToolTip(this.clearValueButton, "Clear Value");
+      this.clearValueButton.UseVisualStyleBackColor = true;
+      this.clearValueButton.Click += new System.EventHandler(this.clearValueButton_Click);
+      // 
+      // ParameterView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.valueGroupBox);
+      this.Controls.Add(this.actualNameLabel);
+      this.Controls.Add(this.actualNameTextBox);
+      this.Name = "ParameterView";
+      this.Size = new System.Drawing.Size(386, 315);
+      this.Controls.SetChildIndex(this.dataTypeLabel, 0);
+      this.Controls.SetChildIndex(this.dataTypeTextBox, 0);
+      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
+      this.Controls.SetChildIndex(this.descriptionLabel, 0);
+      this.Controls.SetChildIndex(this.actualNameTextBox, 0);
+      this.Controls.SetChildIndex(this.actualNameLabel, 0);
+      this.Controls.SetChildIndex(this.valueGroupBox, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.valueGroupBox.ResumeLayout(false);
+      this.valuePanel.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.GroupBox valueGroupBox;
+    private System.Windows.Forms.TextBox actualNameTextBox;
+    private System.Windows.Forms.Label actualNameLabel;
+    private System.Windows.Forms.Panel valuePanel;
+    private ViewHost viewHost;
+    private System.Windows.Forms.Button setValueButton;
+    private System.Windows.Forms.ToolTip toolTip;
+    private System.Windows.Forms.Button clearValueButton;
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemParameterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemParameterView.cs	(revision 2664)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemParameterView.cs	(revision 2664)
@@ -0,0 +1,156 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Core.Views {
+  /// <summary>
+  /// The visual representation of a <see cref="Parameter"/>.
+  /// </summary>
+  [Content(typeof(ItemParameter), true)]
+  public partial class ItemParameterView : ParameterView {
+    private TypeSelectorDialog typeSelectorDialog;
+
+    /// <summary>
+    /// Gets or sets the variable to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public new ItemParameter Parameter {
+      get { return (ItemParameter)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableView"/> with caption "Variable".
+    /// </summary>
+    public ItemParameterView() {
+      InitializeComponent();
+      Caption = "Parameter";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableView"/> with the given <paramref name="variable"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="VariableView()"/>.</remarks>
+    /// <param name="variable">The variable to represent visually.</param>
+    public ItemParameterView(ItemParameter parameter)
+      : this() {
+      Parameter = parameter;
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the underlying <see cref="IVariable"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void DeregisterObjectEvents() {
+      Parameter.ActualNameChanged -= new EventHandler(Parameter_ActualNameChanged);
+      Parameter.ValueChanged -= new EventHandler(Parameter_ValueChanged);
+      base.DeregisterObjectEvents();
+    }
+
+    /// <summary>
+    /// Adds eventhandlers to the underlying <see cref="IVariable"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void RegisterObjectEvents() {
+      base.RegisterObjectEvents();
+      Parameter.ActualNameChanged += new EventHandler(Parameter_ActualNameChanged);
+      Parameter.ValueChanged += new EventHandler(Parameter_ValueChanged);
+    }
+
+    protected override void OnObjectChanged() {
+      base.OnObjectChanged();
+      if (Parameter == null) {
+        Caption = "Parameter";
+        actualNameTextBox.Text = "-";
+        actualNameTextBox.Enabled = false;
+        setValueButton.Enabled = false;
+        clearValueButton.Enabled = false;
+        valueGroupBox.Enabled = false;
+        viewHost.Object = null;
+      } else {
+        Caption = Parameter.Name + " (" + Parameter.GetType().Name + ")";
+        actualNameTextBox.Text = Parameter.ActualName;
+        actualNameTextBox.Enabled = Parameter.Value == null;
+        setValueButton.Enabled = Parameter.Value == null;
+        clearValueButton.Enabled = Parameter.Value != null;
+        valueGroupBox.Enabled = true;
+        viewHost.Object = Parameter.Value;
+      }
+    }
+
+    private void Parameter_ActualNameChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Parameter_ActualNameChanged), sender, e);
+      else
+        actualNameTextBox.Text = Parameter.ActualName;
+    }
+    private void Parameter_ValueChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Parameter_ValueChanged), sender, e);
+      else {
+        actualNameTextBox.Enabled = Parameter.Value == null;
+        setValueButton.Enabled = Parameter.Value == null;
+        clearValueButton.Enabled = Parameter.Value != null;
+        viewHost.Object = Parameter.Value;
+      }
+    }
+
+    private void actualNameTextBox_Validated(object sender, EventArgs e) {
+      Parameter.ActualName = actualNameTextBox.Text;
+    }
+    private void setValueButton_Click(object sender, EventArgs e) {
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Value Type";
+      }
+      typeSelectorDialog.TypeSelector.Configure(Parameter.DataType, false, false);
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK)
+        Parameter.Value = (IItem)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+    }
+    private void clearValueButton_Click(object sender, EventArgs e) {
+      Parameter.Value = null;
+    }
+    private void valuePanel_DragEnterOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      Type type = e.Data.GetData("Type") as Type;
+      if ((type != null) && (Parameter.DataType.IsAssignableFrom(type))) {
+        if ((e.KeyState & 8) == 8) e.Effect = DragDropEffects.Copy;  // CTRL key
+        else if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Move;  // ALT key
+        else e.Effect = DragDropEffects.Link;
+      }
+    }
+    private void valuePanel_DragDrop(object sender, DragEventArgs e) {
+      if (e.Effect != DragDropEffects.None) {
+        IItem item = e.Data.GetData("Value") as IItem;
+        if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) item = (IItem)item.Clone();
+        Parameter.Value = item;
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemView.Designer.cs	(revision 2664)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemView.Designer.cs	(revision 2664)
@@ -0,0 +1,55 @@
+#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;
+
+namespace HeuristicLab.Core.Views {
+  partial class ItemView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemView.cs	(revision 2664)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemView.cs	(revision 2664)
@@ -0,0 +1,58 @@
+#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.Xml;
+using System.Windows.Forms;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Core.Views {
+  /// <summary>
+  /// Base class for all visual representations.
+  /// </summary>
+  public partial class ItemView : ObjectView {
+    public IItem Item {
+      get { return (IItem)base.Object; }
+      set { base.Object = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ViewBase"/> with the caption "View".
+    /// </summary>
+    public ItemView() {
+      InitializeComponent();
+      Caption = "View";
+    }
+
+    protected override void OnObjectChanged() {
+      if (Item == null) {
+        Caption = "View";
+      } else {
+        Caption = Item.ItemName;
+      }
+    }
+  }
+}
Index: unk/sources/HeuristicLab.Core.Views/3.3/ItemViewBase.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemViewBase.Designer.cs	(revision 2663)
+++ 	(revision )
@@ -1,55 +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;
-
-namespace HeuristicLab.Core.Views {
-  partial class ItemViewBase {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      components = new System.ComponentModel.Container();
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-    }
-
-    #endregion
-  }
-}
Index: unk/sources/HeuristicLab.Core.Views/3.3/ItemViewBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemViewBase.cs	(revision 2663)
+++ 	(revision )
@@ -1,58 +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.Xml;
-using System.Windows.Forms;
-using HeuristicLab.MainForm.WindowsForms;
-
-namespace HeuristicLab.Core.Views {
-  /// <summary>
-  /// Base class for all visual representations.
-  /// </summary>
-  public partial class ItemViewBase : ObjectViewBase {
-    public IItem Item {
-      get { return (IItem)base.Object; }
-      set { base.Object = value; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="ViewBase"/> with the caption "View".
-    /// </summary>
-    public ItemViewBase() {
-      InitializeComponent();
-      Caption = "View";
-    }
-
-    protected override void OnObjectChanged() {
-      if (Item == null) {
-        Caption = "View";
-      } else {
-        Caption = Item.ItemName;
-      }
-    }
-  }
-}
Index: unk/sources/HeuristicLab.Core.Views/3.3/NamedItemBaseView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemBaseView.Designer.cs	(revision 2663)
+++ 	(revision )
@@ -1,116 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Core.Views {
-  partial class NamedItemBaseView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.nameLabel = new System.Windows.Forms.Label();
-      this.nameTextBox = new System.Windows.Forms.TextBox();
-      this.descriptionLabel = new System.Windows.Forms.Label();
-      this.descriptionTextBox = new System.Windows.Forms.TextBox();
-      this.SuspendLayout();
-      // 
-      // 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:";
-      // 
-      // 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(72, 0);
-      this.nameTextBox.Name = "nameTextBox";
-      this.nameTextBox.Size = new System.Drawing.Size(279, 20);
-      this.nameTextBox.TabIndex = 1;
-      this.nameTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.nameTextBox_Validating);
-      // 
-      // descriptionLabel
-      // 
-      this.descriptionLabel.AutoSize = true;
-      this.descriptionLabel.Location = new System.Drawing.Point(3, 29);
-      this.descriptionLabel.Name = "descriptionLabel";
-      this.descriptionLabel.Size = new System.Drawing.Size(63, 13);
-      this.descriptionLabel.TabIndex = 2;
-      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(72, 26);
-      this.descriptionTextBox.Multiline = true;
-      this.descriptionTextBox.Name = "descriptionTextBox";
-      this.descriptionTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
-      this.descriptionTextBox.Size = new System.Drawing.Size(279, 62);
-      this.descriptionTextBox.TabIndex = 3;
-      this.descriptionTextBox.Validated += new System.EventHandler(this.descriptionTextBox_Validated);
-      // 
-      // NamedItemBaseView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.descriptionTextBox);
-      this.Controls.Add(this.nameTextBox);
-      this.Controls.Add(this.descriptionLabel);
-      this.Controls.Add(this.nameLabel);
-      this.Name = "NamedItemBaseView";
-      this.Size = new System.Drawing.Size(351, 88);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    protected System.Windows.Forms.TextBox nameTextBox;
-    protected System.Windows.Forms.Label nameLabel;
-    protected System.Windows.Forms.Label descriptionLabel;
-    protected System.Windows.Forms.TextBox descriptionTextBox;
-  }
-}
Index: unk/sources/HeuristicLab.Core.Views/3.3/NamedItemBaseView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemBaseView.cs	(revision 2663)
+++ 	(revision )
@@ -1,116 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.Core.Views {
-  /// <summary>
-  /// The visual representation of a <see cref="Variable"/>.
-  /// </summary>
-  [Content(typeof(NamedItemBase), true)]
-  public partial class NamedItemBaseView : ItemViewBase {
-    public NamedItemBase NamedItemBase {
-      get { return (NamedItemBase)Item; }
-      set { base.Item = value; }
-    }
-
-    public NamedItemBaseView() {
-      InitializeComponent();
-      Caption = "NamedItem";
-    }
-    public NamedItemBaseView(NamedItemBase namedItemBase)
-      : this() {
-      NamedItemBase = namedItemBase;
-    }
-
-    protected override void DeregisterObjectEvents() {
-      NamedItemBase.NameChanged -= new EventHandler(NamedItemBase_NameChanged);
-      NamedItemBase.DescriptionChanged -= new EventHandler(NamedItemBase_DescriptionChanged);
-      base.DeregisterObjectEvents();
-    }
-    protected override void RegisterObjectEvents() {
-      base.RegisterObjectEvents();
-      NamedItemBase.NameChanged += new EventHandler(NamedItemBase_NameChanged);
-      NamedItemBase.DescriptionChanged += new EventHandler(NamedItemBase_DescriptionChanged);
-    }
-
-    protected override void OnObjectChanged() {
-      base.OnObjectChanged();
-      if (NamedItemBase == null) {
-        Caption = "NamedItem";
-        nameTextBox.Text = "-";
-        nameTextBox.ReadOnly = false;
-        nameTextBox.Enabled = false;
-        descriptionTextBox.Text = "";
-        nameTextBox.ReadOnly = false;
-        descriptionTextBox.Enabled = false;
-      } else {
-        Caption = NamedItemBase.Name + " (" + NamedItemBase.GetType().Name + ")";
-        nameTextBox.Text = NamedItemBase.Name;
-        nameTextBox.ReadOnly = !NamedItemBase.CanChangeName;
-        nameTextBox.Enabled = true;
-        descriptionTextBox.Text = NamedItemBase.Description;
-        descriptionTextBox.ReadOnly = !NamedItemBase.CanChangeDescription;
-        descriptionTextBox.Enabled = true;
-      }
-    }
-
-    protected virtual void NamedItemBase_NameChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(NamedItemBase_NameChanged), sender, e);
-      else
-        nameTextBox.Text = NamedItemBase.Name;
-    }
-    protected virtual void NamedItemBase_DescriptionChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(NamedItemBase_DescriptionChanged), sender, e);
-      else
-        descriptionTextBox.Text = NamedItemBase.Description;
-    }
-
-    protected virtual void nameTextBox_Validating(object sender, CancelEventArgs e) {
-      if (NamedItemBase.CanChangeName) {
-        string oldName = NamedItemBase.Name;
-        NamedItemBase.Name = nameTextBox.Text;
-
-        // check if variable name was set successfully
-        e.Cancel = !NamedItemBase.Name.Equals(nameTextBox.Text);
-        if (e.Cancel) {
-          MessageBox.Show(this, "\"" + nameTextBox.Text + "\" is not a valid name.", "Invalid Value", MessageBoxButtons.OK, MessageBoxIcon.Error);
-          nameTextBox.Text = oldName;
-          nameTextBox.SelectAll();
-          nameTextBox.Focus();
-        }
-      }
-    }
-    protected virtual void descriptionTextBox_Validated(object sender, EventArgs e) {
-      if (NamedItemBase.CanChangeDescription)
-        NamedItemBase.Description = descriptionTextBox.Text;
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemView.Designer.cs	(revision 2664)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemView.Designer.cs	(revision 2664)
@@ -0,0 +1,116 @@
+#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.Views {
+  partial class NamedItemView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.nameLabel = new System.Windows.Forms.Label();
+      this.nameTextBox = new System.Windows.Forms.TextBox();
+      this.descriptionLabel = new System.Windows.Forms.Label();
+      this.descriptionTextBox = new System.Windows.Forms.TextBox();
+      this.SuspendLayout();
+      // 
+      // 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:";
+      // 
+      // 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(72, 0);
+      this.nameTextBox.Name = "nameTextBox";
+      this.nameTextBox.Size = new System.Drawing.Size(279, 20);
+      this.nameTextBox.TabIndex = 1;
+      this.nameTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.nameTextBox_Validating);
+      // 
+      // descriptionLabel
+      // 
+      this.descriptionLabel.AutoSize = true;
+      this.descriptionLabel.Location = new System.Drawing.Point(3, 29);
+      this.descriptionLabel.Name = "descriptionLabel";
+      this.descriptionLabel.Size = new System.Drawing.Size(63, 13);
+      this.descriptionLabel.TabIndex = 2;
+      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(72, 26);
+      this.descriptionTextBox.Multiline = true;
+      this.descriptionTextBox.Name = "descriptionTextBox";
+      this.descriptionTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+      this.descriptionTextBox.Size = new System.Drawing.Size(279, 62);
+      this.descriptionTextBox.TabIndex = 3;
+      this.descriptionTextBox.Validated += new System.EventHandler(this.descriptionTextBox_Validated);
+      // 
+      // NamedItemBaseView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.descriptionTextBox);
+      this.Controls.Add(this.nameTextBox);
+      this.Controls.Add(this.descriptionLabel);
+      this.Controls.Add(this.nameLabel);
+      this.Name = "NamedItemBaseView";
+      this.Size = new System.Drawing.Size(351, 88);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.TextBox nameTextBox;
+    protected System.Windows.Forms.Label nameLabel;
+    protected System.Windows.Forms.Label descriptionLabel;
+    protected System.Windows.Forms.TextBox descriptionTextBox;
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemView.cs	(revision 2664)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/NamedItemView.cs	(revision 2664)
@@ -0,0 +1,116 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Core.Views {
+  /// <summary>
+  /// The visual representation of a <see cref="Variable"/>.
+  /// </summary>
+  [Content(typeof(NamedItem), true)]
+  public partial class NamedItemView : ItemView {
+    public NamedItem NamedItemBase {
+      get { return (NamedItem)Item; }
+      set { base.Item = value; }
+    }
+
+    public NamedItemView() {
+      InitializeComponent();
+      Caption = "NamedItem";
+    }
+    public NamedItemView(NamedItem namedItemBase)
+      : this() {
+      NamedItemBase = namedItemBase;
+    }
+
+    protected override void DeregisterObjectEvents() {
+      NamedItemBase.NameChanged -= new EventHandler(NamedItemBase_NameChanged);
+      NamedItemBase.DescriptionChanged -= new EventHandler(NamedItemBase_DescriptionChanged);
+      base.DeregisterObjectEvents();
+    }
+    protected override void RegisterObjectEvents() {
+      base.RegisterObjectEvents();
+      NamedItemBase.NameChanged += new EventHandler(NamedItemBase_NameChanged);
+      NamedItemBase.DescriptionChanged += new EventHandler(NamedItemBase_DescriptionChanged);
+    }
+
+    protected override void OnObjectChanged() {
+      base.OnObjectChanged();
+      if (NamedItemBase == null) {
+        Caption = "NamedItem";
+        nameTextBox.Text = "-";
+        nameTextBox.ReadOnly = false;
+        nameTextBox.Enabled = false;
+        descriptionTextBox.Text = "";
+        nameTextBox.ReadOnly = false;
+        descriptionTextBox.Enabled = false;
+      } else {
+        Caption = NamedItemBase.Name + " (" + NamedItemBase.GetType().Name + ")";
+        nameTextBox.Text = NamedItemBase.Name;
+        nameTextBox.ReadOnly = !NamedItemBase.CanChangeName;
+        nameTextBox.Enabled = true;
+        descriptionTextBox.Text = NamedItemBase.Description;
+        descriptionTextBox.ReadOnly = !NamedItemBase.CanChangeDescription;
+        descriptionTextBox.Enabled = true;
+      }
+    }
+
+    protected virtual void NamedItemBase_NameChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(NamedItemBase_NameChanged), sender, e);
+      else
+        nameTextBox.Text = NamedItemBase.Name;
+    }
+    protected virtual void NamedItemBase_DescriptionChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(NamedItemBase_DescriptionChanged), sender, e);
+      else
+        descriptionTextBox.Text = NamedItemBase.Description;
+    }
+
+    protected virtual void nameTextBox_Validating(object sender, CancelEventArgs e) {
+      if (NamedItemBase.CanChangeName) {
+        string oldName = NamedItemBase.Name;
+        NamedItemBase.Name = nameTextBox.Text;
+
+        // check if variable name was set successfully
+        e.Cancel = !NamedItemBase.Name.Equals(nameTextBox.Text);
+        if (e.Cancel) {
+          MessageBox.Show(this, "\"" + nameTextBox.Text + "\" is not a valid name.", "Invalid Value", MessageBoxButtons.OK, MessageBoxIcon.Error);
+          nameTextBox.Text = oldName;
+          nameTextBox.SelectAll();
+          nameTextBox.Focus();
+        }
+      }
+    }
+    protected virtual void descriptionTextBox_Validated(object sender, EventArgs e) {
+      if (NamedItemBase.CanChangeDescription)
+        NamedItemBase.Description = descriptionTextBox.Text;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ObjectView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ObjectView.Designer.cs	(revision 2664)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ObjectView.Designer.cs	(revision 2664)
@@ -0,0 +1,56 @@
+#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;
+
+namespace HeuristicLab.Core.Views {
+  partial class ObjectView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (Object != null) DeregisterObjectEvents();
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ObjectView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ObjectView.cs	(revision 2664)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ObjectView.cs	(revision 2664)
@@ -0,0 +1,120 @@
+#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.Xml;
+using System.Windows.Forms;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Core.Views {
+  /// <summary>
+  /// Base class for all visual representations.
+  /// </summary>
+  public partial class ObjectView : ViewBase, IObjectView {
+    private object obj;
+    /// <summary>
+    /// Gets or sets the item to represent visually.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnItemChanged"/>, <see cref="Refresh"/>, 
+    /// <see cref="RemoveItemEvents"/> (if the current item is not null) and 
+    /// <see cref="AddItemEvents"/> (if the new item is not null) in the setter.</remarks>
+    public object Object {
+      get { return obj; }
+      protected set {
+        if (InvokeRequired) {
+          Invoke(new Action<object>(delegate(object o) { Object = o; }), value);
+        } else {
+          if (value != obj) {
+            if (obj != null)
+              DeregisterObjectEvents();
+            obj = value;
+            OnObjectChanged();
+            if (obj != null)
+              RegisterObjectEvents();
+          }
+        }
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ViewBase"/> with the caption "View".
+    /// </summary>
+    public ObjectView() {
+      InitializeComponent();
+      Caption = "View";
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the current instance.
+    /// </summary>
+    protected virtual void DeregisterObjectEvents() { }
+    /// <summary>
+    /// Adds eventhandlers to the current instance.
+    /// </summary>
+    protected virtual void RegisterObjectEvents() { }
+
+    /// <summary>
+    /// Occurs when the current item was changed.
+    /// </summary>
+    public event EventHandler ObjectChanged;
+    /// <summary>
+    /// Fires a new <c>ItemChanged</c> event.
+    /// </summary>
+    protected virtual void OnObjectChanged() {
+      Caption = "View";
+      if (ObjectChanged != null)
+        ObjectChanged(this, new EventArgs());
+    }
+
+    /// <summary>
+    /// Asynchron call of GUI updating.
+    /// </summary>
+    /// <param name="method">The delegate to invoke.</param>
+    protected new void Invoke(Delegate method) {
+      // enforce context switch to improve GUI response time
+      System.Threading.Thread.Sleep(0);
+
+      // prevent blocking of worker thread in Invoke, if the control is disposed
+      IAsyncResult result = BeginInvoke(method);
+      while ((!result.AsyncWaitHandle.WaitOne(100, false)) && (!IsDisposed)) { }
+      if (!IsDisposed) EndInvoke(result);
+    }
+    /// <summary>
+    /// Asynchron call of GUI updating.
+    /// </summary>
+    /// <param name="method">The delegate to invoke.</param>
+    /// <param name="args">The invoke arguments.</param>
+    protected new void Invoke(Delegate method, params object[] args) {
+      // enforce context switch to improve GUI response time
+      System.Threading.Thread.Sleep(0);
+
+      // prevent blocking of worker thread in Invoke, if the control is disposed
+      IAsyncResult result = BeginInvoke(method, args);
+      while ((!result.AsyncWaitHandle.WaitOne(100, false)) && (!IsDisposed)) { }
+      if (!IsDisposed) EndInvoke(result);
+    }
+  }
+}
Index: unk/sources/HeuristicLab.Core.Views/3.3/ObjectViewBase.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ObjectViewBase.Designer.cs	(revision 2663)
+++ 	(revision )
@@ -1,56 +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;
-
-namespace HeuristicLab.Core.Views {
-  partial class ObjectViewBase {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (Object != null) DeregisterObjectEvents();
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      components = new System.ComponentModel.Container();
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-    }
-
-    #endregion
-  }
-}
Index: unk/sources/HeuristicLab.Core.Views/3.3/ObjectViewBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ObjectViewBase.cs	(revision 2663)
+++ 	(revision )
@@ -1,120 +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.Xml;
-using System.Windows.Forms;
-using HeuristicLab.MainForm.WindowsForms;
-
-namespace HeuristicLab.Core.Views {
-  /// <summary>
-  /// Base class for all visual representations.
-  /// </summary>
-  public partial class ObjectViewBase : ViewBase, IObjectView {
-    private object obj;
-    /// <summary>
-    /// Gets or sets the item to represent visually.
-    /// </summary>
-    /// <remarks>Calls <see cref="OnItemChanged"/>, <see cref="Refresh"/>, 
-    /// <see cref="RemoveItemEvents"/> (if the current item is not null) and 
-    /// <see cref="AddItemEvents"/> (if the new item is not null) in the setter.</remarks>
-    public object Object {
-      get { return obj; }
-      protected set {
-        if (InvokeRequired) {
-          Invoke(new Action<object>(delegate(object o) { Object = o; }), value);
-        } else {
-          if (value != obj) {
-            if (obj != null)
-              DeregisterObjectEvents();
-            obj = value;
-            OnObjectChanged();
-            if (obj != null)
-              RegisterObjectEvents();
-          }
-        }
-      }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="ViewBase"/> with the caption "View".
-    /// </summary>
-    public ObjectViewBase() {
-      InitializeComponent();
-      Caption = "View";
-    }
-
-    /// <summary>
-    /// Removes the eventhandlers from the current instance.
-    /// </summary>
-    protected virtual void DeregisterObjectEvents() { }
-    /// <summary>
-    /// Adds eventhandlers to the current instance.
-    /// </summary>
-    protected virtual void RegisterObjectEvents() { }
-
-    /// <summary>
-    /// Occurs when the current item was changed.
-    /// </summary>
-    public event EventHandler ObjectChanged;
-    /// <summary>
-    /// Fires a new <c>ItemChanged</c> event.
-    /// </summary>
-    protected virtual void OnObjectChanged() {
-      Caption = "View";
-      if (ObjectChanged != null)
-        ObjectChanged(this, new EventArgs());
-    }
-
-    /// <summary>
-    /// Asynchron call of GUI updating.
-    /// </summary>
-    /// <param name="method">The delegate to invoke.</param>
-    protected new void Invoke(Delegate method) {
-      // enforce context switch to improve GUI response time
-      System.Threading.Thread.Sleep(0);
-
-      // prevent blocking of worker thread in Invoke, if the control is disposed
-      IAsyncResult result = BeginInvoke(method);
-      while ((!result.AsyncWaitHandle.WaitOne(100, false)) && (!IsDisposed)) { }
-      if (!IsDisposed) EndInvoke(result);
-    }
-    /// <summary>
-    /// Asynchron call of GUI updating.
-    /// </summary>
-    /// <param name="method">The delegate to invoke.</param>
-    /// <param name="args">The invoke arguments.</param>
-    protected new void Invoke(Delegate method, params object[] args) {
-      // enforce context switch to improve GUI response time
-      System.Threading.Thread.Sleep(0);
-
-      // prevent blocking of worker thread in Invoke, if the control is disposed
-      IAsyncResult result = BeginInvoke(method, args);
-      while ((!result.AsyncWaitHandle.WaitOne(100, false)) && (!IsDisposed)) { }
-      if (!IsDisposed) EndInvoke(result);
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorGraphView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorGraphView.cs	(revision 2663)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorGraphView.cs	(revision 2664)
@@ -37,5 +37,5 @@
   /// </summary>
   [Content(typeof(OperatorGraph), true)]
-  public partial class OperatorGraphView : ItemViewBase {
+  public partial class OperatorGraphView : ItemView {
     /// <summary>
     /// Gets or sets the operator graph to represent visually.
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorTreeView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorTreeView.cs	(revision 2663)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorTreeView.cs	(revision 2664)
@@ -37,5 +37,5 @@
   /// </summary>
   [Content(typeof(IOperator), false)]
-  public partial class OperatorTreeView : ItemViewBase {
+  public partial class OperatorTreeView : ItemView {
     private Dictionary<IOperatorParameter, List<TreeNode>> operatorParameterNodeTable;
     private Dictionary<IOperator, List<TreeNode>> operatorNodeTable;
Index: unk/sources/HeuristicLab.Core.Views/3.3/ParameterBaseView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterBaseView.Designer.cs	(revision 2663)
+++ 	(revision )
@@ -1,107 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Core.Views {
-  partial class ParameterBaseView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.dataTypeLabel = new System.Windows.Forms.Label();
-      this.dataTypeTextBox = new System.Windows.Forms.TextBox();
-      this.SuspendLayout();
-      // 
-      // nameTextBox
-      // 
-      this.nameTextBox.Location = new System.Drawing.Point(80, 0);
-      this.nameTextBox.Size = new System.Drawing.Size(313, 20);
-      // 
-      // descriptionTextBox
-      // 
-      this.descriptionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.descriptionTextBox.Location = new System.Drawing.Point(80, 26);
-      this.descriptionTextBox.Size = new System.Drawing.Size(313, 62);
-      // 
-      // dataTypeLabel
-      // 
-      this.dataTypeLabel.AutoSize = true;
-      this.dataTypeLabel.Location = new System.Drawing.Point(3, 97);
-      this.dataTypeLabel.Name = "dataTypeLabel";
-      this.dataTypeLabel.Size = new System.Drawing.Size(60, 13);
-      this.dataTypeLabel.TabIndex = 4;
-      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(80, 94);
-      this.dataTypeTextBox.Name = "dataTypeTextBox";
-      this.dataTypeTextBox.ReadOnly = true;
-      this.dataTypeTextBox.Size = new System.Drawing.Size(313, 20);
-      this.dataTypeTextBox.TabIndex = 5;
-      // 
-      // ParameterBaseView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.dataTypeTextBox);
-      this.Controls.Add(this.dataTypeLabel);
-      this.Name = "ParameterBaseView";
-      this.Size = new System.Drawing.Size(393, 117);
-      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
-      this.Controls.SetChildIndex(this.dataTypeLabel, 0);
-      this.Controls.SetChildIndex(this.dataTypeTextBox, 0);
-      this.Controls.SetChildIndex(this.descriptionLabel, 0);
-      this.Controls.SetChildIndex(this.nameLabel, 0);
-      this.Controls.SetChildIndex(this.nameTextBox, 0);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    protected System.Windows.Forms.Label dataTypeLabel;
-    protected System.Windows.Forms.TextBox dataTypeTextBox;
-
-  }
-}
Index: unk/sources/HeuristicLab.Core.Views/3.3/ParameterBaseView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterBaseView.cs	(revision 2663)
+++ 	(revision )
@@ -1,77 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.Core.Views {
-  /// <summary>
-  /// The visual representation of a <see cref="Parameter"/>.
-  /// </summary>
-  [Content(typeof(IParameter), true)]
-  public partial class ParameterBaseView : NamedItemBaseView {
-    /// <summary>
-    /// Gets or sets the variable to represent visually.
-    /// </summary>
-    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
-    /// No own data storage present.</remarks>
-    public IParameter Parameter {
-      get { return (IParameter)Item; }
-      set { base.Item = value; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="VariableView"/> with caption "Variable".
-    /// </summary>
-    public ParameterBaseView() {
-      InitializeComponent();
-      Caption = "Parameter";
-    }
-    /// <summary>
-    /// Initializes a new instance of <see cref="VariableView"/> with the given <paramref name="variable"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="VariableView()"/>.</remarks>
-    /// <param name="variable">The variable to represent visually.</param>
-    public ParameterBaseView(IParameter parameter)
-      : this() {
-      Parameter = parameter;
-    }
-
-    protected override void OnObjectChanged() {
-      base.OnObjectChanged();
-      if (Parameter == null) {
-        Caption = "Parameter";
-        dataTypeTextBox.Text = "-";
-        dataTypeTextBox.Enabled = false;
-      } else {
-        Caption = Parameter.Name + " (" + Parameter.GetType().Name + ")";
-        dataTypeTextBox.Text = Parameter.DataType.Name;
-        dataTypeTextBox.Enabled = true;
-      }
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterView.Designer.cs	(revision 2663)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterView.Designer.cs	(revision 2664)
@@ -33,5 +33,4 @@
     protected override void Dispose(bool disposing) {
       if (disposing) {
-        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
         if (components != null) components.Dispose();
       }
@@ -46,141 +45,53 @@
     /// </summary>
     private void InitializeComponent() {
-      this.components = new System.ComponentModel.Container();
-      this.valueGroupBox = new System.Windows.Forms.GroupBox();
-      this.valuePanel = new System.Windows.Forms.Panel();
-      this.viewHost = new HeuristicLab.Core.Views.ViewHost();
-      this.actualNameTextBox = new System.Windows.Forms.TextBox();
-      this.actualNameLabel = new System.Windows.Forms.Label();
-      this.setValueButton = new System.Windows.Forms.Button();
-      this.clearValueButton = new System.Windows.Forms.Button();
-      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
-      this.valueGroupBox.SuspendLayout();
-      this.valuePanel.SuspendLayout();
+      this.dataTypeLabel = new System.Windows.Forms.Label();
+      this.dataTypeTextBox = new System.Windows.Forms.TextBox();
       this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.nameTextBox.Location = new System.Drawing.Point(80, 0);
+      this.nameTextBox.Size = new System.Drawing.Size(313, 20);
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.descriptionTextBox.Location = new System.Drawing.Point(80, 26);
+      this.descriptionTextBox.Size = new System.Drawing.Size(313, 62);
       // 
       // dataTypeLabel
       // 
-      this.dataTypeLabel.Location = new System.Drawing.Point(3, 123);
-      this.dataTypeLabel.TabIndex = 6;
+      this.dataTypeLabel.AutoSize = true;
+      this.dataTypeLabel.Location = new System.Drawing.Point(3, 97);
+      this.dataTypeLabel.Name = "dataTypeLabel";
+      this.dataTypeLabel.Size = new System.Drawing.Size(60, 13);
+      this.dataTypeLabel.TabIndex = 4;
+      this.dataTypeLabel.Text = "Data &Type:";
       // 
       // dataTypeTextBox
       // 
-      this.dataTypeTextBox.Location = new System.Drawing.Point(80, 120);
-      this.dataTypeTextBox.Size = new System.Drawing.Size(306, 20);
-      this.dataTypeTextBox.TabIndex = 7;
+      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(80, 94);
+      this.dataTypeTextBox.Name = "dataTypeTextBox";
+      this.dataTypeTextBox.ReadOnly = true;
+      this.dataTypeTextBox.Size = new System.Drawing.Size(313, 20);
+      this.dataTypeTextBox.TabIndex = 5;
       // 
-      // nameTextBox
-      // 
-      this.nameTextBox.Size = new System.Drawing.Size(306, 20);
-      // 
-      // descriptionLabel
-      // 
-      this.descriptionLabel.Location = new System.Drawing.Point(3, 55);
-      this.descriptionLabel.TabIndex = 4;
-      // 
-      // descriptionTextBox
-      // 
-      this.descriptionTextBox.Location = new System.Drawing.Point(80, 52);
-      this.descriptionTextBox.Size = new System.Drawing.Size(306, 62);
-      this.descriptionTextBox.TabIndex = 5;
-      // 
-      // valueGroupBox
-      // 
-      this.valueGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.valueGroupBox.Controls.Add(this.valuePanel);
-      this.valueGroupBox.Controls.Add(this.clearValueButton);
-      this.valueGroupBox.Controls.Add(this.setValueButton);
-      this.valueGroupBox.Location = new System.Drawing.Point(0, 146);
-      this.valueGroupBox.Name = "valueGroupBox";
-      this.valueGroupBox.Size = new System.Drawing.Size(386, 169);
-      this.valueGroupBox.TabIndex = 10;
-      this.valueGroupBox.TabStop = false;
-      this.valueGroupBox.Text = "&Value:";
-      // 
-      // valuePanel
-      // 
-      this.valuePanel.AllowDrop = true;
-      this.valuePanel.Controls.Add(this.viewHost);
-      this.valuePanel.Location = new System.Drawing.Point(3, 48);
-      this.valuePanel.Name = "valuePanel";
-      this.valuePanel.Size = new System.Drawing.Size(380, 118);
-      this.valuePanel.TabIndex = 0;
-      this.valuePanel.DragOver += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragEnterOver);
-      this.valuePanel.DragDrop += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragDrop);
-      this.valuePanel.DragEnter += new System.Windows.Forms.DragEventHandler(this.valuePanel_DragEnterOver);
-      // 
-      // viewHost
-      // 
-      this.viewHost.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.viewHost.Location = new System.Drawing.Point(0, 0);
-      this.viewHost.Name = "viewHost";
-      this.viewHost.Object = null;
-      this.viewHost.Size = new System.Drawing.Size(380, 118);
-      this.viewHost.TabIndex = 0;
-      // 
-      // actualNameTextBox
-      // 
-      this.actualNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.actualNameTextBox.Location = new System.Drawing.Point(80, 26);
-      this.actualNameTextBox.Name = "actualNameTextBox";
-      this.actualNameTextBox.Size = new System.Drawing.Size(306, 20);
-      this.actualNameTextBox.TabIndex = 3;
-      this.actualNameTextBox.Validated += new System.EventHandler(this.actualNameTextBox_Validated);
-      // 
-      // actualNameLabel
-      // 
-      this.actualNameLabel.AutoSize = true;
-      this.actualNameLabel.Location = new System.Drawing.Point(3, 29);
-      this.actualNameLabel.Name = "actualNameLabel";
-      this.actualNameLabel.Size = new System.Drawing.Size(71, 13);
-      this.actualNameLabel.TabIndex = 2;
-      this.actualNameLabel.Text = "&Actual Name:";
-      // 
-      // setValueButton
-      // 
-      this.setValueButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Add;
-      this.setValueButton.Location = new System.Drawing.Point(6, 19);
-      this.setValueButton.Name = "setValueButton";
-      this.setValueButton.Size = new System.Drawing.Size(23, 23);
-      this.setValueButton.TabIndex = 8;
-      this.toolTip.SetToolTip(this.setValueButton, "Set Value");
-      this.setValueButton.UseVisualStyleBackColor = true;
-      this.setValueButton.Click += new System.EventHandler(this.setValueButton_Click);
-      // 
-      // clearValueButton
-      // 
-      this.clearValueButton.Enabled = false;
-      this.clearValueButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Remove;
-      this.clearValueButton.Location = new System.Drawing.Point(35, 19);
-      this.clearValueButton.Name = "clearValueButton";
-      this.clearValueButton.Size = new System.Drawing.Size(23, 23);
-      this.clearValueButton.TabIndex = 9;
-      this.toolTip.SetToolTip(this.clearValueButton, "Clear Value");
-      this.clearValueButton.UseVisualStyleBackColor = true;
-      this.clearValueButton.Click += new System.EventHandler(this.clearValueButton_Click);
-      // 
-      // ParameterView
+      // ParameterBaseView
       // 
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.valueGroupBox);
-      this.Controls.Add(this.actualNameLabel);
-      this.Controls.Add(this.actualNameTextBox);
-      this.Name = "ParameterView";
-      this.Size = new System.Drawing.Size(386, 315);
+      this.Controls.Add(this.dataTypeTextBox);
+      this.Controls.Add(this.dataTypeLabel);
+      this.Name = "ParameterBaseView";
+      this.Size = new System.Drawing.Size(393, 117);
+      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
       this.Controls.SetChildIndex(this.dataTypeLabel, 0);
       this.Controls.SetChildIndex(this.dataTypeTextBox, 0);
-      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
       this.Controls.SetChildIndex(this.descriptionLabel, 0);
-      this.Controls.SetChildIndex(this.actualNameTextBox, 0);
-      this.Controls.SetChildIndex(this.actualNameLabel, 0);
-      this.Controls.SetChildIndex(this.valueGroupBox, 0);
       this.Controls.SetChildIndex(this.nameLabel, 0);
       this.Controls.SetChildIndex(this.nameTextBox, 0);
-      this.valueGroupBox.ResumeLayout(false);
-      this.valuePanel.ResumeLayout(false);
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -190,12 +101,7 @@
     #endregion
 
-    private System.Windows.Forms.GroupBox valueGroupBox;
-    private System.Windows.Forms.TextBox actualNameTextBox;
-    private System.Windows.Forms.Label actualNameLabel;
-    private System.Windows.Forms.Panel valuePanel;
-    private ViewHost viewHost;
-    private System.Windows.Forms.Button setValueButton;
-    private System.Windows.Forms.ToolTip toolTip;
-    private System.Windows.Forms.Button clearValueButton;
+    protected System.Windows.Forms.Label dataTypeLabel;
+    protected System.Windows.Forms.TextBox dataTypeTextBox;
+
   }
 }
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterView.cs	(revision 2663)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ParameterView.cs	(revision 2664)
@@ -33,8 +33,6 @@
   /// The visual representation of a <see cref="Parameter"/>.
   /// </summary>
-  [Content(typeof(Parameter), true)]
-  public partial class ParameterView : ParameterBaseView {
-    private TypeSelectorDialog typeSelectorDialog;
-
+  [Content(typeof(IParameter), true)]
+  public partial class ParameterView : NamedItemView {
     /// <summary>
     /// Gets or sets the variable to represent visually.
@@ -42,6 +40,6 @@
     /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
     /// No own data storage present.</remarks>
-    public new Parameter Parameter {
-      get { return (Parameter)Item; }
+    public IParameter Parameter {
+      get { return (IParameter)Item; }
       set { base.Item = value; }
     }
@@ -59,27 +57,7 @@
     /// <remarks>Calls <see cref="VariableView()"/>.</remarks>
     /// <param name="variable">The variable to represent visually.</param>
-    public ParameterView(Parameter parameter)
+    public ParameterView(IParameter parameter)
       : this() {
       Parameter = parameter;
-    }
-
-    /// <summary>
-    /// Removes the eventhandlers from the underlying <see cref="IVariable"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void DeregisterObjectEvents() {
-      Parameter.ActualNameChanged -= new EventHandler(Parameter_ActualNameChanged);
-      Parameter.ValueChanged -= new EventHandler(Parameter_ValueChanged);
-      base.DeregisterObjectEvents();
-    }
-
-    /// <summary>
-    /// Adds eventhandlers to the underlying <see cref="IVariable"/>.
-    /// </summary>
-    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
-    protected override void RegisterObjectEvents() {
-      base.RegisterObjectEvents();
-      Parameter.ActualNameChanged += new EventHandler(Parameter_ActualNameChanged);
-      Parameter.ValueChanged += new EventHandler(Parameter_ValueChanged);
     }
 
@@ -88,67 +66,10 @@
       if (Parameter == null) {
         Caption = "Parameter";
-        actualNameTextBox.Text = "-";
-        actualNameTextBox.Enabled = false;
-        setValueButton.Enabled = false;
-        clearValueButton.Enabled = false;
-        valueGroupBox.Enabled = false;
-        viewHost.Object = null;
+        dataTypeTextBox.Text = "-";
+        dataTypeTextBox.Enabled = false;
       } else {
         Caption = Parameter.Name + " (" + Parameter.GetType().Name + ")";
-        actualNameTextBox.Text = Parameter.ActualName;
-        actualNameTextBox.Enabled = Parameter.Value == null;
-        setValueButton.Enabled = Parameter.Value == null;
-        clearValueButton.Enabled = Parameter.Value != null;
-        valueGroupBox.Enabled = true;
-        viewHost.Object = Parameter.Value;
-      }
-    }
-
-    private void Parameter_ActualNameChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Parameter_ActualNameChanged), sender, e);
-      else
-        actualNameTextBox.Text = Parameter.ActualName;
-    }
-    private void Parameter_ValueChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Parameter_ValueChanged), sender, e);
-      else {
-        actualNameTextBox.Enabled = Parameter.Value == null;
-        setValueButton.Enabled = Parameter.Value == null;
-        clearValueButton.Enabled = Parameter.Value != null;
-        viewHost.Object = Parameter.Value;
-      }
-    }
-
-    private void actualNameTextBox_Validated(object sender, EventArgs e) {
-      Parameter.ActualName = actualNameTextBox.Text;
-    }
-    private void setValueButton_Click(object sender, EventArgs e) {
-      if (typeSelectorDialog == null) {
-        typeSelectorDialog = new TypeSelectorDialog();
-        typeSelectorDialog.Caption = "Select Value Type";
-      }
-      typeSelectorDialog.TypeSelector.Configure(Parameter.DataType, false, false);
-      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK)
-        Parameter.Value = (IItem)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
-    }
-    private void clearValueButton_Click(object sender, EventArgs e) {
-      Parameter.Value = null;
-    }
-    private void valuePanel_DragEnterOver(object sender, DragEventArgs e) {
-      e.Effect = DragDropEffects.None;
-      Type type = e.Data.GetData("Type") as Type;
-      if ((type != null) && (Parameter.DataType.IsAssignableFrom(type))) {
-        if ((e.KeyState & 8) == 8) e.Effect = DragDropEffects.Copy;  // CTRL key
-        else if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Move;  // ALT key
-        else e.Effect = DragDropEffects.Link;
-      }
-    }
-    private void valuePanel_DragDrop(object sender, DragEventArgs e) {
-      if (e.Effect != DragDropEffects.None) {
-        IItem item = e.Data.GetData("Value") as IItem;
-        if ((e.Effect & DragDropEffects.Copy) == DragDropEffects.Copy) item = (IItem)item.Clone();
-        Parameter.Value = item;
+        dataTypeTextBox.Text = Parameter.DataType.Name;
+        dataTypeTextBox.Enabled = true;
       }
     }
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeView.cs	(revision 2663)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ScopeView.cs	(revision 2664)
@@ -37,5 +37,5 @@
   /// </summary>
   [Content(typeof(Scope), true)]
-  public partial class ScopeView : ItemViewBase {
+  public partial class ScopeView : ItemView {
     private Dictionary<Scope, TreeNode> scopeNodeTable;
     private Dictionary<ScopeList, Scope> subScopesScopeTable;
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/VariableView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/VariableView.cs	(revision 2663)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/VariableView.cs	(revision 2664)
@@ -34,5 +34,5 @@
   /// </summary>
   [Content(typeof(Variable), true)]
-  public partial class VariableView : NamedItemBaseView {
+  public partial class VariableView : NamedItemView {
     private TypeSelectorDialog typeSelectorDialog;
 
Index: /trunk/sources/HeuristicLab.Core/3.3/DeepCloneable.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/DeepCloneable.cs	(revision 2664)
+++ /trunk/sources/HeuristicLab.Core/3.3/DeepCloneable.cs	(revision 2664)
@@ -0,0 +1,59 @@
+#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>
+  /// Represents a base class for all deeply cloneable objects.
+  /// </summary>
+  [EmptyStorableClass]
+  public abstract class DeepCloneable : IDeepCloneable {
+    /// <summary>
+    /// Creates a deep clone of this instance.
+    /// </summary>
+    /// <remarks>
+    /// This method is the entry point for creating a deep clone of a whole object graph.
+    /// </remarks>
+    /// <returns>A clone of this instance.</returns>
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+
+    /// <summary>
+    /// Creates a deep clone of this instance.
+    /// </summary>
+    /// <remarks>This method should not be called directly. It is used for creating clones of
+    /// objects which are contained in the object that is currently cloned.</remarks>
+    /// <param name="cloner">The cloner which is responsible for keeping track of all already
+    /// cloned objects.</param>
+    /// <returns>A clone of this instance.</returns>
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      DeepCloneable clone = (DeepCloneable)Activator.CreateInstance(this.GetType());
+      cloner.RegisterClonedObject(this, clone);
+      return clone;
+    }
+  }
+}
Index: unk/sources/HeuristicLab.Core/3.3/DeepCloneableBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/DeepCloneableBase.cs	(revision 2663)
+++ 	(revision )
@@ -1,59 +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>
-  /// Represents a base class for all deeply cloneable objects.
-  /// </summary>
-  [EmptyStorableClass]
-  public abstract class DeepCloneableBase : IDeepCloneable {
-    /// <summary>
-    /// Creates a deep clone of this instance.
-    /// </summary>
-    /// <remarks>
-    /// This method is the entry point for creating a deep clone of a whole object graph.
-    /// </remarks>
-    /// <returns>A clone of this instance.</returns>
-    public object Clone() {
-      return Clone(new Cloner());
-    }
-
-    /// <summary>
-    /// Creates a deep clone of this instance.
-    /// </summary>
-    /// <remarks>This method should not be called directly. It is used for creating clones of
-    /// objects which are contained in the object that is currently cloned.</remarks>
-    /// <param name="cloner">The cloner which is responsible for keeping track of all already
-    /// cloned objects.</param>
-    /// <returns>A clone of this instance.</returns>
-    public virtual IDeepCloneable Clone(Cloner cloner) {
-      DeepCloneableBase clone = (DeepCloneableBase)Activator.CreateInstance(this.GetType());
-      cloner.RegisterClonedObject(this, clone);
-      return clone;
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Core/3.3/Engine.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/Engine.cs	(revision 2664)
+++ /trunk/sources/HeuristicLab.Core/3.3/Engine.cs	(revision 2664)
@@ -0,0 +1,293 @@
+#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 System.Threading;
+using System.Drawing;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Base class to represent an engine, which is an interpreter, holding the code, the data and 
+  /// the actual state, which is the runtime stack and a pointer onto the next operation. It represents
+  /// one execution and can handle parallel executions.
+  /// </summary>
+  [Item("Engine", "A base class for engines.")]
+  public abstract class Engine : Item, IEngine {
+    public override Image ItemImage {
+      get { return HeuristicLab.Common.Resources.VS2008ImageLibrary.Event; }
+    }
+
+    /// <summary>
+    /// Field of the current instance that represent the operator graph.
+    /// </summary>
+    private OperatorGraph operatorGraph;
+    /// <summary>
+    /// Gets the current operator graph.
+    /// </summary>
+    [Storable]
+    public OperatorGraph OperatorGraph {
+      get { return operatorGraph; }
+      set {
+        if (value == null) throw new ArgumentNullException();
+        if (value != operatorGraph) {
+          if (operatorGraph != null) operatorGraph.InitialOperatorChanged -= new EventHandler(operatorGraph_InitialOperatorChanged);
+          operatorGraph = value;
+          if (operatorGraph != null) operatorGraph.InitialOperatorChanged += new EventHandler(operatorGraph_InitialOperatorChanged);
+          OnOperatorGraphChanged();
+          Initialize();
+        }
+      }
+    }
+
+    /// <summary>
+    /// Field of the current instance that represent the global scope.
+    /// </summary>
+    [Storable]
+    private Scope globalScope;
+    /// <summary>
+    /// Gets the current global scope.
+    /// </summary>
+    public Scope GlobalScope {
+      get { return globalScope; }
+    }
+
+    [Storable]
+    private TimeSpan executionTime;
+    /// <summary>
+    /// Gets or sets the execution time.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnExecutionTimeChanged"/> in the setter.</remarks>
+    public TimeSpan ExecutionTime {
+      get { return executionTime; }
+      protected set {
+        executionTime = value;
+        OnExecutionTimeChanged();
+      }
+    }
+
+    /// <summary>
+    /// Field of the current instance that represent the execution stack.
+    /// </summary>
+    [Storable]
+    private Stack<ExecutionContext> executionStack;
+    /// <summary>
+    /// Gets the current execution stack.
+    /// </summary>
+    protected Stack<ExecutionContext> ExecutionStack {
+      get { return executionStack; }
+    }
+
+    /// <summary>
+    /// Flag of the current instance whether it is currently running.
+    /// </summary>
+    private bool running;
+    /// <summary>
+    /// Gets information whether the instance is currently running.
+    /// </summary>
+    public bool Running {
+      get { return running; }
+    }
+
+    /// <summary>
+    /// Flag of the current instance whether it is canceled.
+    /// </summary>
+    private bool canceled;
+    /// <summary>
+    /// Gets information whether the instance is currently canceled.
+    /// </summary>
+    protected bool Canceled {
+      get { return canceled; }
+    }
+    /// <summary>
+    /// Gets information whether the instance has already terminated.
+    /// </summary>
+    public bool Finished {
+      get { return executionStack.Count == 0; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="EngineBase"/> with a new global scope.
+    /// </summary>
+    /// <remarks>Calls <see cref="Reset"/>.</remarks>
+    protected Engine() {
+      globalScope = new Scope("Global");
+      executionStack = new Stack<ExecutionContext>();
+      OperatorGraph = new OperatorGraph();
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <remarks>Deep clone through <see cref="cloner.Clone"/> method of helper class 
+    /// <see cref="Auxiliary"/>.</remarks>
+    /// <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 IDeepCloneable Clone(Cloner cloner) {
+      Engine clone = (Engine)base.Clone(cloner);
+      clone.OperatorGraph = (OperatorGraph)cloner.Clone(operatorGraph);
+      clone.globalScope = (Scope)cloner.Clone(globalScope);
+      clone.executionTime = executionTime;
+      ExecutionContext[] contexts = executionStack.ToArray();
+      for (int i = contexts.Length - 1; i >= 0; i--)
+        clone.executionStack.Push((ExecutionContext)cloner.Clone(contexts[i]));
+      clone.running = running;
+      clone.canceled = canceled;
+      return clone;
+    }
+
+    /// <inheritdoc/>
+    /// <remarks>Sets <c>myCanceled</c> and <c>myRunning</c> to <c>false</c>. The global scope is cleared,
+    /// the execution time is reseted, the execution stack is cleared and a new <see cref="AtomicOperation"/>
+    /// with the initial operator is added. <br/>
+    /// Calls <see cref="OnInitialized"/>.</remarks>
+    public void Initialize() {
+      canceled = false;
+      running = false;
+      GlobalScope.Clear();
+      ExecutionTime = new TimeSpan();
+      executionStack.Clear();
+      if (OperatorGraph.InitialOperator != null)
+        executionStack.Push(new ExecutionContext(null, OperatorGraph.InitialOperator, GlobalScope));
+      OnInitialized();
+    }
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="ThreadPool.QueueUserWorkItem(System.Threading.WaitCallback, object)"/> 
+    /// of class <see cref="ThreadPool"/>.</remarks>
+    public void Start() {
+      running = true;
+      canceled = false;
+      ThreadPool.QueueUserWorkItem(new WaitCallback(Run), null);
+    }
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="ThreadPool.QueueUserWorkItem(System.Threading.WaitCallback, object)"/> 
+    /// of class <see cref="ThreadPool"/>.</remarks>
+    public void Step() {
+      running = true;
+      canceled = false;
+      ThreadPool.QueueUserWorkItem(new WaitCallback(RunStep), null);
+    }
+    /// <inheritdoc/>
+    /// <remarks>Sets the protected flag <c>myCanceled</c> to <c>true</c>.</remarks>
+    public virtual void Stop() {
+      canceled = true;
+    }
+
+    private void Run(object state) {
+      OnStarted();
+      DateTime start = DateTime.Now;
+      DateTime end;
+      while ((!Canceled) && (!Finished)) {
+        ProcessNextOperator();
+        end = DateTime.Now;
+        ExecutionTime += end - start;
+        start = end;
+      }
+      ExecutionTime += DateTime.Now - start;
+      running = false;
+      OnStopped();
+    }
+    private void RunStep(object state) {
+      OnStarted();
+      DateTime start = DateTime.Now;
+      if ((!Canceled) && (!Finished))
+        ProcessNextOperator();
+      ExecutionTime += DateTime.Now - start;
+      running = false;
+      OnStopped();
+    }
+
+    /// <summary>
+    /// Performs the next operation.
+    /// </summary>
+    protected abstract void ProcessNextOperator();
+
+    private void operatorGraph_InitialOperatorChanged(object sender, EventArgs e) {
+      Initialize();
+    }
+
+    public event EventHandler OperatorGraphChanged;
+    protected virtual void OnOperatorGraphChanged() {
+      if (OperatorGraphChanged != null)
+        OperatorGraphChanged(this, EventArgs.Empty);
+    }
+    /// <summary>
+    /// Occurs when the execution time changed.
+    /// </summary>
+    public event EventHandler ExecutionTimeChanged;
+    /// <summary>
+    /// Fires a new <c>ExecutionTimeChanged</c> event.
+    /// </summary>
+    protected virtual void OnExecutionTimeChanged() {
+      if (ExecutionTimeChanged != null)
+        ExecutionTimeChanged(this, new EventArgs());
+    }
+    /// <summary>
+    /// Occurs when the execution is initialized.
+    /// </summary>
+    public event EventHandler Initialized;
+    /// <summary>
+    /// Fires a new <c>Initialized</c> event.
+    /// </summary>
+    protected virtual void OnInitialized() {
+      if (Initialized != null)
+        Initialized(this, new EventArgs());
+    }
+    /// <summary>
+    /// Occurs when the execution is executed.
+    /// </summary>
+    public event EventHandler Started;
+    /// <summary>
+    /// Fires a new <c>Started</c> event.
+    /// </summary>
+    protected virtual void OnStarted() {
+      if (Started != null)
+        Started(this, new EventArgs());
+    }
+    /// <summary>
+    /// Occurs when the execution is finished.
+    /// </summary>
+    public event EventHandler Stopped;
+    /// <summary>
+    /// Fires a new <c>Stopped</c> event.
+    /// </summary>
+    protected virtual void OnStopped() {
+      if (Stopped != null)
+        Stopped(this, new EventArgs());
+    }
+    /// <summary>
+    /// Occurs when an exception occured during the execution.
+    /// </summary>
+    public event EventHandler<EventArgs<Exception>> ExceptionOccurred;
+    /// <summary>
+    /// Aborts the execution and fires a new <c>ExceptionOccurred</c> event.
+    /// </summary>
+    /// <param name="exception">The exception that was thrown.</param>
+    protected virtual void OnExceptionOccurred(Exception exception) {
+      if (ExceptionOccurred != null)
+        ExceptionOccurred(this, new EventArgs<Exception>(exception));
+    }
+  }
+}
Index: unk/sources/HeuristicLab.Core/3.3/EngineBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/EngineBase.cs	(revision 2663)
+++ 	(revision )
@@ -1,293 +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 System.Threading;
-using System.Drawing;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Common;
-
-namespace HeuristicLab.Core {
-  /// <summary>
-  /// Base class to represent an engine, which is an interpreter, holding the code, the data and 
-  /// the actual state, which is the runtime stack and a pointer onto the next operation. It represents
-  /// one execution and can handle parallel executions.
-  /// </summary>
-  [Item("EngineBase", "A base class for engines.")]
-  public abstract class EngineBase : ItemBase, IEngine {
-    public override Image ItemImage {
-      get { return HeuristicLab.Common.Resources.VS2008ImageLibrary.Event; }
-    }
-
-    /// <summary>
-    /// Field of the current instance that represent the operator graph.
-    /// </summary>
-    private OperatorGraph operatorGraph;
-    /// <summary>
-    /// Gets the current operator graph.
-    /// </summary>
-    [Storable]
-    public OperatorGraph OperatorGraph {
-      get { return operatorGraph; }
-      set {
-        if (value == null) throw new ArgumentNullException();
-        if (value != operatorGraph) {
-          if (operatorGraph != null) operatorGraph.InitialOperatorChanged -= new EventHandler(operatorGraph_InitialOperatorChanged);
-          operatorGraph = value;
-          if (operatorGraph != null) operatorGraph.InitialOperatorChanged += new EventHandler(operatorGraph_InitialOperatorChanged);
-          OnOperatorGraphChanged();
-          Initialize();
-        }
-      }
-    }
-
-    /// <summary>
-    /// Field of the current instance that represent the global scope.
-    /// </summary>
-    [Storable]
-    private Scope globalScope;
-    /// <summary>
-    /// Gets the current global scope.
-    /// </summary>
-    public Scope GlobalScope {
-      get { return globalScope; }
-    }
-
-    [Storable]
-    private TimeSpan executionTime;
-    /// <summary>
-    /// Gets or sets the execution time.
-    /// </summary>
-    /// <remarks>Calls <see cref="OnExecutionTimeChanged"/> in the setter.</remarks>
-    public TimeSpan ExecutionTime {
-      get { return executionTime; }
-      protected set {
-        executionTime = value;
-        OnExecutionTimeChanged();
-      }
-    }
-
-    /// <summary>
-    /// Field of the current instance that represent the execution stack.
-    /// </summary>
-    [Storable]
-    private Stack<ExecutionContext> executionStack;
-    /// <summary>
-    /// Gets the current execution stack.
-    /// </summary>
-    protected Stack<ExecutionContext> ExecutionStack {
-      get { return executionStack; }
-    }
-
-    /// <summary>
-    /// Flag of the current instance whether it is currently running.
-    /// </summary>
-    private bool running;
-    /// <summary>
-    /// Gets information whether the instance is currently running.
-    /// </summary>
-    public bool Running {
-      get { return running; }
-    }
-
-    /// <summary>
-    /// Flag of the current instance whether it is canceled.
-    /// </summary>
-    private bool canceled;
-    /// <summary>
-    /// Gets information whether the instance is currently canceled.
-    /// </summary>
-    protected bool Canceled {
-      get { return canceled; }
-    }
-    /// <summary>
-    /// Gets information whether the instance has already terminated.
-    /// </summary>
-    public bool Finished {
-      get { return executionStack.Count == 0; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="EngineBase"/> with a new global scope.
-    /// </summary>
-    /// <remarks>Calls <see cref="Reset"/>.</remarks>
-    protected EngineBase() {
-      globalScope = new Scope("Global");
-      executionStack = new Stack<ExecutionContext>();
-      OperatorGraph = new OperatorGraph();
-    }
-
-    /// <summary>
-    /// Clones the current instance (deep clone).
-    /// </summary>
-    /// <remarks>Deep clone through <see cref="cloner.Clone"/> method of helper class 
-    /// <see cref="Auxiliary"/>.</remarks>
-    /// <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 IDeepCloneable Clone(Cloner cloner) {
-      EngineBase clone = (EngineBase)base.Clone(cloner);
-      clone.OperatorGraph = (OperatorGraph)cloner.Clone(operatorGraph);
-      clone.globalScope = (Scope)cloner.Clone(globalScope);
-      clone.executionTime = executionTime;
-      ExecutionContext[] contexts = executionStack.ToArray();
-      for (int i = contexts.Length - 1; i >= 0; i--)
-        clone.executionStack.Push((ExecutionContext)cloner.Clone(contexts[i]));
-      clone.running = running;
-      clone.canceled = canceled;
-      return clone;
-    }
-
-    /// <inheritdoc/>
-    /// <remarks>Sets <c>myCanceled</c> and <c>myRunning</c> to <c>false</c>. The global scope is cleared,
-    /// the execution time is reseted, the execution stack is cleared and a new <see cref="AtomicOperation"/>
-    /// with the initial operator is added. <br/>
-    /// Calls <see cref="OnInitialized"/>.</remarks>
-    public void Initialize() {
-      canceled = false;
-      running = false;
-      GlobalScope.Clear();
-      ExecutionTime = new TimeSpan();
-      executionStack.Clear();
-      if (OperatorGraph.InitialOperator != null)
-        executionStack.Push(new ExecutionContext(null, OperatorGraph.InitialOperator, GlobalScope));
-      OnInitialized();
-    }
-    /// <inheritdoc/>
-    /// <remarks>Calls <see cref="ThreadPool.QueueUserWorkItem(System.Threading.WaitCallback, object)"/> 
-    /// of class <see cref="ThreadPool"/>.</remarks>
-    public void Start() {
-      running = true;
-      canceled = false;
-      ThreadPool.QueueUserWorkItem(new WaitCallback(Run), null);
-    }
-    /// <inheritdoc/>
-    /// <remarks>Calls <see cref="ThreadPool.QueueUserWorkItem(System.Threading.WaitCallback, object)"/> 
-    /// of class <see cref="ThreadPool"/>.</remarks>
-    public void Step() {
-      running = true;
-      canceled = false;
-      ThreadPool.QueueUserWorkItem(new WaitCallback(RunStep), null);
-    }
-    /// <inheritdoc/>
-    /// <remarks>Sets the protected flag <c>myCanceled</c> to <c>true</c>.</remarks>
-    public virtual void Stop() {
-      canceled = true;
-    }
-
-    private void Run(object state) {
-      OnStarted();
-      DateTime start = DateTime.Now;
-      DateTime end;
-      while ((!Canceled) && (!Finished)) {
-        ProcessNextOperator();
-        end = DateTime.Now;
-        ExecutionTime += end - start;
-        start = end;
-      }
-      ExecutionTime += DateTime.Now - start;
-      running = false;
-      OnStopped();
-    }
-    private void RunStep(object state) {
-      OnStarted();
-      DateTime start = DateTime.Now;
-      if ((!Canceled) && (!Finished))
-        ProcessNextOperator();
-      ExecutionTime += DateTime.Now - start;
-      running = false;
-      OnStopped();
-    }
-
-    /// <summary>
-    /// Performs the next operation.
-    /// </summary>
-    protected abstract void ProcessNextOperator();
-
-    private void operatorGraph_InitialOperatorChanged(object sender, EventArgs e) {
-      Initialize();
-    }
-
-    public event EventHandler OperatorGraphChanged;
-    protected virtual void OnOperatorGraphChanged() {
-      if (OperatorGraphChanged != null)
-        OperatorGraphChanged(this, EventArgs.Empty);
-    }
-    /// <summary>
-    /// Occurs when the execution time changed.
-    /// </summary>
-    public event EventHandler ExecutionTimeChanged;
-    /// <summary>
-    /// Fires a new <c>ExecutionTimeChanged</c> event.
-    /// </summary>
-    protected virtual void OnExecutionTimeChanged() {
-      if (ExecutionTimeChanged != null)
-        ExecutionTimeChanged(this, new EventArgs());
-    }
-    /// <summary>
-    /// Occurs when the execution is initialized.
-    /// </summary>
-    public event EventHandler Initialized;
-    /// <summary>
-    /// Fires a new <c>Initialized</c> event.
-    /// </summary>
-    protected virtual void OnInitialized() {
-      if (Initialized != null)
-        Initialized(this, new EventArgs());
-    }
-    /// <summary>
-    /// Occurs when the execution is executed.
-    /// </summary>
-    public event EventHandler Started;
-    /// <summary>
-    /// Fires a new <c>Started</c> event.
-    /// </summary>
-    protected virtual void OnStarted() {
-      if (Started != null)
-        Started(this, new EventArgs());
-    }
-    /// <summary>
-    /// Occurs when the execution is finished.
-    /// </summary>
-    public event EventHandler Stopped;
-    /// <summary>
-    /// Fires a new <c>Stopped</c> event.
-    /// </summary>
-    protected virtual void OnStopped() {
-      if (Stopped != null)
-        Stopped(this, new EventArgs());
-    }
-    /// <summary>
-    /// Occurs when an exception occured during the execution.
-    /// </summary>
-    public event EventHandler<EventArgs<Exception>> ExceptionOccurred;
-    /// <summary>
-    /// Aborts the execution and fires a new <c>ExceptionOccurred</c> event.
-    /// </summary>
-    /// <param name="exception">The exception that was thrown.</param>
-    protected virtual void OnExceptionOccurred(Exception exception) {
-      if (ExceptionOccurred != null)
-        ExceptionOccurred(this, new EventArgs<Exception>(exception));
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Core/3.3/ExecutionContext.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/ExecutionContext.cs	(revision 2663)
+++ /trunk/sources/HeuristicLab.Core/3.3/ExecutionContext.cs	(revision 2664)
@@ -26,5 +26,5 @@
 
 namespace HeuristicLab.Core {
-  public class ExecutionContext : DeepCloneableBase {
+  public class ExecutionContext : DeepCloneable {
     [Storable]
     private ExecutionContext parent;
Index: /trunk/sources/HeuristicLab.Core/3.3/ExecutionContextCollection.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/ExecutionContextCollection.cs	(revision 2663)
+++ /trunk/sources/HeuristicLab.Core/3.3/ExecutionContextCollection.cs	(revision 2664)
@@ -27,5 +27,5 @@
 
 namespace HeuristicLab.Core {
-  public class ExecutionContextCollection : DeepCloneableBase, IList<ExecutionContext> {
+  public class ExecutionContextCollection : DeepCloneable, IList<ExecutionContext> {
     [Storable]
     private IList<ExecutionContext> contexts;
Index: /trunk/sources/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj	(revision 2663)
+++ /trunk/sources/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj	(revision 2664)
@@ -103,8 +103,12 @@
     <Compile Include="Attributes\CreatableAttribute.cs" />
     <Compile Include="ChangedEventArgs.cs" />
+    <Compile Include="DeepCloneable.cs" />
+    <Compile Include="Engine.cs" />
     <Compile Include="Interfaces\IOperatorParameter.cs" />
+    <Compile Include="Item.cs" />
+    <Compile Include="ItemParameter.cs" />
+    <Compile Include="NamedItem.cs" />
     <Compile Include="OperatorGraph.cs" />
     <Compile Include="OperatorParameter.cs" />
-    <Compile Include="ParameterBase.cs" />
     <Compile Include="Interfaces\IParameter.cs" />
     <Compile Include="OperatorCollection.cs" />
@@ -113,7 +117,4 @@
     <Compile Include="ItemSet.cs" />
     <Compile Include="ItemList.cs" />
-    <Compile Include="EngineBase.cs">
-      <SubType>Code</SubType>
-    </Compile>
     <Compile Include="Interfaces\IEngine.cs">
       <SubType>Code</SubType>
@@ -126,11 +127,8 @@
     <Compile Include="Parameter.cs" />
     <Compile Include="ScopeList.cs" />
-    <Compile Include="DeepCloneableBase.cs" />
     <Compile Include="Interfaces\IDeepCloneable.cs" />
     <Compile Include="NamedItemCollection.cs" />
     <Compile Include="Interfaces\INamedItem.cs" />
-    <Compile Include="NamedItemBase.cs" />
     <Compile Include="Interfaces\IItem.cs" />
-    <Compile Include="ItemBase.cs" />
     <Compile Include="Interfaces\IRandom.cs" />
     <Compile Include="Scope.cs" />
Index: /trunk/sources/HeuristicLab.Core/3.3/Item.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/Item.cs	(revision 2664)
+++ /trunk/sources/HeuristicLab.Core/3.3/Item.cs	(revision 2664)
@@ -0,0 +1,66 @@
+#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.Text;
+using System.Xml;
+using System.Drawing;
+using System.Resources;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common.Resources;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Represents the base class for all basic item types.
+  /// </summary>
+  [EmptyStorableClass]
+  [Item("Item", "Base class for all HeuristicLab items.")]
+  public abstract class Item : DeepCloneable, IItem {
+    public virtual string ItemName {
+      get { return ItemAttribute.GetName(this.GetType()); }
+    }
+    public virtual string ItemDescription {
+      get { return ItemAttribute.GetDescription(this.GetType()); }
+    }
+    public virtual Image ItemImage {
+      get { return VS2008ImageLibrary.Class; }
+    }
+
+    /// <summary>
+    /// Gets the string representation of the current instance.
+    /// </summary>
+    /// <returns>The type name of the current instance.</returns>
+    public override string ToString() {
+      return ItemName;
+    }
+
+    public event ChangedEventHandler Changed;
+    protected void OnChanged() {
+      OnChanged(new ChangedEventArgs());
+    }
+    protected virtual void OnChanged(ChangedEventArgs e) {
+      if ((e.RegisterChangedObject(this)) && (Changed != null))
+          Changed(this, e);
+    }
+  }
+}
Index: unk/sources/HeuristicLab.Core/3.3/ItemBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/ItemBase.cs	(revision 2663)
+++ 	(revision )
@@ -1,66 +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.Text;
-using System.Xml;
-using System.Drawing;
-using System.Resources;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Common.Resources;
-
-namespace HeuristicLab.Core {
-  /// <summary>
-  /// Represents the base class for all basic item types.
-  /// </summary>
-  [EmptyStorableClass]
-  [Item("ItemBase", "Base class for all HeuristicLab items.")]
-  public abstract class ItemBase : DeepCloneableBase, IItem {
-    public virtual string ItemName {
-      get { return ItemAttribute.GetName(this.GetType()); }
-    }
-    public virtual string ItemDescription {
-      get { return ItemAttribute.GetDescription(this.GetType()); }
-    }
-    public virtual Image ItemImage {
-      get { return VS2008ImageLibrary.Class; }
-    }
-
-    /// <summary>
-    /// Gets the string representation of the current instance.
-    /// </summary>
-    /// <returns>The type name of the current instance.</returns>
-    public override string ToString() {
-      return ItemName;
-    }
-
-    public event ChangedEventHandler Changed;
-    protected void OnChanged() {
-      OnChanged(new ChangedEventArgs());
-    }
-    protected virtual void OnChanged(ChangedEventArgs e) {
-      if ((e.RegisterChangedObject(this)) && (Changed != null))
-          Changed(this, e);
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Core/3.3/ItemParameter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/ItemParameter.cs	(revision 2664)
+++ /trunk/sources/HeuristicLab.Core/3.3/ItemParameter.cs	(revision 2664)
@@ -0,0 +1,153 @@
+#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;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Represents a parameter.
+  /// </summary>
+  [Item("Item Parameter", "A parameter which represents an IItem.")]
+  [Creatable("Test")]
+  public class ItemParameter : Parameter {
+    [Storable]
+    private string actualName;
+    public string ActualName {
+      get { return actualName; }
+      set {
+        if (value == null) throw new ArgumentNullException();
+        if (!actualName.Equals(value)) {
+          actualName = value;
+          OnActualNameChanged();
+        }
+      }
+    }
+
+    private IItem value;
+    [Storable]
+    public IItem Value {
+      get { return this.value; }
+      set {
+        if (value != this.value) {
+          if ((value != null) && (!DataType.IsInstanceOfType(value))) throw new ArgumentException("Static value does not match data type of parameter");
+          if (this.value != null) this.value.Changed -= new ChangedEventHandler(Value_Changed);
+          this.value = value;
+          if (this.value != null) this.value.Changed += new ChangedEventHandler(Value_Changed);
+          OnValueChanged();
+        }
+      }
+    }
+
+    public ItemParameter()
+      : base("Anonymous", null, typeof(IItem)) {
+      actualName = Name;
+      Value = null;
+    }
+    protected ItemParameter(string name, string description, Type dataType)
+      : base(name, description, dataType) {
+      this.actualName = Name;
+      this.Value = null;
+    }
+    public ItemParameter(string name, string description)
+      : base(name, description, typeof(IItem)) {
+      this.actualName = Name;
+      this.Value = null;
+    }
+    public ItemParameter(string name, string description, IItem value)
+      : base(name, description, typeof(IItem)) {
+      this.actualName = Name;
+      this.Value = value;
+    }
+
+    public override IItem GetValue(ExecutionContext context) {
+      if (Value != null) return Value;
+      ExecutionContext parent = context.Parent;
+      IParameter parameter = null;
+
+      while ((parent != null) && (parameter == null)) {
+        parent.Operator.Parameters.TryGetValue(ActualName, out parameter);
+        parent = parent.Parent;
+      }
+
+      if (parameter != null) return parameter.GetValue(context);
+      else return context.Scope.Lookup(ActualName, true).Value;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      ItemParameter clone = (ItemParameter)base.Clone(cloner);
+      clone.actualName = actualName;
+      clone.Value = (IItem)cloner.Clone(value);
+      return clone;
+    }
+
+    public override string ToString() {
+      return string.Format("{0}: {1} ({2})", Name, Value != null ? Value.ToString() : ActualName, DataType.Name);
+    }
+
+    public event EventHandler ActualNameChanged;
+    private void OnActualNameChanged() {
+      if (ActualNameChanged != null)
+        ActualNameChanged(this, new EventArgs());
+      OnChanged();
+    }
+    public event EventHandler ValueChanged;
+    private void OnValueChanged() {
+      if (ValueChanged != null)
+        ValueChanged(this, new EventArgs());
+      OnChanged();
+    }
+
+    private void Value_Changed(object sender, ChangedEventArgs e) {
+      OnChanged(e);
+    }
+  }
+
+  [Item("Parameter<T>", "A generic parameter which represents an instance of type T.")]
+  [EmptyStorableClass]
+  public class ItemParameter<T> : ItemParameter where T : class, IItem {
+    public new T Value {
+      get { return (T)base.Value; }
+      set { base.Value = value; }
+    }
+
+    public ItemParameter()
+      : base("Anonymous", null, typeof(T)) {
+      Value = null;
+    }
+    public ItemParameter(string name, string description)
+      : base(name, description, typeof(T)) {
+      this.Value = null;
+    }
+    public ItemParameter(string name, string description, T value)
+      : base(name, description, typeof(T)) {
+      this.Value = value;
+    }
+
+    public new T GetValue(ExecutionContext context) {
+      return (T)base.GetValue(context);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Core/3.3/NamedItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/NamedItem.cs	(revision 2664)
+++ /trunk/sources/HeuristicLab.Core/3.3/NamedItem.cs	(revision 2664)
@@ -0,0 +1,148 @@
+#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;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Core {
+  [Item("NamedItem", "Base class for items which have a name and an optional description.")]
+  public abstract class NamedItem : Item, INamedItem {
+    [Storable]
+    protected string name;
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="OnNameChanging"/> and also <see cref="OnNameChanged"/> 
+    /// eventually in the setter.</remarks>
+    public string Name {
+      get { return name; }
+      set {
+        if (!CanChangeName) throw new NotSupportedException("Name of NamedItem cannot be changed.");
+        if (value == null) throw new ArgumentNullException();
+        if (!name.Equals(value)) {
+          CancelEventArgs<string> e = new CancelEventArgs<string>(value);
+          OnNameChanging(e);
+          if (!e.Cancel) {
+            name = value;
+            OnNameChanged();
+          }
+        }
+      }
+    }
+    public virtual bool CanChangeName {
+      get { return true; }
+    }
+    [Storable]
+    protected string description;
+    public string Description {
+      get { return description; }
+      set {
+        if (!CanChangeDescription) throw new NotSupportedException("Description of NamedItem cannot be changed.");
+        if ((description == null) || (!description.Equals(value))) {
+          description = value;
+          OnDescriptionChanged();
+        }
+      }
+    }
+    public virtual bool CanChangeDescription {
+      get { return true; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="Variable"/> with name <c>Anonymous</c> 
+    /// and value <c>null</c>.
+    /// </summary>
+    protected NamedItem() {
+      name = ItemName;
+      description = ItemDescription;
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="Variable"/> with the specified <paramref name="name"/>
+    /// and the specified <paramref name="value"/>.
+    /// </summary>
+    /// <param name="name">The name of the current instance.</param>
+    /// <param name="value">The value of the current instance.</param>
+    protected NamedItem(string name)
+      : this() {
+      if (name == null) throw new ArgumentNullException();
+      this.name = name;
+    }
+    protected NamedItem(string name, string description)
+      : this(name) {
+      this.description = description;
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <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 IDeepCloneable Clone(Cloner cloner) {
+      NamedItem clone = (NamedItem)base.Clone(cloner);
+      clone.name = name;
+      clone.description = description;
+      return clone;
+    }
+
+    /// <summary>
+    /// Gets the string representation of the current instance in the format: <c>Name: [null|Value]</c>.
+    /// </summary>
+    /// <returns>The current instance as a string.</returns>
+    public override string ToString() {
+      return Name;
+    }
+
+    /// <inheritdoc/>
+    public event EventHandler<CancelEventArgs<string>> NameChanging;
+    /// <summary>
+    /// Fires a new <c>NameChanging</c> event.
+    /// </summary>
+    /// <param name="e">The event arguments of the changing.</param>
+    protected virtual void OnNameChanging(CancelEventArgs<string> e) {
+      if (NameChanging != null)
+        NameChanging(this, e);
+    }
+    /// <inheritdoc/>
+    public event EventHandler NameChanged;
+    /// <summary>
+    /// Fires a new <c>NameChanged</c> event.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/>.</remarks>
+    protected virtual void OnNameChanged() {
+      if (NameChanged != null)
+        NameChanged(this, new EventArgs());
+      OnChanged();
+    }
+    /// <inheritdoc/>
+    public event EventHandler DescriptionChanged;
+    /// <summary>
+    /// Fires a new <c>DescriptionChanged</c> event.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/>.</remarks>
+    protected virtual void OnDescriptionChanged() {
+      if (DescriptionChanged != null)
+        DescriptionChanged(this, new EventArgs());
+      OnChanged();
+    }
+  }
+}
Index: unk/sources/HeuristicLab.Core/3.3/NamedItemBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/NamedItemBase.cs	(revision 2663)
+++ 	(revision )
@@ -1,148 +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;
-using HeuristicLab.Common;
-
-namespace HeuristicLab.Core {
-  [Item("NamedItemBase", "Base class for items which have a name and an optional description.")]
-  public abstract class NamedItemBase : ItemBase, INamedItem {
-    [Storable]
-    protected string name;
-    /// <inheritdoc/>
-    /// <remarks>Calls <see cref="OnNameChanging"/> and also <see cref="OnNameChanged"/> 
-    /// eventually in the setter.</remarks>
-    public string Name {
-      get { return name; }
-      set {
-        if (!CanChangeName) throw new NotSupportedException("Name of NamedItem cannot be changed.");
-        if (value == null) throw new ArgumentNullException();
-        if (!name.Equals(value)) {
-          CancelEventArgs<string> e = new CancelEventArgs<string>(value);
-          OnNameChanging(e);
-          if (!e.Cancel) {
-            name = value;
-            OnNameChanged();
-          }
-        }
-      }
-    }
-    public virtual bool CanChangeName {
-      get { return true; }
-    }
-    [Storable]
-    protected string description;
-    public string Description {
-      get { return description; }
-      set {
-        if (!CanChangeDescription) throw new NotSupportedException("Description of NamedItem cannot be changed.");
-        if ((description == null) || (!description.Equals(value))) {
-          description = value;
-          OnDescriptionChanged();
-        }
-      }
-    }
-    public virtual bool CanChangeDescription {
-      get { return true; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="Variable"/> with name <c>Anonymous</c> 
-    /// and value <c>null</c>.
-    /// </summary>
-    protected NamedItemBase() {
-      name = ItemName;
-      description = ItemDescription;
-    }
-    /// <summary>
-    /// Initializes a new instance of <see cref="Variable"/> with the specified <paramref name="name"/>
-    /// and the specified <paramref name="value"/>.
-    /// </summary>
-    /// <param name="name">The name of the current instance.</param>
-    /// <param name="value">The value of the current instance.</param>
-    protected NamedItemBase(string name)
-      : this() {
-      if (name == null) throw new ArgumentNullException();
-      this.name = name;
-    }
-    protected NamedItemBase(string name, string description)
-      : this(name) {
-      this.description = description;
-    }
-
-    /// <summary>
-    /// Clones the current instance (deep clone).
-    /// </summary>
-    /// <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 IDeepCloneable Clone(Cloner cloner) {
-      NamedItemBase clone = (NamedItemBase)base.Clone(cloner);
-      clone.name = name;
-      clone.description = description;
-      return clone;
-    }
-
-    /// <summary>
-    /// Gets the string representation of the current instance in the format: <c>Name: [null|Value]</c>.
-    /// </summary>
-    /// <returns>The current instance as a string.</returns>
-    public override string ToString() {
-      return Name;
-    }
-
-    /// <inheritdoc/>
-    public event EventHandler<CancelEventArgs<string>> NameChanging;
-    /// <summary>
-    /// Fires a new <c>NameChanging</c> event.
-    /// </summary>
-    /// <param name="e">The event arguments of the changing.</param>
-    protected virtual void OnNameChanging(CancelEventArgs<string> e) {
-      if (NameChanging != null)
-        NameChanging(this, e);
-    }
-    /// <inheritdoc/>
-    public event EventHandler NameChanged;
-    /// <summary>
-    /// Fires a new <c>NameChanged</c> event.
-    /// </summary>
-    /// <remarks>Calls <see cref="ItemBase.OnChanged"/>.</remarks>
-    protected virtual void OnNameChanged() {
-      if (NameChanged != null)
-        NameChanged(this, new EventArgs());
-      OnChanged();
-    }
-    /// <inheritdoc/>
-    public event EventHandler DescriptionChanged;
-    /// <summary>
-    /// Fires a new <c>DescriptionChanged</c> event.
-    /// </summary>
-    /// <remarks>Calls <see cref="ItemBase.OnChanged"/>.</remarks>
-    protected virtual void OnDescriptionChanged() {
-      if (DescriptionChanged != null)
-        DescriptionChanged(this, new EventArgs());
-      OnChanged();
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Core/3.3/NamedItemCollection.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/NamedItemCollection.cs	(revision 2663)
+++ /trunk/sources/HeuristicLab.Core/3.3/NamedItemCollection.cs	(revision 2664)
@@ -30,5 +30,5 @@
 
 namespace HeuristicLab.Core {
-  public class NamedItemCollection<T> : ObservableKeyedCollectionBase<string, T>, IDeepCloneable where T : class, INamedItem {
+  public class NamedItemCollection<T> : ObservableKeyedCollection<string, T>, IDeepCloneable where T : class, INamedItem {
     [Storable(Name = "RestoreEvents")]
     private object RestoreEvents {
Index: /trunk/sources/HeuristicLab.Core/3.3/OperatorGraph.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/OperatorGraph.cs	(revision 2663)
+++ /trunk/sources/HeuristicLab.Core/3.3/OperatorGraph.cs	(revision 2664)
@@ -35,5 +35,5 @@
   [Item("OperatorGraph", "Represents a graph of operators.")]
   [Creatable("Test")]
-  public class OperatorGraph : ItemBase {
+  public class OperatorGraph : Item {
     private OperatorSet operators;
     /// <summary>
Index: /trunk/sources/HeuristicLab.Core/3.3/OperatorParameter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/OperatorParameter.cs	(revision 2663)
+++ /trunk/sources/HeuristicLab.Core/3.3/OperatorParameter.cs	(revision 2664)
@@ -34,5 +34,5 @@
   [EmptyStorableClass]
   [Creatable("Test")]
-  public class OperatorParameter : Parameter<IOperator>, IOperatorParameter {
+  public class OperatorParameter : ItemParameter<IOperator>, IOperatorParameter {
     public OperatorParameter()
       : base("Anonymous", null) {
Index: /trunk/sources/HeuristicLab.Core/3.3/Parameter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/Parameter.cs	(revision 2663)
+++ /trunk/sources/HeuristicLab.Core/3.3/Parameter.cs	(revision 2664)
@@ -31,122 +31,35 @@
   /// Represents a parameter.
   /// </summary>
-  [Item("Parameter", "A parameter which represents an IItem.")]
-  [Creatable("Test")]
-  public class Parameter : ParameterBase {
-    [Storable]
-    private string actualName;
-    public string ActualName {
-      get { return actualName; }
-      set {
-        if (value == null) throw new ArgumentNullException();
-        if (!actualName.Equals(value)) {
-          actualName = value;
-          OnActualNameChanged();
-        }
-      }
+  [Item("Parameter", "A base class for parameters.")]
+  public abstract class Parameter : NamedItem, IParameter {
+    public override bool CanChangeName {
+      get { return false; }
+    }
+    public override bool CanChangeDescription {
+      get { return false; }
     }
 
-    private IItem value;
     [Storable]
-    public IItem Value {
-      get { return this.value; }
-      set {
-        if (value != this.value) {
-          if ((value != null) && (!DataType.IsInstanceOfType(value))) throw new ArgumentException("Static value does not match data type of parameter");
-          if (this.value != null) this.value.Changed -= new ChangedEventHandler(Value_Changed);
-          this.value = value;
-          if (this.value != null) this.value.Changed += new ChangedEventHandler(Value_Changed);
-          OnValueChanged();
-        }
-      }
+    private Type dataType;
+    public Type DataType {
+      get { return dataType; }
     }
 
-    public Parameter()
-      : base("Anonymous", null, typeof(IItem)) {
-      actualName = Name;
-      Value = null;
+    protected Parameter()
+      : base("Anonymous") {
+      dataType = typeof(IItem);
     }
     protected Parameter(string name, string description, Type dataType)
-      : base(name, description, dataType) {
-      this.actualName = Name;
-      this.Value = null;
-    }
-    public Parameter(string name, string description)
-      : base(name, description, typeof(IItem)) {
-      this.actualName = Name;
-      this.Value = null;
-    }
-    public Parameter(string name, string description, IItem value)
-      : base(name, description, typeof(IItem)) {
-      this.actualName = Name;
-      this.Value = value;
+      : base(name, description) {
+      if (dataType == null) throw new ArgumentNullException();
+      this.dataType = dataType;
     }
 
-    public override IItem GetValue(ExecutionContext context) {
-      if (Value != null) return Value;
-      ExecutionContext parent = context.Parent;
-      IParameter parameter = null;
-
-      while ((parent != null) && (parameter == null)) {
-        parent.Operator.Parameters.TryGetValue(ActualName, out parameter);
-        parent = parent.Parent;
-      }
-
-      if (parameter != null) return parameter.GetValue(context);
-      else return context.Scope.Lookup(ActualName, true).Value;
-    }
+    public abstract IItem GetValue(ExecutionContext context);
 
     public override IDeepCloneable Clone(Cloner cloner) {
       Parameter clone = (Parameter)base.Clone(cloner);
-      clone.actualName = actualName;
-      clone.Value = (IItem)cloner.Clone(value);
+      clone.dataType = dataType;
       return clone;
-    }
-
-    public override string ToString() {
-      return string.Format("{0}: {1} ({2})", Name, Value != null ? Value.ToString() : ActualName, DataType.Name);
-    }
-
-    public event EventHandler ActualNameChanged;
-    private void OnActualNameChanged() {
-      if (ActualNameChanged != null)
-        ActualNameChanged(this, new EventArgs());
-      OnChanged();
-    }
-    public event EventHandler ValueChanged;
-    private void OnValueChanged() {
-      if (ValueChanged != null)
-        ValueChanged(this, new EventArgs());
-      OnChanged();
-    }
-
-    private void Value_Changed(object sender, ChangedEventArgs e) {
-      OnChanged(e);
-    }
-  }
-
-  [Item("Parameter<T>", "A generic parameter which represents an instance of type T.")]
-  [EmptyStorableClass]
-  public class Parameter<T> : Parameter where T : class, IItem {
-    public new T Value {
-      get { return (T)base.Value; }
-      set { base.Value = value; }
-    }
-
-    public Parameter()
-      : base("Anonymous", null, typeof(T)) {
-      Value = null;
-    }
-    public Parameter(string name, string description)
-      : base(name, description, typeof(T)) {
-      this.Value = null;
-    }
-    public Parameter(string name, string description, T value)
-      : base(name, description, typeof(T)) {
-      this.Value = value;
-    }
-
-    public new T GetValue(ExecutionContext context) {
-      return (T)base.GetValue(context);
     }
   }
Index: unk/sources/HeuristicLab.Core/3.3/ParameterBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/ParameterBase.cs	(revision 2663)
+++ 	(revision )
@@ -1,66 +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;
-using HeuristicLab.Common;
-
-namespace HeuristicLab.Core {
-  /// <summary>
-  /// Represents a parameter.
-  /// </summary>
-  [Item("ParameterBase", "A base class for parameters.")]
-  public abstract class ParameterBase : NamedItemBase, IParameter {
-    public override bool CanChangeName {
-      get { return false; }
-    }
-    public override bool CanChangeDescription {
-      get { return false; }
-    }
-
-    [Storable]
-    private Type dataType;
-    public Type DataType {
-      get { return dataType; }
-    }
-
-    protected ParameterBase()
-      : base("Anonymous") {
-      dataType = typeof(IItem);
-    }
-    protected ParameterBase(string name, string description, Type dataType)
-      : base(name, description) {
-      if (dataType == null) throw new ArgumentNullException();
-      this.dataType = dataType;
-    }
-
-    public abstract IItem GetValue(ExecutionContext context);
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      ParameterBase clone = (ParameterBase)base.Clone(cloner);
-      clone.dataType = dataType;
-      return clone;
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Core/3.3/Scope.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/Scope.cs	(revision 2663)
+++ /trunk/sources/HeuristicLab.Core/3.3/Scope.cs	(revision 2664)
@@ -33,5 +33,5 @@
   [Item("Scope", "A scope which contains variables and sub-scopes.")]
   [Creatable("Test")]
-  public class Scope : NamedItemBase {
+  public class Scope : NamedItem {
     [Storable]
     private Scope parent;
Index: /trunk/sources/HeuristicLab.Core/3.3/Variable.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/Variable.cs	(revision 2663)
+++ /trunk/sources/HeuristicLab.Core/3.3/Variable.cs	(revision 2664)
@@ -33,5 +33,5 @@
   [Item("Variable", "A variable which has a name and holds an IItem.")]
   [Creatable("Test")]
-  public sealed class Variable : NamedItemBase {
+  public sealed class Variable : NamedItem {
     private IItem value;
     /// <inheritdoc/>
Index: /trunk/sources/HeuristicLab.Data.Views/3.3/IntDataView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data.Views/3.3/IntDataView.cs	(revision 2663)
+++ /trunk/sources/HeuristicLab.Data.Views/3.3/IntDataView.cs	(revision 2664)
@@ -35,5 +35,5 @@
   /// </summary>
   [Content(typeof(IntData), true)]
-  public partial class IntDataView : ItemViewBase {
+  public partial class IntDataView : ItemView {
     public IntData IntData {
       get { return (IntData)Item; }
Index: /trunk/sources/HeuristicLab.Data/3.3/ValueTypeData.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data/3.3/ValueTypeData.cs	(revision 2663)
+++ /trunk/sources/HeuristicLab.Data/3.3/ValueTypeData.cs	(revision 2664)
@@ -29,5 +29,5 @@
 namespace HeuristicLab.Data {
   [Item("ValueTypeData<T>", "A base class for representing value types.")]
-  public class ValueTypeData<T> : ItemBase where T : struct {
+  public class ValueTypeData<T> : Item where T : struct {
     [Storable]
     protected T value;
Index: /trunk/sources/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj	(revision 2663)
+++ /trunk/sources/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj	(revision 2664)
@@ -52,9 +52,9 @@
   <ItemGroup>
     <Compile Include="HeuristicLabOperatorsViewsPlugin.cs" />
-    <Compile Include="OperatorBaseView.cs">
+    <Compile Include="OperatorView.cs">
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Include="OperatorBaseView.Designer.cs">
-      <DependentUpon>OperatorBaseView.cs</DependentUpon>
+    <Compile Include="OperatorView.Designer.cs">
+      <DependentUpon>OperatorView.cs</DependentUpon>
     </Compile>
     <Compile Include="Properties\AssemblyInfo.cs" />
Index: unk/sources/HeuristicLab.Operators.Views/3.3/OperatorBaseView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views/3.3/OperatorBaseView.Designer.cs	(revision 2663)
+++ 	(revision )
@@ -1,96 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab.Operators.Views {
-  partial class OperatorBaseView {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing) {
-        if (components != null) components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.parameterCollectionView = new HeuristicLab.Core.Views.ParameterCollectionView();
-      this.SuspendLayout();
-      // 
-      // nameTextBox
-      // 
-      this.nameTextBox.Size = new System.Drawing.Size(418, 20);
-      // 
-      // descriptionTextBox
-      // 
-      this.descriptionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.descriptionTextBox.Size = new System.Drawing.Size(418, 90);
-      // 
-      // parameterCollectionView
-      // 
-      this.parameterCollectionView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.parameterCollectionView.Caption = "ParameterCollection";
-      this.parameterCollectionView.ItemCollection = null;
-      this.parameterCollectionView.Location = new System.Drawing.Point(0, 122);
-      this.parameterCollectionView.Name = "parameterCollectionView";
-      this.parameterCollectionView.NamedItemCollection = null;
-      this.parameterCollectionView.Size = new System.Drawing.Size(490, 231);
-      this.parameterCollectionView.TabIndex = 4;
-      // 
-      // OperatorBaseView
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.parameterCollectionView);
-      this.Name = "OperatorBaseView";
-      this.Size = new System.Drawing.Size(490, 353);
-      this.Controls.SetChildIndex(this.parameterCollectionView, 0);
-      this.Controls.SetChildIndex(this.nameLabel, 0);
-      this.Controls.SetChildIndex(this.descriptionLabel, 0);
-      this.Controls.SetChildIndex(this.nameTextBox, 0);
-      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    protected HeuristicLab.Core.Views.ParameterCollectionView parameterCollectionView;
-
-
-  }
-}
Index: unk/sources/HeuristicLab.Operators.Views/3.3/OperatorBaseView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views/3.3/OperatorBaseView.cs	(revision 2663)
+++ 	(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.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.Core;
-using HeuristicLab.Core.Views;
-using HeuristicLab.MainForm;
-
-namespace HeuristicLab.Operators.Views { 
-  /// <summary>
-  /// The base class for visual representations of items.
-  /// </summary>
-  [Content(typeof(OperatorBase), true)]
-  public partial class OperatorBaseView : NamedItemBaseView {
-    public OperatorBase OperatorBase {
-      get { return (OperatorBase)base.Item; }
-      set { base.Item = value; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="ItemBaseView"/>.
-    /// </summary>
-    public OperatorBaseView() {
-      InitializeComponent();
-    }
-    /// <summary>
-    /// Intializes a new instance of <see cref="ItemBaseView"/> with the given <paramref name="item"/>.
-    /// </summary>
-    /// <param name="item">The item that should be displayed.</param>
-    public OperatorBaseView(OperatorBase operatorBase)
-      : this() {
-      OperatorBase = operatorBase;
-    }
-
-    protected override void OnObjectChanged() {
-      base.OnObjectChanged();
-      if (OperatorBase == null) {
-        parameterCollectionView.NamedItemCollection = null;
-      } else {
-        parameterCollectionView.NamedItemCollection = ((IOperator)OperatorBase).Parameters;
-      }
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Operators.Views/3.3/OperatorView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views/3.3/OperatorView.Designer.cs	(revision 2664)
+++ /trunk/sources/HeuristicLab.Operators.Views/3.3/OperatorView.Designer.cs	(revision 2664)
@@ -0,0 +1,96 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Operators.Views {
+  partial class OperatorView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.parameterCollectionView = new HeuristicLab.Core.Views.ParameterCollectionView();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.nameTextBox.Size = new System.Drawing.Size(418, 20);
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.descriptionTextBox.Size = new System.Drawing.Size(418, 90);
+      // 
+      // parameterCollectionView
+      // 
+      this.parameterCollectionView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.parameterCollectionView.Caption = "ParameterCollection";
+      this.parameterCollectionView.ItemCollection = null;
+      this.parameterCollectionView.Location = new System.Drawing.Point(0, 122);
+      this.parameterCollectionView.Name = "parameterCollectionView";
+      this.parameterCollectionView.NamedItemCollection = null;
+      this.parameterCollectionView.Size = new System.Drawing.Size(490, 231);
+      this.parameterCollectionView.TabIndex = 4;
+      // 
+      // OperatorBaseView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.parameterCollectionView);
+      this.Name = "OperatorBaseView";
+      this.Size = new System.Drawing.Size(490, 353);
+      this.Controls.SetChildIndex(this.parameterCollectionView, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected HeuristicLab.Core.Views.ParameterCollectionView parameterCollectionView;
+
+
+  }
+}
Index: /trunk/sources/HeuristicLab.Operators.Views/3.3/OperatorView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators.Views/3.3/OperatorView.cs	(revision 2664)
+++ /trunk/sources/HeuristicLab.Operators.Views/3.3/OperatorView.cs	(revision 2664)
@@ -0,0 +1,68 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Operators.Views { 
+  /// <summary>
+  /// The base class for visual representations of items.
+  /// </summary>
+  [Content(typeof(Operator), true)]
+  public partial class OperatorView : NamedItemView {
+    public Operator OperatorBase {
+      get { return (Operator)base.Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ItemBaseView"/>.
+    /// </summary>
+    public OperatorView() {
+      InitializeComponent();
+    }
+    /// <summary>
+    /// Intializes a new instance of <see cref="ItemBaseView"/> with the given <paramref name="item"/>.
+    /// </summary>
+    /// <param name="item">The item that should be displayed.</param>
+    public OperatorView(Operator operatorBase)
+      : this() {
+      OperatorBase = operatorBase;
+    }
+
+    protected override void OnObjectChanged() {
+      base.OnObjectChanged();
+      if (OperatorBase == null) {
+        parameterCollectionView.NamedItemCollection = null;
+      } else {
+        parameterCollectionView.NamedItemCollection = ((IOperator)OperatorBase).Parameters;
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Operators/3.3/EmptyOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators/3.3/EmptyOperator.cs	(revision 2663)
+++ /trunk/sources/HeuristicLab.Operators/3.3/EmptyOperator.cs	(revision 2664)
@@ -34,5 +34,5 @@
   [Creatable("Test")]
   [EmptyStorableClass]
-  public sealed class EmptyOperator : StandardOperatorBase {
+  public sealed class EmptyOperator : StandardOperator {
     public EmptyOperator()
       : base() {
Index: /trunk/sources/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj	(revision 2663)
+++ /trunk/sources/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj	(revision 2664)
@@ -89,7 +89,7 @@
     </Compile>
     <Compile Include="HeuristicLabOperatorsPlugin.cs" />
-    <Compile Include="OperatorBase.cs" />
+    <Compile Include="Operator.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="StandardOperatorBase.cs" />
+    <Compile Include="StandardOperator.cs" />
   </ItemGroup>
   <ItemGroup>
Index: /trunk/sources/HeuristicLab.Operators/3.3/Operator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators/3.3/Operator.cs	(revision 2664)
+++ /trunk/sources/HeuristicLab.Operators/3.3/Operator.cs	(revision 2664)
@@ -0,0 +1,156 @@
+#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 System.Drawing;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Core;
+using HeuristicLab.Collections;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// The base class for all operators.
+  /// </summary>
+  [Item("Operator", "Base class for operators.")]
+  public abstract class Operator : NamedItem, IOperator {
+    public override Image ItemImage {
+      get { return HeuristicLab.Common.Resources.VS2008ImageLibrary.Method; }
+    }
+
+    private ParameterCollection parameters;
+    [Storable]
+    protected ParameterCollection Parameters {
+      get { return parameters;}
+      private set {
+        if (parameters != null) parameters.Changed -= new ChangedEventHandler(Parameters_Changed);
+        parameters = value;
+        readOnlyParameters = null;
+        if (parameters != null) parameters.Changed += new ChangedEventHandler(Parameters_Changed);
+      }
+    }
+    private ReadOnlyObservableKeyedCollection<string, IParameter> readOnlyParameters;
+    IObservableKeyedCollection<string, IParameter> IOperator.Parameters {
+      get {
+        if (readOnlyParameters == null) readOnlyParameters = parameters.AsReadOnly();
+        return readOnlyParameters;
+      }
+    }
+
+    /// <summary>
+    /// Flag whether the current instance has been canceled.
+    /// </summary>
+    private bool canceled;
+    /// <inheritdoc/>
+    protected bool Canceled {
+      get { return canceled; }
+    }
+
+    [Storable]
+    private bool breakpoint;
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="OnBreakpointChanged"/> in the setter.</remarks>
+    public bool Breakpoint {
+      get { return breakpoint; }
+      set {
+        if (value != breakpoint) {
+          breakpoint = value;
+          OnBreakpointChanged();
+        }
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="OperatorBase"/> setting the breakpoint flag and 
+    /// the canceled flag to <c>false</c> and the name of the operator to the type name. 
+    /// </summary>
+    protected Operator() {
+      name = ItemName;
+      Parameters = new ParameterCollection();
+      readOnlyParameters = null;
+      canceled = false;
+      breakpoint = false;
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <remarks>Clones also sub operators, variables and variable infos.</remarks>
+    /// <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 IDeepCloneable Clone(Cloner cloner) {
+      Operator clone = (Operator)base.Clone(cloner);
+      clone.Parameters = (ParameterCollection)cloner.Clone(parameters);
+      clone.canceled = canceled;
+      clone.breakpoint = breakpoint;
+      return clone;
+    }
+
+    /// <inheritdoc/>
+    public virtual ExecutionContextCollection Execute(ExecutionContext context) {
+      canceled = false;
+      ExecutionContextCollection next = Apply(context);
+      OnExecuted();
+      return next;
+    }
+    /// <inheritdoc/>
+    /// <remarks>Sets property <see cref="Canceled"/> to <c>true</c>.</remarks>
+    public virtual void Abort() {
+      canceled = true;
+    }
+    /// <summary>
+    /// Performs the current operator on the specified <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The scope where to execute the operator</param>
+    /// <returns><c>null</c>.</returns>
+    public virtual ExecutionContextCollection Apply(ExecutionContext context) {
+      return new ExecutionContextCollection();
+    }
+
+    /// <inheritdoc/>
+    public event EventHandler BreakpointChanged;
+    /// <summary>
+    /// Fires a new <c>BreakpointChanged</c> event.
+    /// </summary>
+    protected virtual void OnBreakpointChanged() {
+      if (BreakpointChanged != null) {
+        BreakpointChanged(this, new EventArgs());
+      }
+      OnChanged();
+    }
+    /// <inheritdoc/>
+    public event EventHandler Executed;
+    /// <summary>
+    /// Fires a new <c>Executed</c> event.
+    /// </summary>
+    protected virtual void OnExecuted() {
+      if (Executed != null) {
+        Executed(this, new EventArgs());
+      }
+    }
+
+    private void Parameters_Changed(object sender, ChangedEventArgs e) {
+      OnChanged(e);
+    }
+  }
+}
Index: unk/sources/HeuristicLab.Operators/3.3/OperatorBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators/3.3/OperatorBase.cs	(revision 2663)
+++ 	(revision )
@@ -1,156 +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 System.Drawing;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Core;
-using HeuristicLab.Collections;
-
-namespace HeuristicLab.Operators {
-  /// <summary>
-  /// The base class for all operators.
-  /// </summary>
-  [Item("OperatorBase", "Base class for operators.")]
-  public abstract class OperatorBase : NamedItemBase, IOperator {
-    public override Image ItemImage {
-      get { return HeuristicLab.Common.Resources.VS2008ImageLibrary.Method; }
-    }
-
-    private ParameterCollection parameters;
-    [Storable]
-    protected ParameterCollection Parameters {
-      get { return parameters;}
-      private set {
-        if (parameters != null) parameters.Changed -= new ChangedEventHandler(Parameters_Changed);
-        parameters = value;
-        readOnlyParameters = null;
-        if (parameters != null) parameters.Changed += new ChangedEventHandler(Parameters_Changed);
-      }
-    }
-    private ReadOnlyObservableKeyedCollection<string, IParameter> readOnlyParameters;
-    IObservableKeyedCollection<string, IParameter> IOperator.Parameters {
-      get {
-        if (readOnlyParameters == null) readOnlyParameters = parameters.AsReadOnly();
-        return readOnlyParameters;
-      }
-    }
-
-    /// <summary>
-    /// Flag whether the current instance has been canceled.
-    /// </summary>
-    private bool canceled;
-    /// <inheritdoc/>
-    protected bool Canceled {
-      get { return canceled; }
-    }
-
-    [Storable]
-    private bool breakpoint;
-    /// <inheritdoc/>
-    /// <remarks>Calls <see cref="OnBreakpointChanged"/> in the setter.</remarks>
-    public bool Breakpoint {
-      get { return breakpoint; }
-      set {
-        if (value != breakpoint) {
-          breakpoint = value;
-          OnBreakpointChanged();
-        }
-      }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="OperatorBase"/> setting the breakpoint flag and 
-    /// the canceled flag to <c>false</c> and the name of the operator to the type name. 
-    /// </summary>
-    protected OperatorBase() {
-      name = ItemName;
-      Parameters = new ParameterCollection();
-      readOnlyParameters = null;
-      canceled = false;
-      breakpoint = false;
-    }
-
-    /// <summary>
-    /// Clones the current instance (deep clone).
-    /// </summary>
-    /// <remarks>Clones also sub operators, variables and variable infos.</remarks>
-    /// <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 IDeepCloneable Clone(Cloner cloner) {
-      OperatorBase clone = (OperatorBase)base.Clone(cloner);
-      clone.Parameters = (ParameterCollection)cloner.Clone(parameters);
-      clone.canceled = canceled;
-      clone.breakpoint = breakpoint;
-      return clone;
-    }
-
-    /// <inheritdoc/>
-    public virtual ExecutionContextCollection Execute(ExecutionContext context) {
-      canceled = false;
-      ExecutionContextCollection next = Apply(context);
-      OnExecuted();
-      return next;
-    }
-    /// <inheritdoc/>
-    /// <remarks>Sets property <see cref="Canceled"/> to <c>true</c>.</remarks>
-    public virtual void Abort() {
-      canceled = true;
-    }
-    /// <summary>
-    /// Performs the current operator on the specified <paramref name="scope"/>.
-    /// </summary>
-    /// <param name="scope">The scope where to execute the operator</param>
-    /// <returns><c>null</c>.</returns>
-    public virtual ExecutionContextCollection Apply(ExecutionContext context) {
-      return new ExecutionContextCollection();
-    }
-
-    /// <inheritdoc/>
-    public event EventHandler BreakpointChanged;
-    /// <summary>
-    /// Fires a new <c>BreakpointChanged</c> event.
-    /// </summary>
-    protected virtual void OnBreakpointChanged() {
-      if (BreakpointChanged != null) {
-        BreakpointChanged(this, new EventArgs());
-      }
-      OnChanged();
-    }
-    /// <inheritdoc/>
-    public event EventHandler Executed;
-    /// <summary>
-    /// Fires a new <c>Executed</c> event.
-    /// </summary>
-    protected virtual void OnExecuted() {
-      if (Executed != null) {
-        Executed(this, new EventArgs());
-      }
-    }
-
-    private void Parameters_Changed(object sender, ChangedEventArgs e) {
-      OnChanged(e);
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Operators/3.3/StandardOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators/3.3/StandardOperator.cs	(revision 2664)
+++ /trunk/sources/HeuristicLab.Operators/3.3/StandardOperator.cs	(revision 2664)
@@ -0,0 +1,54 @@
+#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;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// A base class for operators which have only one successor.
+  /// </summary>
+  [Item("Standard Operator", "A base class for operators which have only one successor.")]
+  [Creatable("Test")]
+  [EmptyStorableClass]
+  public abstract class StandardOperator : Operator {
+    public OperatorParameter Successor {
+      get { return (OperatorParameter)Parameters["Successor"]; }
+    }
+
+    public StandardOperator()
+      : base() {
+      Parameters.Add(new OperatorParameter("Successor", "Operator which is executed next"));
+    }
+
+    public override ExecutionContextCollection Apply(ExecutionContext context) {
+      IOperator successor = Successor.GetValue(context);
+      if (successor != null)
+        return new ExecutionContextCollection(new ExecutionContext(context.Parent, successor, context.Scope));
+      else
+        return new ExecutionContextCollection();
+    }
+  }
+}
Index: unk/sources/HeuristicLab.Operators/3.3/StandardOperatorBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators/3.3/StandardOperatorBase.cs	(revision 2663)
+++ 	(revision )
@@ -1,54 +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;
-using HeuristicLab.Core;
-
-namespace HeuristicLab.Operators {
-  /// <summary>
-  /// A base class for operators which have only one successor.
-  /// </summary>
-  [Item("StandardOperatorBase", "A base class for operators which have only one successor.")]
-  [Creatable("Test")]
-  [EmptyStorableClass]
-  public abstract class StandardOperatorBase : OperatorBase {
-    public OperatorParameter Successor {
-      get { return (OperatorParameter)Parameters["Successor"]; }
-    }
-
-    public StandardOperatorBase()
-      : base() {
-      Parameters.Add(new OperatorParameter("Successor", "Operator which is executed next"));
-    }
-
-    public override ExecutionContextCollection Apply(ExecutionContext context) {
-      IOperator successor = Successor.GetValue(context);
-      if (successor != null)
-        return new ExecutionContextCollection(new ExecutionContext(context.Parent, successor, context.Scope));
-      else
-        return new ExecutionContextCollection();
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.SequentialEngine/3.3/SequentialEngine.cs
===================================================================
--- /trunk/sources/HeuristicLab.SequentialEngine/3.3/SequentialEngine.cs	(revision 2663)
+++ /trunk/sources/HeuristicLab.SequentialEngine/3.3/SequentialEngine.cs	(revision 2664)
@@ -34,5 +34,5 @@
   [Creatable("Engines")]
   [Item("Sequential Engine", "Engine for sequential execution of algorithms.")]
-  public class SequentialEngine : EngineBase {
+  public class SequentialEngine : Engine {
     private IOperator currentOperator;
 
