Index: /trunk/sources/HeuristicLab.Core.Views/3.3/Clipboard.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/Clipboard.cs	(revision 3340)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/Clipboard.cs	(revision 3341)
@@ -90,13 +90,12 @@
       else {
         if (!itemListViewItemTable.ContainsKey(item)) {
-          if (!listView.SmallImageList.Images.ContainsKey(item.GetType().FullName))
-            listView.SmallImageList.Images.Add(item.GetType().FullName, item.ItemImage);
-
           ListViewItem listViewItem = new ListViewItem(item.ToString());
           listViewItem.ToolTipText = item.ItemName + ": " + item.ItemDescription;
-          listViewItem.ImageIndex = listView.SmallImageList.Images.IndexOfKey(item.GetType().FullName);
+          listView.SmallImageList.Images.Add(item.ItemImage);
+          listViewItem.ImageIndex = listView.SmallImageList.Images.Count - 1;
           listViewItem.Tag = item;
           listView.Items.Add(listViewItem);
           itemListViewItemTable.Add(item, listViewItem);
+          item.ItemImageChanged += new EventHandler(Item_ItemImageChanged);
           item.ToStringChanged += new EventHandler(Item_ToStringChanged);
           sortAscendingButton.Enabled = sortDescendingButton.Enabled = listView.Items.Count > 1;
@@ -105,4 +104,5 @@
       }
     }
