Index: /branches/Mainform refactoring/HeuristicLab.Common/3.2/HeuristicLab.Common-3.2.csproj
===================================================================
--- /branches/Mainform refactoring/HeuristicLab.Common/3.2/HeuristicLab.Common-3.2.csproj	(revision 2423)
+++ /branches/Mainform refactoring/HeuristicLab.Common/3.2/HeuristicLab.Common-3.2.csproj	(revision 2424)
@@ -78,6 +78,10 @@
     <Reference Include="System.Data" />
     <Reference Include="System.Xml" />
+    <Reference Include="WindowsBase">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="ObservableList.cs" />
     <Compile Include="DoubleExtensions.cs">
       <SubType>Code</SubType>
Index: /branches/Mainform refactoring/HeuristicLab.Common/3.2/ObservableCollection.cs
===================================================================
--- /branches/Mainform refactoring/HeuristicLab.Common/3.2/ObservableCollection.cs	(revision 2423)
+++ /branches/Mainform refactoring/HeuristicLab.Common/3.2/ObservableCollection.cs	(revision 2424)
@@ -23,8 +23,9 @@
 using System.Linq;
 using System.Text;
+using System.Collections.Specialized;
 
 namespace HeuristicLab.Common {
-  public class ObservableCollection<T> : ICollection<T> {
-    private List<T> list;
+  public class ObservableCollection<T> : ICollection<T>, INotifyCollectionChanged {
+    protected List<T> list;
 
     public ObservableCollection() {
@@ -33,29 +34,25 @@
 
     #region Events
-    public event EventHandler CollectionCleared;
-    protected void FireCollectionCleared() {
-      OnCollectionCleared();
-    } 
-    protected virtual void OnCollectionCleared() {
-      if (CollectionCleared != null)
-        CollectionCleared(this, new EventArgs());
+    public event NotifyCollectionChangedEventHandler CollectionChanged;
+
+    protected void FireCollectionChanged(NotifyCollectionChangedEventArgs e) {
+      if (CollectionChanged != null) {
+        CollectionChanged(this, e);
+      }
     }
 
-    public event EventHandler<EnumerableEventArgs<T>> ItemsAdded;
-    protected void FireItemsAdded(IEnumerable<T> addedItems) {
-      OnItemsAdded(addedItems);
-    }
-    protected virtual void OnItemsAdded(IEnumerable<T> addedItems) {
-      if (ItemsAdded != null)
-        ItemsAdded(this, new EnumerableEventArgs<T>(addedItems));
+    protected virtual void FireCollectionCleared() {
+        NotifyCollectionChangedEventArgs e = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset);
+        FireCollectionChanged( e);
     }
 
-    public event EventHandler<EnumerableEventArgs<T>> ItemsRemoved;
-    protected void FireItemsRemoved(IEnumerable<T> removedItems) {
-      OnItemsRemoved(removedItems);
+    protected virtual void FireItemsAdded(IEnumerable<T> addedItems, int index) {
+        NotifyCollectionChangedEventArgs e = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, addedItems.ToList(), index);
+        FireCollectionChanged(e);
     }
-    protected virtual void OnItemsRemoved(IEnumerable<T> removedItems) {
-      if (ItemsRemoved != null)
-        ItemsRemoved(this, new EnumerableEventArgs<T>(removedItems));
+
+    protected virtual void FireItemsRemoved(IEnumerable<T> removedItems) {
+        NotifyCollectionChangedEventArgs e = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, removedItems.ToList());
+        FireCollectionChanged(e);
     }
     #endregion
@@ -63,11 +60,13 @@
     #region ICollection<T> Members
     public void Add(T item) {
+      int index = this.list.Count - 1;
       this.list.Add(item);
-      FireItemsAdded(new List<T> { item });
+      FireItemsAdded(new List<T> { item }, index);
     }
 
     public void AddRange(IEnumerable<T> items) {
+      int index = this.list.Count - 1;
       this.list.AddRange(items);
-      FireItemsAdded(items);
+      FireItemsAdded(items, index);
     }
 
@@ -125,4 +124,6 @@
 
     #endregion
+
+
   }
 }
Index: /branches/Mainform refactoring/HeuristicLab.Common/3.2/ObservableList.cs
===================================================================
--- /branches/Mainform refactoring/HeuristicLab.Common/3.2/ObservableList.cs	(revision 2424)
+++ /branches/Mainform refactoring/HeuristicLab.Common/3.2/ObservableList.cs	(revision 2424)
@@ -0,0 +1,74 @@
+﻿#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.Linq;
+using System.Text;
+using System.Collections.Specialized;
+
+namespace HeuristicLab.Common {
+  public class ObservableList<T> : ObservableCollection<T>, IList<T> {
+
+    public ObservableList()
+      : base() {
+    }
+
+    #region IList<T> Members
+    public int IndexOf(T item) {
+      return list.IndexOf(item);
+    }
+
+    public void Insert(int index, T item) {
+      list.Insert(index, item);
+      FireItemsInserted(new List<T>() { item }, index);
+    }
+
+    public void RemoveAt(int index) {
+      T itemRemoved = list[index];
+      list.RemoveAt(index);
+      FireItemsRemoved(new List<T>() { itemRemoved });
+    }
+
+    public T this[int index] {
+      get {
+        return list[index];
+      }
+      set {
+        T oldItem = list[index];
+        list[index] = value;
+        FireItemsReplaced(value, oldItem, index);
+      }
+    }
+    #endregion
+
+    #region events
+    protected virtual void FireItemsInserted(IEnumerable<T> insertedItems, int index) {
+      NotifyCollectionChangedEventArgs e = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, insertedItems.ToList(), index);
+      FireCollectionChanged(e);
+    }
+
+    protected virtual void FireItemsReplaced(T newItem, T oldItem, int index) {
+      NotifyCollectionChangedEventArgs e = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, newItem, oldItem);
+      FireCollectionChanged(e);
+    }
+    #endregion
+  }
+}
