Index: branches/DataPreprocessing/HeuristicLab.Scripting.Views/3.3/CSharpScriptView.Designer.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.Scripting.Views/3.3/CSharpScriptView.Designer.cs	(revision 11009)
+++ branches/DataPreprocessing/HeuristicLab.Scripting.Views/3.3/CSharpScriptView.Designer.cs	(revision 11009)
@@ -0,0 +1,162 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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.Windows.Forms;
+
+namespace HeuristicLab.Scripting.Views {
+  partial class CSharpScriptView {
+    /// <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 Component 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.components = new System.ComponentModel.Container();
+      this.startStopButton = new System.Windows.Forms.Button();
+      this.splitContainer2 = new System.Windows.Forms.SplitContainer();
+      this.variableStoreView = new HeuristicLab.Scripting.Views.VariableStoreView();
+      this.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
+      this.splitContainer2.Panel1.SuspendLayout();
+      this.splitContainer2.Panel2.SuspendLayout();
+      this.splitContainer2.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      this.nameTextBox.Location = new System.Drawing.Point(60, 0);
+      this.nameTextBox.Size = new System.Drawing.Size(750, 20);
+      // 
+      // infoLabel
+      // 
+      this.infoLabel.Location = new System.Drawing.Point(816, 4);
+      // 
+      // startStopButton
+      // 
+      this.startStopButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Play;
+      this.startStopButton.Location = new System.Drawing.Point(36, 26);
+      this.startStopButton.Name = "startStopButton";
+      this.startStopButton.Size = new System.Drawing.Size(24, 24);
+      this.startStopButton.TabIndex = 1;
+      this.startStopButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
+      this.toolTip.SetToolTip(this.startStopButton, "Run (F5)");
+      this.startStopButton.UseVisualStyleBackColor = true;
+      this.startStopButton.Click += new System.EventHandler(this.StartStopButtonOnClick);
+      // 
+      // splitContainer2
+      // 
+      this.splitContainer2.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.splitContainer2.Location = new System.Drawing.Point(3, 56);
+      this.splitContainer2.Name = "splitContainer2";
+      // 
+      // splitContainer2.Panel1
+      // 
+      this.splitContainer2.Panel1.Controls.Add(this.splitContainer1);
+      // 
+      // splitContainer2.Panel2
+      // 
+      this.splitContainer2.Panel2.Controls.Add(this.variableStoreView);
+      this.splitContainer2.Panel2.Controls.Add(this.viewHost);
+      this.splitContainer2.Size = new System.Drawing.Size(829, 543);
+      this.splitContainer2.SplitterDistance = 637;
+      this.splitContainer2.TabIndex = 7;
+      //
+      // splitContainer1
+      //
+      this.splitContainer1.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer1.Dock = DockStyle.Fill;
+      // 
+      // variableStoreView
+      // 
+      this.variableStoreView.Caption = "ItemCollection View";
+      this.variableStoreView.Content = null;
+      this.variableStoreView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.variableStoreView.Location = new System.Drawing.Point(0, 0);
+      this.variableStoreView.Name = "variableStoreView";
+      this.variableStoreView.ReadOnly = false;
+      this.variableStoreView.Size = new System.Drawing.Size(188, 543);
+      this.variableStoreView.TabIndex = 0;
+      // 
+      // viewHost
+      // 
+      this.viewHost.Caption = "View";
+      this.viewHost.Content = null;
+      this.viewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.viewHost.Enabled = false;
+      this.viewHost.Location = new System.Drawing.Point(0, 0);
+      this.viewHost.Name = "viewHost";
+      this.viewHost.ReadOnly = false;
+      this.viewHost.Size = new System.Drawing.Size(188, 543);
+      this.viewHost.TabIndex = 0;
+      this.viewHost.ViewsLabelVisible = true;
+      this.viewHost.ViewType = null;
+      // 
+      // ScriptView
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.splitContainer2);
+      this.Controls.Add(this.startStopButton);
+      this.Name = "ScriptView";
+      this.Size = new System.Drawing.Size(835, 602);
+      this.Controls.SetChildIndex(this.startStopButton, 0);
+      this.Controls.SetChildIndex(this.splitContainer2, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.infoLabel, 0);
+      this.splitContainer2.Panel1.ResumeLayout(false);
+      this.splitContainer2.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
+      this.splitContainer2.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.Button startStopButton;
+    protected System.Windows.Forms.SplitContainer splitContainer2;
+    protected MainForm.WindowsForms.ViewHost viewHost;
+    protected VariableStoreView variableStoreView;
+  }
+}
Index: branches/DataPreprocessing/HeuristicLab.Scripting.Views/3.3/CSharpScriptView.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.Scripting.Views/3.3/CSharpScriptView.cs	(revision 11009)
+++ branches/DataPreprocessing/HeuristicLab.Scripting.Views/3.3/CSharpScriptView.cs	(revision 11009)
@@ -0,0 +1,141 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 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.Windows.Forms;
+using HeuristicLab.Common;
+using HeuristicLab.Common.Resources;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Scripting.Views {
+
+  [View("C# Script View")]
+  [Content(typeof(CSharpScript), true)]
+  public partial class CSharpScriptView : ScriptView {
+    protected bool Running { get; set; }
+
+    public new CSharpScript Content {
+      get { return (CSharpScript)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public CSharpScriptView() {
+      InitializeComponent();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ScriptExecutionStarted += ContentOnScriptExecutionStarted;
+      Content.ScriptExecutionFinished += ContentOnScriptExecutionFinished;
+      Content.ConsoleOutputChanged += ContentOnConsoleOutputChanged;
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.ScriptExecutionStarted -= ContentOnScriptExecutionStarted;
+      Content.ScriptExecutionFinished -= ContentOnScriptExecutionFinished;
+      Content.ConsoleOutputChanged -= ContentOnConsoleOutputChanged;
+      base.DeregisterContentEvents();
+    }
+
+    #region Content event handlers
+    protected virtual void ContentOnScriptExecutionStarted(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke((Action<object, EventArgs>)ContentOnScriptExecutionStarted, sender, e);
+      else {
+        Locked = true;
+        ReadOnly = true;
+        startStopButton.Image = VSImageLibrary.Stop;
+        toolTip.SetToolTip(startStopButton, "Stop (Shift+F5)");
+        infoTabControl.SelectedTab = outputTabPage;
+      }
+    }
+    protected virtual void ContentOnScriptExecutionFinished(object sender, EventArgs<Exception> e) {
+      if (InvokeRequired)
+        Invoke((Action<object, EventArgs<Exception>>)ContentOnScriptExecutionFinished, sender, e);
+      else {
+        Locked = false;
+        ReadOnly = false;
+        startStopButton.Image = VSImageLibrary.Play;
+        toolTip.SetToolTip(startStopButton, "Run (F5)");
+        Running = false;
+        var ex = e.Value;
+        if (ex != null)
+          PluginInfrastructure.ErrorHandling.ShowErrorDialog(this, ex);
+      }
+    }
+    protected virtual void ContentOnConsoleOutputChanged(object sender, EventArgs<string> e) {
+      if (InvokeRequired)
+        Invoke((Action<object, EventArgs<string>>)ContentOnConsoleOutputChanged, sender, e);
+      else {
+        outputTextBox.AppendText(e.Value);
+      }
+    }
+    #endregion
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        variableStoreView.Content = null;
+      } else {
+        variableStoreView.Content = Content.VariableStore;
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      startStopButton.Enabled = Content != null && (!Locked || Running);
+    }
+
+    protected virtual void StartStopButtonOnClick(object sender, EventArgs e) {
+      if (Running) {
+        Content.Kill();
+      } else
+        if (Compile()) {
+          outputTextBox.Clear();
+          Content.Execute();
+          Running = true;
+        }
+    }
+
+    #region global HotKeys
+    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
+      switch (keyData) {
+        case Keys.F5:
+          if (Content != null && !Locked && !Running) {
+            if (Compile()) {
+              outputTextBox.Clear();
+              Content.Execute();
+              Running = true;
+            }
+          }
+          return true;
+        case Keys.F5 | Keys.Shift:
+          if (Running) Content.Kill();
+          return true;
+        case Keys.F6:
+          if (!Running) Compile();
+          return true;
+      }
+      return base.ProcessCmdKey(ref msg, keyData); ;
+    }
+    #endregion
+  }
+}
Index: branches/DataPreprocessing/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj
===================================================================
--- branches/DataPreprocessing/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj	(revision 10538)
+++ branches/DataPreprocessing/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj	(revision 11009)
@@ -86,4 +86,10 @@
   <ItemGroup>
     <None Include="Plugin.cs.frame" />
