Index: stable/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs
===================================================================
--- stable/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs	(revision 13287)
+++ stable/HeuristicLab.Data.Views/3.3/StringConvertibleMatrixView.cs	(revision 13289)
@@ -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: stable/HeuristicLab.DataPreprocessing.Views/3.4/DataGridContentView.Designer.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing.Views/3.4/DataGridContentView.Designer.cs	(revision 13287)
+++ stable/HeuristicLab.DataPreprocessing.Views/3.4/DataGridContentView.Designer.cs	(revision 13289)
@@ -63,4 +63,7 @@
       this.btnReplace = new System.Windows.Forms.Button();
       this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.addRowButton = new System.Windows.Forms.Button();
+      this.addColumnButton = new System.Windows.Forms.Button();
+      this.renameColumnsButton = new System.Windows.Forms.Button();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       this.contextMenuCell.SuspendLayout();
@@ -70,8 +73,6 @@
       // 
       this.rowsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)));
-      this.rowsTextBox.Enabled = false;
       this.errorProvider.SetIconAlignment(this.rowsTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
       this.errorProvider.SetIconPadding(this.rowsTextBox, 2);
-      this.rowsTextBox.ReadOnly = true;
       this.rowsTextBox.Size = new System.Drawing.Size(71, 20);
       // 
@@ -79,17 +80,16 @@
       // 
       this.columnsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)));
-      this.columnsTextBox.Enabled = false;
-      this.columnsTextBox.ReadOnly = true;
       this.columnsTextBox.Size = new System.Drawing.Size(71, 20);
       // 
       // statisticsTextBox
       // 
-      this.statisticsTextBox.Size = new System.Drawing.Size(522, 13);
+      this.statisticsTextBox.Location = new System.Drawing.Point(3, 387);
+      this.statisticsTextBox.Size = new System.Drawing.Size(421, 13);
       // 
       // btnApplySort
       // 
-      this.btnApplySort.Location = new System.Drawing.Point(349, 19);
+      this.btnApplySort.Location = new System.Drawing.Point(234, 0);
       this.btnApplySort.Name = "btnApplySort";
-      this.btnApplySort.Size = new System.Drawing.Size(75, 23);
+      this.btnApplySort.Size = new System.Drawing.Size(104, 23);
       this.btnApplySort.TabIndex = 7;
       this.btnApplySort.Text = "Apply Sort";
@@ -104,5 +104,5 @@
             this.replaceValueOverSelectionToolStripMenuItem});
       this.contextMenuCell.Name = "contextMenuCell";
-      this.contextMenuCell.Size = new System.Drawing.Size(225, 70);
+      this.contextMenuCell.Size = new System.Drawing.Size(225, 48);
       // 
       // replaceValueOverColumnToolStripMenuItem
@@ -154,7 +154,7 @@
       this.interpolationToolStripMenuItem_Column.Click += new System.EventHandler(this.ReplaceWithInterpolation_Column_Click);
       // 
-      // smoothingToolStripMenuItem
-      // 
-      this.smoothingToolStripMenuItem_Column.Name = "smoothingToolStripMenuItem";
+      // smoothingToolStripMenuItem_Column
+      // 
+      this.smoothingToolStripMenuItem_Column.Name = "smoothingToolStripMenuItem_Column";
       this.smoothingToolStripMenuItem_Column.Size = new System.Drawing.Size(155, 22);
       this.smoothingToolStripMenuItem_Column.Text = "Smoothing";
@@ -202,7 +202,7 @@
       // btnSearch
       // 
-      this.btnSearch.Location = new System.Drawing.Point(201, 19);
+      this.btnSearch.Location = new System.Drawing.Point(173, 0);
       this.btnSearch.Name = "btnSearch";
-      this.btnSearch.Size = new System.Drawing.Size(53, 23);
+      this.btnSearch.Size = new System.Drawing.Size(55, 23);
       this.btnSearch.TabIndex = 8;
       this.btnSearch.Text = "Search";
@@ -213,5 +213,5 @@
       // btnReplace
       // 
