Index: stable/HeuristicLab.Scripting.Views/3.3/CSharpScriptView.cs
===================================================================
--- stable/HeuristicLab.Scripting.Views/3.3/CSharpScriptView.cs	(revision 11920)
+++ stable/HeuristicLab.Scripting.Views/3.3/CSharpScriptView.cs	(revision 11937)
@@ -21,4 +21,6 @@
 
 using System;
+using System.Drawing;
+using System.Threading;
 using System.Windows.Forms;
 using HeuristicLab.Common;
@@ -31,4 +33,9 @@
   [Content(typeof(CSharpScript), true)]
   public partial class CSharpScriptView : ScriptView {
+    private const string ScriptExecutionStartedMessage = "Script execution started";
+    private const string ScriptExecutionCanceledMessage = "Script execution canceled";
+    private const string ScriptExecutionSuccessfulMessage = "Script execution successful";
+    private const string ScriptExecutionFailedMessage = "Script execution failed";
+
     protected bool Running { get; set; }
 
@@ -65,4 +72,5 @@
         startStopButton.Image = VSImageLibrary.Stop;
         toolTip.SetToolTip(startStopButton, "Stop (Shift+F5)");
+        UpdateInfoTextLabel(ScriptExecutionStartedMessage, SystemColors.ControlText);
         infoTabControl.SelectedTab = outputTabPage;
       }
@@ -76,8 +84,17 @@
         startStopButton.Image = VSImageLibrary.Play;
         toolTip.SetToolTip(startStopButton, "Run (F5)");
+
+        var ex = e.Value;
+        if (ex == null) {
+          UpdateInfoTextLabel(ScriptExecutionSuccessfulMessage, Color.DarkGreen);
+        } else if (ex is ThreadAbortException) {
+          // the execution was canceled by the user
+          UpdateInfoTextLabel(ScriptExecutionCanceledMessage, Color.DarkOrange);
+        } else {
+          UpdateInfoTextLabel(ScriptExecutionFailedMessage, Color.DarkRed);
+          PluginInfrastructure.ErrorHandling.ShowErrorDialog(this, ex);
+        }
+
         Running = false;
-        var ex = e.Value;
-        if (ex != null)
-          PluginInfrastructure.ErrorHandling.ShowErrorDialog(this, ex);
       }
     }
@@ -111,6 +128,6 @@
         if (Compile()) {
           outputTextBox.Clear();
+          Running = true;
           Content.ExecuteAsync();
-          Running = true;
         }
     }
Index: stable/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj
===================================================================
--- stable/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj	(revision 11920)
+++ stable/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj	(revision 11937)
@@ -118,8 +118,7 @@
   </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 Include="..\..\HeuristicLab.CodeEditor\3.4\HeuristicLab.CodeEditor-3.4.csproj">
+      <Project>{c38691ae-ecb4-489a-a05d-b035554e0168}</Project>
+      <Name>HeuristicLab.CodeEditor-3.4</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
Index: stable/HeuristicLab.Scripting.Views/3.3/Plugin.cs.frame
===================================================================
--- stable/HeuristicLab.Scripting.Views/3.3/Plugin.cs.frame	(revision 11920)
+++ stable/HeuristicLab.Scripting.Views/3.3/Plugin.cs.frame	(revision 11937)
@@ -25,5 +25,5 @@
   [Plugin("HeuristicLab.Scripting.Views", "3.3.10.$WCREV$")]
   [PluginFile("HeuristicLab.Scripting.Views-3.3.dll", PluginFileType.Assembly)]
-  [PluginDependency("HeuristicLab.CodeEditor", "3.3")]
+  [PluginDependency("HeuristicLab.CodeEditor", "3.4")]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
   [PluginDependency("HeuristicLab.Common", "3.3")]
Index: stable/HeuristicLab.Scripting.Views/3.3/ScriptView.Designer.cs
===================================================================
--- stable/HeuristicLab.Scripting.Views/3.3/ScriptView.Designer.cs	(revision 11920)
+++ stable/HeuristicLab.Scripting.Views/3.3/ScriptView.Designer.cs	(revision 11937)
@@ -19,4 +19,8 @@
  */
 #endregion
+
+using System.Collections.Generic;
+using System.Reflection;
+using HeuristicLab.Common;
 
 namespace HeuristicLab.Scripting.Views {
@@ -46,6 +50,5 @@
     private void InitializeComponent() {
       this.components = new System.ComponentModel.Container();
-      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ScriptView));
-      this.compilationLabel = new System.Windows.Forms.Label();
+      this.infoTextLabel = new System.Windows.Forms.Label();
       this.imageList = new System.Windows.Forms.ImageList(this.components);
       this.compileButton = new System.Windows.Forms.Button();
@@ -84,13 +87,13 @@
       this.infoLabel.Location = new System.Drawing.Point(816, 4);
       // 
