Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/HeuristicLab.DataPreprocessing-3.3.csproj
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/HeuristicLab.DataPreprocessing-3.3.csproj	(revision 10543)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/HeuristicLab.DataPreprocessing-3.3.csproj	(revision 10544)
@@ -78,4 +78,5 @@
   <ItemGroup>
     <Compile Include="Implementations\DataGridLogic.cs" />
+    <Compile Include="Implementations\DataPreprocessingChangedEvent.cs" />
     <Compile Include="Implementations\ManipulationLogic.cs" />
     <Compile Include="Interfaces\IDataGridLogic.cs" />
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/DataPreprocessingChangedEvent.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/DataPreprocessingChangedEvent.cs	(revision 10544)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/DataPreprocessingChangedEvent.cs	(revision 10544)
@@ -0,0 +1,29 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.DataPreprocessing {
+  public enum DataPreprocessingChangedEventType {
+    DeleteColumn,
+    AddColumn,
+    ChangeColumn,
+    DeleteRow,
+    AddRow,
+    ChangeItem
+  }
+
+  public class DataPreprocessingChangedEventArgs : EventArgs {
+    public DataPreprocessingChangedEventType Type { get; private set; }
+    public int Row { get; private set; }
+    public int Column { get; private set; }
+
+    public DataPreprocessingChangedEventArgs(DataPreprocessingChangedEventType type, int column, int row) {
+      Type = type;
+      Column = column;
+      Row = row;
+    }
+  }
+
+  public delegate void DataPreprocessingChangedEventHandler(object sender, DataPreprocessingChangedEventArgs e);
+}
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/LineChartLogic.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/LineChartLogic.cs	(revision 10543)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/LineChartLogic.cs	(revision 10544)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using System.Collections.Generic;
 using HeuristicLab.Analysis;
@@ -32,4 +33,5 @@
       dataTable = new DataTable("LineChart");
       FillDataTable();
+      preprocessingData.Changed += PreprocessingData_Changed;
     }
 
@@ -77,4 +79,25 @@
     }
 
+    void PreprocessingData_Changed(object sender, DataPreprocessingChangedEventArgs e) {
+      var variableName = preprocessingData.GetVariableName(e.Column);
+      switch (e.Type) {
+        case DataPreprocessingChangedEventType.DeleteColumn:
+          dataTable.Rows.Remove(variableName);
+          break;
+        case DataPreprocessingChangedEventType.AddColumn:
+          dataTable.Rows.Add(new DataRow(variableName, String.Empty, preprocessingData.GetValues<double>(e.Column)));
+          break;
+        case DataPreprocessingChangedEventType.ChangeColumn:
+        case DataPreprocessingChangedEventType.ChangeItem:
+          dataTable.Rows.Remove(variableName);
+          dataTable.Rows.Add(new DataRow(variableName, String.Empty, preprocessingData.GetValues<double>(e.Column)));
+          break;
+        case DataPreprocessingChangedEventType.DeleteRow:
+        case DataPreprocessingChangedEventType.AddRow:
+          dataTable.Rows.Clear();
+          FillDataTable();
+          break;
+      }
+    }
   }
 }
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/PreprocessingData.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/PreprocessingData.cs	(revision 10543)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Implementations/PreprocessingData.cs	(revision 10544)
@@ -103,4 +103,5 @@
     public void SetCell<T>(int columnIndex, int rowIndex, T value) {
       variableValues[columnIndex][rowIndex] = value;
+      OnChanged(DataPreprocessingChangedEventType.ChangeItem, columnIndex, rowIndex);
     }
 
@@ -112,5 +113,4 @@
     public string GetCellAsString(int columnIndex, int rowIndex) {
       return variableValues[columnIndex][rowIndex].ToString();
-
     }
 
@@ -127,6 +127,6 @@
     public void SetValues<T>(string variableName, IList<T> values) {
       SetValues<T>(GetColumnIndex(variableName), values);
-
-    }
+    }
+
     public void SetValues<T>(int columnIndex, IList<T> values) {
       if (IsType<T>(columnIndex)) {
@@ -135,4 +135,5 @@
         throw new ArgumentException("The datatype of column " + columnIndex + " must be of type " + variableValues[columnIndex].GetType().Name + " but was " + typeof(T).Name);
       }
+      OnChanged(DataPreprocessingChangedEventType.ChangeColumn, columnIndex, -1);
     }
 
@@ -140,7 +141,7 @@
       foreach (IList column in variableValues.Values) {
         Type type = column.GetType().GetGenericArguments()[0];
-
         column.Insert(rowIndex, type.IsValueType ? Activator.CreateInstance(type) : null);
       }
+      OnChanged(DataPreprocessingChangedEventType.AddRow, -1, rowIndex);
     }
 
@@ -149,9 +150,11 @@
         column.RemoveAt(rowIndex);
       }
+      OnChanged(DataPreprocessingChangedEventType.DeleteRow, -1, rowIndex);
     }
 
     public void InsertColumn<T>(string variableName, int columnIndex) {
       variableValues.Add(columnIndex, new List<T>(Rows));
-      variableNames.Insert(columnIndex, variableName);
+      variableNames.Insert(columnIndex, variableName); 
+      OnChanged(DataPreprocessingChangedEventType.AddColumn, columnIndex , -1);
     }
 
@@ -159,4 +162,5 @@
       variableValues.Remove(columnIndex);
       variableNames.RemoveAt(columnIndex);
+      OnChanged(DataPreprocessingChangedEventType.DeleteColumn, columnIndex, -1);
     }
 
@@ -212,4 +216,10 @@
       var dataset = new Dataset(variableNames, values);
       return dataset;
+    }
+
+    public event DataPreprocessingChangedEventHandler Changed;
+    protected virtual void OnChanged(DataPreprocessingChangedEventType type, int column, int row) {
+      var listeners = Changed;
+      if (listeners != null) listeners(this, new DataPreprocessingChangedEventArgs(type, column, row));
     }
 
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Interfaces/IPreprocessingData.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Interfaces/IPreprocessingData.cs	(revision 10543)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Interfaces/IPreprocessingData.cs	(revision 10544)
@@ -74,4 +74,6 @@
 
     Dataset ExportToDataset();
+
+    event DataPreprocessingChangedEventHandler Changed;
   }
 }
Index: /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Views/LineChartView.cs
===================================================================
--- /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Views/LineChartView.cs	(revision 10543)
+++ /branches/DataPreprocessing/HeuristicLab.DataPreprocessing/3.3/Views/LineChartView.cs	(revision 10544)
@@ -35,5 +35,5 @@
     }
 
-    private void InitDataTable() {
+    private void InitDataTable() { 
       ILineChartLogic logic = Content.LineChartLogic;
       viewHost.Content = logic.GetDataTable();