-      this.btnReplace.Location = new System.Drawing.Point(260, 19);
+      this.btnReplace.Location = new System.Drawing.Point(173, 26);
       this.btnReplace.Name = "btnReplace";
       this.btnReplace.Size = new System.Drawing.Size(55, 23);
@@ -222,13 +222,52 @@
       this.btnReplace.Click += new System.EventHandler(this.btnReplace_Click);
       // 
+      // addRowButton
+      // 
+      this.addRowButton.Location = new System.Drawing.Point(344, 26);
+      this.addRowButton.Name = "addRowButton";
+      this.addRowButton.Size = new System.Drawing.Size(76, 23);
+      this.addRowButton.TabIndex = 10;
+      this.addRowButton.Text = "Add Row";
+      this.addRowButton.UseVisualStyleBackColor = true;
+      this.addRowButton.Click += new System.EventHandler(this.addRowButton_Click);
+      // 
+      // addColumnButton
+      // 
+      this.addColumnButton.Location = new System.Drawing.Point(344, 0);
+      this.addColumnButton.Name = "addColumnButton";
+      this.addColumnButton.Size = new System.Drawing.Size(76, 23);
+      this.addColumnButton.TabIndex = 10;
+      this.addColumnButton.Text = "Add Column";
+      this.addColumnButton.UseVisualStyleBackColor = true;
+      this.addColumnButton.Click += new System.EventHandler(this.addColumnButton_Click);
+      // 
+      // renameColumnsButton
+      // 
+      this.renameColumnsButton.Location = new System.Drawing.Point(234, 26);
+      this.renameColumnsButton.Name = "renameColumnsButton";
+      this.renameColumnsButton.Size = new System.Drawing.Size(104, 23);
+      this.renameColumnsButton.TabIndex = 11;
+      this.renameColumnsButton.Text = "Rename Columns";
+      this.renameColumnsButton.UseVisualStyleBackColor = true;
+      this.renameColumnsButton.Click += new System.EventHandler(this.renameColumnsButton_Click);
+      // 
       // DataGridContentView
       // 
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.renameColumnsButton);
+      this.Controls.Add(this.addColumnButton);
+      this.Controls.Add(this.addRowButton);
       this.Controls.Add(this.btnReplace);
       this.Controls.Add(this.btnSearch);
       this.Controls.Add(this.btnApplySort);
       this.Name = "DataGridContentView";
-      this.Size = new System.Drawing.Size(528, 404);
+      this.Size = new System.Drawing.Size(430, 403);
+      this.Controls.SetChildIndex(this.btnApplySort, 0);
+      this.Controls.SetChildIndex(this.btnSearch, 0);
+      this.Controls.SetChildIndex(this.btnReplace, 0);
+      this.Controls.SetChildIndex(this.addRowButton, 0);
+      this.Controls.SetChildIndex(this.addColumnButton, 0);
+      this.Controls.SetChildIndex(this.renameColumnsButton, 0);
       this.Controls.SetChildIndex(this.statisticsTextBox, 0);
       this.Controls.SetChildIndex(this.rowsLabel, 0);
@@ -236,7 +275,4 @@
       this.Controls.SetChildIndex(this.rowsTextBox, 0);
       this.Controls.SetChildIndex(this.columnsTextBox, 0);
-      this.Controls.SetChildIndex(this.btnApplySort, 0);
-      this.Controls.SetChildIndex(this.btnSearch, 0);
-      this.Controls.SetChildIndex(this.btnReplace, 0);
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
       this.contextMenuCell.ResumeLayout(false);
@@ -265,4 +301,7 @@
     private System.Windows.Forms.ToolTip toolTip;
     private System.Windows.Forms.ToolStripMenuItem smoothingToolStripMenuItem_Column;
+    private System.Windows.Forms.Button addRowButton;
+    private System.Windows.Forms.Button addColumnButton;
+    private System.Windows.Forms.Button renameColumnsButton;
   }
 }