-      // compilationLabel
-      // 
-      this.compilationLabel.AutoSize = true;
-      this.compilationLabel.ForeColor = System.Drawing.SystemColors.ControlDarkDark;
-      this.compilationLabel.Location = new System.Drawing.Point(66, 32);
-      this.compilationLabel.Name = "compilationLabel";
-      this.compilationLabel.Size = new System.Drawing.Size(69, 13);
-      this.compilationLabel.TabIndex = 3;
-      this.compilationLabel.Text = "Not compiled";
+      // infoTextLabel
+      // 
+      this.infoTextLabel.AutoSize = true;
+      this.infoTextLabel.ForeColor = System.Drawing.SystemColors.ControlDarkDark;
+      this.infoTextLabel.Location = new System.Drawing.Point(66, 32);
+      this.infoTextLabel.Name = "infoTextLabel";
+      this.infoTextLabel.Size = new System.Drawing.Size(69, 13);
+      this.infoTextLabel.TabIndex = 3;
+      this.infoTextLabel.Text = "Not compiled";
       // 
       // imageList
@@ -215,4 +218,8 @@
       this.codeEditor.UserCode = "";
       this.codeEditor.TextEditorTextChanged += new System.EventHandler(this.codeEditor_TextEditorTextChanged);
+      this.codeEditor.AssembliesLoading += new System.EventHandler<HeuristicLab.Common.EventArgs<System.Collections.Generic.IEnumerable<System.Reflection.Assembly>>>(this.codeEditor_AssembliesLoading);
+      this.codeEditor.AssembliesLoaded += new System.EventHandler<HeuristicLab.Common.EventArgs<System.Collections.Generic.IEnumerable<System.Reflection.Assembly>>>(this.codeEditor_AssembliesLoaded);
+      this.codeEditor.AssembliesUnloading += new System.EventHandler<HeuristicLab.Common.EventArgs<System.Collections.Generic.IEnumerable<System.Reflection.Assembly>>>(this.codeEditor_AssembliesUnloading);
+      this.codeEditor.AssembliesUnloaded += new System.EventHandler<HeuristicLab.Common.EventArgs<System.Collections.Generic.IEnumerable<System.Reflection.Assembly>>>(this.codeEditor_AssembliesUnloaded);
       // 
       // splitContainer1
@@ -241,8 +248,8 @@
       this.Controls.Add(this.splitContainer1);
       this.Controls.Add(this.compileButton);
-      this.Controls.Add(this.compilationLabel);
+      this.Controls.Add(this.infoTextLabel);
       this.Name = "ScriptView";
       this.Size = new System.Drawing.Size(835, 602);
-      this.Controls.SetChildIndex(this.compilationLabel, 0);
+      this.Controls.SetChildIndex(this.infoTextLabel, 0);
       this.Controls.SetChildIndex(this.compileButton, 0);
       this.Controls.SetChildIndex(this.splitContainer1, 0);
@@ -266,5 +273,5 @@
     #endregion
 
-    protected System.Windows.Forms.Label compilationLabel;
+    protected System.Windows.Forms.Label infoTextLabel;
     protected System.Windows.Forms.Button compileButton;
     protected System.Windows.Forms.ImageList imageList;
Index: stable/HeuristicLab.Scripting.Views/3.3/ScriptView.cs
===================================================================
--- stable/HeuristicLab.Scripting.Views/3.3/ScriptView.cs	(revision 11920)
+++ stable/HeuristicLab.Scripting.Views/3.3/ScriptView.cs	(revision 11937)
@@ -22,8 +22,11 @@
 using System;
 using System.CodeDom.Compiler;
+using System.Collections.Generic;
 using System.Drawing;
 using System.Globalization;
 using System.Linq;
+using System.Reflection;
 using System.Windows.Forms;
+using HeuristicLab.Common;
 using HeuristicLab.Common.Resources;
 using HeuristicLab.Core.Views;
@@ -35,4 +38,11 @@
   [Content(typeof(Script), true)]
   public partial class ScriptView : NamedItemView {
+    private const string NotCompiledMessage = "Not compiled";
+    private const string CompilationSucceededMessage = "Compilation succeeded";
+    private const string CompilationFailedMessage = "Compilation failed";
+    private const string AssembliesLoadingMessage = "Loading Assemblies";
+    private const string AssembliesUnloadingMessage = "Unloading Assemblies";
+    private const int SilentAssemblyLoadingOperationLimit = 10;
+
     #region Properties
     public new Script Content {
@@ -73,17 +83,8 @@
         codeEditor.UserCode = string.Empty;
       } else {
-        if (codeEditor.UserCode != Content.Code)
-          codeEditor.UserCode = Content.Code;
-        foreach (var asm in Content.GetAssemblies())
-          codeEditor.AddAssembly(asm);
+        codeEditor.UserCode = Content.Code;
+        codeEditor.AddAssembliesAsync(Content.GetAssemblies());
         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";
+          UpdateInfoTextLabel(NotCompiledMessage, SystemColors.ControlText);
         }
       }