+    <Compile Include="CSharpScriptView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="CSharpScriptView.Designer.cs">
+      <DependentUpon>CSharpScriptView.cs</DependentUpon>
+    </Compile>
     <Compile Include="ScriptView.cs">
       <SubType>UserControl</SubType>
Index: branches/DataPreprocessing/HeuristicLab.Scripting.Views/3.3/ScriptView.Designer.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.Scripting.Views/3.3/ScriptView.Designer.cs	(revision 10538)
+++ branches/DataPreprocessing/HeuristicLab.Scripting.Views/3.3/ScriptView.Designer.cs	(revision 11009)
@@ -46,6 +46,12 @@
     private void InitializeComponent() {
       this.components = new System.ComponentModel.Container();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ScriptView));
       this.compilationLabel = new System.Windows.Forms.Label();
-      this.startStopButton = new System.Windows.Forms.Button();
+      this.imageList = new System.Windows.Forms.ImageList(this.components);
+      this.compileButton = new System.Windows.Forms.Button();
+      this.infoTabControl = new System.Windows.Forms.TabControl();
+      this.outputTabPage = new System.Windows.Forms.TabPage();
+      this.outputTextBox = new System.Windows.Forms.TextBox();
+      this.errorListTabPage = new System.Windows.Forms.TabPage();
       this.errorListView = new System.Windows.Forms.ListView();
       this.iconColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
