Index: anches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/AssemblyInfo.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/AssemblyInfo.cs	(revision 4771)
+++ 	(revision )
@@ -1,60 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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;
-using HeuristicLab.PluginInfrastructure;
-using System.Security;
-
-// 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.Calendar")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("HeuristicLab")]
-[assembly: AssemblyCopyright("Copyright © Moreum 2005")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-[assembly: AllowPartiallyTrustedCallers]
-
-// 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("B6BA196A-F2E3-4de2-AE8A-02D4995F8B57")]
-
-// 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.0.4760")]
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/AssemblyInfo.frame	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/AssemblyInfo.frame	(revision 4772)
@@ -56,5 +56,4 @@
 // 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.0.$WCREV$")]
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ILifecycleManager.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ILifecycleManager.cs	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ILifecycleManager.cs	(revision 4772)
@@ -21,4 +21,6 @@
 
 using System;
+using System.Collections.Generic;
+using HeuristicLab.PluginInfrastructure.Manager;
 
 namespace HeuristicLab.Hive.Contracts.Interfaces {
@@ -47,4 +49,6 @@
 
     event EventHandler Stopped;
+
+    IEnumerable<PluginDescription> Plugins { get; set; }
   }
 }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager.Views/3.3/MenuItems/ConnectionSetupMenuItem.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager.Views/3.3/MenuItems/ConnectionSetupMenuItem.cs	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager.Views/3.3/MenuItems/ConnectionSetupMenuItem.cs	(revision 4772)
@@ -44,5 +44,5 @@
     }
     public override int Position {
-      get { return 10000; }
+      get { return 11000; }
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager.Views/3.3/MenuItems/ExperimentManagerMenuItem.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager.Views/3.3/MenuItems/ExperimentManagerMenuItem.cs	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager.Views/3.3/MenuItems/ExperimentManagerMenuItem.cs	(revision 4772)
@@ -38,5 +38,5 @@
     }
     public override int Position {
-      get { return 11000; }
+      get { return 10000; }
     }
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerConsole.Designer.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerConsole.Designer.cs	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerConsole.Designer.cs	(revision 4772)
@@ -46,7 +46,4 @@
     private void InitializeComponent() {
       System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HiveServerConsole));
-      this.gbConfiguration = new System.Windows.Forms.GroupBox();
-      this.lblIp = new System.Windows.Forms.Label();
-      this.tbIp = new System.Windows.Forms.TextBox();
       this.btnLogin = new System.Windows.Forms.Button();
       this.gpUser = new System.Windows.Forms.GroupBox();
@@ -58,36 +55,7 @@
       this.pictureBox1 = new System.Windows.Forms.PictureBox();
       this.btnCancel = new System.Windows.Forms.Button();
-      this.gbConfiguration.SuspendLayout();
       this.gpUser.SuspendLayout();
       ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
       this.SuspendLayout();
-      // 
-      // gbConfiguration
-      // 
-      this.gbConfiguration.Controls.Add(this.lblIp);
-      this.gbConfiguration.Controls.Add(this.tbIp);
-      this.gbConfiguration.Location = new System.Drawing.Point(188, 100);
-      this.gbConfiguration.Name = "gbConfiguration";
-      this.gbConfiguration.Size = new System.Drawing.Size(283, 82);
-      this.gbConfiguration.TabIndex = 4;
-      this.gbConfiguration.TabStop = false;
-      this.gbConfiguration.Text = "Configuration";
-      // 
-      // lblIp
-      // 
-      this.lblIp.AutoSize = true;
-      this.lblIp.Location = new System.Drawing.Point(16, 26);
-      this.lblIp.Name = "lblIp";
-      this.lblIp.Size = new System.Drawing.Size(17, 13);
-      this.lblIp.TabIndex = 2;
-      this.lblIp.Text = "IP";
-      // 
-      // tbIp
-      // 
-      this.tbIp.Location = new System.Drawing.Point(77, 19);
-      this.tbIp.Name = "tbIp";
-      this.tbIp.Size = new System.Drawing.Size(191, 20);
-      this.tbIp.TabIndex = 5;
-      this.tbIp.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.HiveServerConsole_KeyPress);
       // 
       // btnLogin
@@ -193,5 +161,4 @@
       this.Controls.Add(this.gpUser);
       this.Controls.Add(this.btnLogin);
-      this.Controls.Add(this.gbConfiguration);
       this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
       this.Name = "HiveServerConsole";
@@ -199,6 +166,4 @@
       this.Text = "Server Console Logon";
       this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.HiveServerConsole_KeyPress);
-      this.gbConfiguration.ResumeLayout(false);
-      this.gbConfiguration.PerformLayout();
       this.gpUser.ResumeLayout(false);
       this.gpUser.PerformLayout();
@@ -211,7 +176,4 @@
     #endregion
 
-    private System.Windows.Forms.GroupBox gbConfiguration;
-    private System.Windows.Forms.Label lblIp;
-    private System.Windows.Forms.TextBox tbIp;
     private System.Windows.Forms.Button btnLogin;
     private System.Windows.Forms.GroupBox gpUser;
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerConsole.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerConsole.cs	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerConsole.cs	(revision 4772)
@@ -50,9 +50,4 @@
     /// <param name="e"></param>
     private void BtnLogin_Click(object sender, EventArgs e) {
-      string newIp = tbIp.Text;
-      newIp = newIp.Replace(" ", "");
-
-      ServiceLocator.Address = newIp;
-
       if (IsValid()) {
         this.Visible = false;
@@ -71,5 +66,4 @@
       Thread t = new Thread(new ThreadStart(ShowWaitDlg));
       if (IsFormValidated()) {
-        IPAddress ipAdress = IPAddress.Parse(tbIp.Text);
         IServerConsoleFacade scf;
         Response resp;
@@ -79,5 +73,4 @@
           t.Start();
 
-          ServiceLocator.Address = tbIp.Text.Replace(" ", "");
           ServiceLocator.Username = tbUserName.Text;
           ServiceLocator.Password = tbPwd.Text;
@@ -129,15 +122,4 @@
         isValid = false;
       }
-      if (String.IsNullOrEmpty(tbIp.Text)) {
-        lblError.Text = "Please type in Port.";
-        isValid = false;
-      }
-      try {
-        IPAddress.Parse(tbIp.Text);
-      }
-      catch (Exception ex) {
-        isValid = false;
-        lblError.Text = "Please verify entered IP address.";
-      }
       return isValid;
     }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/ServiceLocator.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/ServiceLocator.cs	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/ServiceLocator.cs	(revision 4772)
@@ -9,5 +9,4 @@
     private static IServerConsoleFacade serverConsoleFacade = null;
 
-    internal static string Address { get; set; }
     internal static string Username { get; set; }
     internal static string Password { get; set; } // [chn] TODO: Don't store plaintext password in memory!
@@ -22,7 +21,7 @@
 
     internal static IServerConsoleFacade GetServerConsoleFacade() {
-      if (serverConsoleFacade == null && Address != String.Empty) {
+      if (serverConsoleFacade == null) {
         ChannelFactory<IServerConsoleFacade> factory = new ChannelFactory<IServerConsoleFacade>("ServerConsoleHttpEndpoint");
-        WcfSettings.SetEndpointAddress(factory.Endpoint, Address);
+        //WcfSettings.SetEndpointAddress(factory.Endpoint, Address);
 
         factory.Credentials.UserName.UserName = Username;
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/LifecycleManager.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/LifecycleManager.cs	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/LifecycleManager.cs	(revision 4772)
@@ -24,4 +24,6 @@
 using HeuristicLab.Hive.Contracts.Interfaces;
 using HeuristicLab.Hive.Tracing;
+using System.Collections.Generic;
+using HeuristicLab.PluginInfrastructure.Manager;
 
 namespace HeuristicLab.Hive.Server.Core {
@@ -46,4 +48,10 @@
         }
       }
+    }
+
+    private IEnumerable<PluginDescription> plugins;
+    public IEnumerable<PluginDescription> Plugins {
+      get { return plugins; }
+      set { plugins = value; }
     }
 
@@ -99,4 +107,6 @@
 
     #endregion
+
+
   }
 }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/SlaveCommunicator.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/SlaveCommunicator.cs	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/SlaveCommunicator.cs	(revision 4772)
@@ -35,4 +35,5 @@
 using System.Diagnostics;
 using HeuristicLab.Hive.Tracing;