+
     private void RemoveItem(T item) {
       if (InvokeRequired)
@@ -110,6 +110,11 @@
       else {
         if (itemListViewItemTable.ContainsKey(item)) {
+          item.ItemImageChanged -= new EventHandler(Item_ItemImageChanged);
           item.ToStringChanged -= new EventHandler(Item_ToStringChanged);
-          itemListViewItemTable[item].Remove();
+          ListViewItem listViewItem = itemListViewItemTable[item];
+          listViewItem.Remove();
+          foreach (ListViewItem other in listView.Items)
+            if (other.ImageIndex > listViewItem.ImageIndex) other.ImageIndex--;
+          listView.SmallImageList.Images.RemoveAt(listViewItem.ImageIndex);
           itemListViewItemTable.Remove(item);
           sortAscendingButton.Enabled = sortDescendingButton.Enabled = listView.Items.Count > 1;
@@ -282,4 +287,16 @@
 
     #region Item Events
+    private void Item_ItemImageChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Item_ItemImageChanged), sender, e);
+      else {
+        T item = (T)sender;
+        ListViewItem listViewItem = itemListViewItemTable[item];
+        int i = listViewItem.ImageIndex;
+        listViewItem.ImageList.Images[i] = item.ItemImage;
+        listViewItem.ImageIndex = -1;
+        listViewItem.ImageIndex = i;
+      }
+    }
     private void Item_ToStringChanged(object sender, EventArgs e) {
       if (InvokeRequired)
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemArrayView.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemArrayView.Designer.cs	(revision 3340)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemArrayView.Designer.cs	(revision 3341)
@@ -63,4 +63,6 @@
       this.itemsGroupBox = new System.Windows.Forms.GroupBox();
       this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.removeButton = new System.Windows.Forms.Button();
+      this.addButton = new System.Windows.Forms.Button();
       this.splitContainer.Panel1.SuspendLayout();
       this.splitContainer.Panel2.SuspendLayout();
@@ -79,5 +81,7 @@
       // splitContainer.Panel1
       // 
+      this.splitContainer.Panel1.Controls.Add(this.addButton);
       this.splitContainer.Panel1.Controls.Add(this.moveUpButton);
+      this.splitContainer.Panel1.Controls.Add(this.removeButton);
       this.splitContainer.Panel1.Controls.Add(this.moveDownButton);
       this.splitContainer.Panel1.Controls.Add(this.itemsListView);
@@ -94,8 +98,8 @@
       this.moveUpButton.Enabled = false;
       this.moveUpButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.ArrowUp;
-      this.moveUpButton.Location = new System.Drawing.Point(3, 3);
+      this.moveUpButton.Location = new System.Drawing.Point(33, 3);
       this.moveUpButton.Name = "moveUpButton";
       this.moveUpButton.Size = new System.Drawing.Size(24, 24);
-      this.moveUpButton.TabIndex = 0;
+      this.moveUpButton.TabIndex = 1;
       this.toolTip.SetToolTip(this.moveUpButton, "Move Up");
       this.moveUpButton.UseVisualStyleBackColor = true;
@@ -106,8 +110,8 @@
       this.moveDownButton.Enabled = false;
       this.moveDownButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.ArrowDown;
-      this.moveDownButton.Location = new System.Drawing.Point(33, 3);
+      this.moveDownButton.Location = new System.Drawing.Point(63, 3);
       this.moveDownButton.Name = "moveDownButton";
       this.moveDownButton.Size = new System.Drawing.Size(24, 24);
-      this.moveDownButton.TabIndex = 1;
+      this.moveDownButton.TabIndex = 2;
       this.toolTip.SetToolTip(this.moveDownButton, "Move Down");
       this.moveDownButton.UseVisualStyleBackColor = true;
@@ -129,5 +133,5 @@
       this.itemsListView.Size = new System.Drawing.Size(194, 286);
       this.itemsListView.SmallImageList = this.imageList;
-      this.itemsListView.TabIndex = 2;
+      this.itemsListView.TabIndex = 4;
       this.itemsListView.UseCompatibleStateImageBehavior = false;
       this.itemsListView.View = System.Windows.Forms.View.Details;
@@ -170,4 +174,5 @@
       this.viewHost.Size = new System.Drawing.Size(271, 269);
       this.viewHost.TabIndex = 0;
+      this.viewHost.ViewType = null;
       // 
       // itemsGroupBox
@@ -181,4 +186,28 @@
       this.itemsGroupBox.TabStop = false;
       this.itemsGroupBox.Text = "Items";
+      // 
+      // removeButton
+      // 
+      this.removeButton.Enabled = false;
+      this.removeButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Remove;
+      this.removeButton.Location = new System.Drawing.Point(93, 3);
+      this.removeButton.Name = "removeButton";
+      this.removeButton.Size = new System.Drawing.Size(24, 24);
+      this.removeButton.TabIndex = 3;
+      this.toolTip.SetToolTip(this.removeButton, "Clear");
+      this.removeButton.UseVisualStyleBackColor = true;
+      this.removeButton.Click += new System.EventHandler(this.removeButton_Click);
+      // 
+      // addButton
+      // 
+      this.addButton.Enabled = false;
+      this.addButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Add;
+      this.addButton.Location = new System.Drawing.Point(3, 3);
+      this.addButton.Name = "addButton";
+      this.addButton.Size = new System.Drawing.Size(24, 24);
+      this.addButton.TabIndex = 0;
+      this.toolTip.SetToolTip(this.addButton, "Set");
+      this.addButton.UseVisualStyleBackColor = true;
+      this.addButton.Click += new System.EventHandler(this.addButton_Click);
       // 
       // ItemArrayView
@@ -209,4 +238,6 @@
     protected ImageList imageList;
     protected HeuristicLab.MainForm.WindowsForms.ViewHost viewHost;
+    protected Button removeButton;
+    protected Button addButton;
   }
 }
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemArrayView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemArrayView.cs	(revision 3340)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemArrayView.cs	(revision 3341)
@@ -112,44 +112,51 @@
     }
     protected virtual ListViewItem CreateListViewItem(T item) {
-      if (item == null) {
-        return new ListViewItem("null");
-      } else {
-        if (!itemsListView.SmallImageList.Images.ContainsKey(item.GetType().FullName))
-          itemsListView.SmallImageList.Images.Add(item.GetType().FullName, item.ItemImage);
-
-        ListViewItem listViewItem = new ListViewItem();
-        listViewItem.Text = item.ToString();
-        listViewItem.ToolTipText = item.ItemName + ": " + item.ItemDescription;
-        listViewItem.ImageIndex = itemsListView.SmallImageList.Images.IndexOfKey(item.GetType().FullName);
-        listViewItem.Tag = item;
-        return listViewItem;
-      }
+      ListViewItem listViewItem = new ListViewItem();
+      listViewItem.Text = item == null ? "null" : item.ToString();
+      listViewItem.ToolTipText = item == null ? string.Empty : item.ItemName + ": " + item.ItemDescription;
+      itemsListView.SmallImageList.Images.Add(item == null ? HeuristicLab.Common.Resources.VS2008ImageLibrary.Nothing : item.ItemImage);
+      listViewItem.ImageIndex = itemsListView.SmallImageList.Images.Count - 1;
+      listViewItem.Tag = item;
+      return listViewItem;
     }
     protected virtual void AddListViewItem(ListViewItem listViewItem) {
       itemsListView.Items.Add(listViewItem);
-      if (listViewItem.Tag != null)
+      if (listViewItem.Tag != null) {
+        ((T)listViewItem.Tag).ItemImageChanged += new EventHandler(Item_ItemImageChanged);
         ((T)listViewItem.Tag).ToStringChanged += new EventHandler(Item_ToStringChanged);
+      }
     }
     protected virtual void InsertListViewItem(int index, ListViewItem listViewItem) {
       itemsListView.Items.Insert(index, listViewItem);
-      if (listViewItem.Tag != null)
+      if (listViewItem.Tag != null) {
+        ((T)listViewItem.Tag).ItemImageChanged += new EventHandler(Item_ItemImageChanged);
         ((T)listViewItem.Tag).ToStringChanged += new EventHandler(Item_ToStringChanged);
+      }
     }
     protected virtual void RemoveListViewItem(ListViewItem listViewItem) {
-      if (listViewItem.Tag != null)
+      if (listViewItem.Tag != null) {
+        ((T)listViewItem.Tag).ItemImageChanged -= new EventHandler(Item_ItemImageChanged);
         ((T)listViewItem.Tag).ToStringChanged -= new EventHandler(Item_ToStringChanged);
+      }
       listViewItem.Remove();
-    }
-    protected virtual void UpdateListViewItem(ListViewItem listViewItem) {
+      foreach (ListViewItem other in itemsListView.Items)
+        if (other.ImageIndex > listViewItem.ImageIndex) other.ImageIndex--;
+      itemsListView.SmallImageList.Images.RemoveAt(listViewItem.ImageIndex);
+    }
+    protected virtual void UpdateListViewItemImage(ListViewItem listViewItem) {
       T item = listViewItem.Tag as T;
-      if ((item != null) && (!itemsListView.SmallImageList.Images.ContainsKey(item.GetType().FullName)))
-        itemsListView.SmallImageList.Images.Add(item.GetType().FullName, item.ItemImage);
-
+      int i = listViewItem.ImageIndex;
+      listViewItem.ImageList.Images[i] = item == null ? HeuristicLab.Common.Resources.VS2008ImageLibrary.Nothing : item.ItemImage;
+      listViewItem.ImageIndex = -1;
+      listViewItem.ImageIndex = i;
+    }
+    protected virtual void UpdateListViewItemText(ListViewItem listViewItem) {
+      T item = listViewItem.Tag as T;
       listViewItem.Text = item == null ? "null" : item.ToString();
       listViewItem.ToolTipText = item == null ? string.Empty : item.ItemName + ": " + item.ItemDescription;
-      listViewItem.ImageIndex = item == null ? -1 : itemsListView.SmallImageList.Images.IndexOfKey(item.GetType().FullName);
     }
 
     protected virtual void itemsListView_SelectedIndexChanged(object sender, EventArgs e) {
+      addButton.Enabled = itemsListView.SelectedItems.Count > 0 && !Content.IsReadOnly;
       moveUpButton.Enabled = itemsListView.SelectedItems.Count == 1 &&
                              itemsListView.SelectedIndices[0] != 0 &&
@@ -158,4 +165,5 @@
                                itemsListView.SelectedIndices[0] != itemsListView.Items.Count - 1 &&
                                !Content.IsReadOnly;
+      removeButton.Enabled = itemsListView.SelectedItems.Count > 0 && !Content.IsReadOnly;
 
       if (itemsListView.SelectedItems.Count == 1) {
@@ -239,4 +247,13 @@
 
     #region Button Events
+    protected virtual void addButton_Click(object sender, EventArgs e) {
+      if (itemsListView.SelectedItems.Count > 0) {
+        T item = CreateItem();
+        if (item != null) {
+          foreach (ListViewItem listViewItem in itemsListView.SelectedItems)
+            Content[listViewItem.Index] = item;
+        }
+      }
+    }
     protected virtual void moveUpButton_Click(object sender, EventArgs e) {
       if (itemsListView.SelectedItems.Count == 1) {
@@ -259,4 +276,10 @@
       }
     }
+    protected virtual void removeButton_Click(object sender, EventArgs e) {
+      if (itemsListView.SelectedItems.Count > 0) {
+        foreach (ListViewItem item in itemsListView.SelectedItems)
+          Content[item.Index] = null;
+      }
+    }
     #endregion
 
@@ -289,5 +312,6 @@
           ListViewItem listViewItem = itemsListView.Items[item.Index];
           listViewItem.Tag = item.Value;
-          UpdateListViewItem(listViewItem);
+          UpdateListViewItemImage(listViewItem);
+          UpdateListViewItemText(listViewItem);
         }
       }
