Index: branches/3.1/sources/HeuristicLab/MainForm.cs
===================================================================
--- branches/3.1/sources/HeuristicLab/MainForm.cs	(revision 598)
+++ branches/3.1/sources/HeuristicLab/MainForm.cs	(revision 599)
@@ -89,5 +89,5 @@
         } else {
           ApplicationInfo app = (ApplicationInfo)applicationsListView.SelectedItems[0].Tag;
-          SplashScreen splashScreen = new SplashScreen(1000, "Loading " + app.Name);
+          SplashScreen splashScreen = new SplashScreen(2000, "Loading " + app.Name);
           splashScreen.Owner = this;
           splashScreen.Show();
Index: branches/3.1/sources/HeuristicLab/SplashScreen.Designer.cs
===================================================================
--- branches/3.1/sources/HeuristicLab/SplashScreen.Designer.cs	(revision 598)
+++ branches/3.1/sources/HeuristicLab/SplashScreen.Designer.cs	(revision 599)
@@ -50,5 +50,4 @@
       this.components = new System.ComponentModel.Container();
       System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SplashScreen));
-      this.waitTimer = new System.Windows.Forms.Timer(this.components);
       this.panel = new System.Windows.Forms.Panel();
       this.closeButton = new System.Windows.Forms.Button();
@@ -62,13 +61,7 @@
       this.copyrightLabel = new System.Windows.Forms.Label();
       this.pictureBox = new System.Windows.Forms.PictureBox();
-      this.fadeTimer = new System.Windows.Forms.Timer(this.components);
       this.panel.SuspendLayout();
       ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
       this.SuspendLayout();
-      // 
-      // waitTimer
-      // 
-      this.waitTimer.Interval = 1000;
-      this.waitTimer.Tick += new System.EventHandler(this.waitTimer_Tick);
       // 
       // panel
@@ -205,9 +198,4 @@
       this.pictureBox.TabIndex = 0;
       this.pictureBox.TabStop = false;
-      // 
-      // fadeTimer
-      // 
-      this.fadeTimer.Interval = 50;
-      this.fadeTimer.Tick += new System.EventHandler(this.fadeTimer_Tick);
       // 
       // SplashScreen
@@ -235,5 +223,4 @@
     #endregion
 
-    private System.Windows.Forms.Timer waitTimer;
     private System.Windows.Forms.Panel panel;
     private System.Windows.Forms.PictureBox pictureBox;
@@ -247,5 +234,4 @@
     private System.Windows.Forms.ImageList imageList;
     private System.Windows.Forms.Button closeButton;
-    private System.Windows.Forms.Timer fadeTimer;
   }
 }