@@ -55,27 +61,14 @@
       this.columnColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
       this.descriptionColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
-      this.imageList = new System.Windows.Forms.ImageList(this.components);
       this.codeEditor = new HeuristicLab.CodeEditor.CodeEditor();
       this.splitContainer1 = new System.Windows.Forms.SplitContainer();
-      this.splitContainer2 = new System.Windows.Forms.SplitContainer();
-      this.infoTabControl = new System.Windows.Forms.TabControl();
-      this.outputTabPage = new System.Windows.Forms.TabPage();
-      this.outputTextBox = new System.Windows.Forms.TextBox();
-      this.errorListTabPage = new System.Windows.Forms.TabPage();
-      this.variableStoreView = new HeuristicLab.Scripting.Views.VariableStoreView();
-      this.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
-      this.compileButton = new System.Windows.Forms.Button();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.infoTabControl.SuspendLayout();
+      this.outputTabPage.SuspendLayout();
+      this.errorListTabPage.SuspendLayout();
       ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
       this.splitContainer1.Panel1.SuspendLayout();
       this.splitContainer1.Panel2.SuspendLayout();
       this.splitContainer1.SuspendLayout();
-      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
-      this.splitContainer2.Panel1.SuspendLayout();
-      this.splitContainer2.Panel2.SuspendLayout();
-      this.splitContainer2.SuspendLayout();
-      this.infoTabControl.SuspendLayout();
-      this.outputTabPage.SuspendLayout();
-      this.errorListTabPage.SuspendLayout();
       this.SuspendLayout();
       // 
@@ -84,6 +77,6 @@
       this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
       this.errorProvider.SetIconPadding(this.nameTextBox, 2);
-      this.nameTextBox.Location = new System.Drawing.Point(60, 0);
-      this.nameTextBox.Size = new System.Drawing.Size(750, 20);
+      this.nameTextBox.Location = new System.Drawing.Point(69, 0);
+      this.nameTextBox.Size = new System.Drawing.Size(741, 20);
       // 
       // infoLabel
@@ -101,15 +94,67 @@
       this.compilationLabel.Text = "Not compiled";
       // 
-      // startStopButton
-      // 
-      this.startStopButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Play;
-      this.startStopButton.Location = new System.Drawing.Point(36, 26);
-      this.startStopButton.Name = "startStopButton";
-      this.startStopButton.Size = new System.Drawing.Size(24, 24);
-      this.startStopButton.TabIndex = 1;
-      this.startStopButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
-      this.toolTip.SetToolTip(this.startStopButton, "Run (F5)");
-      this.startStopButton.UseVisualStyleBackColor = true;
-      this.startStopButton.Click += new System.EventHandler(this.startStopButton_Click);
+      // imageList
+      // 
+      this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+      this.imageList.ImageSize = new System.Drawing.Size(16, 16);
+      this.imageList.TransparentColor = System.Drawing.Color.Transparent;
+      // 
+      // compileButton
+      // 
+      this.compileButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Script;
+      this.compileButton.Location = new System.Drawing.Point(6, 26);
+      this.compileButton.Name = "compileButton";
+      this.compileButton.Size = new System.Drawing.Size(24, 24);
+      this.compileButton.TabIndex = 8;
+      this.compileButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
+      this.toolTip.SetToolTip(this.compileButton, "Compile (F6)");
+      this.compileButton.UseVisualStyleBackColor = true;
+      this.compileButton.Click += new System.EventHandler(this.CompileButtonOnClick);
+      // 
+      // infoTabControl
+      // 
+      this.infoTabControl.Controls.Add(this.outputTabPage);
+      this.infoTabControl.Controls.Add(this.errorListTabPage);
+      this.infoTabControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.infoTabControl.Location = new System.Drawing.Point(0, 0);
+      this.infoTabControl.Name = "infoTabControl";
+      this.infoTabControl.SelectedIndex = 0;
+      this.infoTabControl.Size = new System.Drawing.Size(832, 112);
+      this.infoTabControl.TabIndex = 1;
+      // 
+      // outputTabPage
+      // 
+      this.outputTabPage.Controls.Add(this.outputTextBox);
+      this.outputTabPage.Location = new System.Drawing.Point(4, 22);
+      this.outputTabPage.Name = "outputTabPage";
+      this.outputTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.outputTabPage.Size = new System.Drawing.Size(824, 86);
+      this.outputTabPage.TabIndex = 1;
+      this.outputTabPage.Text = "Output";
+      this.outputTabPage.UseVisualStyleBackColor = true;
+      // 
+      // outputTextBox
+      // 
+      this.outputTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.outputTextBox.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.outputTextBox.Location = new System.Drawing.Point(3, 3);
+      this.outputTextBox.Multiline = true;
+      this.outputTextBox.Name = "outputTextBox";
+      this.outputTextBox.ReadOnly = true;
+      this.outputTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both;
+      this.outputTextBox.Size = new System.Drawing.Size(818, 80);
+      this.outputTextBox.TabIndex = 0;
+      this.outputTextBox.WordWrap = false;
+      // 
+      // errorListTabPage
+      // 
+      this.errorListTabPage.Controls.Add(this.errorListView);
+      this.errorListTabPage.Location = new System.Drawing.Point(4, 22);
+      this.errorListTabPage.Name = "errorListTabPage";
+      this.errorListTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.errorListTabPage.Size = new System.Drawing.Size(824, 86);
+      this.errorListTabPage.TabIndex = 0;
+      this.errorListTabPage.Text = "Error List";
+      this.errorListTabPage.UseVisualStyleBackColor = true;
       // 
       // errorListView