Index: stable/HeuristicLab.DataPreprocessing.Views/3.4/DataGridContentView.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing.Views/3.4/DataGridContentView.cs	(revision 13287)
+++ stable/HeuristicLab.DataPreprocessing.Views/3.4/DataGridContentView.cs	(revision 13289)
@@ -59,4 +59,5 @@
       InitializeComponent();
       dataGridView.CellMouseClick += dataGridView_CellMouseClick;
+      dataGridView.RowHeaderMouseClick += dataGridView_RowHeaderMouseClick;
       dataGridView.KeyDown += dataGridView_KeyDown;
       dataGridView.MouseUp += dataGridView_MouseUp;
@@ -142,8 +143,27 @@
 
 
-    //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();
+    }
 
     protected override void SetEnabledStateOfControls() {
@@ -165,5 +185,5 @@
     protected override void dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) {
       if (Content != null) {
-        if (e.Button == System.Windows.Forms.MouseButtons.Left) {
+        if (e.Button == MouseButtons.Left) {
           dataGridView.Focus();
           dataGridView.ClearSelection();
@@ -174,9 +194,20 @@
             dataGridView[e.ColumnIndex, i].Selected = true;
           }
-        } else if (Content.SortableView) {
+        } else if (e.Button == MouseButtons.Middle) {
+          int newIndex = e.ColumnIndex >= 0 ? e.ColumnIndex : 0;
+          Content.PreProcessingData.InsertColumn<double>(newIndex.ToString(), newIndex);
+        } else if (e.Button == MouseButtons.Right && Content.SortableView) {
           SortColumn(e.ColumnIndex);
         }
       }
       searchIterator = null;
+    }
+    private void dataGridView_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) {
+      if (Content != null) {
+        if (e.Button == MouseButtons.Middle) {
+          int newIndex = e.RowIndex >= 0 ? e.RowIndex : 0;
+          Content.PreProcessingData.InsertRow(newIndex);
+        }
+      }
     }
 