Index: branches/3.1/sources/HeuristicLab/SplashScreen.cs
===================================================================
--- branches/3.1/sources/HeuristicLab/SplashScreen.cs	(revision 598)
+++ branches/3.1/sources/HeuristicLab/SplashScreen.cs	(revision 599)
@@ -30,14 +30,9 @@
 namespace HeuristicLab {
   public partial class SplashScreen : Form {
-    private int myDisplayTime = 1000;
-    public int DisplayTime {
-      get { return (myDisplayTime); }
-      set {
-        if(value > 0) {
-          myDisplayTime = value;
-          waitTimer.Interval = value;
-        }
-      }
-    }
+    private const int FADE_INTERVAL = 50;
+    private System.Timers.Timer fadeTimer;
+    private int initialInterval;
+    private object bigLock = new object();
+    private bool closing = false;
 
     public SplashScreen() {
@@ -77,12 +72,9 @@
         companyLabel.Text = "-";
       }
-      waitTimer.Start();
     }
 
-    public SplashScreen(int displayTime, string initialText)
+    public SplashScreen(int initialInterval, string initialText)
       : this() {
-      waitTimer.Stop();
-      DisplayTime = displayTime;
-      waitTimer.Start();
+      this.initialInterval = initialInterval;
       infoLabel.Text = initialText;
     }
@@ -93,54 +85,49 @@
 
     public void Manager_Action(object sender, PluginManagerActionEventArgs e) {
-      if(!this.Disposing && !this.IsDisposed) {
-        waitTimer.Stop();
-        string info;
-        if(e.Action == PluginManagerAction.Initializing) info = "Initializing ...";
-        else if(e.Action == PluginManagerAction.InitializingPlugin) info = "Initializing Plugin " + e.Id + " ...";
-        else if(e.Action == PluginManagerAction.InitializedPlugin) info = "Initializing Plugin " + e.Id + " ... Initialized";
-        else if(e.Action == PluginManagerAction.Initialized) info = "Initialization Completed";
-        else {
-          if(e.Id != null) info = e.Action.ToString() + "   (" + e.Id + ")";
-          else info = e.Action.ToString();
-        }
-        SetInfoText(info);
-        Application.DoEvents();
-        waitTimer.Start();
+      string info;
+      if(e.Action == PluginManagerAction.Initializing) info = "Initializing ...";
+      else if(e.Action == PluginManagerAction.InitializingPlugin) info = "Initializing Plugin " + e.Id + " ...";
+      else if(e.Action == PluginManagerAction.InitializedPlugin) info = "Initializing Plugin " + e.Id + " ... Initialized";
+      else if(e.Action == PluginManagerAction.Initialized) {
+        info = "Initialization Completed";
+        fadeTimer = new System.Timers.Timer();
+        fadeTimer.SynchronizingObject = this;
+        fadeTimer.Elapsed += new System.Timers.ElapsedEventHandler(fadeTimer_Elapsed);
+        fadeTimer.Interval = initialInterval;
+        fadeTimer.AutoReset = true;
+        fadeTimer.Start();
+      } else {
+        if(e.Id != null) info = e.Action.ToString() + "   (" + e.Id + ")";
+        else info = e.Action.ToString();
+      }
+      SetInfoText(info);
+      Application.DoEvents();
+    }
+
+    private void fadeTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
+      fadeTimer.Stop();
+      if(InvokeRequired) {
+        Invoke((MethodInvoker)UpdateOpacity);
+      } else {
+        UpdateOpacity();
       }
     }
 
-    private void waitTimer_Tick(object sender, System.EventArgs e) {
-      if(!this.Disposing && !this.IsDisposed) {
-        waitTimer.Stop();
-        fadeTimer.Start();
-      }
-    }
-
-    private void fadeTimer_Tick(object sender, EventArgs e) {
-      if(InvokeRequired) {
-        Invoke((MethodInvoker)delegate() {
-          if(Opacity > 0.9) {
-            Opacity = 0.9;
-          } else if(this.Opacity > 0) {
-            Opacity -= 0.1;
-          } else {
-            Opacity = 0;
-            fadeTimer.Stop();
-            Close();
-          }
-        });
-      } else {
+    private void UpdateOpacity() {
+      lock(bigLock) {
+        if(closing) return;
         if(Opacity > 0.9) {
           Opacity = 0.9;
+          fadeTimer.Interval = FADE_INTERVAL;
+          fadeTimer.Start();
         } else if(this.Opacity > 0) {
           Opacity -= 0.1;
+          fadeTimer.Start();
         } else {
           Opacity = 0;
-          fadeTimer.Stop();
           Close();
         }
       }
     }
-
 
     private void SplashScreen_FormClosing(object sender, FormClosingEventArgs e) {
@@ -149,6 +136,9 @@
 
     private void closeButton_Click(object sender, EventArgs e) {
-      waitTimer.Stop();
-      Close();
+      lock(bigLock) {
+        closing = true;
+        if(fadeTimer != null) fadeTimer.Stop();
+        Close();
+      }
     }
   }
Index: branches/3.1/sources/HeuristicLab/SplashScreen.resx
===================================================================
--- branches/3.1/sources/HeuristicLab/SplashScreen.resx	(revision 598)
+++ branches/3.1/sources/HeuristicLab/SplashScreen.resx	(revision 599)
@@ -118,7 +118,4 @@
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <metadata name="waitTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>16, 17</value>
-  </metadata>
   <metadata name="imageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>219, 17</value>
@@ -136,6 +133,3 @@
 </value>
   </data>
-  <metadata name="fadeTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>116, 17</value>
-  </metadata>
 </root>