+using HeuristicLab.PluginInfrastructure.Manager;
 
 namespace HeuristicLab.Hive.Server.Core {
@@ -756,11 +757,12 @@
       foreach (HivePluginInfoDto pluginInfo in pluginList) {
         if (pluginInfo.Update) {
-          //check if there is a newer version         
-          IPluginDescription ipd = ApplicationManager.Manager.Plugins.Where(pd => pd.Name == pluginInfo.Name && pd.Version.Major == pluginInfo.Version.Major && pd.Version.Minor == pluginInfo.Version.Minor && pd.Version.Revision > pluginInfo.Version.Revision).SingleOrDefault();
+          //check if there is a newer version    
+
+          IPluginDescription ipd = GetAvailablePlugins().Where(pd => pd.Name == pluginInfo.Name && pd.Version.Major == pluginInfo.Version.Major && pd.Version.Minor == pluginInfo.Version.Minor && pd.Version.Revision > pluginInfo.Version.Revision).SingleOrDefault();
           if (ipd != null) {
             response.List.Add(ConvertPluginDescriptorToDto(ipd));
           }
         } else {
-          IPluginDescription ipd = ApplicationManager.Manager.Plugins.Where(pd => pd.Name == pluginInfo.Name && pd.Version.Major == pluginInfo.Version.Major && pd.Version.Minor == pluginInfo.Version.Minor && pd.Version.Revision >= pluginInfo.Version.Revision).SingleOrDefault();
+          IPluginDescription ipd = GetAvailablePlugins().Where(pd => pd.Name == pluginInfo.Name && pd.Version.Major == pluginInfo.Version.Major && pd.Version.Minor == pluginInfo.Version.Minor && pd.Version.Revision >= pluginInfo.Version.Revision).SingleOrDefault();
           if (ipd != null) {
             response.List.Add(ConvertPluginDescriptorToDto(ipd));
@@ -774,4 +776,8 @@
     }
 
+    private IEnumerable<PluginDescription> GetAvailablePlugins() {
+      return lifecycleManager.Plugins;
+    }
+
     private CachedHivePluginInfoDto ConvertPluginDescriptorToDto(IPluginDescription currPlugin) {
       CachedHivePluginInfoDto currCachedPlugin = new CachedHivePluginInfoDto {
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/JobDao.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/JobDao.cs	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/JobDao.cs	(revision 4772)
@@ -184,5 +184,13 @@
       Job j = Context.Jobs.SingleOrDefault(jq => jq.JobId.Equals(job.Id));
       j.Slave = null;
-      j.JobState = Enum.GetName(typeof(JobState), JobState.Offline);
+
+      var childJobs = Context.Jobs.Where(child => child.ParentJobId == j.JobId);
+
+      if (childJobs.Count() > 0) {
+        j.JobState = JobState.WaitForChildJobs.ToString();
+      } else {
+        j.JobState = JobState.Offline.ToString();
+      }
+
       CommitChanges();
     }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/WcfService.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/WcfService.cs	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/WcfService.cs	(revision 4772)
@@ -173,29 +173,24 @@
         MemoryStream memStream = null;
         try {
-          if (ar.IsCompleted) {
-            Logger.Debug("ENDED: Fetching of Jobs from Server for Slave");
-            stream = service.Obj.EndGetStreamedJob(ar);
-
-            //first deserialize the response
-            BinaryFormatter formatter = new BinaryFormatter();
-            ResponseObject<JobDto> response = (ResponseObject<JobDto>)formatter.Deserialize(stream);
-
-            //second deserialize the BLOB
-            memStream = new MemoryStream();
-
-            byte[] buffer = new byte[3024];
-            int read = 0;
-            while ((read = stream.Read(buffer, 0, buffer.Length)) > 0) {
-              memStream.Write(buffer, 0, read);
-            }
-
-            memStream.Close();
-
-            GetJobCompletedEventArgs completedEventArgs = new GetJobCompletedEventArgs(new object[] { response, memStream.GetBuffer() }, null, !ar.IsCompleted, ar.AsyncState);
-            GetJobCompleted(this, completedEventArgs);
-
-          } else {
-            HandleNetworkError(new FaultException("GetJobAsync did not complete"));
+          Logger.Debug("ENDED: Fetching of Jobs from Server for Slave");
+          stream = service.Obj.EndGetStreamedJob(ar);
+
+          //first deserialize the response
+          BinaryFormatter formatter = new BinaryFormatter();
+          ResponseObject<JobDto> response = (ResponseObject<JobDto>)formatter.Deserialize(stream);
+
+          //second deserialize the BLOB
+          memStream = new MemoryStream();
+
+          byte[] buffer = new byte[3024];
+          int read = 0;
+          while ((read = stream.Read(buffer, 0, buffer.Length)) > 0) {
+            memStream.Write(buffer, 0, read);
           }
+
+          memStream.Close();
+
+          GetJobCompletedEventArgs completedEventArgs = new GetJobCompletedEventArgs(new object[] { response, memStream.GetBuffer() }, null, !ar.IsCompleted, ar.AsyncState);
+          GetJobCompleted(this, completedEventArgs);
         }
         catch (Exception e) {
@@ -236,13 +231,9 @@
             stream.Dispose();
 
-          if (ar.IsCompleted) {
-            var res = service.Obj.EndStoreFinishedJobResultStreamed(ar);
-            StoreFinishedJobResultCompletedEventArgs args = new StoreFinishedJobResultCompletedEventArgs(new object[] { res }, null, false, null);
-            Logger.Debug("calling the Finished Job Event");
-            GetFinishedJobResultCompleted(this, args);
-            Logger.Debug("ENDED: Sending back the finished job results");
-          } else {
-            HandleNetworkError(new FaultException("GetFinishedJobResultAsync did not complete"));
-          }
+          var res = service.Obj.EndStoreFinishedJobResultStreamed(ar);
+          StoreFinishedJobResultCompletedEventArgs args = new StoreFinishedJobResultCompletedEventArgs(new object[] { res }, null, false, null);
+          Logger.Debug("calling the Finished Job Event");
+          GetFinishedJobResultCompleted(this, args);
+          Logger.Debug("ENDED: Sending back the finished job results");
         }
         catch (Exception e) {
@@ -269,11 +260,7 @@
             stream.Dispose();
 
-          if (ar.IsCompleted) {
-            var res = service.Obj.EndStoreFinishedJobResultStreamed(ar);
-            ProcessSnapshotCompletedEventArgs args = new ProcessSnapshotCompletedEventArgs(new object[] { res }, null, false, null);
-            ProcessSnapshotCompleted(this, args);
-          } else {
-            HandleNetworkError(new FaultException("ProcessSnapshotAsync did not complete"));
-          }
+          var res = service.Obj.EndStoreFinishedJobResultStreamed(ar);
+          ProcessSnapshotCompletedEventArgs args = new ProcessSnapshotCompletedEventArgs(new object[] { res }, null, false, null);
+          ProcessSnapshotCompleted(this, args);
         }
         catch (Exception e) {
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLab.Hive.Slave.Console-3.3.csproj
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLab.Hive.Slave.Console-3.3.csproj	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLab.Hive.Slave.Console-3.3.csproj	(revision 4772)
@@ -79,4 +79,10 @@
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\..\..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
     <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
       <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
@@ -117,5 +123,7 @@
     <Compile Include="HeuristicLabHiveSlaveConsolePlugin.cs" />
     <Compile Include="HeuristicLabHiveSlaveConsoleApplication.cs" />
+    <Compile Include="ILogReader.cs" />
     <Compile Include="LogFileReader.cs" />
+    <Compile Include="LogServiceReader.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Service References\SlaveConsoleService\Reference.cs">
@@ -161,4 +169,7 @@
       <DependentUpon>Recurrence.cs</DependentUpon>
     </Compile>
+    <None Include="Service References\SlaveConsoleService\Arrays.xsd">
+      <SubType>Designer</SubType>
+    </None>
     <None Include="Service References\SlaveConsoleService\HeuristicLab.Calendar.xsd">
       <SubType>Designer</SubType>
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.cs	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.cs	(revision 4772)
@@ -51,5 +51,5 @@
     private static bool isfired = false;
     //the logfilereader
-    private LogFileReader logFileReader;
+    private ILogReader logFileReader;
 
     //communication with the slave
@@ -103,6 +103,7 @@
 
     private void InitLogFileReader() {
-      logFileReader = new LogFileReader(AppDomain.CurrentDomain.BaseDirectory + @"/Hive.Slave.log");
-      logFileReader.MoreData += new LogFileReader.MoreDataHandler(logFileReader_MoreData);
+      //logFileReader = new LogFileReader(AppDomain.CurrentDomain.BaseDirectory + @"/Hive.Slave.log");
+      logFileReader = new LogServiceReader(slaveCommunicator);
+      logFileReader.MoreData += new MoreDataHandler(logFileReader_MoreData);
       logFileReader.Start();
     }
@@ -406,5 +407,5 @@
 
     private void btnSaveCal_Click(object sender, EventArgs e) {
-      slaveCommunicator.SetUptimeCalendarAsync(onlineTimes.ToArray());
+      slaveCommunicator.SetUptimeCalendarAsync(onlineTimes);
     }
 
@@ -488,6 +489,4 @@
             curJobStatusItem = new ListViewItem(curJob.JobId.ToString());
             curJobStatusItem.SubItems.Add(curJob.Since.ToString());
-            progress = curJob.Progress * 100;
-            curJobStatusItem.SubItems.Add(progress.ToString());
             lvJobDetail.Items.Add(curJobStatusItem);
           }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.designer.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.designer.cs	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.designer.cs	(revision 4772)
@@ -112,4 +112,7 @@
       this.dvOnline.ActiveTool = drawTool1;
       this.dvOnline.AmPmDisplay = false;
+      this.dvOnline.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.dvOnline.AppointmentDuration = HeuristicLab.Calendar.AppointmentSlotDuration.SixtyMinutes;
       this.dvOnline.AppointmentHeightMode = HeuristicLab.Calendar.AppHeightDrawMode.TrueHeightAll;
@@ -127,5 +130,5 @@
       this.dvOnline.SelectionEnd = new System.DateTime(((long)(0)));
       this.dvOnline.SelectionStart = new System.DateTime(((long)(0)));
-      this.dvOnline.Size = new System.Drawing.Size(823, 225);
+      this.dvOnline.Size = new System.Drawing.Size(823, 234);
       this.dvOnline.StartDate = new System.DateTime(((long)(0)));
       this.dvOnline.TabIndex = 18;
@@ -134,12 +137,14 @@
       // tcClientConsole
       // 
+      this.tcClientConsole.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.tcClientConsole.Controls.Add(this.tpConnection);
       this.tcClientConsole.Controls.Add(this.tabPage2);
-      this.tcClientConsole.Dock = System.Windows.Forms.DockStyle.Fill;
       this.tcClientConsole.ItemSize = new System.Drawing.Size(410, 21);
       this.tcClientConsole.Location = new System.Drawing.Point(0, 0);
       this.tcClientConsole.Name = "tcClientConsole";
       this.tcClientConsole.SelectedIndex = 0;
-      this.tcClientConsole.Size = new System.Drawing.Size(853, 438);
+      this.tcClientConsole.Size = new System.Drawing.Size(850, 457);
       this.tcClientConsole.SizeMode = System.Windows.Forms.TabSizeMode.Fixed;
       this.tcClientConsole.TabIndex = 1;
@@ -155,5 +160,5 @@
       this.tpConnection.Padding = new System.Windows.Forms.Padding(3);
       this.tpConnection.RightToLeft = System.Windows.Forms.RightToLeft.No;
-      this.tpConnection.Size = new System.Drawing.Size(845, 409);
+      this.tpConnection.Size = new System.Drawing.Size(842, 428);
       this.tpConnection.TabIndex = 0;
       this.tpConnection.Text = "Status";
@@ -223,4 +228,6 @@
       // gbJobCommon
       // 
+      this.gbJobCommon.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
       this.gbJobCommon.Controls.Add(this.lvJobDetail);
       this.gbJobCommon.Location = new System.Drawing.Point(568, 6);
@@ -401,8 +408,11 @@
       // gbEventLog
       // 
+      this.gbEventLog.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.gbEventLog.Controls.Add(this.txtLog);
       this.gbEventLog.Location = new System.Drawing.Point(7, 176);
       this.gbEventLog.Name = "gbEventLog";
-      this.gbEventLog.Size = new System.Drawing.Size(830, 230);
+      this.gbEventLog.Size = new System.Drawing.Size(830, 249);
       this.gbEventLog.TabIndex = 7;
       this.gbEventLog.TabStop = false;
@@ -411,4 +421,7 @@
       // txtLog
       // 
+      this.txtLog.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.txtLog.Location = new System.Drawing.Point(6, 19);
       this.txtLog.Multiline = true;
@@ -416,5 +429,5 @@
       this.txtLog.ReadOnly = true;
       this.txtLog.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
-      this.txtLog.Size = new System.Drawing.Size(818, 205);
+      this.txtLog.Size = new System.Drawing.Size(818, 224);
       this.txtLog.TabIndex = 0;
       // 
@@ -430,5 +443,5 @@
       this.tabPage2.Name = "tabPage2";
       this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
-      this.tabPage2.Size = new System.Drawing.Size(845, 409);
+      this.tabPage2.Size = new System.Drawing.Size(842, 428);
       this.tabPage2.TabIndex = 1;
       this.tabPage2.Text = "Schedule";
@@ -598,7 +611,6 @@
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
       this.BackColor = System.Drawing.SystemColors.Control;
-      this.ClientSize = new System.Drawing.Size(853, 438);
+      this.ClientSize = new System.Drawing.Size(850, 457);
       this.Controls.Add(this.tcClientConsole);
-      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
       this.MaximizeBox = false;
       this.MinimizeBox = false;
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.resx
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.resx	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.resx	(revision 4772)
@@ -125,54 +125,51 @@
         AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
         LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
-        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA4
-        CgAAAk1TRnQBSQFMAgEBAgEAARQBAAEUAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
-        AwABEAMAAQEBAAEgBgABECoAAUICPwF0AWQCHAHxAy4B/wFgAjMB1AMfASwsAAFCAj8BdAFkAhwB8QMu
-        Af8BYAIzAdQDHwEspAABXgIZAfIBkwGBAS4B/wG/AYEBLgH/Ab0BgQEuAf8BugGBAS4B/wG4AYEBLgH/
-        AbYBgQEuAf8BYgFLAS4B/wE7AjoBZRwAAV4CGQHyAi4BpAH/Ai4B1gH/Ai4B1AH/Ai4B0gH/Ai4B0AH/
-        Ai4BzgH/Ai4BaQH/ATsCOgFlmAABOAE0AS4B/wHHAYEBLgH/AcMBgQEuAf8BsQGBAS4B/wGxAYEBLgH/
-        AbEBgQEuAf8BsQGBAS4B/wGzAYEBLgH/AbYBgQEuAf8BtAGBAS4B/wFhAiYB5BQAAi4BOQH/Ai4B3AH/
-        Ai4B2QH/Ai4BygH/Ai4BygH/Ai4BygH/Ai4BygH/Ai4BywH/Ai4BzgH/Ai4BzAH/AWECJgHkkAADLgH/
-        AcsBgQEuAf8BuwGBAS4B/wG2AYEBLgH/AbYBgQEuAf8B7gHcAcQF/wG+AYEBSwH/AbYBgQEuAf8BtgGB
-        AS4B/wG2AYEBLgH/AbQBgQEuAf8BSAJCAYYMAAMuAf8CLgHgAf8CLgHSAf8CLgHOAf8CWwHWAf8CLgHO
-        Af8CLgHOAf8CLgHOAf8CMQHOAf8CLgHOAf8CLgHOAf8CLgHMAf8BSAJCAYaIAAMrAUIB0AGGAS4B/wHH
-        AYEBLgH/AboBgQEuAf8BugGBAS4B/wG6AYEBLgH/AdABnAGBBf8BugGBAS4B/wG6AYEBLgH/AboBgQEu
-        Af8BugGBAS4B/wG2AYEBLgH/AYEBXQEuAf8IAAMrAUICLgHkAf8CLgHcAf8CLgHSAf8CnwHtBf8CdAHe
-        Af8CLgHSAf8C9AH9Bf8CMQHSAf8CLgHSAf8CLgHOAf8CLgGBAf+IAAMuAf8B0gGJAS4B/wG/AYEBLgH/
-        Ab8BgQEuAf8BvwGBAS4B/wG/AYEBLgH/AdMBnwGBBf8BvwGBAS4B/wG/AYEBLgH/Ab8BgQEuAf8BvwGB
-        AS4B/wG+AYEBLgH/AbYBgQEuAf8DNQFXBAADLgH/Ai4B5QH/Ai4B1gH/Ai4B1g3/AvUB/Qn/AuIB+gH/
-        Ai4B1gH/Ai4B1QH/Ai4BzgH/AzUBV4QAAXYBXgEuAf8B1AGMAS4B/wHEAYEBLgH/AcQBgQEuAf8BxAGB
-        AS4B/wHEAYEBLgH/AdcBpAGBBf8BxAGBAS4B/wHEAYEBLgH/AcQBgQEuAf8BxAGBAS4B/wHEAYEBLgH/
-        AbgBgQEuAf8BZAIgAewEAAIuAXwB/wIuAegB/wIuAdoB/wIuAdoB/wIuAdoR/wLiAfoB/wIuAdoB/wIu
-        AdoB/wIuAdoB/wIuAdAB/wFkAiAB7IQAAYEBcwEuAf8B1wGOAS4B/wHJAYEBLgH/AckBgQEuAf8ByQGB
-        AS4B/wHJAYEBLgn/AckBgQEuAf8ByQGBAS4B/wHJAYEBLgH/AckBgQEuAf8ByQGBAS4B/wG6AYEBLgH/
-        Ay4B/wQAAi4BgQH/Ai4B6QH/Ai4B3gH/Ai4B3gH/Ai4B3gH/AvQB/Q3/AnQB5wH/Ai4B3gH/Ai4B3gH/
-        Ai4B3gH/Ai4B0gH/Ay4B/4QAAYEBZAEuAf8B2QGRAS4B/wHOAYMBLgH/Ac4BgwEuAf8BzgGDAS4B/wHO
-        AYMBLgH/Ac4BgwEuAf8B1wGcAV8B/wHOAYMBLgH/Ac4BgwEuAf8BzgGDAS4B/wHOAYMBLgH/Ac4BgwEu
-        Af8BvQGBAS4B/wFiAhkB+QQAAS4BMwGBAf8CLgHsAf8CLgHiAf8CLgHiAf8C9AH9Ff8CdAHqAf8CLgHi
-        Af8CLgHiAf8CLgHUAf8BYgIZAfmEAAExAS8BLgH/AdsBlAEuAf8B0gGJAS4B/wHSAYkBLgH/AdIBiQEu
-        Af8B0gGJAS4B/wHSAYkBLgH/AesBywGQAf8B0gGJAS4B/wHSAYkBLgH/AdIBiQEuAf8B0gGJAS4B/wHE
-        AYEBLgH/Ab8BgQEuAf8BUAJEAZsEAAIuATEB/wIuAe0B/wIuAeYB/wIuAeUB/wL9Af4F/wLiAfwB/wIu
-        AeUJ/wKBAfEB/wIuAeUB/wIuAdoB/wIuAdYB/wFQAkQBm4QAAVUCQgGyAd4BmAEuAf8B2wGUAS4B/wHX
-        AY4BLgH/AdcBjgEuAf8B1wGOAS4B/wH7AfYB6wX/AdcBjgEuAf8B1wGOAS4B/wHXAY4BLgH/AdYBjQEu
-        Af8BxAGBAS4B/wGpAYEBLgH/CAABVQJCAbIBLgE4Ae8B/wIuAe0B/wIuAekB/wIuAekB/wLhAfwB/wIu
-        AekB/wIuAekB/wIuAekB/wKBAfMB/wIuAekB/wIuAegB/wIuAdoB/wEuATYBnQH/jAABaAFNAS4B/wHd
-        AZcBLgH/AdsBlAEuAf8B2wGUAS4B/wHbAZQBLgH/AdsBlAEuAf8B3AGXATQB/wHbAZQBLgH/AdsBlAEu
-        Af8B1QGMAS4B/wHJAYEBLgH/AdEBiAEuAf8BKwIjAfwMAAIuAWIB/wIuAe8B/wIuAe0B/wIuAe0B/wIu
-        Ae0B/wIuAe0B/wIuAe0B/wIuAe0B/wIuAe0B/wIuAegB/wIuAd4B/wEuAUEB4gH/ASsCIwH8jAADGAEh
-        AZABgQEuAf8B3wGZAS4B/wHbAZQBLgH/AdkBkQEuAf8B2AGQAS4B/wHYAZABLgH/AdMBigEuAf8B0AGG
-        AS4B/wHOAYMBLgH/AdoBkgEuAf8BOQE0AS4B/xAAAxgBIQIuAYcB/wEuATQB8QH/Ai4B7QH/Ai4B7AH/
-        Ai4B6wH/Ai4B6wH/Ai4B5gH/Ai4B5AH/Ai4B4gH/AS4BSwHmAf8CLgE4Af+UAAMQARYBUwFFAS4B/wHS
-        AYkBLgH/AeIBnQEuAf8B2QGRAS4B/wHXAY4BLgH/AdUBjAEuAf8B4QGbAS4B/wHOAYQBLgH/AVACMAH+
-        GAADEAEWAi4BUgH/AS4BNAHTAf8BLgFFAfQB/wIuAewB/wIuAekB/wEuAS8B6AH/AS4BTQHwAf8CLgHM
-        Af8BUAIwAf6gAAFFAkEBfQMuAf8BgQFmAS4B/wKBAS4B/wFgAVEBLgH/AVACMAH+AxMBGiQAAUUCQQF9
-        Ay4B/wIuAYEB/wIuAYEB/wIuAWIB/wFQAjAB/gMTARr/AJEAAUIBTQE+BwABPgMAASgDAAFAAwABEAMA
-        AQEBAAEBBQABgBcAA/8BAAH8AR8B/AEfBAAB8AEHAfABBwQAAeABAwHgAQMEAAHAAQEBwAEBBAABgAEB
-        AYABAQQAAYABAAGABQABgAEAAYAFAAGAAQABgAUAAYABAAGABQABgAEAAYAFAAGAAQEBgAEBBAABwAEB
-        AcABAQQAAcABAwHAAQMEAAHgAQcB4AEHBAAB+AEPAfgBDwQABP8EAAs=
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA0
+        CgAAAk1TRnQBSQFMAgEBAgEAARwBAAEcAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
+        AwABEAMAAQEBAAEgBgABECoAAUICQQF0AWQCIwHxAy0B/wFgAkAB1AMfASwsAAFCAkEBdAFkAiMB8QMt
+        Af8BYAJAAdQDHwEspAABXQIhAfIBkwGBAS0B/wG/AYEBLQH/Ab0BgQEtAf8BugGBAS0B/wG4AYEBLQH/
+        AbYBgQEtAf8BYQFKAS0B/wM7AWUcAAFdAiEB8gItAaQB/wItAdYB/wItAdQB/wItAdIB/wItAdAB/wIt
+        Ac4B/wItAWgB/wM7AWWYAAE3ATMBLQH/AccBgQEtAf8BwwGBAS0B/wGxAYEBLQH/AbEBgQEtAf8BsQGB
+        AS0B/wGxAYEBLQH/AbMBgQEtAf8BtgGBAS0B/wG0AYEBLQH/AWECMQHkFAACLQE4Af8CLQHcAf8CLQHZ
+        Af8CLQHKAf8CLQHKAf8CLQHKAf8CLQHKAf8CLQHLAf8CLQHOAf8CLQHMAf8BYQIxAeSQAAMtAf8BywGB
+        AS0B/wG7AYEBLQH/AbYBgQEtAf8BtgGBAS0B/wHuAdwBxAX/Ab4BgQFKAf8BtgGBAS0B/wG2AYEBLQH/
+        AbYBgQEtAf8BtAGBAS0B/wFIAkcBhgwAAy0B/wItAeAB/wItAdIB/wItAc4B/wJaAdYB/wItAc4B/wIt
+        Ac4B/wItAc4B/wIwAc4B/wItAc4B/wItAc4B/wItAcwB/wFIAkcBhogAAysBQgHQAYYBLQH/AccBgQEt
+        Af8BugGBAS0B/wG6AYEBLQH/AboBgQEtAf8B0AGcAYEF/wG6AYEBLQH/AboBgQEtAf8BugGBAS0B/wG6
+        AYEBLQH/AbYBgQEtAf8BgQFcAS0B/wgAAysBQgItAeQB/wItAdwB/wItAdIB/wKfAe0F/wJzAd4B/wIt
+        AdIB/wL0Af0F/wIwAdIB/wItAdIB/wItAc4B/wItAYEB/4gAAy0B/wHSAYkBLQH/Ab8BgQEtAf8BvwGB
+        AS0B/wG/AYEBLQH/Ab8BgQEtAf8B0wGfAYEF/wG/AYEBLQH/Ab8BgQEtAf8BvwGBAS0B/wG/AYEBLQH/
+        Ab4BgQEtAf8BtgGBAS0B/wM1AVcEAAMtAf8CLQHlAf8CLQHWAf8CLQHWDf8C9QH9Cf8C4gH6Af8CLQHW
+        Af8CLQHVAf8CLQHOAf8DNQFXhAABdQFdAS0B/wHUAYwBLQH/AcQBgQEtAf8BxAGBAS0B/wHEAYEBLQH/
+        AcQBgQEtAf8B1wGkAYEF/wHEAYEBLQH/AcQBgQEtAf8BxAGBAS0B/wHEAYEBLQH/AcQBgQEtAf8BuAGB
+        AS0B/wFkAioB7AQAAi0BewH/Ai0B6AH/Ai0B2gH/Ai0B2gH/Ai0B2hH/AuIB+gH/Ai0B2gH/Ai0B2gH/
+        Ai0B2gH/Ai0B0AH/AWQCKgHshAABgQFyAS0B/wHXAY4BLQH/AckBgQEtAf8ByQGBAS0B/wHJAYEBLQH/
+        AckBgQEtCf8ByQGBAS0B/wHJAYEBLQH/AckBgQEtAf8ByQGBAS0B/wHJAYEBLQH/AboBgQEtAf8DLQH/
+        BAACLQGBAf8CLQHpAf8CLQHeAf8CLQHeAf8CLQHeAf8C9AH9Df8CcwHnAf8CLQHeAf8CLQHeAf8CLQHe
+        Af8CLQHSAf8DLQH/hAABgQFjAS0B/wHZAZEBLQH/Ac4BgwEtAf8BzgGDAS0B/wHOAYMBLQH/Ac4BgwEt
+        Af8BzgGDAS0B/wHXAZwBXgH/Ac4BgwEtAf8BzgGDAS0B/wHOAYMBLQH/Ac4BgwEtAf8BzgGDAS0B/wG9
+        AYEBLQH/AWICGwH5BAABLQEyAYEB/wItAewB/wItAeIB/wItAeIB/wL0Af0V/wJzAeoB/wItAeIB/wIt
+        AeIB/wItAdQB/wFiAhsB+YQAATABLgEtAf8B2wGUAS0B/wHSAYkBLQH/AdIBiQEtAf8B0gGJAS0B/wHS
+        AYkBLQH/AdIBiQEtAf8B6wHLAZAB/wHSAYkBLQH/AdIBiQEtAf8B0gGJAS0B/wHSAYkBLQH/AcQBgQEt
+        Af8BvwGBAS0B/wFQAksBmwQAAi0BMAH/Ai0B7QH/Ai0B5gH/Ai0B5QH/Av0B/gX/AuIB/AH/Ai0B5Qn/
+        AoEB8QH/Ai0B5QH/Ai0B2gH/Ai0B1gH/AVACSwGbhAABVQJLAbIB3gGYAS0B/wHbAZQBLQH/AdcBjgEt
+        Af8B1wGOAS0B/wHXAY4BLQH/AfsB9gHrBf8B1wGOAS0B/wHXAY4BLQH/AdcBjgEtAf8B1gGNAS0B/wHE
+        AYEBLQH/AakBgQEtAf8IAAFVAksBsgEtATcB7wH/Ai0B7QH/Ai0B6QH/Ai0B6QH/AuEB/AH/Ai0B6QH/
+        Ai0B6QH/Ai0B6QH/AoEB8wH/Ai0B6QH/Ai0B6AH/Ai0B2gH/AS0BNQGdAf+MAAFnAUwBLQH/Ad0BlwEt
+        Af8B2wGUAS0B/wHbAZQBLQH/AdsBlAEtAf8B2wGUAS0B/wHcAZcBMwH/AdsBlAEtAf8B2wGUAS0B/wHV
+        AYwBLQH/AckBgQEtAf8B0QGIAS0B/wErAiQB/AwAAi0BYQH/Ai0B7wH/Ai0B7QH/Ai0B7QH/Ai0B7QH/
+        Ai0B7QH/Ai0B7QH/Ai0B7QH/Ai0B7QH/Ai0B6AH/Ai0B3gH/AS0BQAHiAf8BKwIkAfyMAAMYASEBkAGB
+        AS0B/wHfAZkBLQH/AdsBlAEtAf8B2QGRAS0B/wHYAZABLQH/AdgBkAEtAf8B0wGKAS0B/wHQAYYBLQH/
+        Ac4BgwEtAf8B2gGSAS0B/wE4ATMBLQH/EAADGAEhAi0BhwH/AS0BMwHxAf8CLQHtAf8CLQHsAf8CLQHr
+        Af8CLQHrAf8CLQHmAf8CLQHkAf8CLQHiAf8BLQFKAeYB/wItATcB/5QAAxABFgFSAUQBLQH/AdIBiQEt
+        Af8B4gGdAS0B/wHZAZEBLQH/AdcBjgEtAf8B1QGMAS0B/wHhAZsBLQH/Ac4BhAEtAf8BUAIwAf4YAAMQ
+        ARYCLQFRAf8BLQEzAdMB/wEtAUQB9AH/Ai0B7AH/Ai0B6QH/AS0BLgHoAf8BLQFMAfAB/wItAcwB/wFQ
+        AjAB/qAAAUUCRAF9Ay0B/wGBAWUBLQH/AoEBLQH/AV8BUAEtAf8BUAIwAf4DEwEaJAABRQJEAX0DLQH/
+        Ai0BgQH/Ai0BgQH/Ai0BYQH/AVACMAH+AxMBGv8AkQABQgFNAT4HAAE+AwABKAMAAUADAAEQAwABAQEA
+        AQEFAAGAFwAD/wEAAfwBHwH8AR8EAAHwAQcB8AEHBAAB4AEDAeABAwQAAcABAQHAAQEEAAGAAQEBgAEB
+        BAABgAEAAYAFAAGAAQABgAUAAYABAAGABQABgAEAAYAFAAGAAQABgAUAAYABAQGAAQEEAAHAAQEBwAEB
+        BAABwAEDAcABAwQAAeABBwHgAQcEAAH4AQ8B+AEPBAAE/wQACw==
 </value>
   </data>
-  <metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
   <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>46</value>
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/ILogReader.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/ILogReader.cs	(revision 4772)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/ILogReader.cs	(revision 4772)
@@ -0,0 +1,10 @@
+﻿using System;
+namespace HeuristicLab.Hive.Slave.Console {
+  public delegate void MoreDataHandler(object sender, string newData);
+
+  interface ILogReader {
+    event MoreDataHandler MoreData;
+    void Start();
+    void Stop();
+  }
+}
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/LogFileReader.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/LogFileReader.cs	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/LogFileReader.cs	(revision 4772)
@@ -24,10 +24,9 @@
 
 namespace HeuristicLab.Hive.Slave.Console {
-  class LogFileReader {
+  internal class LogFileReader : HeuristicLab.Hive.Slave.Console.ILogReader {
     string filename = "";
     FileSystemWatcher fileSystemWatcher = null;
     long previousSeekPosition;
 
-    public delegate void MoreDataHandler(object sender, string newData);
     public event MoreDataHandler MoreData;
     private int maxBytes = 1024 * 16;
@@ -72,5 +71,5 @@
 
     public void StartMonitoring() {
-        fileSystemWatcher.Changed += new FileSystemEventHandler(TargetFile_Changed);
+      fileSystemWatcher.Changed += new FileSystemEventHandler(TargetFile_Changed);
       fileSystemWatcher.Renamed += new RenamedEventHandler(TargetFile_Renamed);
       fileSystemWatcher.EnableRaisingEvents = true;
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/LogServiceReader.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/LogServiceReader.cs	(revision 4772)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/LogServiceReader.cs	(revision 4772)
@@ -0,0 +1,48 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Hive.Slave.Console {
+  internal class LogServiceReader : ILogReader {
+
+    private SlaveConsoleService.SlaveConsoleCommunicatorClient slaveCommunicator;
+    private Timer timer;
+    private int messageCount = 0;
+
+    public LogServiceReader(SlaveConsoleService.SlaveConsoleCommunicatorClient slaveCommunicator) {
+      this.slaveCommunicator = slaveCommunicator;
+    }
+
+    public void Start() {
+      timer = new Timer();
+      timer.Interval = 2000;
+      timer.Tick += new EventHandler(timer_Tick);
+      timer.Start();
+    }
+
+    void timer_Tick(object sender, EventArgs e) {
+      try {
+        var messages = slaveCommunicator.GetLogMessages();
+        var newMessages = messages.GetRange(messageCount, messages.Count - messageCount);
+        messageCount = messages.Count;
+        OnMoreData(newMessages);
+      }
+      catch { }
+    }
+
+    public void Stop() {
+      timer.Stop();
+    }
+
+    public event MoreDataHandler MoreData;
+    private void OnMoreData(IEnumerable<string> newMessages) {
+      var handler = MoreData;
+      var newData = string.Join(Environment.NewLine, newMessages.ToArray());
+      if(newMessages.Count() > 0) newData += Environment.NewLine;
+      if (handler != null) MoreData(this, newData);
+    }
+  }
+}
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/Arrays.xsd
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/Arrays.xsd	(revision 4772)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/Arrays.xsd	(revision 4772)
@@ -0,0 +1,9 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/Arrays" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:complexType name="ArrayOfstring">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="string" nillable="true" type="xs:string" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfstring" nillable="true" type="tns:ArrayOfstring" />
+</xs:schema>
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/HeuristicLab.Hive.Slave.Core.SlaveConsoleService.xsd
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/HeuristicLab.Hive.Slave.Core.SlaveConsoleService.xsd	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/HeuristicLab.Hive.Slave.Core.SlaveConsoleService.xsd	(revision 4772)
@@ -25,6 +25,6 @@
   <xs:complexType name="JobStatus">
     <xs:sequence>
+      <xs:element minOccurs="0" name="ExecutionTime" type="ser:duration" />
       <xs:element minOccurs="0" name="JobId" type="ser:guid" />
-      <xs:element minOccurs="0" name="Progress" type="xs:double" />
       <xs:element minOccurs="0" name="Since" type="xs:dateTime" />
     </xs:sequence>
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/Reference.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/Reference.cs	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/Reference.cs	(revision 4772)
@@ -34,5 +34,5 @@
         
         [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private HeuristicLab.Hive.Slave.Console.SlaveConsoleService.JobStatus[] JobsField;
+        private System.Collections.Generic.List<HeuristicLab.Hive.Slave.Console.SlaveConsoleService.JobStatus> JobsField;
         
         [System.Runtime.Serialization.OptionalFieldAttribute()]
@@ -101,5 +101,5 @@
         
         [System.Runtime.Serialization.DataMemberAttribute()]
-        public HeuristicLab.Hive.Slave.Console.SlaveConsoleService.JobStatus[] Jobs {
+        public System.Collections.Generic.List<HeuristicLab.Hive.Slave.Console.SlaveConsoleService.JobStatus> Jobs {
             get {
                 return this.JobsField;
@@ -199,8 +199,8 @@
         
         [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.TimeSpan ExecutionTimeField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
         private System.Guid JobIdField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private double ProgressField;
         
         [System.Runtime.Serialization.OptionalFieldAttribute()]
@@ -214,4 +214,17 @@
             set {
                 this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.TimeSpan ExecutionTime {
+            get {
+                return this.ExecutionTimeField;
+            }
+            set {
+                if ((this.ExecutionTimeField.Equals(value) != true)) {
+                    this.ExecutionTimeField = value;
+                    this.RaisePropertyChanged("ExecutionTime");
+                }
             }
         }
@@ -226,17 +239,4 @@
                     this.JobIdField = value;
                     this.RaisePropertyChanged("JobId");
-                }
-            }
-        }
-        
-        [System.Runtime.Serialization.DataMemberAttribute()]
-        public double Progress {
-            get {
-                return this.ProgressField;
-            }
-            set {
-                if ((this.ProgressField.Equals(value) != true)) {
-                    this.ProgressField = value;
-                    this.RaisePropertyChanged("Progress");
                 }
             }
@@ -363,18 +363,26 @@
         
         [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveConsoleCommunicator/SetUptimeCalendar", ReplyAction="http://tempuri.org/ISlaveConsoleCommunicator/SetUptimeCalendarResponse")]
-        void SetUptimeCalendar(HeuristicLab.Calendar.Appointment[] appointments);
+        void SetUptimeCalendar(System.Collections.Generic.List<HeuristicLab.Calendar.Appointment> appointments);
         
         [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveConsoleCommunicator/SetUptimeCalendar", ReplyAction="http://tempuri.org/ISlaveConsoleCommunicator/SetUptimeCalendarResponse")]
-        System.IAsyncResult BeginSetUptimeCalendar(HeuristicLab.Calendar.Appointment[] appointments, System.AsyncCallback callback, object asyncState);
+        System.IAsyncResult BeginSetUptimeCalendar(System.Collections.Generic.List<HeuristicLab.Calendar.Appointment> appointments, System.AsyncCallback callback, object asyncState);
         
         void EndSetUptimeCalendar(System.IAsyncResult result);
         
         [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveConsoleCommunicator/GetUptimeCalendar", ReplyAction="http://tempuri.org/ISlaveConsoleCommunicator/GetUptimeCalendarResponse")]
-        HeuristicLab.Calendar.Appointment[] GetUptimeCalendar();
+        System.Collections.Generic.List<HeuristicLab.Calendar.Appointment> GetUptimeCalendar();
         
         [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveConsoleCommunicator/GetUptimeCalendar", ReplyAction="http://tempuri.org/ISlaveConsoleCommunicator/GetUptimeCalendarResponse")]
         System.IAsyncResult BeginGetUptimeCalendar(System.AsyncCallback callback, object asyncState);
         
-        HeuristicLab.Calendar.Appointment[] EndGetUptimeCalendar(System.IAsyncResult result);
+        System.Collections.Generic.List<HeuristicLab.Calendar.Appointment> EndGetUptimeCalendar(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveConsoleCommunicator/GetLogMessages", ReplyAction="http://tempuri.org/ISlaveConsoleCommunicator/GetLogMessagesResponse")]
+        System.Collections.Generic.List<string> GetLogMessages();
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveConsoleCommunicator/GetLogMessages", ReplyAction="http://tempuri.org/ISlaveConsoleCommunicator/GetLogMessagesResponse")]
+        System.IAsyncResult BeginGetLogMessages(System.AsyncCallback callback, object asyncState);
+        
+        System.Collections.Generic.List<string> EndGetLogMessages(System.IAsyncResult result);
     }
     
@@ -432,8 +440,27 @@
         }
         
-        public HeuristicLab.Calendar.Appointment[] Result {
+        public System.Collections.Generic.List<HeuristicLab.Calendar.Appointment> Result {
             get {
                 base.RaiseExceptionIfNecessary();
-                return ((HeuristicLab.Calendar.Appointment[])(this.results[0]));
+                return ((System.Collections.Generic.List<HeuristicLab.Calendar.Appointment>)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class GetLogMessagesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public GetLogMessagesCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public System.Collections.Generic.List<string> Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((System.Collections.Generic.List<string>)(this.results[0]));
             }
         }
@@ -480,4 +507,10 @@
         private System.Threading.SendOrPostCallback onGetUptimeCalendarCompletedDelegate;
         
+        private BeginOperationDelegate onBeginGetLogMessagesDelegate;
+        
+        private EndOperationDelegate onEndGetLogMessagesDelegate;
+        
+        private System.Threading.SendOrPostCallback onGetLogMessagesCompletedDelegate;
+        
         public SlaveConsoleCommunicatorClient() {
         }
@@ -510,4 +543,6 @@
         
         public event System.EventHandler<GetUptimeCalendarCompletedEventArgs> GetUptimeCalendarCompleted;
+        
+        public event System.EventHandler<GetLogMessagesCompletedEventArgs> GetLogMessagesCompleted;
         
         public HeuristicLab.Hive.Slave.Console.SlaveConsoleService.StatusCommons GetStatusInfos() {
@@ -703,10 +738,10 @@
         }
         
-        public void SetUptimeCalendar(HeuristicLab.Calendar.Appointment[] appointments) {
+        public void SetUptimeCalendar(System.Collections.Generic.List<HeuristicLab.Calendar.Appointment> appointments) {
             base.Channel.SetUptimeCalendar(appointments);
         }
         
         [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
-        public System.IAsyncResult BeginSetUptimeCalendar(HeuristicLab.Calendar.Appointment[] appointments, System.AsyncCallback callback, object asyncState) {
+        public System.IAsyncResult BeginSetUptimeCalendar(System.Collections.Generic.List<HeuristicLab.Calendar.Appointment> appointments, System.AsyncCallback callback, object asyncState) {
             return base.Channel.BeginSetUptimeCalendar(appointments, callback, asyncState);
         }
@@ -718,5 +753,5 @@
         
         private System.IAsyncResult OnBeginSetUptimeCalendar(object[] inValues, System.AsyncCallback callback, object asyncState) {
-            HeuristicLab.Calendar.Appointment[] appointments = ((HeuristicLab.Calendar.Appointment[])(inValues[0]));
+            System.Collections.Generic.List<HeuristicLab.Calendar.Appointment> appointments = ((System.Collections.Generic.List<HeuristicLab.Calendar.Appointment>)(inValues[0]));
             return this.BeginSetUptimeCalendar(appointments, callback, asyncState);
         }
@@ -734,9 +769,9 @@
         }
         
-        public void SetUptimeCalendarAsync(HeuristicLab.Calendar.Appointment[] appointments) {
+        public void SetUptimeCalendarAsync(System.Collections.Generic.List<HeuristicLab.Calendar.Appointment> appointments) {
             this.SetUptimeCalendarAsync(appointments, null);
         }
         
-        public void SetUptimeCalendarAsync(HeuristicLab.Calendar.Appointment[] appointments, object userState) {
+        public void SetUptimeCalendarAsync(System.Collections.Generic.List<HeuristicLab.Calendar.Appointment> appointments, object userState) {
             if ((this.onBeginSetUptimeCalendarDelegate == null)) {
                 this.onBeginSetUptimeCalendarDelegate = new BeginOperationDelegate(this.OnBeginSetUptimeCalendar);
@@ -752,5 +787,5 @@
         }
         
-        public HeuristicLab.Calendar.Appointment[] GetUptimeCalendar() {
+        public System.Collections.Generic.List<HeuristicLab.Calendar.Appointment> GetUptimeCalendar() {
             return base.Channel.GetUptimeCalendar();
         }
@@ -762,5 +797,5 @@
         
         [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
-        public HeuristicLab.Calendar.Appointment[] EndGetUptimeCalendar(System.IAsyncResult result) {
+        public System.Collections.Generic.List<HeuristicLab.Calendar.Appointment> EndGetUptimeCalendar(System.IAsyncResult result) {
             return base.Channel.EndGetUptimeCalendar(result);
         }
@@ -771,5 +806,5 @@
         
         private object[] OnEndGetUptimeCalendar(System.IAsyncResult result) {
-            HeuristicLab.Calendar.Appointment[] retVal = this.EndGetUptimeCalendar(result);
+            System.Collections.Generic.List<HeuristicLab.Calendar.Appointment> retVal = this.EndGetUptimeCalendar(result);
             return new object[] {
                     retVal};
@@ -799,4 +834,52 @@
             base.InvokeAsync(this.onBeginGetUptimeCalendarDelegate, null, this.onEndGetUptimeCalendarDelegate, this.onGetUptimeCalendarCompletedDelegate, userState);
         }
+        
+        public System.Collections.Generic.List<string> GetLogMessages() {
+            return base.Channel.GetLogMessages();
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginGetLogMessages(System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginGetLogMessages(callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.Collections.Generic.List<string> EndGetLogMessages(System.IAsyncResult result) {
+            return base.Channel.EndGetLogMessages(result);
+        }
+        
+        private System.IAsyncResult OnBeginGetLogMessages(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            return this.BeginGetLogMessages(callback, asyncState);
+        }
+        
+        private object[] OnEndGetLogMessages(System.IAsyncResult result) {
+            System.Collections.Generic.List<string> retVal = this.EndGetLogMessages(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnGetLogMessagesCompleted(object state) {
+            if ((this.GetLogMessagesCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.GetLogMessagesCompleted(this, new GetLogMessagesCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void GetLogMessagesAsync() {
+            this.GetLogMessagesAsync(null);
+        }
+        
+        public void GetLogMessagesAsync(object userState) {
+            if ((this.onBeginGetLogMessagesDelegate == null)) {
+                this.onBeginGetLogMessagesDelegate = new BeginOperationDelegate(this.OnBeginGetLogMessages);
+            }
+            if ((this.onEndGetLogMessagesDelegate == null)) {
+                this.onEndGetLogMessagesDelegate = new EndOperationDelegate(this.OnEndGetLogMessages);
+            }
+            if ((this.onGetLogMessagesCompletedDelegate == null)) {
+                this.onGetLogMessagesCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnGetLogMessagesCompleted);
+            }
+            base.InvokeAsync(this.onBeginGetLogMessagesDelegate, null, this.onEndGetLogMessagesDelegate, this.onGetLogMessagesCompletedDelegate, userState);
+        }
     }
 }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/Reference.svcmap
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/Reference.svcmap	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/Reference.svcmap	(revision 4772)
@@ -9,10 +9,30 @@
     <GenerateMessageContracts>false</GenerateMessageContracts>
     <NamespaceMappings />
-    <CollectionMappings />
+    <CollectionMappings>
+      <CollectionMapping TypeName="System.Collections.Generic.List`1" Category="List" />
+    </CollectionMappings>
     <GenerateSerializableTypes>true</GenerateSerializableTypes>
     <Serializer>Auto</Serializer>
     <UseSerializerForFaults>true</UseSerializerForFaults>
-    <ReferenceAllAssemblies>true</ReferenceAllAssemblies>
-    <ReferencedAssemblies />
+    <ReferenceAllAssemblies>false</ReferenceAllAssemblies>
+    <ReferencedAssemblies>
+      <ReferencedAssembly AssemblyName="HeuristicLab.Calendar-3.3" />
+      <ReferencedAssembly AssemblyName="HeuristicLab.Common-3.3" />
+      <ReferencedAssembly AssemblyName="HeuristicLab.Core-3.3" />
+      <ReferencedAssembly AssemblyName="HeuristicLab.Hive.Contracts-3.3" />
+      <ReferencedAssembly AssemblyName="HeuristicLab.PluginInfrastructure-3.3" />
+      <ReferencedAssembly AssemblyName="mscorlib" />
+      <ReferencedAssembly AssemblyName="System" />
+      <ReferencedAssembly AssemblyName="System.Core" />
+      <ReferencedAssembly AssemblyName="System.Data" />
+      <ReferencedAssembly AssemblyName="System.Data.DataSetExtensions" />
+      <ReferencedAssembly AssemblyName="System.Deployment" />
+      <ReferencedAssembly AssemblyName="System.Drawing" />
+      <ReferencedAssembly AssemblyName="System.Runtime.Serialization" />
+      <ReferencedAssembly AssemblyName="System.ServiceModel" />
+      <ReferencedAssembly AssemblyName="System.Windows.Forms" />
+      <ReferencedAssembly AssemblyName="System.Xml" />
+      <ReferencedAssembly AssemblyName="System.Xml.Linq" />
+    </ReferencedAssemblies>
     <ReferencedDataContractTypes />
     <ServiceContractMappings />
@@ -29,4 +49,5 @@
     <MetadataFile FileName="HeuristicLab.Calendar.xsd" MetadataType="Schema" ID="d6c22e40-4e4f-4549-bf7d-df34f00ddab5" SourceId="1" SourceUrl="net.tcp://localhost:8000/SlaveConsoleService/mex" />
     <MetadataFile FileName="System.Drawing.xsd" MetadataType="Schema" ID="bc68bc42-889a-42a3-b9f5-9c3fc446495c" SourceId="1" SourceUrl="net.tcp://localhost:8000/SlaveConsoleService/mex" />
+    <MetadataFile FileName="Arrays.xsd" MetadataType="Schema" ID="76e752c7-248d-454e-8267-cd84a943b3e9" SourceId="1" SourceUrl="net.tcp://localhost:8000/SlaveConsoleService/mex" />
   </Metadata>
   <Extensions>
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/service.wsdl
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/service.wsdl	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/service.wsdl	(revision 4772)
@@ -19,4 +19,5 @@
       <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Calendar" />
       <xsd:import namespace="http://schemas.datacontract.org/2004/07/System.Drawing" />
+      <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
     </xsd:schema>
   </wsdl:types>
@@ -57,4 +58,10 @@
     <wsdl:part name="parameters" element="tns:GetUptimeCalendarResponse" />
   </wsdl:message>
+  <wsdl:message name="ISlaveConsoleCommunicator_GetLogMessages_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetLogMessages" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveConsoleCommunicator_GetLogMessages_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetLogMessagesResponse" />
+  </wsdl:message>
   <wsdl:portType name="ISlaveConsoleCommunicator">
     <wsdl:operation name="GetStatusInfos">
@@ -81,4 +88,8 @@
       <wsdl:input wsaw:Action="http://tempuri.org/ISlaveConsoleCommunicator/GetUptimeCalendar" message="tns:ISlaveConsoleCommunicator_GetUptimeCalendar_InputMessage" />
       <wsdl:output wsaw:Action="http://tempuri.org/ISlaveConsoleCommunicator/GetUptimeCalendarResponse" message="tns:ISlaveConsoleCommunicator_GetUptimeCalendar_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="GetLogMessages">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveConsoleCommunicator/GetLogMessages" message="tns:ISlaveConsoleCommunicator_GetLogMessages_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveConsoleCommunicator/GetLogMessagesResponse" message="tns:ISlaveConsoleCommunicator_GetLogMessages_OutputMessage" />
     </wsdl:operation>
   </wsdl:portType>
@@ -141,4 +152,13 @@
       </wsdl:output>
     </wsdl:operation>
+    <wsdl:operation name="GetLogMessages">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveConsoleCommunicator/GetLogMessages" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
   </wsdl:binding>
   <wsdl:service name="SlaveConsoleCommunicator">
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/service.xsd
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/service.xsd	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/service.xsd	(revision 4772)
@@ -3,4 +3,5 @@
   <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Slave.Core.SlaveConsoleService" />
   <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Calendar" />
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
   <xs:element name="GetStatusInfos">
     <xs:complexType>
@@ -73,3 +74,15 @@
     </xs:complexType>
   </xs:element>
+  <xs:element name="GetLogMessages">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetLogMessagesResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q6="http://schemas.microsoft.com/2003/10/Serialization/Arrays" minOccurs="0" name="GetLogMessagesResult" nillable="true" type="q6:ArrayOfstring" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
 </xs:schema>
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/UptimeManager.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/UptimeManager.cs	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/UptimeManager.cs	(revision 4772)
@@ -28,5 +28,4 @@
 using HeuristicLab.Hive.Contracts.BusinessObjects;
 using HeuristicLab.Hive.Contracts.ResponseObjects;
-using HeuristicLab.Hive.Tracing;
 
 namespace HeuristicLab.Hive.Slave.Core.ConfigurationManager {
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Core.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Core.cs	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Core.cs	(revision 4772)
@@ -36,5 +36,4 @@
 using HeuristicLab.Hive.Slave.Core.SlaveConsoleService;
 using HeuristicLab.Hive.Slave.ExecutionEngine;
-using HeuristicLab.Hive.Tracing;
 
 namespace HeuristicLab.Hive.Slave.Core {
@@ -44,4 +43,6 @@
   public class Core : MarshalByRefObject {
     public static bool abortRequested { get; set; }
+
+    public static ILog Log { get; set; }
 
     private Dictionary<Guid, Executor> engines = new Dictionary<Guid, Executor>();
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/HeartbeatManager.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/HeartbeatManager.cs	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/HeartbeatManager.cs	(revision 4772)
@@ -30,5 +30,4 @@
 using HeuristicLab.Hive.Slave.Communication.SlaveFacade;
 using HeuristicLab.Hive.Slave.Core.ConfigurationManager;
-using HeuristicLab.Hive.Tracing;
 
 namespace HeuristicLab.Hive.Slave.Core {
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/HeuristicLab.Hive.Slave.Core-3.3.csproj
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/HeuristicLab.Hive.Slave.Core-3.3.csproj	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/HeuristicLab.Hive.Slave.Core-3.3.csproj	(revision 4772)
@@ -108,4 +108,5 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Logger.cs" />
     <Compile Include="SlaveConsoleService\SlaveConsoleCommunicator.cs" />
     <Compile Include="SlaveConsoleService\SlaveConsoleServer.cs" />
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/JobStorage/JobStorageManager.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/JobStorage/JobStorageManager.cs	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/JobStorage/JobStorageManager.cs	(revision 4772)
@@ -29,5 +29,4 @@
 using HeuristicLab.Hive.Slave.Communication;
 using HeuristicLab.Hive.Slave.Core.ConfigurationManager;
-using HeuristicLab.Hive.Tracing;
 
 namespace HeuristicLab.Hive.Slave.Core.JobStorage {
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/PluginCache.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/PluginCache.cs	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/PluginCache.cs	(revision 4772)
@@ -29,5 +29,4 @@
 using HeuristicLab.PluginInfrastructure;
 using HeuristicLab.PluginInfrastructure.Manager;
-using HeuristicLab.Hive.Tracing;
 
 namespace HeuristicLab.Hive.Slave.Core {
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/Interfaces/ISlaveConsoleCommunicator.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/Interfaces/ISlaveConsoleCommunicator.cs	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/Interfaces/ISlaveConsoleCommunicator.cs	(revision 4772)
@@ -23,4 +23,5 @@
 using System.ServiceModel;
 using HeuristicLab.Calendar;
+using HeuristicLab.Core;
 
 namespace HeuristicLab.Hive.Slave.Core.SlaveConsoleService.Interfaces {
@@ -65,4 +66,6 @@
     List<Appointment> GetUptimeCalendar();
 
+    [OperationContract]
+    List<string> GetLogMessages();
   }
 }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/SlaveConsoleCommunicator.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/SlaveConsoleCommunicator.cs	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/SlaveConsoleCommunicator.cs	(revision 4772)
@@ -21,4 +21,5 @@
 
 using System.Collections.Generic;
+using System.Linq;
 using HeuristicLab.Calendar;
 using HeuristicLab.Hive.Contracts;
@@ -27,4 +28,6 @@
 using HeuristicLab.Hive.Slave.Core.ConfigurationManager;
 using HeuristicLab.Hive.Slave.Core.SlaveConsoleService.Interfaces;
+using HeuristicLab.Core;
+
 
 namespace HeuristicLab.Hive.Slave.Core.SlaveConsoleService {
@@ -57,4 +60,8 @@
     }
 
+    public List<string> GetLogMessages() {
+      return Logger.Log.Messages.ToList();
+    }
+
     #endregion
   }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/Executor.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/Executor.cs	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/Executor.cs	(revision 4772)
@@ -46,7 +46,5 @@
     }
     public MessageQueue Queue { get; set; }
-
-    public bool JobIsFinished { get; set; }
-
+    
     public ExecutionState ExecutionState {
       get {
@@ -87,5 +85,4 @@
       }
       catch (OutOfMemoryException e) {
-        JobIsFinished = true;
         this.currentException = e;
         Queue.AddMessage(new MessageContainer(MessageContainer.MessageType.JobFailed, JobId));
@@ -98,5 +95,4 @@
       }
       catch (OutOfMemoryException e) {
-        JobIsFinished = true;
         this.currentException = e;
         Queue.AddMessage(new MessageContainer(MessageContainer.MessageType.JobFailed, JobId));
@@ -108,4 +104,6 @@
       if ((ExecutionState == ExecutionState.Started) || (ExecutionState == ExecutionState.Paused)) {
         Job.Stop();
+      } else {
+        Job_JobStopped(this, EventArgs.Empty);
       }
     }
@@ -156,5 +154,4 @@
       };
 
-      JobIsFinished = true;
       Queue.AddMessage(new MessageContainerWithJob(MessageContainer.MessageType.PauseJob, this.JobId, serializedJob));
     }
@@ -171,11 +168,10 @@
 
     private void Job_JobStopped(object sender, EventArgs e) {
-      if (CurrentMessage == MessageContainer.MessageType.NoMessage) {
-        Queue.AddMessage(new MessageContainer(MessageContainer.MessageType.FinishedJob, JobId));
-        JobIsFinished = true;
-      } else if (CurrentMessage == MessageContainer.MessageType.RequestSnapshot) {
+      if (CurrentMessage == MessageContainer.MessageType.RequestSnapshot) {
         Queue.AddMessage(new MessageContainer(MessageContainer.MessageType.SnapshotReady, JobId));
       } else if (CurrentMessage == MessageContainer.MessageType.AbortJob) {
         Queue.AddMessage(new MessageContainer(MessageContainer.MessageType.JobAborted, JobId));
+      } else {
+        Queue.AddMessage(new MessageContainer(MessageContainer.MessageType.FinishedJob, JobId));
       }
     }
@@ -217,8 +213,5 @@
     public Executor() {
       CurrentMessage = MessageContainer.MessageType.NoMessage;
-      JobIsFinished = false;
-    }
-
-    #region IDisposable Members
+    }
 
     public void Dispose() {
@@ -227,7 +220,4 @@
       Job = null;
     }
-
-    #endregion
-
   }
 }
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/Logger.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/Logger.cs	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/Logger.cs	(revision 4772)
@@ -10,19 +10,19 @@
 
     public static void Debug(object message) {
-      //TraceSource ts = new TraceSource(source);
-      //ts.TraceInformation(message.ToString());
-      //ts.Close();
+      TraceSource ts = new TraceSource(source);
+      ts.TraceInformation(message.ToString());
+      ts.Close();
     }
 
     public static void Info(object message) {
-      //TraceSource ts = new TraceSource(source);
-      //ts.TraceInformation(message.ToString());
-      //ts.Close();
+      TraceSource ts = new TraceSource(source);
+      ts.TraceInformation(message.ToString());
+      ts.Close();
     }
 
     public static void Warn(object message) {
-      //TraceSource ts = new TraceSource(source);
-      //ts.TraceInformation(message.ToString());
-      //ts.Close();
+      TraceSource ts = new TraceSource(source);
+      ts.TraceInformation(message.ToString());
+      ts.Close();
     }
 
Index: /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HiveWeb/App_Code/HiveServerModule.cs
===================================================================
--- /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HiveWeb/App_Code/HiveServerModule.cs	(revision 4771)
+++ /branches/HeuristicLab.Hive/sources/HeuristicLab.Hive/HiveWeb/App_Code/HiveServerModule.cs	(revision 4772)
@@ -9,4 +9,5 @@
 using HeuristicLab.Hive.Contracts.Interfaces;
 using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.PluginInfrastructure.Manager;
 
 namespace HeuristicLab.Hive.Server.Core.IISModules {
@@ -14,9 +15,17 @@
     private static object locker = new object();
     private static ILifecycleManager lifecycleManager;
-    
+    private static PluginManager pm;
+
     public void Init(HttpApplication context) {
       lock (locker) {
-        if(lifecycleManager == null) lifecycleManager = ServiceLocator.GetLifecycleManager();
-        lifecycleManager.Start();
+        if (lifecycleManager == null) {
+          pm = new PluginManager(@"C:\ch\SVN\branches\HeuristicLab.Hive\sources\HeuristicLab.Hive\HiveWeb\App_Data\Plugins\");
+          pm.DiscoverAndCheckPlugins();
+          pm.InitializeLifetimeService();
+
+          lifecycleManager = ServiceLocator.GetLifecycleManager();
+          lifecycleManager.Plugins = pm.Plugins;
+          lifecycleManager.Start();
+        }
       }
     }