@@ -310,12 +334,23 @@
 
     #region Item Events
-    protected virtual void Item_ToStringChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Item_ToStringChanged), sender, e);
+    protected virtual void Item_ItemImageChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Item_ItemImageChanged), sender, e);
       else {
         T item = (T)sender;
         foreach (ListViewItem listViewItem in itemsListView.Items) {
           if (((T)listViewItem.Tag) == item)
-            UpdateListViewItem(listViewItem);
+            UpdateListViewItemImage(listViewItem);
+        }
+      }
+    }
+    protected virtual void Item_ToStringChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Item_ToStringChanged), sender, e);
+      else {
+        T item = (T)sender;
+        foreach (ListViewItem listViewItem in itemsListView.Items) {
+          if (((T)listViewItem.Tag) == item)
+            UpdateListViewItemText(listViewItem);
         }
       }
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemCollectionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemCollectionView.cs	(revision 3340)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemCollectionView.cs	(revision 3341)
@@ -117,4 +117,7 @@
       ((T)listViewItem.Tag).ToStringChanged -= new EventHandler(Item_ToStringChanged);
       listViewItem.Remove();
+      foreach (ListViewItem other in itemsListView.Items)
+        if (other.ImageIndex > listViewItem.ImageIndex) other.ImageIndex--;
+      itemsListView.SmallImageList.Images.RemoveAt(listViewItem.ImageIndex);
       sortAscendingButton.Enabled = itemsListView.Items.Count > 0;
       sortDescendingButton.Enabled = itemsListView.Items.Count > 0;
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/ItemListView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/ItemListView.cs	(revision 3340)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/ItemListView.cs	(revision 3341)
@@ -141,4 +141,7 @@
       ((T)listViewItem.Tag).ToStringChanged -= new EventHandler(Item_ToStringChanged);
       listViewItem.Remove();