@@ -128,5 +173,5 @@
       this.errorListView.Location = new System.Drawing.Point(3, 3);
       this.errorListView.Name = "errorListView";
-      this.errorListView.Size = new System.Drawing.Size(623, 79);
+      this.errorListView.Size = new System.Drawing.Size(818, 80);
       this.errorListView.SmallImageList = this.imageList;
       this.errorListView.TabIndex = 0;
@@ -158,10 +203,4 @@
       this.descriptionColumnHeader.Text = "Description";
       // 
-      // imageList
-      // 
-      this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
-      this.imageList.ImageSize = new System.Drawing.Size(16, 16);
-      this.imageList.TransparentColor = System.Drawing.Color.Transparent;
-      // 
       // codeEditor
       // 
@@ -170,9 +209,9 @@
       this.codeEditor.Name = "codeEditor";
       this.codeEditor.Prefix = "";
-      this.codeEditor.Size = new System.Drawing.Size(637, 428);
+      this.codeEditor.Size = new System.Drawing.Size(832, 430);
       this.codeEditor.Suffix = "";
       this.codeEditor.TabIndex = 0;
       this.codeEditor.UserCode = "";
-      this.codeEditor.TextEditorTextChanged += new System.EventHandler(this.codeEditor_TextEditorTextChanged);
+      this.codeEditor.TextEditorTextChanged += new System.EventHandler(this.CodeEditorOnTextEditorTextChanged);
       // 
       // splitContainer1
@@ -181,149 +220,42 @@
             | System.Windows.Forms.AnchorStyles.Left)
             | System.Windows.Forms.AnchorStyles.Right)));
-      this.splitContainer1.Location = new System.Drawing.Point(3, 56);
+      this.splitContainer1.Location = new System.Drawing.Point(0, 56);
       this.splitContainer1.Name = "splitContainer1";
+      this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
       // 
       // splitContainer1.Panel1
       // 
-      this.splitContainer1.Panel1.Controls.Add(this.splitContainer2);
+      this.splitContainer1.Panel1.Controls.Add(this.codeEditor);
       // 
       // splitContainer1.Panel2
       // 
