Index: branches/HLScript/HeuristicLab 3.3.sln
===================================================================
--- branches/HLScript/HeuristicLab 3.3.sln	(revision 10331)
+++ branches/HLScript/HeuristicLab 3.3.sln	(revision 10332)
@@ -381,4 +381,8 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4", "HeuristicLab.Problems.DataAnalysis.Trading.Views\3.4\HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj", "{CB3D0A1E-1BE8-476B-A53C-2B189E30064F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.HLScript-3.3", "HeuristicLab.HLScript\3.3\HeuristicLab.HLScript-3.3.csproj", "{21977CC3-1757-4B3B-87BD-FF817AAA900F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.HLScript.Views-3.3", "HeuristicLab.HLScript.Views\3.3\HeuristicLab.HLScript.Views-3.3.csproj", "{0C2917C8-7AA8-4E18-800A-C4D064F992ED}"
 EndProject
 Global
@@ -1856,4 +1860,28 @@
 		{CB3D0A1E-1BE8-476B-A53C-2B189E30064F}.Release|x86.ActiveCfg = Release|x86
 		{CB3D0A1E-1BE8-476B-A53C-2B189E30064F}.Release|x86.Build.0 = Release|x86
+		{21977CC3-1757-4B3B-87BD-FF817AAA900F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{21977CC3-1757-4B3B-87BD-FF817AAA900F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{21977CC3-1757-4B3B-87BD-FF817AAA900F}.Debug|x64.ActiveCfg = Debug|x64
+		{21977CC3-1757-4B3B-87BD-FF817AAA900F}.Debug|x64.Build.0 = Debug|x64
+		{21977CC3-1757-4B3B-87BD-FF817AAA900F}.Debug|x86.ActiveCfg = Debug|x86
+		{21977CC3-1757-4B3B-87BD-FF817AAA900F}.Debug|x86.Build.0 = Debug|x86
+		{21977CC3-1757-4B3B-87BD-FF817AAA900F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{21977CC3-1757-4B3B-87BD-FF817AAA900F}.Release|Any CPU.Build.0 = Release|Any CPU
+		{21977CC3-1757-4B3B-87BD-FF817AAA900F}.Release|x64.ActiveCfg = Release|x64
+		{21977CC3-1757-4B3B-87BD-FF817AAA900F}.Release|x64.Build.0 = Release|x64
+		{21977CC3-1757-4B3B-87BD-FF817AAA900F}.Release|x86.ActiveCfg = Release|x86
+		{21977CC3-1757-4B3B-87BD-FF817AAA900F}.Release|x86.Build.0 = Release|x86
+		{0C2917C8-7AA8-4E18-800A-C4D064F992ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{0C2917C8-7AA8-4E18-800A-C4D064F992ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{0C2917C8-7AA8-4E18-800A-C4D064F992ED}.Debug|x64.ActiveCfg = Debug|x64
+		{0C2917C8-7AA8-4E18-800A-C4D064F992ED}.Debug|x64.Build.0 = Debug|x64
+		{0C2917C8-7AA8-4E18-800A-C4D064F992ED}.Debug|x86.ActiveCfg = Debug|x86
+		{0C2917C8-7AA8-4E18-800A-C4D064F992ED}.Debug|x86.Build.0 = Debug|x86
+		{0C2917C8-7AA8-4E18-800A-C4D064F992ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{0C2917C8-7AA8-4E18-800A-C4D064F992ED}.Release|Any CPU.Build.0 = Release|Any CPU
+		{0C2917C8-7AA8-4E18-800A-C4D064F992ED}.Release|x64.ActiveCfg = Release|x64
+		{0C2917C8-7AA8-4E18-800A-C4D064F992ED}.Release|x64.Build.0 = Release|x64
+		{0C2917C8-7AA8-4E18-800A-C4D064F992ED}.Release|x86.ActiveCfg = Release|x86
+		{0C2917C8-7AA8-4E18-800A-C4D064F992ED}.Release|x86.Build.0 = Release|x86
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
Index: branches/HLScript/HeuristicLab.CodeEditor/3.3/CodeEditor.cs
===================================================================
--- branches/HLScript/HeuristicLab.CodeEditor/3.3/CodeEditor.cs	(revision 10331)
+++ branches/HLScript/HeuristicLab.CodeEditor/3.3/CodeEditor.cs	(revision 10332)
@@ -140,4 +140,11 @@
       if (TextEditorValidated != null)
         TextEditorValidated(this, EventArgs.Empty);
+    }
+
+    public event EventHandler TextEditorTextChanged;
+
+    protected void OnTextEditorTextChanged() {
+      if (TextEditorTextChanged != null)
+        TextEditorTextChanged(this, EventArgs.Empty);
     }
 
@@ -188,4 +195,5 @@
 
       textEditor.Validated += (s, a) => { OnTextEditorValidated(); };
+      textEditor.TextChanged += (s, a) => { OnTextEditorTextChanged(); };
       InitializeImageList();
     }
Index: branches/HLScript/HeuristicLab.HLScript.Views/3.3/HLScriptView.Designer.cs
===================================================================
--- branches/HLScript/HeuristicLab.HLScript.Views/3.3/HLScriptView.Designer.cs	(revision 10332)
+++ branches/HLScript/HeuristicLab.HLScript.Views/3.3/HLScriptView.Designer.cs	(revision 10332)
@@ -0,0 +1,326 @@
+﻿#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
+
+namespace HeuristicLab.HLScript.Views {
+  partial class HLScriptView {
+    /// <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.compilationLabel = new System.Windows.Forms.Label();
+      this.showCodeButton = new System.Windows.Forms.Button();
+      this.startStopButton = new System.Windows.Forms.Button();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.errorListView = new System.Windows.Forms.ListView();
+      this.categoryColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.errorNumberColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.lineColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.columnColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.descriptionColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.codeEditor = new HeuristicLab.CodeEditor.CodeEditor();
+      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+      this.splitContainer2 = new System.Windows.Forms.SplitContainer();
+      this.tabControl1 = new System.Windows.Forms.TabControl();
+      this.errorListTabPage = new System.Windows.Forms.TabPage();
+      this.outputTabPage = new System.Windows.Forms.TabPage();
+      this.outputTextBox = new System.Windows.Forms.TextBox();
+      this.variableStoreView = new HeuristicLab.HLScript.Views.VariableStoreView();
+      this.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      ((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.tabControl1.SuspendLayout();
+      this.errorListTabPage.SuspendLayout();
+      this.outputTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // compilationLabel
+      // 
+      this.compilationLabel.AutoSize = true;
+      this.compilationLabel.ForeColor = System.Drawing.SystemColors.ControlDarkDark;
+      this.compilationLabel.Location = new System.Drawing.Point(63, 9);
+      this.compilationLabel.Name = "compilationLabel";
+      this.compilationLabel.Size = new System.Drawing.Size(69, 13);
+      this.compilationLabel.TabIndex = 3;
+      this.compilationLabel.Text = "Not compiled";
+      // 
+      // showCodeButton
+      // 
+      this.showCodeButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.PrintPreview;
+      this.showCodeButton.Location = new System.Drawing.Point(33, 3);
+      this.showCodeButton.Name = "showCodeButton";
+      this.showCodeButton.Size = new System.Drawing.Size(24, 24);
+      this.showCodeButton.TabIndex = 2;
+      this.showCodeButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
+      this.toolTip.SetToolTip(this.showCodeButton, "Show generated code");
+      this.showCodeButton.UseVisualStyleBackColor = true;
+      this.showCodeButton.Click += new System.EventHandler(this.showCodeButton_Click);
+      // 
+      // startStopButton
+      // 
+      this.startStopButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Play;
+      this.startStopButton.Location = new System.Drawing.Point(3, 3);
+      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);
+      // 
+      // errorListView
+      // 
+      this.errorListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.categoryColumnHeader,
+            this.errorNumberColumnHeader,
+            this.lineColumnHeader,
+            this.columnColumnHeader,
+            this.descriptionColumnHeader});
+      this.errorListView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.errorListView.FullRowSelect = true;
+      this.errorListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
+      this.errorListView.HideSelection = false;
+      this.errorListView.Location = new System.Drawing.Point(3, 3);
+      this.errorListView.Name = "errorListView";
+      this.errorListView.Size = new System.Drawing.Size(623, 83);
+      this.errorListView.TabIndex = 0;
+      this.errorListView.UseCompatibleStateImageBehavior = false;
+      this.errorListView.View = System.Windows.Forms.View.Details;
+      // 
+      // categoryColumnHeader
+      // 
+      this.categoryColumnHeader.Text = "Category";
+      // 
+      // errorNumberColumnHeader
+      // 
+      this.errorNumberColumnHeader.Text = "Error Number";
+      this.errorNumberColumnHeader.Width = 78;
+      // 
+      // lineColumnHeader
+      // 
+      this.lineColumnHeader.Text = "Line";
+      this.lineColumnHeader.Width = 50;
+      // 
+      // columnColumnHeader
+      // 
+      this.columnColumnHeader.Text = "Column";
+      this.columnColumnHeader.Width = 50;
+      // 
+      // descriptionColumnHeader
+      // 
+      this.descriptionColumnHeader.Text = "Description";
+      this.descriptionColumnHeader.Width = 600;
+      // 
+      // codeEditor
+      // 
+      this.codeEditor.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.codeEditor.Location = new System.Drawing.Point(0, 0);
+      this.codeEditor.Name = "codeEditor";
+      this.codeEditor.Prefix = "";
+      this.codeEditor.Size = new System.Drawing.Size(637, 447);
+      this.codeEditor.Suffix = "";
+      this.codeEditor.TabIndex = 0;
+      this.codeEditor.UserCode = "";
+      this.codeEditor.TextEditorTextChanged += new System.EventHandler(this.codeEditor_TextEditorTextChanged);
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.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.splitContainer1.Location = new System.Drawing.Point(3, 33);
+      this.splitContainer1.Name = "splitContainer1";
+      // 
+      // splitContainer1.Panel1
+      // 
+      this.splitContainer1.Panel1.Controls.Add(this.splitContainer2);
+      // 
+      // splitContainer1.Panel2
+      // 
+      this.splitContainer1.Panel2.Controls.Add(this.variableStoreView);
+      this.splitContainer1.Panel2.Controls.Add(this.viewHost);
+      this.splitContainer1.Size = new System.Drawing.Size(829, 566);
+      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.tabControl1);
+      this.splitContainer2.Size = new System.Drawing.Size(637, 566);
+      this.splitContainer2.SplitterDistance = 447;
+      this.splitContainer2.TabIndex = 5;
+      // 
+      // tabControl1
+      // 
+      this.tabControl1.Controls.Add(this.errorListTabPage);
+      this.tabControl1.Controls.Add(this.outputTabPage);
+      this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tabControl1.Location = new System.Drawing.Point(0, 0);
+      this.tabControl1.Name = "tabControl1";
+      this.tabControl1.SelectedIndex = 0;
+      this.tabControl1.Size = new System.Drawing.Size(637, 115);
+      this.tabControl1.TabIndex = 1;
+      // 
+      // 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, 89);
+      this.errorListTabPage.TabIndex = 0;
+      this.errorListTabPage.Text = "Error List";
+      this.errorListTabPage.UseVisualStyleBackColor = true;
+      // 
+      // 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, 89);
+      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, 83);
+      this.outputTextBox.TabIndex = 0;
+      this.outputTextBox.WordWrap = false;
+      // 
+      // 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, 566);
+      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, 566);
+      this.viewHost.TabIndex = 0;
+      this.viewHost.ViewsLabelVisible = true;
+      this.viewHost.ViewType = null;
+      // 
+      // HLScriptView
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.splitContainer1);
+      this.Controls.Add(this.startStopButton);
+      this.Controls.Add(this.compilationLabel);
+      this.Controls.Add(this.showCodeButton);
+      this.Name = "HLScriptView";
+      this.Size = new System.Drawing.Size(835, 602);
+      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.tabControl1.ResumeLayout(false);
+      this.errorListTabPage.ResumeLayout(false);
+      this.outputTabPage.ResumeLayout(false);
+      this.outputTabPage.PerformLayout();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button showCodeButton;
+    private System.Windows.Forms.Label compilationLabel;
+    private System.Windows.Forms.Button startStopButton;
+    private System.Windows.Forms.ToolTip toolTip;
+    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 tabControl1;
+    private System.Windows.Forms.TabPage errorListTabPage;
+    private System.Windows.Forms.TabPage outputTabPage;
+    private System.Windows.Forms.TextBox outputTextBox;
+  }
+}
Index: branches/HLScript/HeuristicLab.HLScript.Views/3.3/HLScriptView.cs
===================================================================
--- branches/HLScript/HeuristicLab.HLScript.Views/3.3/HLScriptView.cs	(revision 10332)
+++ branches/HLScript/HeuristicLab.HLScript.Views/3.3/HLScriptView.cs	(revision 10332)
@@ -0,0 +1,205 @@
+﻿#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.CodeDom.Compiler;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.CodeEditor;
+using HeuristicLab.Common;
+using HeuristicLab.Common.Resources;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.HLScript.Views {
+
+  [View("HLScript View")]
+  [Content(typeof(HLScript), true)]
+  public partial class HLScriptView : ItemView {
+    private bool running;
+
+    public new HLScript Content {
+      get { return (HLScript)base.Content; }
+      set { base.Content = (HLScript)value; }
+    }
+
+    public HLScriptView() {
+      InitializeComponent();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.CodeChanged += Content_CodeChanged;
+      Content.ScriptExecutionStarted += Content_ScriptExecutionStarted;
+      Content.ScriptExecutionFinished += Content_ScriptExecutionFinished;
+      Content.ConsoleOutputChanged += Content_ConsoleOutputChanged;
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.CodeChanged -= Content_CodeChanged;
+      Content.ScriptExecutionStarted -= Content_ScriptExecutionStarted;
+      Content.ScriptExecutionFinished -= Content_ScriptExecutionFinished;
+      Content.ConsoleOutputChanged -= Content_ConsoleOutputChanged;
+      base.DeregisterContentEvents();
+    }
+
+    #region Content event handlers
+    private void Content_CodeChanged(object sender, EventArgs e) {
+      codeEditor.UserCode = Content.Code;
+    }
+    private void Content_ScriptExecutionStarted(object sender, EventArgs e) {
+      ReadOnly = true;
+      startStopButton.Image = VSImageLibrary.Stop;
+    }
+    private void Content_ScriptExecutionFinished(object sender, EventArgs e) {
+      ReadOnly = false;
+      startStopButton.Image = VSImageLibrary.Play;
+      running = false;
+    }
+    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() {
+      base.OnContentChanged();
+      if (Content == null) {
+        codeEditor.UserCode = string.Empty;
+        variableStoreView.Content = null;
+      } else {
+        codeEditor.UserCode = Content.Code;
+        variableStoreView.Content = Content.VariableStore;
+        if (Content.CompileErrors == null) {
+          compilationLabel.ForeColor = SystemColors.ControlDarkDark;
+          compilationLabel.Text = "Not compiled";
+        } else if (Content.CompileErrors.HasErrors) {
+          compilationLabel.ForeColor = Color.DarkRed;
+          compilationLabel.Text = "Compilation failed";
+        } else {
+          compilationLabel.ForeColor = Color.DarkGreen;
+          compilationLabel.Text = "Compilation successful";
+        }
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      startStopButton.Enabled = Content != null;
+      showCodeButton.Enabled = Content != null && !string.IsNullOrEmpty(Content.CompilationUnitCode);
+      codeEditor.Enabled = Content != null && !ReadOnly;
+    }
+
+    #region Child Control event handlers
+    private void startStopButton_Click(object sender, EventArgs e) {
+      if (running) {
+        Content.Kill();
+      } else
+        if (Compile()) {
+          outputTextBox.Clear();
+          Content.Execute();
+          running = true;
+        }
+    }
+
+    private void showCodeButton_Click(object sender, EventArgs e) {
+      new CodeViewer(Content.CompilationUnitCode).ShowDialog(this);
+    }
+
+    private void codeEditor_TextEditorTextChanged(object sender, EventArgs e) {
+      Content.Code = codeEditor.UserCode;
+    }
+    #endregion
+
+    #region global HotKeys
+    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
+      if (keyData == Keys.F5) {
+        if (Content == null || ReadOnly)
+          return base.ProcessCmdKey(ref msg, keyData);
+        outputTextBox.Clear();
+        bool result = Compile();
+        if (result) {
+          outputTextBox.Clear();
+          Content.Execute();
+        }
+        return true;
+      } else if (keyData == (Keys.F5 | Keys.Shift)) {
+        Content.Kill();
+      }
+      return base.ProcessCmdKey(ref msg, keyData);
+    }
+    #endregion
+
+    #region Auxiliary functions
+    private bool Compile() {
+      ReadOnly = true;
+      errorListView.Items.Clear();
+      outputTextBox.Clear();
+      outputTextBox.AppendText("Compiling ... ");
+      try {
+        Content.Compile();
+        outputTextBox.AppendText("Compilation succeeded.");
+        return true;
+      } catch {
+        outputTextBox.AppendText("Compilation failed.");
+        ShowCompilationErrors();
+        return false;
+      } finally {
+        OnContentChanged();
+        ReadOnly = false;
+      }
+    }
+    #endregion
+
+    private void ShowCompilationErrors() {
+      if (Content.CompileErrors.Count == 0) return;
+      var warnings = new List<CompilerError>();
+      var errors = new List<CompilerError>();
+      foreach (CompilerError ce in Content.CompileErrors) {
+        if (ce.IsWarning) warnings.Add(ce);
+        else errors.Add(ce);
+      }
+      var msgs = warnings.OrderBy(x => x.Line)
+                         .ThenBy(x => x.Column)
+                   .Concat(errors.OrderBy(x => x.Line)
+                                 .ThenBy(x => x.Column));
+      outputTextBox.AppendText(Environment.NewLine);
+      outputTextBox.AppendText("---");
+      outputTextBox.AppendText(Environment.NewLine);
+      foreach (var m in msgs) {
+        var item = new ListViewItem(new[] {
+          m.IsWarning ? "Warning" : "Error",
+          m.ErrorNumber,
+          m.Line.ToString(),
+          m.Column.ToString(),
+          m.ErrorText
+        });
+        errorListView.Items.Add(item);
+        outputTextBox.AppendText(string.Format("{0} {1} ({2}:{3}): {4}", item.SubItems[0].Text, item.SubItems[1].Text, item.SubItems[2].Text, item.SubItems[3].Text, item.SubItems[4].Text));
+        outputTextBox.AppendText(Environment.NewLine);
+      }
+    }
+  }
+}
Index: branches/HLScript/HeuristicLab.HLScript.Views/3.3/HeuristicLab.HLScript.Views-3.3.csproj
===================================================================
--- branches/HLScript/HeuristicLab.HLScript.Views/3.3/HeuristicLab.HLScript.Views-3.3.csproj	(revision 10332)
+++ branches/HLScript/HeuristicLab.HLScript.Views/3.3/HeuristicLab.HLScript.Views-3.3.csproj	(revision 10332)
@@ -0,0 +1,139 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{0C2917C8-7AA8-4E18-800A-C4D064F992ED}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.HLScript.Views</RootNamespace>
+    <AssemblyName>HeuristicLab.HLScript.Views-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Plugin.cs.frame" />
+    <Compile Include="HLScriptView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="HLScriptView.Designer.cs">
+      <DependentUpon>HLScriptView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="VariableStoreView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="VariableStoreView.Designer.cs">
+      <DependentUpon>VariableStoreView.cs</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.CodeEditor\3.3\HeuristicLab.CodeEditor-3.3.csproj">
+      <Project>{489cfe09-fdf7-4c89-bab5-bd09cadd61ad}</Project>
+      <Name>HeuristicLab.CodeEditor-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958b43bc-cc5c-4fa2-8628-2b3b01d890b6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
+      <Project>{0e27a536-1c4a-4624-a65e-dc4f4f23e3e1}</Project>
+      <Name>HeuristicLab.Common.Resources-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
+      <Project>{a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c}</Project>
+      <Name>HeuristicLab.Common-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core.Views\3.3\HeuristicLab.Core.Views-3.3.csproj">
+      <Project>{e226881d-315f-423d-b419-a766fe0d8685}</Project>
+      <Name>HeuristicLab.Core.Views-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{c36bd924-a541-4a00-afa8-41701378ddc5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.HLScript\3.3\HeuristicLab.HLScript-3.3.csproj">
+      <Project>{21977cc3-1757-4b3b-87bd-ff817aaa900f}</Project>
+      <Name>HeuristicLab.HLScript-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.3\HeuristicLab.MainForm.WindowsForms-3.3.csproj">
+      <Project>{ab687bbe-1bfe-476b-906d-44237135431d}</Project>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
+      <Project>{3bd61258-31da-4b09-89c0-4f71fef5f05a}</Project>
+      <Name>HeuristicLab.MainForm-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186a6a-5176-4402-ae83-886557b53cca}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: branches/HLScript/HeuristicLab.HLScript.Views/3.3/Plugin.cs.frame
===================================================================
--- branches/HLScript/HeuristicLab.HLScript.Views/3.3/Plugin.cs.frame	(revision 10332)
+++ branches/HLScript/HeuristicLab.HLScript.Views/3.3/Plugin.cs.frame	(revision 10332)
@@ -0,0 +1,38 @@
+﻿#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 HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.HLScript.Views {
+  [Plugin("HeuristicLab.HLScript.Views", "3.3.9.$WCREV$")]
+  [PluginFile("HeuristicLab.HLScript.Views-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.CodeEditor", "3.3")]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Core.Views", "3.3")]
+  [PluginDependency("HeuristicLab.HLScript", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
+  public class HeuristicLabHLScriptViewsPlugin : PluginBase {
+  }
+}
Index: branches/HLScript/HeuristicLab.HLScript.Views/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/HLScript/HeuristicLab.HLScript.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 10332)
+++ branches/HLScript/HeuristicLab.HLScript.Views/3.3/Properties/AssemblyInfo.cs.frame	(revision 10332)
@@ -0,0 +1,57 @@
+﻿#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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.HLScript.Views")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2013 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("78ef015f-0dd7-4dea-9808-a605fe30fbd3")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.9.$WCREV$")]
Index: branches/HLScript/HeuristicLab.HLScript.Views/3.3/VariableStoreView.Designer.cs
===================================================================
--- branches/HLScript/HeuristicLab.HLScript.Views/3.3/VariableStoreView.Designer.cs	(revision 10332)
+++ branches/HLScript/HeuristicLab.HLScript.Views/3.3/VariableStoreView.Designer.cs	(revision 10332)
@@ -0,0 +1,188 @@
+﻿#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.Windows.Forms;
+
+namespace HeuristicLab.HLScript.Views {
+  partial class VariableStoreView {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    #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.components = new System.ComponentModel.Container();
+      this.variableListView = new System.Windows.Forms.ListView();
+      this.nameColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.valueColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.typeColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.imageList = new System.Windows.Forms.ImageList(this.components);
+      this.sortDescendingButton = new System.Windows.Forms.Button();
+      this.sortAscendingButton = new System.Windows.Forms.Button();
+      this.removeButton = new System.Windows.Forms.Button();
+      this.addButton = new System.Windows.Forms.Button();
+      this.variablesGroupBox = new System.Windows.Forms.GroupBox();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.variablesGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // variableListView
+      // 
+      this.variableListView.AllowDrop = true;
+      this.variableListView.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.variableListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.nameColumnHeader,
+            this.valueColumnHeader,
+            this.typeColumnHeader});
+      this.variableListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
+      this.variableListView.HideSelection = false;
+      this.variableListView.LabelEdit = true;
+      this.variableListView.Location = new System.Drawing.Point(6, 49);
+      this.variableListView.MultiSelect = false;
+      this.variableListView.Name = "variableListView";
+      this.variableListView.ShowItemToolTips = true;
+      this.variableListView.Size = new System.Drawing.Size(224, 395);
+      this.variableListView.SmallImageList = this.imageList;
+      this.variableListView.TabIndex = 5;
+      this.variableListView.UseCompatibleStateImageBehavior = false;
+      this.variableListView.View = System.Windows.Forms.View.Details;
+      this.variableListView.AfterLabelEdit += new System.Windows.Forms.LabelEditEventHandler(this.variableListView_AfterLabelEdit);
+      this.variableListView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.variableListView_ItemDrag);
+      this.variableListView.SelectedIndexChanged += new System.EventHandler(this.variableListView_SelectedIndexChanged);
+      this.variableListView.DragDrop += new System.Windows.Forms.DragEventHandler(this.variableListView_DragDrop);
+      this.variableListView.DragEnter += new System.Windows.Forms.DragEventHandler(this.variableListView_DragEnter);
+      this.variableListView.DragOver += new System.Windows.Forms.DragEventHandler(this.variableListView_DragOver);
+      this.variableListView.DoubleClick += new System.EventHandler(this.variableListView_DoubleClick);
+      this.variableListView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.variableListView_KeyDown);
+      // 
+      // nameColumnHeader
+      // 
+      this.nameColumnHeader.Text = "Name";
+      // 
+      // valueColumnHeader
+      // 
+      this.valueColumnHeader.Text = "Value";
+      // 
+      // typeColumnHeader
+      // 
+      this.typeColumnHeader.Text = "Type";
+      // 
+      // 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;
+      // 
+      // sortDescendingButton
+      // 
+      this.sortDescendingButton.Enabled = false;
+      this.sortDescendingButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.SortUp;
+      this.sortDescendingButton.Location = new System.Drawing.Point(36, 19);
+      this.sortDescendingButton.Name = "sortDescendingButton";
+      this.sortDescendingButton.Size = new System.Drawing.Size(24, 24);
+      this.sortDescendingButton.TabIndex = 1;
+      this.toolTip.SetToolTip(this.sortDescendingButton, "Sort Descending");
+      this.sortDescendingButton.UseVisualStyleBackColor = true;
+      this.sortDescendingButton.Click += new System.EventHandler(this.sortDescendingButton_Click);
+      // 
+      // sortAscendingButton
+      // 
+      this.sortAscendingButton.Enabled = false;
+      this.sortAscendingButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Sort;
+      this.sortAscendingButton.Location = new System.Drawing.Point(66, 19);
+      this.sortAscendingButton.Name = "sortAscendingButton";
+      this.sortAscendingButton.Size = new System.Drawing.Size(24, 24);
+      this.sortAscendingButton.TabIndex = 2;
+      this.toolTip.SetToolTip(this.sortAscendingButton, "Sort Ascending");
+      this.sortAscendingButton.UseVisualStyleBackColor = true;
+      this.sortAscendingButton.Click += new System.EventHandler(this.sortAscendingButton_Click);
+      // 
+      // removeButton
+      // 
+      this.removeButton.Enabled = false;
+      this.removeButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Remove;
+      this.removeButton.Location = new System.Drawing.Point(96, 19);
+      this.removeButton.Name = "removeButton";
+      this.removeButton.Size = new System.Drawing.Size(24, 24);
+      this.removeButton.TabIndex = 3;
+      this.toolTip.SetToolTip(this.removeButton, "Remove");
+      this.removeButton.UseVisualStyleBackColor = true;
+      this.removeButton.Click += new System.EventHandler(this.removeButton_Click);
+      // 
+      // addButton
+      // 
+      this.addButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Add;
+      this.addButton.Location = new System.Drawing.Point(6, 19);
+      this.addButton.Name = "addButton";
+      this.addButton.Size = new System.Drawing.Size(24, 24);
+      this.addButton.TabIndex = 0;
+      this.toolTip.SetToolTip(this.addButton, "Add");
+      this.addButton.UseVisualStyleBackColor = true;
+      this.addButton.Click += new System.EventHandler(this.addButton_Click);
+      // 
+      // variablesGroupBox
+      // 
+      this.variablesGroupBox.Controls.Add(this.variableListView);
+      this.variablesGroupBox.Controls.Add(this.addButton);
+      this.variablesGroupBox.Controls.Add(this.sortDescendingButton);
+      this.variablesGroupBox.Controls.Add(this.removeButton);
+      this.variablesGroupBox.Controls.Add(this.sortAscendingButton);
+      this.variablesGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.variablesGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.variablesGroupBox.Name = "variablesGroupBox";
+      this.variablesGroupBox.Size = new System.Drawing.Size(236, 450);
+      this.variablesGroupBox.TabIndex = 0;
+      this.variablesGroupBox.TabStop = false;
+      this.variablesGroupBox.Text = "Variables";
+      // 
+      // VariableStoreView
+      // 
+      this.Controls.Add(this.variablesGroupBox);
+      this.Name = "VariableStoreView";
+      this.Size = new System.Drawing.Size(236, 450);
+      this.variablesGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.ColumnHeader nameColumnHeader;
+    protected GroupBox variablesGroupBox;
+    protected ListView variableListView;
+    protected Button addButton;
+    protected Button removeButton;
+    protected ToolTip toolTip;
+    protected ImageList imageList;
+    protected Button sortAscendingButton;
+    protected Button sortDescendingButton;
+    private ColumnHeader valueColumnHeader;
+    private ColumnHeader typeColumnHeader;
+  }
+}
Index: branches/HLScript/HeuristicLab.HLScript.Views/3.3/VariableStoreView.cs
===================================================================
--- branches/HLScript/HeuristicLab.HLScript.Views/3.3/VariableStoreView.cs	(revision 10332)
+++ branches/HLScript/HeuristicLab.HLScript.Views/3.3/VariableStoreView.cs	(revision 10332)
@@ -0,0 +1,415 @@
+﻿#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.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.HLScript.Views {
+  [View("ItemCollection View")]
+  [Content(typeof(VariableStore), true)]
+  public partial class VariableStoreView : AsynchronousContentView {
+    protected Dictionary<string, ListViewItem> itemListViewItemMapping;
+    protected TypeSelectorDialog typeSelectorDialog;
+    protected bool validDragOperation;
+
+    public new VariableStore Content {
+      get { return (VariableStore)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public ListView ItemsListView {
+      get { return variableListView; }
+    }
+
+    public VariableStoreView() {
+      InitializeComponent();
+      itemListViewItemMapping = new Dictionary<string, ListViewItem>();
+    }
+
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.ItemsAdded -= Content_ItemsAdded;
+      Content.ItemsReplaced -= Content_ItemsReplaced;
+      Content.ItemsRemoved -= Content_ItemsRemoved;
+      Content.CollectionReset -= Content_CollectionReset;
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ItemsAdded += Content_ItemsAdded;
+      Content.ItemsReplaced += Content_ItemsReplaced;
+      Content.ItemsRemoved += Content_ItemsRemoved;
+      Content.CollectionReset += Content_CollectionReset;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      variableListView.Items.Clear();
+      itemListViewItemMapping.Clear();
+      RebuildImageList();
+      if (Content != null) {
+        Caption += " (" + Content.GetType().Name + ")";
+        foreach (var item in Content)
+          AddVariable(item);
+        AdjustListViewColumnSizes();
+        SortItemsListView(SortOrder.Ascending);
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      if (Content == null) {
+        addButton.Enabled = false;
+        sortAscendingButton.Enabled = false;
+        sortDescendingButton.Enabled = false;
+        removeButton.Enabled = false;
+        variableListView.Enabled = false;
+      } else {
+        addButton.Enabled = /*!Content.IsReadOnly &&*/ !ReadOnly;
+        sortAscendingButton.Enabled = variableListView.Items.Count > 1;
+        sortDescendingButton.Enabled = variableListView.Items.Count > 1;
+        removeButton.Enabled = /*!Content.IsReadOnly &&*/ !ReadOnly && variableListView.SelectedItems.Count > 0;
+        variableListView.Enabled = true;
+      }
+    }
+
+    protected virtual object CreateItem() {
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog { Caption = "Select Item" };
+        typeSelectorDialog.TypeSelector.Caption = "Available Items";
+        typeSelectorDialog.TypeSelector.Configure(typeof(IItem), false, true);
+      }
+
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          return (object)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        } catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(this, ex);
+        }
+      }
+      return null;
+    }
+
+    protected virtual void AddVariable(KeyValuePair<string, object> variable) {
+      if (string.IsNullOrEmpty(variable.Key)) throw new ArgumentException("The variable must have a name.", "variable");
+      string value = (variable.Value ?? "null").ToString();
+      string type = variable.Value == null ? "null" : variable.Value.GetType().ToString();
+      var listViewItem = new ListViewItem(new[] { variable.Key, value, type }) { ToolTipText = GetToolTipText(variable), Tag = variable };
+      variableListView.SmallImageList.Images.Add(HeuristicLab.Common.Resources.VSImageLibrary.Object);
+      listViewItem.ImageIndex = variableListView.SmallImageList.Images.Count - 1;
+      variableListView.Items.Add(listViewItem);
+      itemListViewItemMapping[variable.Key] = listViewItem;
+      sortAscendingButton.Enabled = variableListView.Items.Count > 1;
+      sortDescendingButton.Enabled = variableListView.Items.Count > 1;
+      var item = variable.Value as IItem;
+      if (item != null) item.ToStringChanged += item_ToStringChanged;
+    }
+
+    protected virtual void RemoveVariable(KeyValuePair<string, object> variable) {
+      if (string.IsNullOrEmpty(variable.Key)) throw new ArgumentException("The variable must have a name.", "variable");
+      ListViewItem listViewItem;
+      if (itemListViewItemMapping.TryGetValue(variable.Key, out listViewItem)) {
+        itemListViewItemMapping.Remove(variable.Key);
+        variableListView.Items.Remove(listViewItem);
+        sortAscendingButton.Enabled = variableListView.Items.Count > 1;
+        sortDescendingButton.Enabled = variableListView.Items.Count > 1;
+        var item = variable.Value as IItem;
+        if (item != null) item.ToStringChanged -= item_ToStringChanged;
+      }
+    }
+
+    protected virtual void UpdateVariable(KeyValuePair<string, object> variable) {
+      if (string.IsNullOrEmpty(variable.Key)) throw new ArgumentException("The variable must have a name.", "variable");
+      ListViewItem listViewItem;
+      if (itemListViewItemMapping.TryGetValue(variable.Key, out listViewItem)) {
+        string value = (variable.Value ?? "null").ToString();
+        string type = variable.Value == null ? "null" : variable.Value.GetType().ToString();
+        listViewItem.SubItems[1].Text = value;
+        listViewItem.SubItems[2].Text = type;
+        listViewItem.ToolTipText = GetToolTipText(variable);
+        listViewItem.Tag = variable;
+      } else throw new ArgumentException("A variable with the specified name does not exist.", "variable");
+    }
+
+    #region ListView Events
+    protected virtual void variableListView_SelectedIndexChanged(object sender, EventArgs e) {
+      removeButton.Enabled = (Content != null) /*&& !Content.IsReadOnly*/ && !ReadOnly && variableListView.SelectedItems.Count > 0;
+      AdjustListViewColumnSizes();
+    }
+    protected virtual void variableListView_KeyDown(object sender, KeyEventArgs e) {
+      if (e.KeyCode == Keys.Delete) {
+        if ((variableListView.SelectedItems.Count > 0) /*&& !Content.IsReadOnly*/ && !ReadOnly) {
+          foreach (ListViewItem item in variableListView.SelectedItems)
+            Content.Remove(item.Text);
+        }
+      }
+    }
+    protected virtual void variableListView_DoubleClick(object sender, EventArgs e) {
+      if (variableListView.SelectedItems.Count == 1) {
+        var item = variableListView.SelectedItems[0].Tag as KeyValuePair<string, object>?;
+        if (item != null) {
+          var value = item.Value.Value as IContent;
+          if (value != null) {
+            IContentView view = MainFormManager.MainForm.ShowContent(value);
+            if (view != null) {
+              view.ReadOnly = ReadOnly;
+              view.Locked = Locked;
+            }
+          }
+        }
+      }
+    }
+    protected virtual void variableListView_ItemDrag(object sender, ItemDragEventArgs e) {
+      if (!Locked) {
+        var items = new List<object>();
+        foreach (ListViewItem listViewItem in variableListView.SelectedItems) {
+          var item = (KeyValuePair<string, object>)listViewItem.Tag as KeyValuePair<string, object>?;
+          if (item != null) items.Add(item.Value.Value);
+        }
+
+        if (items.Count > 0) {
+          DataObject data = new DataObject();
+          if (items.Count == 1) data.SetData(HeuristicLab.Common.Constants.DragDropDataFormat, items[0]);
+          else data.SetData(HeuristicLab.Common.Constants.DragDropDataFormat, items);
+          if (/*Content.IsReadOnly ||*/ ReadOnly) {
+            DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link);
+          } else {
+            DragDropEffects result = DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Link | DragDropEffects.Move);
+            if ((result & DragDropEffects.Move) == DragDropEffects.Move) {
+              foreach (string item in items) Content.Remove(item);
+            }
+          }
+        }
+      }
+    }
+    protected virtual void variableListView_DragEnter(object sender, DragEventArgs e) {
+      validDragOperation = false;
+      if (/*!Content.IsReadOnly &&*/ !ReadOnly && (e.Data.GetData(HeuristicLab.Common.Constants.DragDropDataFormat) is object)) {
+        validDragOperation = true;
+      } else if (/*!Content.IsReadOnly &&*/ !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);
+      }
+    }
+    protected virtual void variableListView_DragOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      if (validDragOperation) {
+        if ((e.KeyState & 32) == 32) e.Effect = DragDropEffects.Link;  // ALT key
+        else if ((e.KeyState & 4) == 4) e.Effect = DragDropEffects.Move;  // SHIFT key
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Copy)) e.Effect = DragDropEffects.Copy;
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Move)) e.Effect = DragDropEffects.Move;
+        else if (e.AllowedEffect.HasFlag(DragDropEffects.Link)) e.Effect = DragDropEffects.Link;
+      }
+    }
+    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();
+        }
+      }
+    }
+
+    private void variableListView_AfterLabelEdit(object sender, LabelEditEventArgs e) {
+      if (!string.IsNullOrEmpty(e.Label)) {
+        var variable = (KeyValuePair<string, object>)variableListView.Items[e.Item].Tag;
+        if (!Content.ContainsKey(e.Label)) {
+          Content.Remove(variable.Key);
+          Content.Add(e.Label, variable.Value);
+        }
+      }
+      e.CancelEdit = true;
+    }
+    #endregion
+
+    #region Button Events
+    protected virtual void addButton_Click(object sender, EventArgs e) {
+      object newVar = CreateItem();
+      if (newVar != null) {
+        string name = GenerateNewVariableName();
+        Content.Add(name, newVar);
+        var item = variableListView.FindItemWithText(name);
+        item.BeginEdit();
+      }
+    }
+    protected virtual void sortAscendingButton_Click(object sender, EventArgs e) {
+      SortItemsListView(SortOrder.Ascending);
+    }
+    protected virtual void sortDescendingButton_Click(object sender, EventArgs e) {
+      SortItemsListView(SortOrder.Descending);
+    }
+    protected virtual void removeButton_Click(object sender, EventArgs e) {
+      if (variableListView.SelectedItems.Count > 0) {
+        foreach (ListViewItem item in variableListView.SelectedItems)
+          Content.Remove(item.Text);
+        variableListView.SelectedItems.Clear();
+      }
+    }
+    #endregion
+
+    #region Content Events
+    protected virtual void Content_ItemsAdded(object sender, CollectionItemsChangedEventArgs<KeyValuePair<string, object>> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<KeyValuePair<string, object>>(Content_ItemsAdded), sender, e);
+      else {
+        foreach (var item in e.Items)
+          AddVariable(item);
+        AdjustListViewColumnSizes();
+      }
+    }
+
+    protected virtual void Content_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<KeyValuePair<string, object>> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<KeyValuePair<string, object>>(Content_ItemsReplaced), sender, e);
+      else {
+        foreach (var item in e.Items)
+          UpdateVariable(item);
+        AdjustListViewColumnSizes();
+      }
+    }
+
+    protected virtual void Content_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<KeyValuePair<string, object>> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<KeyValuePair<string, object>>(Content_ItemsRemoved), sender, e);
+      else {
+        foreach (var item in e.Items)
+          RemoveVariable(item);
+        RebuildImageList();
+        AdjustListViewColumnSizes();
+      }
+    }
+    protected virtual void Content_CollectionReset(object sender, CollectionItemsChangedEventArgs<KeyValuePair<string, object>> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<KeyValuePair<string, object>>(Content_CollectionReset), sender, e);
+      else {
+        foreach (var item in e.OldItems)
+          RemoveVariable(item);
+        RebuildImageList();
+        foreach (var item in e.Items)
+          AddVariable(item);
+        AdjustListViewColumnSizes();
+      }
+    }
+
+    private void item_ToStringChanged(object sender, EventArgs e) {
+      foreach (ListViewItem item in variableListView.Items) {
+        var variable = item.Tag as KeyValuePair<string, object>?;
+        if (variable != null && variable.Value.Value == sender) {
+          string value = (variable.Value.Value ?? "null").ToString();
+          item.SubItems[1].Text = value;
+          item.SubItems[2].Text = variable.Value.Value.GetType().ToString();
+          item.ToolTipText = GetToolTipText(variable.Value);
+          return;
+        }
+      }
+    }
+    #endregion
+
+    #region Helpers
+    protected virtual void SortItemsListView(SortOrder sortOrder) {
+      variableListView.Sorting = SortOrder.None;
+      variableListView.Sorting = sortOrder;
+      variableListView.Sorting = SortOrder.None;
+    }
+    protected virtual void AdjustListViewColumnSizes() {
+      if (variableListView.Items.Count > 0) {
+        for (int i = 0; i < variableListView.Columns.Count; i++)
+          variableListView.Columns[i].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
+      }
+    }
+    protected virtual void RebuildImageList() {
+      variableListView.SmallImageList.Images.Clear();
+      foreach (ListViewItem listViewItem in variableListView.Items) {
+        object item = listViewItem.Tag as object;
+        variableListView.SmallImageList.Images.Add(item == null ? HeuristicLab.Common.Resources.VSImageLibrary.Nothing : HeuristicLab.Common.Resources.VSImageLibrary.Object);//item.ItemImage);
+        listViewItem.ImageIndex = variableListView.SmallImageList.Images.Count - 1;
+      }
+    }
+
+    private string GetToolTipText(KeyValuePair<string, object> variable) {
+      if (string.IsNullOrEmpty(variable.Key)) throw new ArgumentException("The variable must have a name.", "variable");
+      string value = (variable.Value ?? "null").ToString();
+      string[] lines = {
+        "Name: " + variable.Key,
+        "Value: " + value,
+        "Type: " + variable.Value.GetType()
+      };
+      return string.Join(Environment.NewLine, lines);
+    }
+
+    private string GenerateNewVariableName(string defaultName = "enter_name") {
+      if (Content.ContainsKey(defaultName)) {
+        int i = 1;
+        string newName;
+        do {
+          newName = defaultName + i++;
+        } while (Content.ContainsKey(newName));
+        return newName;
+      }
+      return defaultName;
+    }
+    #endregion
+  }
+}
Index: branches/HLScript/HeuristicLab.HLScript/3.3/HLScript.cs
===================================================================
--- branches/HLScript/HeuristicLab.HLScript/3.3/HLScript.cs	(revision 10332)
+++ branches/HLScript/HeuristicLab.HLScript/3.3/HLScript.cs	(revision 10332)
@@ -0,0 +1,306 @@
+﻿using System;
+using System.CodeDom;
+using System.CodeDom.Compiler;
+using System.Collections.Generic;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading;
+using HeuristicLab.Common;
+using HeuristicLab.Common.Resources;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using Microsoft.CSharp;
+
+namespace HeuristicLab.HLScript {
+  [Item("HLScript", "A HeuristicLab script.")]
+  [Creatable("Scripts")]
+  [StorableClass]
+  public sealed class HLScript : NamedItem, IStorableContent {
+    #region Constants
+    private const string ScriptNamespaceName = "HeuristicLab.HLScript";
+    private const string ExecuteMethodName = "Execute";
+    private const string CodeTemplate =
+@"// use 'vars' to access global variables in the variable store
+
+using System;
+
+public override void Main() {
+  // type your code here
+}
+
+// further classes and methods";
+    #endregion
+
+    #region Fields & Properties
+    private HLScriptGeneration compiledHLScript;
+
+    public string Filename { get; set; }
+
+    public static new Image StaticItemImage {
+      get { return VSImageLibrary.Script; }
+    }
+
+    [Storable]
+    private VariableStore variableStore;
+    public VariableStore VariableStore {
+      get { return variableStore; }
+    }
+
+    [Storable]
+    private string code;
+    public string Code {
+      get { return code; }
+      set {
+        if (value == code) return;
+        code = value;
+        compiledHLScript = null;
+        OnCodeChanged();
+      }
+    }
+
+    private string compilationUnitCode;
+    public string CompilationUnitCode {
+      get { return compilationUnitCode; }
+    }
+
+    private CompilerErrorCollection compileErrors;
+    public CompilerErrorCollection CompileErrors {
+      get { return compileErrors; }
+      private set {
+        compileErrors = value;
+        OnCompileErrorsChanged();
+      }
+    }
+    #endregion
+
+    #region Construction & Initialization
+    [StorableConstructor]
+    private HLScript(bool deserializing) : base(deserializing) { }
+    private HLScript(HLScript original, Cloner cloner)
+      : base(original, cloner) {
+      code = original.code;
+      //      variableStore = cloner.Clone(original.variableStore);
+      //      compiledHLScript = cloner.Clone(original.compiledHLScript)
+      compilationUnitCode = original.compilationUnitCode;
+      if (original.compileErrors != null)
+        compileErrors = new CompilerErrorCollection(original.compileErrors);
+    }
+
+    public HLScript()
+      : base("HLS") {
+      code = CodeTemplate;
+      variableStore = new VariableStore();
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      compiledHLScript = null;
+      variableStore = new VariableStore();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new HLScript(this, cloner);
+    }
+    #endregion
+
+    private void RegisterScriptEvents() {
+      if (compiledHLScript == null) return;
+      compiledHLScript.ConsoleOutputChanged += compiledHLScript_ConsoleOutputChanged;
+    }
+
+    private void DeregisterScriptEvents() {
+      if (compiledHLScript == null) return;
+      compiledHLScript.ConsoleOutputChanged -= compiledHLScript_ConsoleOutputChanged;
+    }
+
+    #region Compilation
+    private CSharpCodeProvider codeProvider =
+      new CSharpCodeProvider(
+        new Dictionary<string, string> {
+          { "CompilerVersion", "v4.0" },  // support C# 4.0 syntax
+        });
+
+    private CompilerResults DoCompile() {
+      var parameters = new CompilerParameters {
+        GenerateExecutable = false,
+        GenerateInMemory = true,
+        IncludeDebugInformation = false
+      };
+      parameters.ReferencedAssemblies.AddRange(
+        GetAssemblies()
+        .Select(a => a.Location)
+        .ToArray());
+      var unit = CreateCompilationUnit();
+      var writer = new StringWriter();
+      codeProvider.GenerateCodeFromCompileUnit(
+        unit,
+        writer,
+        new CodeGeneratorOptions {
+          ElseOnClosing = true,
+          IndentString = "  ",
+        });
+      compilationUnitCode = writer.ToString();
+      return codeProvider.CompileAssemblyFromDom(parameters, unit);
+    }
+
+    public void Compile() {
+      var results = DoCompile();
+      compiledHLScript = null;
+      CompileErrors = results.Errors;
+      if (results.Errors.HasErrors) {
+        var sb = new StringBuilder();
+        foreach (CompilerError error in results.Errors) {
+          sb.Append(error.Line).Append(':')
+            .Append(error.Column).Append(": ")
+            .AppendLine(error.ErrorText);
+        }
+        throw new Exception(string.Format(
+          "Compilation of \"{0}\" failed:{1}{2}",
+          Name, Environment.NewLine,
+          sb.ToString()));
+      } else {
+        var assembly = results.CompiledAssembly;
+        var types = assembly.GetTypes();
+        DeregisterScriptEvents();
+        compiledHLScript = (HLScriptGeneration)Activator.CreateInstance(types[0]);
+        RegisterScriptEvents();
+      }
+    }
+
+    private readonly Regex LineSplitter = new Regex(@"\r\n|\r|\n");
+    private readonly Regex SafeTypeNameCharRegex = new Regex("[_a-zA-Z0-9]+");
+    private readonly Regex SafeTypeNameRegex = new Regex("[_a-zA-Z][_a-zA-Z0-9]*");
+    private readonly Regex NamespaceDeclarationRegex = new Regex(@"using\s+(@?[a-z_A-Z]\w+(?:\s*\.\s*@?[a-z_A-Z]\w*)*)\s*;");
+    private readonly Regex NamespaceRegex = new Regex(@"(@?[a-z_A-Z]\w+(?:\s*\.\s*@?[a-z_A-Z]\w*)*)");
+
+    private CodeCompileUnit CreateCompilationUnit() {
+      var ns = new CodeNamespace(ScriptNamespaceName);
+      ns.Types.Add(CreateScriptClass());
+      ns.Imports.AddRange(
+        GetNamespaces()
+        .Select(n => new CodeNamespaceImport(n))
+        .ToArray());
+      var unit = new CodeCompileUnit();
+      unit.Namespaces.Add(ns);
+      return unit;
+    }
+
+    private IEnumerable<string> GetNamespaces() {
+      var strings = NamespaceDeclarationRegex.Matches(code)
+                                             .Cast<Match>()
+                                             .Select(m => m.Value);
+      foreach (var s in strings) {
+        var match = NamespaceRegex.Match(s.Replace("using", string.Empty));
+        yield return match.Value;
+      }
+    }
+
+    private IEnumerable<string> GetCodeLines() {
+      var lines = LineSplitter.Split(code);
+      foreach (var line in lines) {
+        string trimmedLine = line.Trim();
+        if (!NamespaceDeclarationRegex.IsMatch(trimmedLine))
+          yield return trimmedLine;
+      }
+    }
+
+    private IEnumerable<Assembly> GetAssemblies() {
+      var assemblies = new List<Assembly>();
+      foreach (var a in AppDomain.CurrentDomain.GetAssemblies()) {
+        try {
+          if (File.Exists(a.Location)) assemblies.Add(a);
+        } catch (NotSupportedException) {
+          // NotSupportedException is thrown while accessing 
+          // the Location property of the anonymously hosted
+          // dynamic methods assembly, which is related to
+          // LINQ queries
+        }
+      }
+      assemblies.Add(typeof(Microsoft.CSharp.RuntimeBinder.Binder).Assembly); // for dlr functionality
+      return assemblies;
+    }
+
+    public string CompiledTypeName {
+      get {
+        var sb = new StringBuilder();
+        var strings = SafeTypeNameCharRegex.Matches(Name)
+                                           .Cast<Match>()
+                                           .Select(m => m.Value);
+        foreach (string s in strings)
+          sb.Append(s);
+        return SafeTypeNameRegex.Match(sb.ToString()).Value;
+      }
+    }
+
+    private CodeTypeDeclaration CreateScriptClass() {
+      var typeDecl = new CodeTypeDeclaration(CompiledTypeName) {
+        IsClass = true,
+        TypeAttributes = TypeAttributes.Public,
+      };
+      typeDecl.BaseTypes.Add(typeof(HLScriptGeneration));
+      typeDecl.Members.Add(new CodeSnippetTypeMember(string.Join(Environment.NewLine, GetCodeLines())));
+      return typeDecl;
+    }
+    #endregion
+
+    private Thread scriptThread;
+    public void Execute() {
+      if (compiledHLScript == null) return;
+      var executeMethod = typeof(HLScriptGeneration).GetMethod(ExecuteMethodName, BindingFlags.NonPublic | BindingFlags.Instance);
+      if (executeMethod != null) {
+        scriptThread = new Thread(() => {
+          try {
+            OnScriptExecutionStarted();
+            executeMethod.Invoke(compiledHLScript, new[] { VariableStore });
+          } finally {
+            OnScriptExecutionFinished();
+          }
+        });
+        scriptThread.Start();
+      }
+    }
+
+    public void Kill() {
+      if (scriptThread.IsAlive)
+        scriptThread.Abort();
+    }
+
+    private void compiledHLScript_ConsoleOutputChanged(object sender, EventArgs<string> e) {
+      OnConsoleOutputChanged(e.Value);
+    }
+
+    public event EventHandler CodeChanged;
+    private void OnCodeChanged() {
+      var handler = CodeChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler CompileErrorsChanged;
+    private void OnCompileErrorsChanged() {
+      var handler = CompileErrorsChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ScriptExecutionStarted;
+    private void OnScriptExecutionStarted() {
+      var handler = ScriptExecutionStarted;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ScriptExecutionFinished;
+    private void OnScriptExecutionFinished() {
+      var handler = ScriptExecutionFinished;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler<EventArgs<string>> ConsoleOutputChanged;
+    private void OnConsoleOutputChanged(string args) {
+      var handler = ConsoleOutputChanged;
+      if (handler != null) handler(this, new EventArgs<string>(args));
+    }
+  }
+}
Index: branches/HLScript/HeuristicLab.HLScript/3.3/HLScriptGeneration.cs
===================================================================
--- branches/HLScript/HeuristicLab.HLScript/3.3/HLScriptGeneration.cs	(revision 10332)
+++ branches/HLScript/HeuristicLab.HLScript/3.3/HLScriptGeneration.cs	(revision 10332)
@@ -0,0 +1,116 @@
+﻿using System;
+using System.Dynamic;
+using System.IO;
+using System.Text;
+using System.Threading;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.HLScript {
+  public abstract class HLScriptGeneration {
+    protected static dynamic vars;
+
+    public abstract void Main();
+
+    private void Execute(VariableStore variableStore) {
+      vars = new Variables(variableStore);
+      using (new EventWriter(this)) {
+        try {
+          Main();
+        } catch (ThreadAbortException) {
+        } catch (Exception e) {
+          Console.WriteLine("---");
+          Console.WriteLine(e);
+        }
+      }
+    }
+
+    protected internal event EventHandler<EventArgs<string>> ConsoleOutputChanged;
+    private void OnConsoleOutputChanged(string args) {
+      var handler = ConsoleOutputChanged;
+      if (handler != null) handler(null, new EventArgs<string>(args));
+    }
+
+    private class Variables : DynamicObject {
+      private readonly VariableStore variableStore;
+
+      public Variables(VariableStore variableStore) {
+        this.variableStore = variableStore;
+      }
+
+      public override bool TryGetMember(GetMemberBinder binder, out object result) {
+        return variableStore.TryGetValue(binder.Name, out result);
+      }
+
+      public override bool TrySetMember(SetMemberBinder binder, object value) {
+        variableStore[binder.Name] = value;
+        return true;
+      }
+    }
+
+    private class EventWriter : TextWriter {
+      private readonly TextWriter consoleOut;
+      private readonly HLScriptGeneration hlsg;
+      private bool disposed;
+
+      public EventWriter(HLScriptGeneration hlsg) {
+        this.hlsg = hlsg;
+        consoleOut = Console.Out;
+        Console.SetOut(this);
+        disposed = false;
+      }
+
+      public override Encoding Encoding {
+        get { return Encoding.UTF8; }
+      }
+
+      #region Write/WriteLine Overrides
+      #region Write
+      public override void Write(bool value) { hlsg.OnConsoleOutputChanged(value.ToString()); }
+      public override void Write(char value) { hlsg.OnConsoleOutputChanged(value.ToString()); }
+      public override void Write(char[] buffer) { hlsg.OnConsoleOutputChanged(new string(buffer)); }
+      public override void Write(char[] buffer, int index, int count) { hlsg.OnConsoleOutputChanged(new string(buffer, index, count)); }
+      public override void Write(decimal value) { hlsg.OnConsoleOutputChanged(value.ToString()); }
+      public override void Write(double value) { hlsg.OnConsoleOutputChanged(value.ToString()); }
+      public override void Write(float value) { hlsg.OnConsoleOutputChanged(value.ToString()); }
+      public override void Write(int value) { hlsg.OnConsoleOutputChanged(value.ToString()); }
+      public override void Write(long value) { hlsg.OnConsoleOutputChanged(value.ToString()); }
+      public override void Write(object value) { hlsg.OnConsoleOutputChanged(value.ToString()); }
+      public override void Write(string value) { hlsg.OnConsoleOutputChanged(value); }
+      public override void Write(string format, object arg0) { hlsg.OnConsoleOutputChanged(string.Format(format, arg0)); }
+      public override void Write(string format, object arg0, object arg1) { hlsg.OnConsoleOutputChanged(string.Format(format, arg0, arg0)); }
+      public override void Write(string format, object arg0, object arg1, object arg2) { hlsg.OnConsoleOutputChanged(string.Format(format, arg0, arg1, arg2)); }
+      public override void Write(string format, params object[] arg) { hlsg.OnConsoleOutputChanged(string.Format(format, arg)); }
+      public override void Write(uint value) { hlsg.OnConsoleOutputChanged(value.ToString()); }
+      public override void Write(ulong value) { hlsg.OnConsoleOutputChanged(value.ToString()); }
+      #endregion
+
+      #region WriteLine
+      public override void WriteLine() { hlsg.OnConsoleOutputChanged(Environment.NewLine); }
+      public override void WriteLine(bool value) { hlsg.OnConsoleOutputChanged(value + Environment.NewLine); }
+      public override void WriteLine(char value) { hlsg.OnConsoleOutputChanged(value + Environment.NewLine); }
+      public override void WriteLine(char[] buffer) { hlsg.OnConsoleOutputChanged(new string(buffer) + Environment.NewLine); }
+      public override void WriteLine(char[] buffer, int index, int count) { hlsg.OnConsoleOutputChanged(new string(buffer, index, count) + Environment.NewLine); }
+      public override void WriteLine(decimal value) { hlsg.OnConsoleOutputChanged(value + Environment.NewLine); }
+      public override void WriteLine(double value) { hlsg.OnConsoleOutputChanged(value + Environment.NewLine); }
+      public override void WriteLine(float value) { hlsg.OnConsoleOutputChanged(value + Environment.NewLine); }
+      public override void WriteLine(int value) { hlsg.OnConsoleOutputChanged(value + Environment.NewLine); }
+      public override void WriteLine(long value) { hlsg.OnConsoleOutputChanged(value + Environment.NewLine); }
+      public override void WriteLine(object value) { hlsg.OnConsoleOutputChanged(value + Environment.NewLine); }
+      public override void WriteLine(string value) { hlsg.OnConsoleOutputChanged(value + Environment.NewLine); }
+      public override void WriteLine(string format, object arg0) { hlsg.OnConsoleOutputChanged(string.Format(format, arg0) + Environment.NewLine); }
+      public override void WriteLine(string format, object arg0, object arg1) { hlsg.OnConsoleOutputChanged(string.Format(format, arg0, arg1) + Environment.NewLine); }
+      public override void WriteLine(string format, object arg0, object arg1, object arg2) { hlsg.OnConsoleOutputChanged(string.Format(format, arg0, arg1, arg2) + Environment.NewLine); }
+      public override void WriteLine(string format, params object[] arg) { hlsg.OnConsoleOutputChanged(string.Format(format, arg) + Environment.NewLine); }
+      public override void WriteLine(uint value) { hlsg.OnConsoleOutputChanged(value + Environment.NewLine); }
+      public override void WriteLine(ulong value) { hlsg.OnConsoleOutputChanged(value + Environment.NewLine); }
+      #endregion
+      #endregion
+
+      protected override void Dispose(bool disposing) {
+        if (!disposed && disposing)
+          Console.SetOut(consoleOut);
+        disposed = true;
+      }
+    }
+  }
+}
Index: branches/HLScript/HeuristicLab.HLScript/3.3/HeuristicLab.HLScript-3.3.csproj
===================================================================
--- branches/HLScript/HeuristicLab.HLScript/3.3/HeuristicLab.HLScript-3.3.csproj	(revision 10332)
+++ branches/HLScript/HeuristicLab.HLScript/3.3/HeuristicLab.HLScript-3.3.csproj	(revision 10332)
@@ -0,0 +1,110 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{21977CC3-1757-4B3B-87BD-FF817AAA900F}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.HLScript</RootNamespace>
+    <AssemblyName>HeuristicLab.HLScript-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="VariableStore.cs" />
+    <None Include="Plugin.cs.frame" />
+    <Compile Include="HLScript.cs" />
+    <Compile Include="HLScriptGeneration.cs" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958b43bc-cc5c-4fa2-8628-2b3b01d890b6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
+      <Project>{0e27a536-1c4a-4624-a65e-dc4f4f23e3e1}</Project>
+      <Name>HeuristicLab.Common.Resources-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
+      <Project>{a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c}</Project>
+      <Name>HeuristicLab.Common-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{c36bd924-a541-4a00-afa8-41701378ddc5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
+      <Project>{102bc7d3-0ef9-439c-8f6d-96ff0fdb8e1b}</Project>
+      <Name>HeuristicLab.Persistence-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186a6a-5176-4402-ae83-886557b53cca}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: branches/HLScript/HeuristicLab.HLScript/3.3/Plugin.cs.frame
===================================================================
--- branches/HLScript/HeuristicLab.HLScript/3.3/Plugin.cs.frame	(revision 10332)
+++ branches/HLScript/HeuristicLab.HLScript/3.3/Plugin.cs.frame	(revision 10332)
@@ -0,0 +1,34 @@
+﻿#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 HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.HLScript {
+  [Plugin("HeuristicLab.HLScript", "3.3.9.$WCREV$")]
+  [PluginFile("HeuristicLab.HLScript-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Collections", "3.3")] 
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  public class HeuristicLabHLScriptPlugin : PluginBase {
+  }
+}
Index: branches/HLScript/HeuristicLab.HLScript/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/HLScript/HeuristicLab.HLScript/3.3/Properties/AssemblyInfo.cs.frame	(revision 10332)
+++ branches/HLScript/HeuristicLab.HLScript/3.3/Properties/AssemblyInfo.cs.frame	(revision 10332)
@@ -0,0 +1,57 @@
+﻿#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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.HLScript")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2013 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components.  If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("c8460c22-cba5-48ad-8283-1284313b2c17")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.9.$WCREV$")]
Index: branches/HLScript/HeuristicLab.HLScript/3.3/VariableStore.cs
===================================================================
--- branches/HLScript/HeuristicLab.HLScript/3.3/VariableStore.cs	(revision 10332)
+++ branches/HLScript/HeuristicLab.HLScript/3.3/VariableStore.cs	(revision 10332)
@@ -0,0 +1,14 @@
+﻿using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.HLScript {
+  [Item("VariableStore", "Represents a variable store.")]
+  [StorableClass]
+  public class VariableStore : ObservableDictionary<string, object>, IContent {
+    [StorableConstructor]
+    protected VariableStore(bool deserializing) : base(deserializing) { }
+    public VariableStore() : base() { }
+  }
+}