+      foreach (ListViewItem other in itemsListView.Items)
+        if (other.ImageIndex > listViewItem.ImageIndex) other.ImageIndex--;
+      itemsListView.SmallImageList.Images.RemoveAt(listViewItem.ImageIndex);
     }
     protected virtual void UpdateListViewItemImage(ListViewItem listViewItem) {
Index: /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorTreeView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorTreeView.cs	(revision 3340)
+++ /trunk/sources/HeuristicLab.Core.Views/3.3/OperatorTreeView.cs	(revision 3341)
@@ -124,19 +124,15 @@
     private void FillTreeNode(TreeNode node, IOperator op) {
       if (op == null) {
-        if (!graphTreeView.ImageList.Images.ContainsKey("Default"))
-          graphTreeView.ImageList.Images.Add("Default", HeuristicLab.Common.Resources.VS2008ImageLibrary.Method);
-
         node.Text += "-";
         node.ToolTipText = "";
-        node.ImageIndex = graphTreeView.ImageList.Images.IndexOfKey("Default"); ;
+        graphTreeView.ImageList.Images.Add(HeuristicLab.Common.Resources.VS2008ImageLibrary.Nothing);
+        node.ImageIndex = graphTreeView.ImageList.Images.Count - 1;
         node.SelectedImageIndex = node.ImageIndex;
         node.ForeColor = graphTreeView.ForeColor;
       } else {
-        if (!graphTreeView.ImageList.Images.ContainsKey(op.GetType().FullName))
-          graphTreeView.ImageList.Images.Add(op.GetType().FullName, op.ItemImage);
-
         node.Text += op.Name;
         node.ToolTipText = op.ItemName + ": " + op.ItemDescription;
-        node.ImageIndex = graphTreeView.ImageList.Images.IndexOfKey(op.GetType().FullName);
+        graphTreeView.ImageList.Images.Add(op.ItemImage);
+        node.ImageIndex = graphTreeView.ImageList.Images.Count - 1;
         node.SelectedImageIndex = node.ImageIndex;
         SetOperatorTag(node, op);
@@ -144,4 +140,5 @@
         if (!operatorNodeTable.ContainsKey(op)) {
           operatorNodeTable.Add(op, new List<TreeNode>());
+          op.ItemImageChanged += new EventHandler(op_ItemImageChanged);
           op.NameChanged += new EventHandler(op_NameChanged);
           op.BreakpointChanged += new EventHandler(op_BreakpointChanged);
@@ -168,8 +165,15 @@
         RemoveTreeNode(node.Nodes[0]);
 
+      if (node.ImageIndex != -1) {
+        int i = node.ImageIndex;
+        CorrectImageIndexes(graphTreeView.Nodes, i);
+        graphTreeView.ImageList.Images.RemoveAt(i);
+      }
+
       IOperator op = GetOperatorTag(node);
       if (op != null) {
         operatorNodeTable[op].Remove(node);
         if (operatorNodeTable[op].Count == 0) {
+          op.ItemImageChanged -= new EventHandler(op_ItemImageChanged);
           op.NameChanged -= new EventHandler(op_NameChanged);
           op.BreakpointChanged -= new EventHandler(op_BreakpointChanged);
@@ -229,4 +233,19 @@
           node.Text = opParam.Name + ": ";
           FillTreeNode(node, opParam.Value);
+        }
+      }
+    }
+    void op_ItemImageChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(op_ItemImageChanged), sender, e);
+      else {
+        IOperator op = (IOperator)sender;
+        foreach (TreeNode node in operatorNodeTable[op]) {
+          int i = node.ImageIndex;
+          graphTreeView.ImageList.Images[i] = op.ItemImage;
+          node.ImageIndex = -1;
+          node.SelectedImageIndex = -1;
+          node.ImageIndex = i;
+          node.SelectedImageIndex = i;
         }
       }
@@ -433,4 +452,14 @@
         ((Tuple<IValueParameter<IOperator>, IOperator>)node.Tag).Item2 = op;
     }
+
+    private void CorrectImageIndexes(TreeNodeCollection nodes, int removedIndex) {
+      foreach (TreeNode node in nodes) {
+        if (node.ImageIndex > removedIndex) {
+          node.ImageIndex--;
+          node.SelectedImageIndex--;
+        }
+        CorrectImageIndexes(node.Nodes, removedIndex);
+      }
+    }
     #endregion
   }
Index: /trunk/sources/HeuristicLab.Core/3.3/Variable.cs
===================================================================
--- /trunk/sources/HeuristicLab.Core/3.3/Variable.cs	(revision 3340)
+++ /trunk/sources/HeuristicLab.Core/3.3/Variable.cs	(revision 3341)
@@ -21,4 +21,5 @@
 
 using System;
+using System.Drawing;
 using HeuristicLab.Common;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
