Index: branches/HeuristicLab.DatasetRefactor/sources/HeuristicLab.Problems.DataAnalysis/3.4/Dataset.cs
===================================================================
--- branches/HeuristicLab.DatasetRefactor/sources/HeuristicLab.Problems.DataAnalysis/3.4/Dataset.cs	(revision 12454)
+++ branches/HeuristicLab.DatasetRefactor/sources/HeuristicLab.Problems.DataAnalysis/3.4/Dataset.cs	(revision 12489)
@@ -230,11 +230,11 @@
     }
 
-    public event EventHandler ColumnsChanged { add { } remove { } }
-    public event EventHandler RowsChanged { add { } remove { } }
-    public event EventHandler ColumnNamesChanged { add { } remove { } }
-    public event EventHandler RowNamesChanged { add { } remove { } }
-    public event EventHandler SortableViewChanged { add { } remove { } }
-    public event EventHandler<EventArgs<int, int>> ItemChanged { add { } remove { } }
-    public event EventHandler Reset { add { } remove { } }
+    public virtual event EventHandler ColumnsChanged { add { } remove { } }
+    public virtual event EventHandler RowsChanged { add { } remove { } }
+    public virtual event EventHandler ColumnNamesChanged { add { } remove { } }
+    public virtual event EventHandler RowNamesChanged { add { } remove { } }
+    public virtual event EventHandler SortableViewChanged { add { } remove { } }
+    public virtual event EventHandler<EventArgs<int, int>> ItemChanged { add { } remove { } }
+    public virtual event EventHandler Reset { add { } remove { } }
     #endregion
   }
Index: branches/HeuristicLab.DatasetRefactor/sources/HeuristicLab.Problems.DataAnalysis/3.4/ModifiableDataset.cs
===================================================================
--- branches/HeuristicLab.DatasetRefactor/sources/HeuristicLab.Problems.DataAnalysis/3.4/ModifiableDataset.cs	(revision 12454)
+++ branches/HeuristicLab.DatasetRefactor/sources/HeuristicLab.Problems.DataAnalysis/3.4/ModifiableDataset.cs	(revision 12489)
@@ -56,4 +56,6 @@
         variableValues[variableNames[i]][row] = list[i];
       }
+      OnRowsChanged();
+      OnReset();
     }
 
@@ -73,4 +75,6 @@
       }
       rows++;
+      OnRowsChanged();
+      OnReset();
     }
 
@@ -84,4 +88,7 @@
       variableValues[variableName] = new List<T>(values);
       variableNames.Add(variableName);
+      OnColumnsChanged();
+      OnColumnNamesChanged();
+      OnReset();
     }
 
@@ -91,4 +98,7 @@
       variableValues.Remove(variableName);
       variableNames.Remove(variableName);
+      OnColumnsChanged();
+      OnColumnNamesChanged();
+      OnReset();
     }
 
@@ -98,4 +108,6 @@
         list.RemoveAt(row);
       rows--;
+      OnRowsChanged();
+      OnReset();
     }
 
@@ -158,4 +170,51 @@
       return false;
     }
+
+    #region event handlers
+    public override event EventHandler RowsChanged;
+    private void OnRowsChanged() {
+      var changed = RowsChanged;
+      if (changed != null)
+        changed(this, EventArgs.Empty);
+    }
+
+    public override event EventHandler ColumnsChanged;
+    private void OnColumnsChanged() {
+      var changed = ColumnsChanged;
+      if (changed != null)
+        changed(this, EventArgs.Empty);
+    }
+
+    public override event EventHandler RowNamesChanged;
+    private void OnRowNamesChanged() {
+      var changed = RowNamesChanged;
+      if (changed != null)
+        changed(this, EventArgs.Empty);
+    }
+
+    public override event EventHandler ColumnNamesChanged;
+    private void OnColumnNamesChanged() {
+      var changed = ColumnNamesChanged;
+      if (changed != null)
+        changed(this, EventArgs.Empty);
+    }
+
+    public override event EventHandler Reset;
+    private void OnReset() {
+      var reset = Reset;
+      if (reset != null)
+        reset(this, EventArgs.Empty);
+    }
+
+    // not sure if this is really applicable in the ModifiableDataset
+    // since this is not a matrix and values are changed based on row + variableName
+    public override event EventHandler<EventArgs<int, int>> ItemChanged;
+    private void OnItemChanged(int rowIndex, int columnIndex) {
+      var changed = ItemChanged;
+      if (changed != null) {
+        changed(this, new EventArgs<int, int>(rowIndex, columnIndex));
+      }
+    }
+    #endregion
   }
 }
