Index: /trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs	(revision 12982)
+++ /trunk/sources/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs	(revision 12983)
@@ -383,5 +383,5 @@
       ClearSorting();
     }
-    private string[,] SplitClipboardString(string clipboardText) {
+    protected string[,] SplitClipboardString(string clipboardText) {
       if (clipboardText.EndsWith(Environment.NewLine))
         clipboardText = clipboardText.Remove(clipboardText.Length - Environment.NewLine.Length);  //remove last newline constant
Index: /trunk/sources/HeuristicLab.DataPreprocessing.Views/3.4/DataGridContentView.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataPreprocessing.Views/3.4/DataGridContentView.cs	(revision 12982)
+++ /trunk/sources/HeuristicLab.DataPreprocessing.Views/3.4/DataGridContentView.cs	(revision 12983)
@@ -142,8 +142,28 @@
 
 
-    //protected override void PasteValuesToDataGridView() {
-    //  base.PasteValuesToDataGridView();
-    //  dataGridView.Refresh();
-    //}
+    protected override void PasteValuesToDataGridView() {
+      string[,] values = SplitClipboardString(Clipboard.GetText());
+      int rowIndex = 0;
+      int columnIndex = 0;
+      if (dataGridView.CurrentCell != null) {
+        rowIndex = dataGridView.CurrentCell.RowIndex;
+        columnIndex = dataGridView.CurrentCell.ColumnIndex;
+      }
+      if (Content.Rows < values.GetLength(1) + rowIndex) Content.Rows = values.GetLength(1) + rowIndex;
+      if (Content.Columns < values.GetLength(0) + columnIndex) Content.Columns = values.GetLength(0) + columnIndex;
+
+      ReplaceTransaction(() => {
+        Content.PreProcessingData.InTransaction(() => {
+          for (int row = 0; row < values.GetLength(1); row++) {
+            for (int col = 0; col < values.GetLength(0); col++) {
+              Content.SetValue(values[col, row], row + rowIndex, col + columnIndex);
+            }
+          }
+        });
+      });
+
+      ClearSorting();
+      //UpdateData(); // rownames are created on DataGrid creation. Therefore, no update possible, yet.
+    }
 
     protected override void SetEnabledStateOfControls() {
Index: /trunk/sources/HeuristicLab.DataPreprocessing/3.4/Implementations/DataGridContent.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataPreprocessing/3.4/Implementations/DataGridContent.cs	(revision 12982)
+++ /trunk/sources/HeuristicLab.DataPreprocessing/3.4/Implementations/DataGridContent.cs	(revision 12983)
@@ -75,5 +75,5 @@
       }
       set {
-        //not supported
+        throw new NotSupportedException();
       }
     }
@@ -84,5 +84,5 @@
       }
       set {
-        //not supported
+        throw new NotSupportedException();
       }
     }
Index: /trunk/sources/HeuristicLab.DataPreprocessing/3.4/Implementations/TransactionalPreprocessingData.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataPreprocessing/3.4/Implementations/TransactionalPreprocessingData.cs	(revision 12982)
+++ /trunk/sources/HeuristicLab.DataPreprocessing/3.4/Implementations/TransactionalPreprocessingData.cs	(revision 12983)
@@ -98,4 +98,10 @@
     public override void SetCell<T>(int columnIndex, int rowIndex, T value) {
       SaveSnapshot(DataPreprocessingChangedEventType.ChangeItem, columnIndex, rowIndex);
+
+      for (int i = Rows; i <= rowIndex; i++)
+        InsertRow(i);
+      for (int i = Columns; i <= columnIndex; i++)
+        InsertColumn<T>(i.ToString(), i);
+
       variableValues[columnIndex][rowIndex] = value;
       if (!IsInTransaction)
@@ -116,5 +122,5 @@
 
     public override bool VariableHasType<T>(int columnIndex) {
-      return variableValues[columnIndex] is List<T>;
+      return columnIndex >= variableValues.Count || variableValues[columnIndex] is List<T>;
     }
 
@@ -242,5 +248,5 @@
     public override void InsertColumn<T>(string variableName, int columnIndex) {
       SaveSnapshot(DataPreprocessingChangedEventType.DeleteColumn, columnIndex, -1);
-      variableValues.Insert(columnIndex, new List<T>(Rows));
+      variableValues.Insert(columnIndex, new List<T>(Enumerable.Repeat(default(T), Rows)));
       variableNames.Insert(columnIndex, variableName);
       if (!IsInTransaction)
Index: /trunk/sources/HeuristicLab.DataPreprocessing/3.4/ProblemDataCreator.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataPreprocessing/3.4/ProblemDataCreator.cs	(revision 12982)
+++ /trunk/sources/HeuristicLab.DataPreprocessing/3.4/ProblemDataCreator.cs	(revision 12983)
@@ -63,5 +63,5 @@
       var inputVariables = oldProblemData.InputVariables.ToDictionary(x => x.Value, x => x);
       foreach (var variable in problemData.InputVariables) {
-        bool isChecked = oldProblemData.InputVariables.ItemChecked(inputVariables[variable.Value]);
+        bool isChecked = oldProblemData.InputVariables.Contains(variable) && oldProblemData.InputVariables.ItemChecked(inputVariables[variable.Value]);
         problemData.InputVariables.SetItemCheckedState(variable, isChecked);
       }