@@ -31,4 +32,11 @@
   [StorableClass]
   public sealed class Variable : NamedItem, IVariable {
+    public override Image ItemImage {
+      get {
+        if (value != null) return value.ItemImage;
+        else return base.ItemImage;
+      }
+    }
+
     [Storable]
     private IItem value;
@@ -39,7 +47,7 @@
       set {
         if (this.value != value) {
-          if (this.value != null) this.value.ToStringChanged -= new EventHandler(Value_ToStringChanged);
+          DeregisterValueEvents();
           this.value = value;
-          if (this.value != null) this.value.ToStringChanged += new EventHandler(Value_ToStringChanged);
+          RegisterValueEvents();
           OnValueChanged();
         }
@@ -84,5 +92,5 @@
     [StorableHook(HookType.AfterDeserialization)]
     private void Initialize() {
-      if (value != null) value.ToStringChanged += new EventHandler(Value_ToStringChanged);
+      RegisterValueEvents();
     }
 
@@ -120,7 +128,23 @@
       if (ValueChanged != null)
         ValueChanged(this, EventArgs.Empty);
+      OnItemImageChanged();
       OnToStringChanged();
     }
 
+    private void RegisterValueEvents() {
+      if (value != null) {
+        value.ItemImageChanged += new EventHandler(Value_ItemImageChanged);
+        value.ToStringChanged += new EventHandler(Value_ToStringChanged);
+      }
+    }
+    private void DeregisterValueEvents() {
+      if (value != null) {
+        value.ItemImageChanged -= new EventHandler(Value_ItemImageChanged);
+        value.ToStringChanged -= new EventHandler(Value_ToStringChanged);
+      }
+    }
+    private void Value_ItemImageChanged(object sender, EventArgs e) {
+      OnItemImageChanged();
+    }
     private void Value_ToStringChanged(object sender, EventArgs e) {
       OnToStringChanged();
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionView.cs	(revision 3340)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/RunCollectionView.cs	(revision 3341)
@@ -83,11 +83,9 @@
 
     protected virtual ListViewItem CreateListViewItem(IRun item) {
-      if (!itemsListView.SmallImageList.Images.ContainsKey(item.GetType().FullName))
-        itemsListView.SmallImageList.Images.Add(item.GetType().FullName, item.ItemImage);
-
       ListViewItem listViewItem = new ListViewItem();
       listViewItem.Text = item.ToString();
       listViewItem.ToolTipText = item.ItemName + ": " + item.ItemDescription;
-      listViewItem.ImageIndex = itemsListView.SmallImageList.Images.IndexOfKey(item.GetType().FullName);
+      itemsListView.SmallImageList.Images.Add(item.ItemImage);
+      listViewItem.ImageIndex = itemsListView.SmallImageList.Images.Count - 1;
       listViewItem.Tag = item;
       return listViewItem;
@@ -95,14 +93,24 @@
     protected virtual void AddListViewItem(ListViewItem listViewItem) {
       itemsListView.Items.Add(listViewItem);
+      ((IRun)listViewItem.Tag).ItemImageChanged += new EventHandler(Item_ItemImageChanged);
       ((IRun)listViewItem.Tag).ToStringChanged += new EventHandler(Item_ToStringChanged);
     }
     protected virtual void RemoveListViewItem(ListViewItem listViewItem) {
+      ((IRun)listViewItem.Tag).ItemImageChanged -= new EventHandler(Item_ItemImageChanged);
       ((IRun)listViewItem.Tag).ToStringChanged -= new EventHandler(Item_ToStringChanged);
       listViewItem.Remove();
-    }
-    protected virtual void UpdateListViewItem(ListViewItem listViewItem) {
-      if (!listViewItem.Text.Equals(listViewItem.Tag.ToString())) {
+      foreach (ListViewItem other in itemsListView.Items)
+        if (other.ImageIndex > listViewItem.ImageIndex) other.ImageIndex--;
+      itemsListView.SmallImageList.Images.RemoveAt(listViewItem.ImageIndex);
+    }
+    protected virtual void UpdateListViewItemImage(ListViewItem listViewItem) {
+      int i = listViewItem.ImageIndex;
+      listViewItem.ImageList.Images[i] = ((IRun)listViewItem.Tag).ItemImage;
+      listViewItem.ImageIndex = -1;
+      listViewItem.ImageIndex = i;
+    }
+    protected virtual void UpdateListViewItemText(ListViewItem listViewItem) {
+      if (!listViewItem.Text.Equals(listViewItem.Tag.ToString()))
         listViewItem.Text = listViewItem.Tag.ToString();
-      }
     }
     protected virtual IEnumerable<ListViewItem> GetListViewItemsForItem(IRun item) {
@@ -226,11 +234,20 @@
 
     #region Item Events
-    protected virtual void Item_ToStringChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Item_ToStringChanged), sender, e);
+    protected virtual void Item_ItemImageChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Item_ItemImageChanged), sender, e);
       else {
         IRun item = (IRun)sender;
         foreach (ListViewItem listViewItem in GetListViewItemsForItem(item))
-          UpdateListViewItem(listViewItem);
+          UpdateListViewItemImage(listViewItem);
+      }
+    }
+    protected virtual void Item_ToStringChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Item_ToStringChanged), sender, e);
+      else {
+        IRun item = (IRun)sender;
+        foreach (ListViewItem listViewItem in GetListViewItemsForItem(item))
+          UpdateListViewItemText(listViewItem);
       }
     }