-      this.splitContainer1.Panel2.Controls.Add(this.variableStoreView);
-      this.splitContainer1.Panel2.Controls.Add(this.viewHost);
-      this.splitContainer1.Size = new System.Drawing.Size(829, 543);
-      this.splitContainer1.SplitterDistance = 637;
-      this.splitContainer1.TabIndex = 7;
-      // 
-      // splitContainer2
-      // 
-      this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.splitContainer2.Location = new System.Drawing.Point(0, 0);
-      this.splitContainer2.Name = "splitContainer2";
-      this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;
-      // 
-      // splitContainer2.Panel1
-      // 
-      this.splitContainer2.Panel1.Controls.Add(this.codeEditor);
-      // 
-      // splitContainer2.Panel2
-      // 
-      this.splitContainer2.Panel2.Controls.Add(this.infoTabControl);
-      this.splitContainer2.Size = new System.Drawing.Size(637, 543);
-      this.splitContainer2.SplitterDistance = 428;
-      this.splitContainer2.TabIndex = 5;
-      // 
-      // infoTabControl
-      // 
-      this.infoTabControl.Controls.Add(this.outputTabPage);
-      this.infoTabControl.Controls.Add(this.errorListTabPage);
-      this.infoTabControl.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.infoTabControl.Location = new System.Drawing.Point(0, 0);
-      this.infoTabControl.Name = "infoTabControl";
-      this.infoTabControl.SelectedIndex = 0;
-      this.infoTabControl.Size = new System.Drawing.Size(637, 111);
-      this.infoTabControl.TabIndex = 1;
-      // 
-      // outputTabPage
-      // 
-      this.outputTabPage.Controls.Add(this.outputTextBox);
-      this.outputTabPage.Location = new System.Drawing.Point(4, 22);
-      this.outputTabPage.Name = "outputTabPage";
-      this.outputTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.outputTabPage.Size = new System.Drawing.Size(629, 85);
-      this.outputTabPage.TabIndex = 1;
-      this.outputTabPage.Text = "Output";
-      this.outputTabPage.UseVisualStyleBackColor = true;
-      // 
-      // outputTextBox
-      // 
-      this.outputTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.outputTextBox.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-      this.outputTextBox.Location = new System.Drawing.Point(3, 3);
-      this.outputTextBox.Multiline = true;
-      this.outputTextBox.Name = "outputTextBox";
-      this.outputTextBox.ReadOnly = true;
-      this.outputTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both;
-      this.outputTextBox.Size = new System.Drawing.Size(623, 79);
-      this.outputTextBox.TabIndex = 0;
-      this.outputTextBox.WordWrap = false;
-      // 
-      // errorListTabPage
-      // 
-      this.errorListTabPage.Controls.Add(this.errorListView);
-      this.errorListTabPage.Location = new System.Drawing.Point(4, 22);
-      this.errorListTabPage.Name = "errorListTabPage";
-      this.errorListTabPage.Padding = new System.Windows.Forms.Padding(3);
-      this.errorListTabPage.Size = new System.Drawing.Size(629, 85);
-      this.errorListTabPage.TabIndex = 0;
-      this.errorListTabPage.Text = "Error List";
-      this.errorListTabPage.UseVisualStyleBackColor = true;
-      // 
-      // variableStoreView
-      // 
-      this.variableStoreView.Caption = "ItemCollection View";
-      this.variableStoreView.Content = null;
-      this.variableStoreView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.variableStoreView.Location = new System.Drawing.Point(0, 0);
-      this.variableStoreView.Name = "variableStoreView";
-      this.variableStoreView.ReadOnly = false;
-      this.variableStoreView.Size = new System.Drawing.Size(188, 543);
-      this.variableStoreView.TabIndex = 0;
-      // 
-      // viewHost
-      // 
-      this.viewHost.Caption = "View";
-      this.viewHost.Content = null;
-      this.viewHost.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.viewHost.Enabled = false;
-      this.viewHost.Location = new System.Drawing.Point(0, 0);
-      this.viewHost.Name = "viewHost";
-      this.viewHost.ReadOnly = false;
-      this.viewHost.Size = new System.Drawing.Size(188, 543);
-      this.viewHost.TabIndex = 0;
-      this.viewHost.ViewsLabelVisible = true;
-      this.viewHost.ViewType = null;
-      // 
-      // compileButton
-      // 
-      this.compileButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Script;
-      this.compileButton.Location = new System.Drawing.Point(6, 26);
-      this.compileButton.Name = "compileButton";
-      this.compileButton.Size = new System.Drawing.Size(24, 24);
-      this.compileButton.TabIndex = 8;
-      this.compileButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
-      this.toolTip.SetToolTip(this.compileButton, "Compile (F6)");
-      this.compileButton.UseVisualStyleBackColor = true;
-      this.compileButton.Click += new System.EventHandler(this.compileButton_Click);
+      this.splitContainer1.Panel2.Controls.Add(this.infoTabControl);
+      this.splitContainer1.Size = new System.Drawing.Size(832, 546);
+      this.splitContainer1.SplitterDistance = 430;
+      this.splitContainer1.TabIndex = 9;
       // 
       // ScriptView
       // 
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.splitContainer1);
       this.Controls.Add(this.compileButton);
-      this.Controls.Add(this.splitContainer1);
-      this.Controls.Add(this.startStopButton);
       this.Controls.Add(this.compilationLabel);
       this.Name = "ScriptView";
       this.Size = new System.Drawing.Size(835, 602);
       this.Controls.SetChildIndex(this.compilationLabel, 0);
-      this.Controls.SetChildIndex(this.startStopButton, 0);
+      this.Controls.SetChildIndex(this.compileButton, 0);
       this.Controls.SetChildIndex(this.splitContainer1, 0);
       this.Controls.SetChildIndex(this.nameLabel, 0);
       this.Controls.SetChildIndex(this.nameTextBox, 0);
       this.Controls.SetChildIndex(this.infoLabel, 0);
-      this.Controls.SetChildIndex(this.compileButton, 0);
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.infoTabControl.ResumeLayout(false);
+      this.outputTabPage.ResumeLayout(false);
+      this.outputTabPage.PerformLayout();
+      this.errorListTabPage.ResumeLayout(false);
       this.splitContainer1.Panel1.ResumeLayout(false);
       this.splitContainer1.Panel2.ResumeLayout(false);
       ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
       this.splitContainer1.ResumeLayout(false);