@@ -114,12 +115,15 @@
       try {
         Content.Compile();
-        outputTextBox.AppendText("Compilation succeeded.");
+        outputTextBox.AppendText(CompilationSucceededMessage);
+        UpdateInfoTextLabel(CompilationSucceededMessage, Color.DarkGreen);
         return true;
       } catch (CompilationException) {
         if (Content.CompileErrors.HasErrors) {
-          outputTextBox.AppendText("Compilation failed.");
+          outputTextBox.AppendText(CompilationFailedMessage);
+          UpdateInfoTextLabel(CompilationFailedMessage, Color.DarkRed);
           return false;
         } else {
-          outputTextBox.AppendText("Compilation succeeded.");
+          outputTextBox.AppendText(CompilationSucceededMessage);
+          UpdateInfoTextLabel(CompilationSucceededMessage, Color.DarkGreen);
           return true;
         }
@@ -131,5 +135,4 @@
         Locked = false;
         codeEditor.Focus();
-        OnContentChanged();
       }
     }
@@ -137,6 +140,4 @@
     #region Helpers
     protected virtual void ShowCompilationResults() {
-      if (Content.CompileErrors.Count == 0) return;
-
       var messages = Content.CompileErrors.OfType<CompilerError>()
                                       .OrderBy(x => x.IsWarning)
@@ -157,7 +158,12 @@
       }
 
-      codeEditor.ShowCompileErrors(Content.CompileErrors, ".cs");
+      codeEditor.ShowCompileErrors(Content.CompileErrors);
 
       AdjustErrorListViewColumnSizes();
+    }
+
+    protected virtual void UpdateInfoTextLabel(string message, Color color) {
+      infoTextLabel.Text = message;
+      infoTextLabel.ForeColor = color;
     }
 
@@ -167,10 +173,26 @@
         ch.Width = -2;
     }
+
+    #region ProgressView
+    private bool progressViewCreated;
+
+    private void AddProgressView(string progressMessage) {
+      var mainForm = MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>();
+      mainForm.AddOperationProgressToView(this, progressMessage);
+      progressViewCreated = true;
+    }
+
+    private void RemoveProgressView() {
+      if (!progressViewCreated) return;
+      var mainForm = MainFormManager.GetMainForm<MainForm.WindowsForms.MainForm>();
+      mainForm.RemoveOperationProgressFromView(this);
+      progressViewCreated = false;
+    }
+    #endregion
     #endregion
 
     #region Event Handlers
     private void Content_CodeChanged(object sender, EventArgs e) {
-      if (InvokeRequired)
-        Invoke(new EventHandler(Content_CodeChanged), sender, e);
+      if (InvokeRequired) Invoke((Action<object, EventArgs>)Content_CodeChanged, sender, e);
       else {
         codeEditor.UserCode = Content.Code;
@@ -196,4 +218,36 @@
     }
     #endregion
+
+    private void codeEditor_AssembliesLoading(object sender, EventArgs<IEnumerable<Assembly>> e) {
+      if (InvokeRequired) Invoke((Action<object, EventArgs<IEnumerable<Assembly>>>)codeEditor_AssembliesLoading, sender, e);
+      else {
+        int nrOfAssemblies = e.Value.Count();
+        if (nrOfAssemblies > SilentAssemblyLoadingOperationLimit)
+          AddProgressView(AssembliesLoadingMessage);
+      }
+    }
+
+    private void codeEditor_AssembliesLoaded(object sender, EventArgs<IEnumerable<Assembly>> e) {
+      if (InvokeRequired) Invoke((Action<object, EventArgs<IEnumerable<Assembly>>>)codeEditor_AssembliesLoaded, sender, e);
+      else {
+        RemoveProgressView();
+      }
+    }
+
+    private void codeEditor_AssembliesUnloading(object sender, EventArgs<IEnumerable<Assembly>> e) {
+      if (InvokeRequired) Invoke((Action<object, EventArgs<IEnumerable<Assembly>>>)codeEditor_AssembliesUnloading, sender, e);
+      else {
+        int nrOfAssemblies = e.Value.Count();
+        if (nrOfAssemblies > SilentAssemblyLoadingOperationLimit)
+          AddProgressView(AssembliesUnloadingMessage);
+      }
+    }
+
+    private void codeEditor_AssembliesUnloaded(object sender, EventArgs<IEnumerable<Assembly>> e) {
+      if (InvokeRequired) Invoke((Action<object, EventArgs<IEnumerable<Assembly>>>)codeEditor_AssembliesUnloaded, sender, e);
+      else {
+        RemoveProgressView();
+      }
+    }
   }
 }