Index: /trunk/sources/HeuristicLab.Optimization.Views/3.3/RunView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization.Views/3.3/RunView.cs	(revision 3340)
+++ /trunk/sources/HeuristicLab.Optimization.Views/3.3/RunView.cs	(revision 3341)
@@ -75,31 +75,11 @@
 
     private void FillListView() {
-      if (!listView.SmallImageList.Images.ContainsKey("Default"))
-        listView.SmallImageList.Images.Add("Default", HeuristicLab.Common.Resources.VS2008ImageLibrary.Nothing);
-
       listView.Items.Clear();
+      listView.SmallImageList.Images.Clear();
       if (Content != null) {
-        foreach (string key in Content.Parameters.Keys) {
-          IItem value = Content.Parameters[key];
-          if ((value != null) && (!listView.SmallImageList.Images.ContainsKey(value.GetType().FullName)))
-            listView.SmallImageList.Images.Add(value.GetType().FullName, value.ItemImage);
-
-          ListViewItem item = new ListViewItem(new string[] { key, value != null ? value.ToString() : "-" });
-          item.Tag = value;
-          item.Group = listView.Groups["parametersGroup"];
-          item.ImageIndex = listView.SmallImageList.Images.IndexOfKey(value != null ? value.GetType().FullName : "Default");
-          listView.Items.Add(item);
-        }
-        foreach (string key in Content.Results.Keys) {
-          IItem value = Content.Results[key];
-          if ((value != null) && (!listView.SmallImageList.Images.ContainsKey(value.GetType().FullName)))
-            listView.SmallImageList.Images.Add(value.GetType().FullName, value.ItemImage);
-
-          ListViewItem item = new ListViewItem(new string[] { key, value != null ? value.ToString() : "-" });
-          item.Tag = value;
-          item.Group = listView.Groups["resultsGroup"];
-          item.ImageIndex = listView.SmallImageList.Images.IndexOfKey(value != null ? value.GetType().FullName : "Default");
-          listView.Items.Add(item);
-        }
+        foreach (string key in Content.Parameters.Keys)
+          CreateListViewItem(key, Content.Parameters[key], listView.Groups["parametersGroup"]);
+        foreach (string key in Content.Results.Keys)
+          CreateListViewItem(key, Content.Results[key], listView.Groups["resultsGroup"]);
         if (listView.Items.Count > 0) {
           for (int i = 0; i < listView.Columns.Count; i++)
@@ -107,4 +87,13 @@
         }
       }
+    }
+
+    private void CreateListViewItem(string name, IItem value, ListViewGroup group) {
+      ListViewItem item = new ListViewItem(new string[] { name, value != null ? value.ToString() : "-" });
+      item.Tag = value;
+      item.Group = group;
+      listView.SmallImageList.Images.Add(value == null ? HeuristicLab.Common.Resources.VS2008ImageLibrary.Nothing : value.ItemImage);
+      item.ImageIndex = listView.SmallImageList.Images.Count - 1;
+      listView.Items.Add(item);
     }
 
@@ -130,8 +119,8 @@
       data.SetData("Type", item.GetType());
       data.SetData("Value", item);
-      DragDropEffects result = DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link);
+      DragDropEffects result = DoDragDrop(data, DragDropEffects.Copy);
     }
     private void showAlgorithmButton_Click(object sender, EventArgs e) {
-      MainFormManager.CreateDefaultView(Content.Algorithm).Show();
+      MainFormManager.CreateDefaultView(Content.Algorithm.Clone()).Show();
     }
   }
Index: /trunk/sources/HeuristicLab.Optimization/3.3/Result.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimization/3.3/Result.cs	(revision 3340)
+++ /trunk/sources/HeuristicLab.Optimization/3.3/Result.cs	(revision 3341)
@@ -21,4 +21,5 @@
 
 using System;
+using System.Drawing;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -32,4 +33,11 @@
   [StorableClass]
   public sealed class Result : NamedItem, IResult {
+    public override Image ItemImage {
+      get {
+        if (value != null) return value.ItemImage;
+        else return base.ItemImage;
+      }
+    }
+
     public override bool CanChangeName {
       get { return false; }
@@ -57,7 +65,7 @@
             );
 
-          if (this.value != null) this.value.ToStringChanged -= new EventHandler(Value_ToStringChanged);
+          DeregisterValueEvents();
           this.value = value;
-          if (this.value != null) this.value.ToStringChanged += new EventHandler(Value_ToStringChanged);
+          RegisterValueEvents();
           OnValueChanged();
         }
@@ -97,5 +105,5 @@
     [StorableHook(HookType.AfterDeserialization)]
     private void Initialize() {
-      if (value != null) value.ToStringChanged += new EventHandler(Value_ToStringChanged);
+      RegisterValueEvents();
     }
 
@@ -117,7 +125,23 @@
       if (ValueChanged != null)
         ValueChanged(this, EventArgs.Empty);
+      OnItemImageChanged();
       OnToStringChanged();
     }
 