-      this.splitContainer2.Panel1.ResumeLayout(false);
-      this.splitContainer2.Panel2.ResumeLayout(false);
-      ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
-      this.splitContainer2.ResumeLayout(false);
-      this.infoTabControl.ResumeLayout(false);
-      this.outputTabPage.ResumeLayout(false);
-      this.outputTabPage.PerformLayout();
-      this.errorListTabPage.ResumeLayout(false);
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -333,24 +265,20 @@
     #endregion
 
-    private System.Windows.Forms.Label compilationLabel;
-    private System.Windows.Forms.Button startStopButton;
-    private System.Windows.Forms.ListView errorListView;
-    private System.Windows.Forms.ColumnHeader descriptionColumnHeader;
-    private System.Windows.Forms.ColumnHeader lineColumnHeader;
-    private System.Windows.Forms.ColumnHeader columnColumnHeader;
-    private CodeEditor.CodeEditor codeEditor;
-    private System.Windows.Forms.SplitContainer splitContainer1;
-    private System.Windows.Forms.SplitContainer splitContainer2;
-    private MainForm.WindowsForms.ViewHost viewHost;
-    private VariableStoreView variableStoreView;
-    private System.Windows.Forms.ColumnHeader errorNumberColumnHeader;
-    private System.Windows.Forms.ColumnHeader categoryColumnHeader;
-    private System.Windows.Forms.TabControl infoTabControl;
-    private System.Windows.Forms.TabPage errorListTabPage;
-    private System.Windows.Forms.TabPage outputTabPage;
-    private System.Windows.Forms.TextBox outputTextBox;
-    private System.Windows.Forms.Button compileButton;
-    private System.Windows.Forms.ColumnHeader iconColumnHeader;
-    private System.Windows.Forms.ImageList imageList;
+    protected System.Windows.Forms.Label compilationLabel;
+    protected System.Windows.Forms.Button compileButton;
+    protected System.Windows.Forms.ImageList imageList;
+    protected System.Windows.Forms.TabControl infoTabControl;
+    protected System.Windows.Forms.TabPage outputTabPage;
+    protected System.Windows.Forms.TextBox outputTextBox;
+    protected System.Windows.Forms.TabPage errorListTabPage;
+    protected System.Windows.Forms.ListView errorListView;
+    protected System.Windows.Forms.ColumnHeader iconColumnHeader;
+    protected System.Windows.Forms.ColumnHeader categoryColumnHeader;
+    protected System.Windows.Forms.ColumnHeader errorNumberColumnHeader;
+    protected System.Windows.Forms.ColumnHeader lineColumnHeader;
+    protected System.Windows.Forms.ColumnHeader columnColumnHeader;
+    protected System.Windows.Forms.ColumnHeader descriptionColumnHeader;
+    protected CodeEditor.CodeEditor codeEditor;
+    protected System.Windows.Forms.SplitContainer splitContainer1;
   }
 }
Index: branches/DataPreprocessing/HeuristicLab.Scripting.Views/3.3/ScriptView.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.Scripting.Views/3.3/ScriptView.cs	(revision 10538)
+++ branches/DataPreprocessing/HeuristicLab.Scripting.Views/3.3/ScriptView.cs	(revision 11009)
@@ -26,5 +26,4 @@
 using System.Linq;
 using System.Windows.Forms;
-using HeuristicLab.Common;
 using HeuristicLab.Common.Resources;
 using HeuristicLab.Core.Views;
@@ -36,9 +35,7 @@
   [Content(typeof(Script), true)]
   public partial class ScriptView : NamedItemView {
-    private bool running;
-
     public new Script Content {
       get { return (Script)base.Content; }
-      set { base.Content = (Script)value; }
+      set { base.Content = value; }
     }
 
@@ -46,58 +43,19 @@
       InitializeComponent();
       errorListView.SmallImageList.Images.AddRange(new Image[] { VSImageLibrary.Warning, VSImageLibrary.Error });
-      AdjustErrorListViewColumnSizes();
     }
 
     protected override void RegisterContentEvents() {
       base.RegisterContentEvents();
-      Content.CodeChanged += Content_CodeChanged;
-      Content.ScriptExecutionStarted += Content_ScriptExecutionStarted;
-      Content.ScriptExecutionFinished += Content_ScriptExecutionFinished;
-      Content.ConsoleOutputChanged += Content_ConsoleOutputChanged;
+      Content.CodeChanged += ContentOnCodeChanged;
     }
 
     protected override void DeregisterContentEvents() {
-      Content.CodeChanged -= Content_CodeChanged;
-      Content.ScriptExecutionStarted -= Content_ScriptExecutionStarted;
-      Content.ScriptExecutionFinished -= Content_ScriptExecutionFinished;
-      Content.ConsoleOutputChanged -= Content_ConsoleOutputChanged;
+      Content.CodeChanged -= ContentOnCodeChanged;
       base.DeregisterContentEvents();
     }
 