@@ -450,5 +481,5 @@
     private void dataGridView_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) {
       if (Content == null) return;
-      if (e.Button == System.Windows.Forms.MouseButtons.Right && !(e.ColumnIndex != -1 && e.RowIndex == -1)) {
+      if (e.Button == MouseButtons.Right && !(e.ColumnIndex != -1 && e.RowIndex == -1)) {
         if (e.ColumnIndex == -1 || e.RowIndex == -1) {
           replaceValueOverColumnToolStripMenuItem.Visible = false;
@@ -612,4 +643,19 @@
     #endregion
 
+    private void addRowButton_Click(object sender, EventArgs e) {
+      Content.PreProcessingData.InsertRow(Content.Rows);
+    }
+
+    private void addColumnButton_Click(object sender, EventArgs e) {
+      Content.PreProcessingData.InsertColumn<double>(Content.Columns.ToString(), Content.Columns);
+    }
+
+    private void renameColumnsButton_Click(object sender, EventArgs e) {
+      var renameDialog = new RenameColumnsDialog(Content.ColumnNames);
+
+      if (renameDialog.ShowDialog(this) == DialogResult.OK) {
+        Content.PreProcessingData.RenameColumns(renameDialog.ColumnNames);
+      }
+    }
   }
 }
Index: stable/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj
===================================================================
--- stable/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj	(revision 13287)
+++ stable/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj	(revision 13289)
@@ -120,4 +120,10 @@
     <Compile Include="ComparisonFilterView.Designer.cs">
       <DependentUpon>ComparisonFilterView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="RenameColumnsDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="RenameColumnsDialog.Designer.cs">
+      <DependentUpon>RenameColumnsDialog.cs</DependentUpon>
     </Compile>
     <Compile Include="ScatterPlotSingleView.cs">
Index: stable/HeuristicLab.DataPreprocessing.Views/3.4/RenameColumnsDialog.Designer.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing.Views/3.4/RenameColumnsDialog.Designer.cs	(revision 13289)
+++ stable/HeuristicLab.DataPreprocessing.Views/3.4/RenameColumnsDialog.Designer.cs	(revision 13289)
@@ -0,0 +1,125 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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
+
+namespace HeuristicLab.DataPreprocessing.Views {
+  partial class RenameColumnsDialog {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.okButton = new System.Windows.Forms.Button();
+      this.cancelButton = new System.Windows.Forms.Button();
+      this.dataGridView = new System.Windows.Forms.DataGridView();
+      this.ColumName = new System.Windows.Forms.DataGridViewTextBoxColumn();
+      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // okButton
+      // 
+      this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
+      this.okButton.Location = new System.Drawing.Point(48, 302);
+      this.okButton.Name = "okButton";
+      this.okButton.Size = new System.Drawing.Size(75, 23);
+      this.okButton.TabIndex = 0;
+      this.okButton.Text = "&OK";
+      this.okButton.UseVisualStyleBackColor = true;
+      // 
+      // cancelButton
+      // 
+      this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+      this.cancelButton.Location = new System.Drawing.Point(129, 302);
+      this.cancelButton.Name = "cancelButton";
+      this.cancelButton.Size = new System.Drawing.Size(75, 23);
+      this.cancelButton.TabIndex = 1;
+      this.cancelButton.Text = "&Cancel";
+      this.cancelButton.UseVisualStyleBackColor = true;
+      // 
+      // dataGridView
+      // 
+      this.dataGridView.AllowUserToAddRows = false;
+      this.dataGridView.AllowUserToDeleteRows = false;
+      this.dataGridView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+      this.dataGridView.ColumnHeadersVisible = false;
+      this.dataGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
+            this.ColumName});
+      this.dataGridView.Location = new System.Drawing.Point(0, 0);
+      this.dataGridView.Name = "dataGridView";
+      this.dataGridView.RowHeadersVisible = false;
+      this.dataGridView.Size = new System.Drawing.Size(207, 296);
+      this.dataGridView.TabIndex = 2;
+      // 
+      // ColumName
+      // 
+      this.ColumName.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
+      this.ColumName.HeaderText = "Column Name";
+      this.ColumName.Name = "ColumName";
+      this.ColumName.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
+      // 
+      // RenameColumnsDialog
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(207, 330);
+      this.Controls.Add(this.dataGridView);
+      this.Controls.Add(this.cancelButton);
+      this.Controls.Add(this.okButton);
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "RenameColumnsDialog";
+      this.ShowIcon = false;
+      this.Text = "Rename Columns";
+      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button okButton;
+    private System.Windows.Forms.Button cancelButton;
+    private System.Windows.Forms.DataGridView dataGridView;
+    private System.Windows.Forms.DataGridViewTextBoxColumn ColumName;
+  }
+}
Index: stable/HeuristicLab.DataPreprocessing.Views/3.4/RenameColumnsDialog.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing.Views/3.4/RenameColumnsDialog.cs	(revision 13289)
+++ stable/HeuristicLab.DataPreprocessing.Views/3.4/RenameColumnsDialog.cs	(revision 13289)
@@ -0,0 +1,47 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace HeuristicLab.DataPreprocessing.Views {
+  public partial class RenameColumnsDialog : Form {
+
+    public IList<string> ColumnNames {
+      get {
+        var names = new List<string>(dataGridView.RowCount);
+        for (int i = 0; i < dataGridView.RowCount; i++) {
+          names.Insert(i, (string)dataGridView[0, i].Value);
+        }
+        return names.AsReadOnly();
+      }
+    }
+
+    public RenameColumnsDialog() : this(Enumerable.Empty<string>()) { }
+    public RenameColumnsDialog(IEnumerable<string> names) {
+      InitializeComponent();
+      foreach (var name in names) {
+        dataGridView.Rows.Add(name);
+      }
+    }
+  }
+}
Index: stable/HeuristicLab.DataPreprocessing/3.4/Implementations/DataGridContent.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing/3.4/Implementations/DataGridContent.cs	(revision 13287)
+++ stable/HeuristicLab.DataPreprocessing/3.4/Implementations/DataGridContent.cs	(revision 13289)
@@ -41,6 +41,4 @@
     public IFilterLogic FilterLogic { get; private set; }
 