+    private void RegisterValueEvents() {
+      if (value != null) {
+        value.ItemImageChanged += new EventHandler(Value_ItemImageChanged);
+        value.ToStringChanged += new EventHandler(Value_ToStringChanged);
+      }
+    }
+    private void DeregisterValueEvents() {
+      if (value != null) {
+        value.ItemImageChanged -= new EventHandler(Value_ItemImageChanged);
+        value.ToStringChanged -= new EventHandler(Value_ToStringChanged);
+      }
+    }
+    private void Value_ItemImageChanged(object sender, EventArgs e) {
+      OnItemImageChanged();
+    }
     private void Value_ToStringChanged(object sender, EventArgs e) {
       OnToStringChanged();
Index: /trunk/sources/HeuristicLab.Parameters/3.3/ConstrainedValueParameter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Parameters/3.3/ConstrainedValueParameter.cs	(revision 3340)
+++ /trunk/sources/HeuristicLab.Parameters/3.3/ConstrainedValueParameter.cs	(revision 3341)
@@ -49,5 +49,5 @@
     public ConstrainedValueParameter(string name, string description, ItemSet<T> validValues, T value) : base(name, description, validValues, value) { }
 
-    protected override void validValues_ItemsAdded(object sender, CollectionItemsChangedEventArgs<T> e) {
+    protected override void ValidValues_ItemsAdded(object sender, CollectionItemsChangedEventArgs<T> e) {
       if (Value == null) Value = ValidValues.First();
     }
Index: /trunk/sources/HeuristicLab.Parameters/3.3/OptionalConstrainedValueParameter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Parameters/3.3/OptionalConstrainedValueParameter.cs	(revision 3340)
+++ /trunk/sources/HeuristicLab.Parameters/3.3/OptionalConstrainedValueParameter.cs	(revision 3341)
@@ -21,4 +21,5 @@
 
 using System;
+using System.Drawing;
 using HeuristicLab.Collections;
 using HeuristicLab.Common;
@@ -33,4 +34,11 @@
   [StorableClass]
   public class OptionalConstrainedValueParameter<T> : Parameter, IValueParameter<T> where T : class, IItem {
+    public override Image ItemImage {
+      get {
+        if (value != null) return value.ItemImage;
+        else return base.ItemImage;
+      }
+    }
+
     [Storable]
     private ItemSet<T> validValues;
@@ -46,7 +54,7 @@
         if (value != this.value) {
           if ((value != null) && !validValues.Contains(value)) throw new ArgumentException("Invalid value.");
-          if (this.value != null) this.value.ToStringChanged -= new EventHandler(Value_ToStringChanged);
+          DeregisterValueEvents();
           this.value = value;
-          if (this.value != null) this.value.ToStringChanged += new EventHandler(Value_ToStringChanged);
+          RegisterValueEvents();
           OnValueChanged();
         }
@@ -110,5 +118,5 @@
     private void Initialize() {
       RegisterValidValuesEvents();
-      if (value != null) value.ToStringChanged += new EventHandler(Value_ToStringChanged);
+      RegisterValueEvents();
     }
 
@@ -136,4 +144,5 @@
       if (ValueChanged != null)
         ValueChanged(this, EventArgs.Empty);
+      OnItemImageChanged();
       OnToStringChanged();
     }
@@ -141,19 +150,17 @@
     private void RegisterValidValuesEvents() {
       if (validValues != null) {
-        validValues.ItemsAdded += new CollectionItemsChangedEventHandler<T>(validValues_ItemsAdded);
+        validValues.ItemsAdded += new CollectionItemsChangedEventHandler<T>(ValidValues_ItemsAdded);
         validValues.ItemsRemoved += new CollectionItemsChangedEventHandler<T>(ValidValues_ItemsRemoved);
         validValues.CollectionReset += new CollectionItemsChangedEventHandler<T>(ValidValues_CollectionReset);
       }
     }
-
     private void DeregisterValidValuesEvents() {
       if (validValues != null) {
-        validValues.ItemsAdded -= new CollectionItemsChangedEventHandler<T>(validValues_ItemsAdded);
+        validValues.ItemsAdded -= new CollectionItemsChangedEventHandler<T>(ValidValues_ItemsAdded);
         validValues.ItemsRemoved -= new CollectionItemsChangedEventHandler<T>(ValidValues_ItemsRemoved);
         validValues.CollectionReset -= new CollectionItemsChangedEventHandler<T>(ValidValues_CollectionReset);
       }
     }
-
-    protected virtual void validValues_ItemsAdded(object sender, CollectionItemsChangedEventArgs<T> e) { }
+    protected virtual void ValidValues_ItemsAdded(object sender, CollectionItemsChangedEventArgs<T> e) { }
     protected virtual void ValidValues_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<T> e) {
       if ((Value != null) && !validValues.Contains(Value)) Value = null;
@@ -162,5 +169,21 @@
       if ((Value != null) && !validValues.Contains(Value)) Value = null;
     }
-    protected virtual void Value_ToStringChanged(object sender, EventArgs e) {
+
+    private void RegisterValueEvents() {
+      if (value != null) {
+        value.ItemImageChanged += new EventHandler(Value_ItemImageChanged);
+        value.ToStringChanged += new EventHandler(Value_ToStringChanged);
+      }
+    }
+    private void DeregisterValueEvents() {
+      if (value != null) {
+        value.ItemImageChanged -= new EventHandler(Value_ItemImageChanged);
+        value.ToStringChanged -= new EventHandler(Value_ToStringChanged);
+      }
+    }
+    private void Value_ItemImageChanged(object sender, EventArgs e) {
+      OnItemImageChanged();
+    }
+    private void Value_ToStringChanged(object sender, EventArgs e) {
       OnToStringChanged();
     }
Index: /trunk/sources/HeuristicLab.Parameters/3.3/OptionalValueParameter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Parameters/3.3/OptionalValueParameter.cs	(revision 3340)
+++ /trunk/sources/HeuristicLab.Parameters/3.3/OptionalValueParameter.cs	(revision 3341)
@@ -21,4 +21,5 @@
 
 using System;
+using System.Drawing;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -32,4 +33,11 @@
   [StorableClass]
   public class OptionalValueParameter<T> : Parameter, IValueParameter<T> where T : class, IItem {
+    public override Image ItemImage {
+      get {
+        if (value != null) return value.ItemImage;
+        else return base.ItemImage;
+      }
+    }
+
     [Storable]
     private T value;
@@ -38,7 +46,7 @@
       set {
         if (value != this.value) {
-          if (this.value != null) this.value.ToStringChanged -= new EventHandler(Value_ToStringChanged);
+          DeregisterValueEvents();
           this.value = value;
-          if (this.value != null) this.value.ToStringChanged += new EventHandler(Value_ToStringChanged);
+          RegisterValueEvents();
           OnValueChanged();
         }
@@ -82,5 +90,5 @@
     [StorableHook(HookType.AfterDeserialization)]
     private void Initialize() {
-      if (value != null) value.ToStringChanged += new EventHandler(Value_ToStringChanged);
+      RegisterValueEvents();
     }
 
@@ -107,5 +115,22 @@
       if (ValueChanged != null)
         ValueChanged(this, EventArgs.Empty);
+      OnItemImageChanged();
       OnToStringChanged();
+    }
+
+    private void RegisterValueEvents() {
+      if (value != null) {
+        value.ItemImageChanged += new EventHandler(Value_ItemImageChanged);
+        value.ToStringChanged += new EventHandler(Value_ToStringChanged);
+      }
+    }
+    private void DeregisterValueEvents() {
+      if (value != null) {
+        value.ItemImageChanged -= new EventHandler(Value_ItemImageChanged);
+        value.ToStringChanged -= new EventHandler(Value_ToStringChanged);
+      }
+    }
+    private void Value_ItemImageChanged(object sender, EventArgs e) {
+      OnItemImageChanged();
     }
     private void Value_ToStringChanged(object sender, EventArgs e) {
Index: /trunk/sources/HeuristicLab.Parameters/3.3/ValueLookupParameter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Parameters/3.3/ValueLookupParameter.cs	(revision 3340)
+++ /trunk/sources/HeuristicLab.Parameters/3.3/ValueLookupParameter.cs	(revision 3341)
@@ -21,4 +21,5 @@
 
 using System;
+using System.Drawing;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -32,4 +33,11 @@
   [StorableClass]
   public class ValueLookupParameter<T> : LookupParameter<T>, IValueLookupParameter<T> where T : class, IItem {
+    public override Image ItemImage {
+      get {
+        if (value != null) return value.ItemImage;
+        else return base.ItemImage;
+      }
+    }
+
     [Storable]
     private T value;
@@ -38,7 +46,7 @@
       set {
         if (value != this.value) {
-          if (this.value != null) this.value.ToStringChanged -= new EventHandler(Value_ToStringChanged);
+          DeregisterValueEvents();
           this.value = value;
-          if (this.value != null) this.value.ToStringChanged += new EventHandler(Value_ToStringChanged);
+          RegisterValueEvents();
           OnValueChanged();
         }
@@ -85,5 +93,5 @@
     [StorableHook(HookType.AfterDeserialization)]
     private void Initialize() {
-      if (value != null) value.ToStringChanged += new EventHandler(Value_ToStringChanged);
+      RegisterValueEvents();
     }
 
@@ -103,5 +111,22 @@
       if (ValueChanged != null)
         ValueChanged(this, EventArgs.Empty);
+      OnItemImageChanged();
       OnToStringChanged();
+    }
+
+    private void RegisterValueEvents() {
+      if (value != null) {
+        value.ItemImageChanged += new EventHandler(Value_ItemImageChanged);
+        value.ToStringChanged += new EventHandler(Value_ToStringChanged);
+      }
+    }
+    private void DeregisterValueEvents() {
+      if (value != null) {
+        value.ItemImageChanged -= new EventHandler(Value_ItemImageChanged);
+        value.ToStringChanged -= new EventHandler(Value_ToStringChanged);
+      }
+    }
+    private void Value_ItemImageChanged(object sender, EventArgs e) {
+      OnItemImageChanged();
     }
     private void Value_ToStringChanged(object sender, EventArgs e) {