-    #region Content event handlers
-    private void Content_CodeChanged(object sender, EventArgs e) {
+    protected virtual void ContentOnCodeChanged(object sender, EventArgs e) {
       codeEditor.UserCode = Content.Code;
     }
-    private void Content_ScriptExecutionStarted(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke((Action<object, EventArgs>)Content_ScriptExecutionStarted, sender, e);
-      else {
-        Locked = true;
-        ReadOnly = true;
-        startStopButton.Image = VSImageLibrary.Stop;
-        infoTabControl.SelectedTab = outputTabPage;
-      }
-    }
-    private void Content_ScriptExecutionFinished(object sender, EventArgs<Exception> e) {
-      if (InvokeRequired)
-        Invoke((Action<object, EventArgs<Exception>>)Content_ScriptExecutionFinished, sender, e);
-      else {
-        Locked = false;
-        ReadOnly = false;
-        startStopButton.Image = VSImageLibrary.Play;
-        running = false;
-        var ex = e.Value;
-        if (ex != null)
-          PluginInfrastructure.ErrorHandling.ShowErrorDialog(this, ex);
-      }
-    }
-    private void Content_ConsoleOutputChanged(object sender, EventArgs<string> e) {
-      if (InvokeRequired)
-        Invoke((Action<object, EventArgs<string>>)Content_ConsoleOutputChanged, sender, e);
-      else {
-        outputTextBox.AppendText(e.Value);
-      }
-    }
-    #endregion
 
     protected override void OnContentChanged() {
@@ -105,10 +63,8 @@
       if (Content == null) {
         codeEditor.UserCode = string.Empty;
-        variableStoreView.Content = null;
       } else {
         codeEditor.UserCode = Content.Code;
         foreach (var asm in Content.GetAssemblies())
           codeEditor.AddAssembly(asm);
-        variableStoreView.Content = Content.VariableStore;
         if (Content.CompileErrors == null) {
           compilationLabel.ForeColor = SystemColors.ControlDarkDark;
@@ -127,56 +83,26 @@
       base.SetEnabledStateOfControls();
       compileButton.Enabled = Content != null && !Locked && !ReadOnly;
-      startStopButton.Enabled = Content != null && (!Locked || running);
       codeEditor.Enabled = Content != null && !Locked && !ReadOnly;
     }
 
-    #region Child Control event handlers
-    private void compileButton_Click(object sender, EventArgs e) {
+    protected virtual void CompileButtonOnClick(object sender, EventArgs e) {
       Compile();
     }
 
-    private void startStopButton_Click(object sender, EventArgs e) {
-      if (running) {
-        Content.Kill();
-      } else
-        if (Compile()) {
-          outputTextBox.Clear();
-          Content.Execute();
-          running = true;
-        }
-    }
-
-    private void codeEditor_TextEditorTextChanged(object sender, EventArgs e) {
+    protected virtual void CodeEditorOnTextEditorTextChanged(object sender, EventArgs e) {
+      if (Content == null) return;
       Content.Code = codeEditor.UserCode;
     }
-    #endregion
-
-    #region global HotKeys
     protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
       switch (keyData) {
-        case Keys.F5:
-          if (Content != null && !Locked) {
-            if (Compile()) {
-              outputTextBox.Clear();
-              Content.Execute();
-              running = true;
-            } else
-              infoTabControl.SelectedTab = errorListTabPage;
-          }
-          break;
-        case Keys.F5 | Keys.Shift:
-          if (running) Content.Kill();
-          break;
         case Keys.F6:
-          if (!Compile() || Content.CompileErrors.HasWarnings)
-            infoTabControl.SelectedTab = errorListTabPage;
-          break;
+          if (Content != null && !Locked)
+            Compile();
+          return true;
       }
       return base.ProcessCmdKey(ref msg, keyData);
     }
-    #endregion
 
-    #region Auxiliary functions
-    private bool Compile() {
+    public virtual bool Compile() {
       ReadOnly = true;
       Locked = true;
@@ -188,8 +114,15 @@
         return true;
       } catch {
-        outputTextBox.AppendText("Compilation failed.");
-        return false;
+        if (Content.CompileErrors.HasErrors) {
+          outputTextBox.AppendText("Compilation failed.");
+          return false;
+        } else {
+          outputTextBox.AppendText("Compilation succeeded.");
+          return true;
+        }
       } finally {
         ShowCompilationResults();
+        if (Content.CompileErrors.Count > 0)
+          infoTabControl.SelectedTab = errorListTabPage;
         ReadOnly = false;
         Locked = false;
@@ -197,7 +130,6 @@
       }
     }
-    #endregion
 
-    private void ShowCompilationResults() {
+    protected virtual void ShowCompilationResults() {
       if (Content.CompileErrors.Count == 0) return;
       var msgs = Content.CompileErrors.OfType<CompilerError>()
@@ -220,8 +152,7 @@
     }
 
-    private void AdjustErrorListViewColumnSizes() {
+    protected virtual void AdjustErrorListViewColumnSizes() {
       foreach (ColumnHeader ch in errorListView.Columns)
-        // adjusts the column width to the width of the column
-        // header or the column content, whichever is greater
+        // adjusts the column width to the width of the column header
         ch.Width = -2;
     }
Index: branches/DataPreprocessing/HeuristicLab.Scripting.Views/3.3/VariableStoreView.cs
===================================================================
--- branches/DataPreprocessing/HeuristicLab.Scripting.Views/3.3/VariableStoreView.cs	(revision 10538)
+++ branches/DataPreprocessing/HeuristicLab.Scripting.Views/3.3/VariableStoreView.cs	(revision 11009)
@@ -21,5 +21,4 @@
 
 using System;
-using System.Collections;
 using System.Collections.Generic;
 using System.Drawing;
@@ -220,11 +219,11 @@
 
         if (items.Count > 0) {
-          DataObject data = new DataObject();
+          var data = new DataObject();
           if (items.Count == 1) data.SetData(HeuristicLab.Common.Constants.DragDropDataFormat, items[0]);
           else data.SetData(HeuristicLab.Common.Constants.DragDropDataFormat, items);
           if (ReadOnly) {
-            DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link);
+            DoDragDrop(data, DragDropEffects.Copy);
           } else {
-            DragDropEffects result = DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link | DragDropEffects.Move);
+            var result = DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link | DragDropEffects.Move);
             if ((result & DragDropEffects.Move) == DragDropEffects.Move) {
               foreach (string item in items) Content.Remove(item);
@@ -235,13 +234,5 @@
     }
     protected virtual void variableListView_DragEnter(object sender, DragEventArgs e) {
-      validDragOperation = false;
-      if (!Locked && !ReadOnly && (e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) is object)) {
-        validDragOperation = true;
-      } else if (!Locked && !ReadOnly && (e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) is IEnumerable)) {
-        validDragOperation = true;
-        IEnumerable items = (IEnumerable)e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat);
-        foreach (object item in items)
-          validDragOperation = validDragOperation && (item is object);
-      }
+      validDragOperation = !Locked && !ReadOnly && e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) != null;
     }
     protected virtual void variableListView_DragOver(object sender, DragEventArgs e) {
@@ -257,33 +248,14 @@
     protected virtual void variableListView_DragDrop(object sender, DragEventArgs e) {
       if (e.Effect != DragDropEffects.None) {
-        if (e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) is IEnumerable) {
-          IEnumerable<object> items = ((IEnumerable)e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat)).Cast<object>();
-          if (e.Effect.HasFlag(DragDropEffects.Copy)) {
-            var cloner = new Cloner();
-            var clonedItems = new List<object>();
-            foreach (var item in items) {
-              var dc = item as IDeepCloneable;
-              clonedItems.Add(dc != null ? cloner.Clone(dc) : item);
-            }
-            items = clonedItems;
-          }
-          foreach (var item in items) {
-            string name = GenerateNewVariableName();
-            Content.Add(name, item);
-            var listViewItem = variableListView.FindItemWithText(name);
-            listViewItem.BeginEdit();
-          }
-        } else {
-          object item = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat);
-          if (e.Effect.HasFlag(DragDropEffects.Copy)) {
-            var cloner = new Cloner();
-            var dc = item as IDeepCloneable;
-            if (dc != null) item = cloner.Clone(dc);
-          }
-          string name = GenerateNewVariableName();
-          Content.Add(name, item);
-          var listViewItem = variableListView.FindItemWithText(name);
-          listViewItem.BeginEdit();
-        }
+        object item = e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat);
+        if (e.Effect.HasFlag(DragDropEffects.Copy)) {
+          var cloner = new Cloner();
+          var dc = item as IDeepCloneable;
+          if (dc != null) item = cloner.Clone(dc);
+        }
+        string name = GenerateNewVariableName();
+        Content.Add(name, item);
+        var listViewItem = variableListView.FindItemWithText(name);
+        listViewItem.BeginEdit();
       }
     }
@@ -423,5 +395,5 @@
       string toolTipText = string.Join(Environment.NewLine, lines);
       if (!serializable)
-        toolTipText += Environment.NewLine + "CAUTION: Type is not serializable!";
+        toolTipText = "Caution: Type is not serializable!" + Environment.NewLine + toolTipText;
       return toolTipText;
     }