-    private IEnumerable<string> rowNames;
-
     public int Rows {
       get {
@@ -72,8 +70,8 @@
     public IEnumerable<string> RowNames {
       get {
-        return rowNames;
+        return Enumerable.Range(1, Rows).Select(n => n.ToString());
       }
       set {
-        //not supported
+        throw new NotSupportedException();
       }
     }
@@ -84,5 +82,5 @@
       }
       set {
-        //not supported
+        throw new NotSupportedException();
       }
     }
@@ -103,5 +101,4 @@
       FilterLogic = theFilterLogic;
       PreProcessingData = preProcessingData;
-      createRowNames();
     }
 
@@ -116,5 +113,4 @@
     public void DeleteRows(IEnumerable<int> rows) {
       PreProcessingData.DeleteRowsWithIndices(rows);
-      createRowNames();
     }
 
@@ -133,8 +129,4 @@
     public bool SetValue(string value, int rowIndex, int columnIndex) {
       return PreProcessingData.SetValue(value, columnIndex, rowIndex);
-    }
-
-    private void createRowNames() {
-      rowNames = Enumerable.Range(1, Rows).Select(n => n.ToString());
     }
 
Index: stable/HeuristicLab.DataPreprocessing/3.4/Implementations/FilteredPreprocessingData.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing/3.4/Implementations/FilteredPreprocessingData.cs	(revision 13287)
+++ stable/HeuristicLab.DataPreprocessing/3.4/Implementations/FilteredPreprocessingData.cs	(revision 13289)
@@ -119,4 +119,16 @@
         throw new InvalidOperationException("DeleteColumn not possible while data is filtered");
       originalData.DeleteColumn(columnIndex);
+    }
+
+    public void RenameColumn(int columnIndex, string name) {
+      if (IsFiltered)
+        throw new InvalidOperationException("RenameColumn not possible while data is filtered");
+      originalData.RenameColumn(columnIndex, name);
+    }
+
+    public void RenameColumns(IList<string> names) {
+      if (IsFiltered)
+        throw new InvalidOperationException("RenameColumns not possible while data is filtered");
+      originalData.RenameColumns(names);
     }
 
Index: stable/HeuristicLab.DataPreprocessing/3.4/Implementations/PreprocessingData.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing/3.4/Implementations/PreprocessingData.cs	(revision 13287)
+++ stable/HeuristicLab.DataPreprocessing/3.4/Implementations/PreprocessingData.cs	(revision 13289)
@@ -196,4 +196,7 @@
     public abstract void DeleteColumn(int columnIndex);
 
+    public abstract void RenameColumn(int columnIndex, string name);
+    public abstract void RenameColumns(IList<string> list);
+
     public abstract Dataset ExportToDataset();
 
Index: stable/HeuristicLab.DataPreprocessing/3.4/Implementations/TransactionalPreprocessingData.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing/3.4/Implementations/TransactionalPreprocessingData.cs	(revision 13287)
+++ stable/HeuristicLab.DataPreprocessing/3.4/Implementations/TransactionalPreprocessingData.cs	(revision 13289)
@@ -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>;
     }
 
@@ -219,4 +225,5 @@
       if (!IsInTransaction)
         OnChanged(DataPreprocessingChangedEventType.DeleteRow, -1, -1);
+      ResetPartitions();
     }
 
@@ -229,4 +236,5 @@
       if (!IsInTransaction)
         OnChanged(DataPreprocessingChangedEventType.AddRow, -1, rowIndex);
+      ResetPartitions();
     }
 
@@ -238,9 +246,10 @@
       if (!IsInTransaction)
         OnChanged(DataPreprocessingChangedEventType.DeleteRow, -1, rowIndex);
+      ResetPartitions();
     }
 
     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)
@@ -256,4 +265,26 @@
     }
 
+    public override void RenameColumn(int columnIndex, string name) {
+      SaveSnapshot(DataPreprocessingChangedEventType.ChangeColumn, columnIndex, -1);
+      if (columnIndex < 0 || columnIndex > variableNames.Count)
+        throw new ArgumentOutOfRangeException("columnIndex");
+      variableNames[columnIndex] = name;
+
+      if (!IsInTransaction)
+        OnChanged(DataPreprocessingChangedEventType.ChangeColumn, -1, -1);
+    }
+
+    public override void RenameColumns(IList<string> names) {
+      if (names == null) throw new ArgumentNullException("names");
+      if (names.Count != variableNames.Count) throw new ArgumentException("number of names must match the number of columns.", "names");
+
+      SaveSnapshot(DataPreprocessingChangedEventType.ChangeColumn, -1, -1);
+      for (int i = 0; i < names.Count; i++)
+        variableNames[i] = names[i];
+
+      if (!IsInTransaction)
+        OnChanged(DataPreprocessingChangedEventType.ChangeColumn, -1, -1);
+    }
+
     public override Dataset ExportToDataset() {
       IList<IList> values = new List<IList>();
@@ -278,4 +309,9 @@
     }
 
+
+    private void ResetPartitions() {
+      TrainingPartition = new IntRange();
+      TestPartition = new IntRange();
+    }
 
     #endregion
Index: stable/HeuristicLab.DataPreprocessing/3.4/Interfaces/IPreprocessingData.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing/3.4/Interfaces/IPreprocessingData.cs	(revision 13287)
+++ stable/HeuristicLab.DataPreprocessing/3.4/Interfaces/IPreprocessingData.cs	(revision 13289)
@@ -47,4 +47,7 @@
     void DeleteColumn(int columnIndex);
 
+    void RenameColumn(int columnIndex, string name);
+    void RenameColumns(IList<string> names);
+
     bool AreAllStringColumns(IEnumerable<int> columnIndices);
     bool Validate(string value, out string errorMessage, int columnIndex);
Index: stable/HeuristicLab.DataPreprocessing/3.4/ProblemDataCreator.cs
===================================================================
--- stable/HeuristicLab.DataPreprocessing/3.4/ProblemDataCreator.cs	(revision 13287)
+++ stable/HeuristicLab.DataPreprocessing/3.4/ProblemDataCreator.cs	(revision 13289)
@@ -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 = inputVariables.ContainsKey(variable.Value) && oldProblemData.InputVariables.ItemChecked(inputVariables[variable.Value]);
         problemData.InputVariables.SetItemCheckedState(variable, isChecked);
       }
@@ -72,12 +72,17 @@
     private IDataAnalysisProblemData CreateRegressionData(RegressionProblemData oldProblemData) {
       var targetVariable = oldProblemData.TargetVariable;
-      // target variable must be double and must exist in the new dataset
-      return new RegressionProblemData(ExportedDataset, GetDoubleInputVariables(targetVariable), targetVariable, Transformations);
+      if (!context.Data.VariableNames.Contains(targetVariable))
+        targetVariable = context.Data.VariableNames.First();
+      var inputVariables = GetDoubleInputVariables(targetVariable);
+      var newProblemData = new RegressionProblemData(ExportedDataset, inputVariables, targetVariable, Transformations);
+      return newProblemData;
     }
 
     private IDataAnalysisProblemData CreateClassificationData(ClassificationProblemData oldProblemData) {
-      // target variable must be double and must exist in the new dataset
       var targetVariable = oldProblemData.TargetVariable;
-      var newProblemData = new ClassificationProblemData(ExportedDataset, GetDoubleInputVariables(targetVariable), targetVariable, Transformations);
+      if (!context.Data.VariableNames.Contains(targetVariable))
+        targetVariable = context.Data.VariableNames.First();
+      var inputVariables = GetDoubleInputVariables(targetVariable);
+      var newProblemData = new ClassificationProblemData(ExportedDataset, inputVariables, targetVariable, Transformations);
       newProblemData.PositiveClass = oldProblemData.PositiveClass;
       return newProblemData;
