Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Communication/3.3/WcfService.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Communication/3.3/WcfService.cs	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Communication/3.3/WcfService.cs	(revision 4119)
@@ -262,6 +262,5 @@
         Logger.Debug("STARTED: Sending back the finished job results");
         Logger.Debug("Building stream");
-        Stream stream =
-          GetStreamedJobResult(clientId, jobId, result, percentage, exception);
+        Stream stream = GetStreamedJobResult(clientId, jobId, result, percentage, exception);
         Logger.Debug("Builded stream");
         Logger.Debug("Making the call");
@@ -269,8 +268,8 @@
       }
     }
+
     private void proxy_StoreFinishedJobResultStreamedCompleted(object sender, StoreFinishedJobResultStreamedCompletedEventArgs e) {
       Logger.Debug("Finished storing the job");
-      Stream stream =
-        (Stream)e.UserState;
+      Stream stream = (Stream)e.UserState;
       if (stream != null) {
         Logger.Debug("Stream not null, disposing it");
@@ -278,12 +277,11 @@
       }
       if (e.Error == null) {
-        StoreFinishedJobResultCompletedEventArgs args =
-          new StoreFinishedJobResultCompletedEventArgs(
-            new object[] { e.Result }, e.Error, e.Cancelled, e.UserState);
+        StoreFinishedJobResultCompletedEventArgs args = new StoreFinishedJobResultCompletedEventArgs(new object[] { e.Result }, e.Error, e.Cancelled, e.UserState);
         Logger.Debug("calling the Finished Job Event");
         StoreFinishedJobResultCompleted(sender, args);
         Logger.Debug("ENDED: Sending back the finished job results");
-      } else
+      } else {
         HandleNetworkError(e.Error);
+      }
     }
 
@@ -300,4 +298,5 @@
       }
     }
+
     void proxy_ProcessSnapshotStreamedCompleted(object sender, ProcessSnapshotStreamedCompletedEventArgs e) {
       Stream stream =
@@ -350,6 +349,5 @@
     /// </summary>
     private Stream GetStreamedJobResult(Guid clientId, Guid jobId, byte[] result, double percentage, Exception exception) {
-      JobResult jobResult =
-          new JobResult();
+      JobResult jobResult = new JobResult();
       jobResult.ClientId = clientId;
       jobResult.JobId = jobId;
@@ -357,14 +355,11 @@
       jobResult.Exception = exception;
 
-      MultiStream stream =
-              new MultiStream();
+      MultiStream stream = new MultiStream();
 
       //first send result
-      stream.AddStream(
-        new StreamedObject<JobResult>(jobResult));
+      stream.AddStream(new StreamedObject<JobResult>(jobResult));
 
       //second stream the job binary data
-      MemoryStream memStream =
-        new MemoryStream(result, false);
+      MemoryStream memStream = new MemoryStream(result, false);
       stream.AddStream(memStream);
 
@@ -373,6 +368,5 @@
 
     public ResponseResultReceived StoreFinishedJobResultsSync(Guid clientId, Guid jobId, byte[] result, double percentage, Exception exception, bool finished) {
-      return proxy.StoreFinishedJobResultStreamed(
-        GetStreamedJobResult(clientId, jobId, result, percentage, exception));
+      return proxy.StoreFinishedJobResultStreamed(GetStreamedJobResult(clientId, jobId, result, percentage, exception));
     }
 
@@ -387,11 +381,9 @@
         return null;
       }
-
     }
 
     public ResponseResultReceived ProcessSnapshotSync(Guid clientId, Guid jobId, byte[] result, double percentage, Exception exception) {
       try {
-        return proxy.ProcessSnapshotStreamed(
-          GetStreamedJobResult(clientId, jobId, result, percentage, exception));
+        return proxy.ProcessSnapshotStreamed(GetStreamedJobResult(clientId, jobId, result, percentage, exception));
       } catch (Exception e) {
         HandleNetworkError(e);
@@ -453,5 +445,4 @@
       }
     }
-
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Core/3.3/Core.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Core/3.3/Core.cs	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Core/3.3/Core.cs	(revision 4119)
@@ -45,4 +45,5 @@
 using HeuristicLab.Hive.Client.Core.JobStorage;
 using HeuristicLab.Tracing;
+using HeuristicLab.Core;
 
 namespace HeuristicLab.Hive.Client.Core {
@@ -98,7 +99,4 @@
       if (cc.IPAdress != String.Empty && cc.Port != 0)
         wcfService.SetIPAndPort(cc.IPAdress, cc.Port);
-
-      if (!UptimeManager.Instance.CalendarAvailable || UptimeManager.Instance.IsOnline())
-        wcfService.Connect();
 
       //Initialize the heartbeat
@@ -249,10 +247,5 @@
         if (WcfService.Instance.ConnState == NetworkEnum.WcfConnState.Loggedin) {
           Logger.Info("Sending the finished job with id: " + jId);
-          wcfService.StoreFinishedJobResultAsync(ConfigManager.Instance.GetClientInfo().Id,
-            jId,
-            sJob,
-            1,
-            null,
-            true);
+          wcfService.StoreFinishedJobResultAsync(ConfigManager.Instance.GetClientInfo().Id, jId, sJob, 1.0, null, true);
         } else {
           Logger.Info("Storing the finished job with id: " + jId + " to hdd");
@@ -465,5 +458,5 @@
 
       foreach (KeyValuePair<Guid, Executor> execKVP in engines) {
-        if (!execKVP.Value.Running && execKVP.Value.CurrentMessage == MessageContainer.MessageType.NoMessage) {
+        if (execKVP.Value.ExecutionState != ExecutionState.Started && execKVP.Value.CurrentMessage == MessageContainer.MessageType.NoMessage) {
           Logger.Info("Checking for JobId: " + execKVP.Value.JobId);
           Thread finThread = new Thread(new ParameterizedThreadStart(GetFinishedJob));
@@ -513,4 +506,4 @@
   }
 
- 
+
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Core/3.3/Heartbeat.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Core/3.3/Heartbeat.cs	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Core/3.3/Heartbeat.cs	(revision 4119)
@@ -43,7 +43,9 @@
     private bool offline;
 
-    public double Interval { get; set; }    
+    public double Interval { get; set; }
     private Timer heartbeatTimer = null;
-        
+
+    private static object locker = new object();
+
     public Heartbeat() {
       Interval = 100;
@@ -51,5 +53,5 @@
 
     public Heartbeat(double interval) {
-      Interval = interval;      
+      Interval = interval;
     }
 
@@ -74,36 +76,45 @@
     /// <param name="sender"></param>
     /// <param name="e"></param>
-    void heartbeatTimer_Elapsed(object sender, ElapsedEventArgs e) {      
-      ClientDto info = ConfigManager.Instance.GetClientInfo();      
+    void heartbeatTimer_Elapsed(object sender, ElapsedEventArgs e) {
+      lock (locker) {
+        // check if cwfService is disconnected for any reason (should happen at first heartbeat)
+        // [chn] TODO: Client should always send heartbeats. when calendar disallows he should tell the server he does not want to compute anything
+        if (wcfService.ConnState == NetworkEnum.WcfConnState.Disconnected &&
+          (!UptimeManager.Instance.CalendarAvailable || UptimeManager.Instance.IsOnline())) {
+          wcfService.Connect();
+        }
 
-      PerformanceCounter counter = new PerformanceCounter("Memory", "Available Bytes", true);
-      int mb = (int)(counter.NextValue() / 1024 / 1024);
+        ClientDto info = ConfigManager.Instance.GetClientInfo();
 
-      HeartBeatData heartBeatData = new HeartBeatData {
-        ClientId = info.Id,
-        FreeCores = info.NrOfCores - ConfigManager.Instance.GetUsedCores(),
-        FreeMemory = mb,
-        JobProgress = ConfigManager.Instance.GetProgressOfAllJobs()      
-      };
-       
-      DateTime lastFullHour = DateTime.Parse(DateTime.Now.Hour.ToString() + ":00");
-      TimeSpan span = DateTime.Now - lastFullHour;
-      if (span.TotalSeconds < (Interval/1000)) {
-        if (UptimeManager.Instance.IsOnline() && UptimeManager.Instance.CalendarAvailable) {
-          //That's quiet simple: Just reconnect and you're good for new jobs
-          if (wcfService.ConnState != NetworkEnum.WcfConnState.Loggedin) {
-            Logger.Info("Client goes online according to timetable");
-            wcfService.Connect();
+        PerformanceCounter counter = new PerformanceCounter("Memory", "Available Bytes", true);
+        int mb = (int)(counter.NextValue() / 1024 / 1024);
+
+        HeartBeatData heartBeatData = new HeartBeatData {
+          ClientId = info.Id,
+          FreeCores = info.NrOfCores - ConfigManager.Instance.GetUsedCores(),
+          FreeMemory = mb,
+          JobProgress = ConfigManager.Instance.GetProgressOfAllJobs()
+        };
+
+        DateTime lastFullHour = DateTime.Parse(DateTime.Now.Hour.ToString() + ":00");
+        TimeSpan span = DateTime.Now - lastFullHour;
+        if (span.TotalSeconds < (Interval / 1000)) {
+          if (UptimeManager.Instance.IsOnline() && UptimeManager.Instance.CalendarAvailable) {
+            //That's quiet simple: Just reconnect and you're good for new jobs
+            if (wcfService.ConnState != NetworkEnum.WcfConnState.Loggedin) {
+              Logger.Info("Client goes online according to timetable");
+              wcfService.Connect();
+            }
+          } else {
+            //We have quit a lot of work to do here: snapshot all jobs, submit them back, then disconnect and then pray to god that nothing goes wrong
+            MessageQueue.GetInstance().AddMessage(MessageContainer.MessageType.UptimeLimitDisconnect);
           }
-        } else {
-          //We have quit a lot of work to do here: snapshot all jobs, submit them back, then disconnect and then pray to god that nothing goes wrong
-          MessageQueue.GetInstance().AddMessage(MessageContainer.MessageType.UptimeLimitDisconnect);                  
-        }        
-      }
-      if (wcfService.ConnState == NetworkEnum.WcfConnState.Failed) {
-        wcfService.Connect();
-      } else if (wcfService.ConnState == NetworkEnum.WcfConnState.Loggedin) {
-        Logger.Debug("Sending Heartbeat: " + heartBeatData);        
-        wcfService.ProcessHeartBeatAsync(heartBeatData);
+        }
+        if (wcfService.ConnState == NetworkEnum.WcfConnState.Failed) {
+          wcfService.Connect();
+        } else if (wcfService.ConnState == NetworkEnum.WcfConnState.Loggedin) {
+          Logger.Debug("Sending Heartbeat: " + heartBeatData);
+          wcfService.ProcessHeartBeatAsync(heartBeatData);
+        }
       }
     }
@@ -111,5 +122,5 @@
     void wcfService_ProcessHeartBeatCompleted(object sender, ProcessHeartBeatCompletedEventArgs e) {
       Logger.Debug("Heartbeat received");
-      e.Result.ActionRequest.ForEach(mc => MessageQueue.GetInstance().AddMessage(mc));      
+      e.Result.ActionRequest.ForEach(mc => MessageQueue.GetInstance().AddMessage(mc));
     }
 
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Core/3.3/HeuristicLab.Hive.Client.Core-3.3.csproj
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Core/3.3/HeuristicLab.Hive.Client.Core-3.3.csproj	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Core/3.3/HeuristicLab.Hive.Client.Core-3.3.csproj	(revision 4119)
@@ -76,4 +76,5 @@
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="HeuristicLab.Core-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
     <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
       <HintPath>..\..\..\..\..\..\..\..\..\Programme\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Core/3.3/PluginCache.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Core/3.3/PluginCache.cs	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Core/3.3/PluginCache.cs	(revision 4119)
@@ -42,5 +42,5 @@
         //we MAY run in problems here - if there is a plugin twice in requests, there may be added two different versions of the plugin
         foreach (CachedHivePluginInfoDto cache in pluginCache) {
-          if (info.Name.Equals(cache.Name) && info.Version.Equals(cache.Version) && info.BuildDate <= cache.BuildDate) {
+          if (info.Name.Equals(cache.Name) && info.Version.Equals(cache.Version)) {
             Logger.Debug("Found plugin " + info.Name + ", " + info.Version);
             neededPlugins.Add(cache);
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Core/3.3/Properties/AssemblyInfo.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Core/3.3/Properties/AssemblyInfo.cs	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.Core/3.3/Properties/AssemblyInfo.cs	(revision 4119)
@@ -57,5 +57,5 @@
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("3.3.0.4111")]
-[assembly: AssemblyFileVersion("3.3.0.4111")]
-[assembly: AssemblyBuildDate("2010/07/27 18:31:47")]
+[assembly: AssemblyVersion("3.3.0.4116")]
+[assembly: AssemblyFileVersion("3.3.0.4116")]
+[assembly: AssemblyBuildDate("2010/07/28 17:42:03")]
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.ExecutionEngine/3.3/Executor.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.ExecutionEngine/3.3/Executor.cs	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.ExecutionEngine/3.3/Executor.cs	(revision 4119)
@@ -29,4 +29,5 @@
 using HeuristicLab.Persistence.Default.Xml;
 using System.IO;
+using HeuristicLab.Core;
 
 namespace HeuristicLab.Hive.Client.ExecutionEngine {
@@ -39,7 +40,7 @@
     public bool JobIsFinished { get; set; }
 
-    public bool Running {
+    public ExecutionState ExecutionState {
       get {
-        return Job.Running;
+        return Job.ExecutionState;
       }
     }
@@ -88,5 +89,5 @@
     public byte[] GetSnapshot() {
       //if the job is still running, something went VERY bad.
-      if (Job.Running) {
+      if (Job.ExecutionState == Core.ExecutionState.Started) {
         return null;
       } else {
@@ -103,5 +104,5 @@
     public byte[] GetFinishedJob() {
       //Job isn't finished!
-      if (Job.Running) {
+      if (Job.ExecutionState == Core.ExecutionState.Started) {
         throw new InvalidStateException("Job is still running");
       } else {
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.ExecutionEngine/3.3/HeuristicLab.Hive.Client.ExecutionEngine-3.3.csproj
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.ExecutionEngine/3.3/HeuristicLab.Hive.Client.ExecutionEngine-3.3.csproj	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Client.ExecutionEngine/3.3/HeuristicLab.Hive.Client.ExecutionEngine-3.3.csproj	(revision 4119)
@@ -79,4 +79,5 @@
       <HintPath>..\..\..\..\..\..\..\..\..\Programme\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" />
     <Reference Include="HeuristicLab.Persistence-3.3">
       <HintPath>..\..\..\..\..\..\..\..\..\Programme\HeuristicLab 3.3\HeuristicLab.Persistence-3.3.dll</HintPath>
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HivePluginInfoDto.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HivePluginInfoDto.cs	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HivePluginInfoDto.cs	(revision 4119)
@@ -39,6 +39,4 @@
     public Version Version { get; set; }
 
-    [DataMember]
-    public DateTime BuildDate { get; set; }
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Engine/3.3/HeuristicLab.Hive.Engine-3.3.csproj
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Engine/3.3/HeuristicLab.Hive.Engine-3.3.csproj	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Engine/3.3/HeuristicLab.Hive.Engine-3.3.csproj	(revision 4119)
@@ -128,7 +128,5 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="Job.cs" />
     <Compile Include="HeuristicLabHiveEnginePlugin.cs" />
-    <Compile Include="HiveEngine.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="ServiceLocator.cs" />
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Engine/3.3/HiveEngine.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Engine/3.3/HiveEngine.cs	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Engine/3.3/HiveEngine.cs	(revision 4119)
@@ -177,6 +177,5 @@
         select new HivePluginInfoDto() {
           Name = p.Name,
-          Version = p.Version,
-          BuildDate = p.BuildDate,
+          Version = p.Version
         }).ToList();
 
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HeuristicLab.Hive.Experiment.Views-3.3.csproj
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HeuristicLab.Hive.Experiment.Views-3.3.csproj	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HeuristicLab.Hive.Experiment.Views-3.3.csproj	(revision 4119)
@@ -39,4 +39,5 @@
     <PlatformTarget>AnyCPU</PlatformTarget>
     <OutputPath>bin\Debug\</OutputPath>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
@@ -46,4 +47,10 @@
   <PropertyGroup>
     <StartupObject />
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
   </PropertyGroup>
   <ItemGroup>
@@ -109,4 +116,5 @@
   </ItemGroup>
   <ItemGroup>
+    <None Include="HeuristicLab.snk" />
     <None Include="Properties\AssemblyInfo.frame" />
   </ItemGroup>
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.cs	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.cs	(revision 4119)
@@ -75,7 +75,10 @@
       base.OnContentChanged();
       if (Content == null) {
-        executionTimeTextBox.Text = "-";
+        executionTimeTextBox.Text = string.Empty;
       } else {
         executionTimeTextBox.Text = Content.ExecutionTime.ToString();
+        resourceIdsTextBox.Text = Content.ResourceIds;
+        serverUrlTextBox.Text = Content.ServerUrl;
+        experimentNamedItemView.Content = Content.Experiment;
       }
     }
@@ -84,4 +87,8 @@
       base.SetEnabledStateOfControls();
       executionTimeTextBox.Enabled = Content != null;
+      if (Content != null) {
+        openExperimentButton.Enabled = Content.Experiment != null;
+        experimentNamedItemView.Locked = Content.Experiment == null;
+      }
       SetEnabledStateOfExecutableButtons();
     }
@@ -94,4 +101,7 @@
     private void Content_ExperimentChanged(object sender, EventArgs e) {
       experimentNamedItemView.Content = Content.Experiment;
+      if (Content.Experiment != null) {
+        Content.Prepare();
+      }
       SetEnabledStateOfExecutableButtons();
     }
@@ -179,6 +189,4 @@
         stopButton.Enabled = (Content.ExecutionState == ExecutionState.Started) || (Content.ExecutionState == ExecutionState.Paused);
         resetButton.Enabled = Content.ExecutionState != ExecutionState.Started;
-        openExperimentButton.Enabled = Content.Experiment != null;
-        experimentNamedItemView.Locked = Content.Experiment == null;
       }
     }
@@ -200,5 +208,5 @@
 
     private void resourceIdsTextBox_Validated(object sender, EventArgs e) {
-      Content.ResourceIds = resourceIdsLabel.Text;
+      Content.ResourceIds = resourceIdsTextBox.Text;
     }
 
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/Properties/AssemblyInfo.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/Properties/AssemblyInfo.cs	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/Properties/AssemblyInfo.cs	(revision 4119)
@@ -55,5 +55,5 @@
 // You can specify all the values or you can default the Revision and Build Numbers 
 // by using the '*' as shown below:
-[assembly: AssemblyVersion("3.3.0.4111")]
-[assembly: AssemblyFileVersion("3.3.0.4111")]
-[assembly: AssemblyBuildDate("2010/07/27 18:32:02")]
+[assembly: AssemblyVersion("3.3.0.4116")]
+[assembly: AssemblyFileVersion("3.3.0.4116")]
+[assembly: AssemblyBuildDate("2010/07/28 17:42:56")]
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HeuristicLab.Hive.Experiment-3.3.csproj
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HeuristicLab.Hive.Experiment-3.3.csproj	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HeuristicLab.Hive.Experiment-3.3.csproj	(revision 4119)
@@ -42,8 +42,15 @@
     <PlatformTarget>AnyCPU</PlatformTarget>
     <OutputPath>bin\Debug\</OutputPath>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
     <PlatformTarget>AnyCPU</PlatformTarget>
     <OutputPath>bin\Release\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
   </PropertyGroup>
   <ItemGroup>
@@ -89,4 +96,5 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="OptimizerJob.cs" />
     <Compile Include="HeuristicLabHiveExperimentPlugin.cs" />
     <Compile Include="HiveExperiment.cs" />
@@ -102,4 +110,5 @@
   <ItemGroup>
     <None Include="app.config" />
+    <None Include="HeuristicLab.snk" />
     <None Include="Properties\AssemblyInfo.frame" />
     <None Include="Properties\Settings.settings">
@@ -112,4 +121,8 @@
       <Project>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</Project>
       <Name>HeuristicLab.Hive.Contracts-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.JobBase\3.3\HeuristicLab.Hive.JobBase-3.3.csproj">
+      <Project>{21187322-52DD-4243-80A4-A85F0263E63B}</Project>
+      <Name>HeuristicLab.Hive.JobBase-3.3</Name>
     </ProjectReference>
   </ItemGroup>
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperiment.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperiment.cs	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperiment.cs	(revision 4119)
@@ -38,4 +38,7 @@
 using System.Threading;
 using HeuristicLab.Tracing;
+using HeuristicLab.Hive.JobBase;
+using System.Diagnostics;
+using System.Collections;
 
 namespace HeuristicLab.Hive.Experiment {
@@ -50,9 +53,14 @@
     private const string itemDescription = "An experiment which contains multiple batch runs of algorithms which are executed in the Hive.";
     private const int resultPollingIntervalMs = 10000;
+
     private const int maxSnapshotRetries = 20;
 
-    private IDictionary<Guid, SerializedJob> jobs = null;
+    [Storable]
+    private IDictionary<Guid, IOptimizer> sentOptimizers = null;
+
     private object locker = new object();
-
+    private DateTime startTime;
+
+    [Storable]
     private string serverUrl;
     public string ServerUrl {
@@ -60,10 +68,6 @@
       set { serverUrl = value; OnServerUrlChanged(); }
     }
-    public event EventHandler ServerUrlChanged;
-    protected virtual void OnServerUrlChanged() {
-      EventHandler handler = ServerUrlChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
+
+    [Storable]
     private string resourceIds;
     public string ResourceIds {
@@ -71,8 +75,34 @@
       set { resourceIds = value; OnResourceIdsChanged(); }
     }
-    public event EventHandler ResourceIdsChanged;
-    protected virtual void OnResourceIdsChanged() {
-      EventHandler handler = ResourceIdsChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
+
+    [Storable]
+    private HeuristicLab.Optimization.Experiment experiment;
+    public HeuristicLab.Optimization.Experiment Experiment {
+      get { return experiment; }
+      set { experiment = value; OnExperimentChanged(); }
+    }
+
+    [StorableConstructor]
+    public HiveExperiment(bool deserializing)
+      : base(deserializing) {
+    }
+
+    public HiveExperiment()
+      : base(itemName, itemDescription) {
+      this.ServerUrl = HeuristicLab.Hive.Experiment.Properties.Settings.Default.HiveServerUrl;
+      this.ResourceIds = HeuristicLab.Hive.Experiment.Properties.Settings.Default.ResourceIds;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      HiveExperiment clone = (HiveExperiment)base.Clone(cloner);
+      clone.resourceIds = this.resourceIds;
+      clone.serverUrl = this.serverUrl;
+      clone.experiment = (HeuristicLab.Optimization.Experiment)cloner.Clone(experiment);
+      clone.executionState = this.executionState;
+      clone.executionTime = this.executionTime;
+      clone.sentOptimizers = new Dictionary<Guid, IOptimizer>();
+      foreach (var pair in this.sentOptimizers)
+        clone.sentOptimizers[pair.Key] = (IOptimizer)cloner.Clone(pair.Value);
+      return clone;
     }
 
@@ -86,37 +116,27 @@
       }
     }
-
-    private HeuristicLab.Optimization.Experiment experiment;
-    public HeuristicLab.Optimization.Experiment Experiment {
-      get { return experiment; }
-      set { experiment = value; OnExperimentChanged(); }
-    }
-    public event EventHandler ExperimentChanged;
-    protected virtual void OnExperimentChanged() {
-      EventHandler handler = ExperimentChanged;
-      if (handler != null) handler(this, EventArgs.Empty);
-    }
-
-    public HiveExperiment()
-      : base(itemName, itemDescription) {
-      this.ServerUrl = HeuristicLab.Hive.Experiment.Properties.Settings.Default.HiveServerUrl;
-      this.ResourceIds = HeuristicLab.Hive.Experiment.Properties.Settings.Default.ResourceIds;
-    }
-
     #region IExecutable Members
 
-    public event EventHandler<EventArgs<Exception>> ExceptionOccurred;
-
+    [Storable]
+    private Core.ExecutionState executionState;
     public ExecutionState ExecutionState {
-      get { return Core.ExecutionState.Stopped; } // [chn] todo 
-    }
-
-    public event EventHandler ExecutionStateChanged;
-
+      get { return executionState; }
+      private set {
+        if (executionState != value) {
+          executionState = value;
+          OnExecutionStateChanged();
+        }
+      }
+    }
+
+    [Storable]
+    private TimeSpan executionTime;
     public TimeSpan ExecutionTime {
-      get { return new TimeSpan(); } // [chn] todo 
-    }
-
-    public event EventHandler ExecutionTimeChanged;
+      get { return executionTime; }
+      private set {
+        executionTime = value;
+        OnExecutionTimeChanged();
+      }
+    }
 
     public void Pause() {
@@ -124,32 +144,27 @@
     }
 
-    public event EventHandler Paused;
-
     public void Prepare() {
-
-    }
-
-    public event EventHandler Prepared;
+      // [chn] needed?
+      if (experiment != null) {
+        experiment.Prepare();
+        OnPrepared();
+      }
+    }
 
     public void Start() {
+      this.startTime = DateTime.Now;
+      this.ExecutionState = Core.ExecutionState.Started;
       IExecutionEngineFacade executionEngineFacade = ServiceLocator.CreateExecutionEngineFacade(ServerUrl);
 
-      IList<SerializedJob> serializedJobs = new List<SerializedJob>();
+      sentOptimizers = new Dictionary<Guid, IOptimizer>();
+      IEnumerable<string> groups = ResourceGroups;
+
       foreach (IOptimizer optimizer in Experiment.Optimizers) {
-        serializedJobs.Add(CreateJob(optimizer));
-      }
-
-      jobs = new Dictionary<Guid, SerializedJob>();
-
-      IEnumerable<string> groups = ResourceGroups;
-      foreach (SerializedJob job in serializedJobs) {
-        ResponseObject<JobDto> response = executionEngineFacade.AddJobWithGroupStrings(job, groups);
-        
-        jobs.Add(response.Obj.Id, job);
+        SerializedJob serializedJob = CreateSerializedJob(optimizer);
+        ResponseObject<JobDto> response = executionEngineFacade.AddJobWithGroupStrings(serializedJob, groups);
+        sentOptimizers.Add(response.Obj.Id, optimizer);
         StartResultPollingThread(response.Obj);
       }
     }
-
-    public event EventHandler Started;
 
     public void Stop() {
@@ -157,13 +172,18 @@
     }
 
-    public event EventHandler Stopped;
     private bool abortRequested;
 
     #endregion
 
-    private SerializedJob CreateJob(IOptimizer optimizer) {
-      // serialize optimizer
+    private SerializedJob CreateSerializedJob(IOptimizer optimizer) {
+      IJob job = new OptimizerJob() {
+        Optimizer = optimizer
+      };
+
+      // serialize job
       MemoryStream memStream = new MemoryStream();
-      XmlGenerator.Serialize(optimizer, memStream);
+      XmlGenerator.Serialize(job, memStream);
+      byte[] jobByteArray = memStream.ToArray();
+      memStream.Dispose();
 
       // find out which which plugins are needed for the given object
@@ -172,6 +192,5 @@
         select new HivePluginInfoDto() {
           Name = p.Name,
-          Version = p.Version,
-          BuildDate = p.BuildDate,
+          Version = p.Version
         }).ToList();
 
@@ -186,7 +205,6 @@
       SerializedJob serializedJob = new SerializedJob() {
         JobInfo = jobDto,
-        SerializedJobData = memStream.ToArray()
+        SerializedJobData = jobByteArray
       };
-      memStream.Dispose();
 
       return serializedJob;
@@ -196,5 +214,5 @@
       Thread t = new Thread(() => {
         IExecutionEngineFacade executionEngineFacade = ServiceLocator.CreateExecutionEngineFacade(ServerUrl);
-        IOptimizer restoredObject = null;
+        IJob restoredObject = null;
 
         do {
@@ -211,18 +229,30 @@
             // 4. the result that we get from the server is a snapshot and not the final result
             if (response.Success && response.Obj != null && response.StatusMessage != ApplicationConstants.RESPONSE_JOB_RESULT_NOT_YET_HERE) {
-              
+
               // [chn] todo: deserialization into interface is not possible! how to find out correct static type?
-              restoredObject = XmlParser.Deserialize<IOptimizer>(new MemoryStream(response.Obj.SerializedJobData));
+              restoredObject = XmlParser.Deserialize<IJob>(new MemoryStream(response.Obj.SerializedJobData));
             }
           }
-        } while (restoredObject == null || restoredObject.ExecutionState == Core.ExecutionState.Stopped);
+        } while (restoredObject == null || restoredObject.ExecutionState != Core.ExecutionState.Stopped);
 
         // job retrieved... replace the existing optimizers with the finished one
-        // todo
+        IOptimizer originalOptimizer = sentOptimizers[job.Id];
+        IOptimizer restoredOptimizer = ((OptimizerJob)restoredObject).Optimizer;
+
+        int originalOptimizerIndex = experiment.Optimizers.IndexOf(originalOptimizer);
+        experiment.Optimizers[originalOptimizerIndex] = restoredOptimizer;
+        sentOptimizers.Remove(job.Id);
+
+        if (sentOptimizers.Count == 0) {
+          // finished
+          this.ExecutionState = Core.ExecutionState.Stopped;
+          OnStopped();
+        }
       });
-      
+
       Logger.Debug("HiveEngine: Starting results-polling thread");
       t.Start();
     }
+
 
     #region Required Plugin Search
@@ -310,4 +340,65 @@
     }
     #endregion
+
+    #region Eventhandler
+
+    public event EventHandler ExecutionTimeChanged;
+    private void OnExecutionTimeChanged() {
+      EventHandler handler = ExecutionTimeChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ExecutionStateChanged;
+    private void OnExecutionStateChanged() {
+      EventHandler handler = ExecutionStateChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler<EventArgs<Exception>> ExceptionOccurred;
+
+    public event EventHandler Started;
+    private void OnStarted() {
+      EventHandler handler = Started;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler Stopped;
+    private void OnStopped() {
+      EventHandler handler = Stopped;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler Paused;
+    private void OnPaused() {
+      EventHandler handler = Paused;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler Prepared;
+    protected virtual void OnPrepared() {
+      EventHandler handler = Prepared;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ResourceIdsChanged;
+    protected virtual void OnResourceIdsChanged() {
+      EventHandler handler = ResourceIdsChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ExperimentChanged;
+    protected virtual void OnExperimentChanged() {
+      EventHandler handler = ExperimentChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ServerUrlChanged;
+    protected virtual void OnServerUrlChanged() {
+      EventHandler handler = ServerUrlChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+
+    #endregion
   }
 }
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/OptimizerJob.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/OptimizerJob.cs	(revision 4119)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/OptimizerJob.cs	(revision 4119)
@@ -0,0 +1,106 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.JobBase;
+using HeuristicLab.Optimization;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Hive.Experiment {
+  [StorableClass]
+  class OptimizerJob : IJob {
+
+    [Storable]
+    private IOptimizer optimizer;
+    public IOptimizer Optimizer {
+      get { return optimizer;  }
+      set {
+        if (optimizer != null && value != optimizer) {
+          DeregisterEvents();
+        }
+        optimizer = value;
+        if (optimizer != null) {
+          RegisterEvents();
+        }
+      }
+    }
+
+    [Storable]
+    private double progress = 0.0;
+
+    public OptimizerJob() {
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      RegisterEvents();
+    }
+
+    #region IJob Members
+
+    public long JobId {
+      get;
+      set;
+    }
+
+    public double Progress {
+      get { return optimizer.ExecutionState == ExecutionState.Stopped ? 1.0 : this.progress; }
+    }
+
+    public ExecutionState ExecutionState {
+      get { return optimizer.ExecutionState; }
+    }
+
+    public void Run() {
+      throw new NotSupportedException();
+    }
+
+    // [chn] needed?
+    public void Prepare(Core.IOperation initialOperation) {
+      throw new NotImplementedException(); 
+    }
+
+    public void Start() {
+      optimizer.Start();
+    }
+
+    public void Stop() {
+      optimizer.Stop();
+    }
+
+    public event EventHandler JobStopped;
+
+    public event EventHandler JobFailed;
+
+    #endregion
+
+    #region Events
+    private void RegisterEvents() {
+      optimizer.Stopped += new EventHandler(optimizer_Stopped);
+      optimizer.ExceptionOccurred += new EventHandler<Common.EventArgs<Exception>>(optimizer_ExceptionOccurred);
+    }
+
+    private void DeregisterEvents() {
+      optimizer.Stopped -= new EventHandler(optimizer_Stopped);
+      optimizer.ExceptionOccurred -= new EventHandler<Common.EventArgs<Exception>>(optimizer_ExceptionOccurred);
+    }
+
+    void optimizer_ExceptionOccurred(object sender, Common.EventArgs<Exception> e) {
+      if (optimizer.ExecutionState != ExecutionState.Stopped) this.progress = 0.0;
+      else this.progress = 1.0;
+      EventHandler handler = JobFailed;
+      if (handler != null) handler(this, e);
+    }
+
+    void optimizer_Stopped(object sender, EventArgs e) {
+      if (optimizer.ExecutionState != ExecutionState.Stopped) this.progress = 0.0;
+      else this.progress = 1.0;
+      EventHandler handler = JobStopped;
+      if (handler != null) handler(this, e);
+    }
+    #endregion
+
+
+  }
+}
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Properties/AssemblyInfo.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Properties/AssemblyInfo.cs	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Properties/AssemblyInfo.cs	(revision 4119)
@@ -55,5 +55,5 @@
 // You can specify all the values or you can default the Revision and Build Numbers 
 // by using the '*' as shown below:
-[assembly: AssemblyVersion("3.3.0.4111")]
-[assembly: AssemblyFileVersion("3.3.0.4111")]
-[assembly: AssemblyBuildDate("2010/07/27 18:31:34")]
+[assembly: AssemblyVersion("3.3.0.4116")]
+[assembly: AssemblyFileVersion("3.3.0.4116")]
+[assembly: AssemblyBuildDate("2010/07/28 17:42:02")]
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/Interfaces/IJob.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/Interfaces/IJob.cs	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/Interfaces/IJob.cs	(revision 4119)
@@ -6,6 +6,7 @@
   public interface IJob {
     long JobId { get; set; }
-    bool Running { get; set; }
+    ExecutionState ExecutionState { get; }
     double Progress { get; }
+
     void Run();
     void Prepare(IOperation initialOperation);
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/ClientCommunicator.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/ClientCommunicator.cs	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/ClientCommunicator.cs	(revision 4119)
@@ -691,5 +691,4 @@
       ResponsePlugin response = new ResponsePlugin();
       foreach (HivePluginInfoDto pluginInfo in pluginList) {
-        // TODO: BuildDate deleted, not needed???
         // TODO: Split version to major, minor and revision number
         foreach (IPluginDescription currPlugin in ApplicationManager.Manager.Plugins) {
@@ -698,6 +697,5 @@
             CachedHivePluginInfoDto currCachedPlugin = new CachedHivePluginInfoDto {
               Name = currPlugin.Name,
-              Version = currPlugin.Version,
-              BuildDate = currPlugin.BuildDate
+              Version = currPlugin.Version
             };
 
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/JobManager.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/JobManager.cs	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/JobManager.cs	(revision 4119)
@@ -223,11 +223,8 @@
 
     public ResponseObject<JobDto> GetLastJobResultOf(Guid jobId) {
-      ResponseObject<JobDto> result =
-        new ResponseObject<JobDto>();
-
-      result.Obj =
-        GetLastJobResult(jobId);
-      result.Success =
-        result.Obj != null;
+      ResponseObject<JobDto> result = new ResponseObject<JobDto>();
+
+      result.Obj = GetLastJobResult(jobId);
+      result.Success = result.Obj != null;
 
       return result;
@@ -263,6 +260,5 @@
       response.Obj.JobInfo = job;
 
-      response.Obj.SerializedJobData =
-        DaoLocator.JobDao.GetBinaryJobFile(jobId);
+      response.Obj.SerializedJobData = DaoLocator.JobDao.GetBinaryJobFile(jobId);
 
       return response;
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Properties/AssemblyInfo.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Properties/AssemblyInfo.cs	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Properties/AssemblyInfo.cs	(revision 4119)
@@ -55,5 +55,5 @@
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("3.3.0.4111")]
-[assembly: AssemblyFileVersion("3.3.0.4111")]
-[assembly: AssemblyBuildDate("2010/07/27 18:31:46")]
+[assembly: AssemblyVersion("3.3.0.4116")]
+[assembly: AssemblyFileVersion("3.3.0.4116")]
+[assembly: AssemblyBuildDate("2010/07/28 17:42:06")]
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/JobDao.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/JobDao.cs	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/JobDao.cs	(revision 4119)
@@ -26,5 +26,4 @@
 
     public IEnumerable<JobDto> FindWithLimitations(State jobState, int offset, int count) {
-
       IQueryable<JobDto> query = null;
       if (jobState == State.Finished) {
@@ -80,5 +79,4 @@
       job.JobInfo.Id = j.JobId;
       return job;
-
     }
 
@@ -104,4 +102,5 @@
               select EntityToDto(j, null)).ToList();
     }
+
     public IEnumerable<JobDto> FindFittingJobsForClient(State state, int freeCores, int freeMemory, Guid clientId) {
       ClientGroupDao cgd = new ClientGroupDao();
@@ -119,5 +118,4 @@
                select EntityToDto(ar.Job, null));
       return q.ToList();
-      
     }
 
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/PluginInfoDao.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/PluginInfoDao.cs	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/PluginInfoDao.cs	(revision 4119)
@@ -48,5 +48,4 @@
         if (dbpi == null) {
           dbpi = new PluginInfo {
-                                  BuildDate = info.BuildDate.ToString(),
                                   Name = info.Name,
                                   Version = info.Version.ToString()
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/Files.txt
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/Files.txt	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/Files.txt	(revision 4119)
@@ -6,4 +6,6 @@
 HeuristicLab.DataAccess\3.3:HeuristicLab.DataAccess-3.3.dll
 HeuristicLab.DataAccess.ADOHelper\3.3:HeuristicLab.DataAccess.ADOHelper-3.3.dll
+
+HeuristicLab.Hive\3.3:HeuristicLab.Hive.log4net.xml
 
 HeuristicLab.Hive.Client.Common\3.3:HeuristicLab.Hive.Client.Common-3.3.dll
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/HeuristicLab 3.3.exe.config
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/HeuristicLab 3.3.exe.config	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/HeuristicLab 3.3.exe.config	(revision 4119)
@@ -111,5 +111,5 @@
     <HeuristicLab.Tracing.Properties.Settings>
       <setting name="TracingLog4netConfigFile" serializeAs="String">
-        <value />
+        <value>HeuristicLab.Hive.log4net.xml</value>
       </setting>
     </HeuristicLab.Tracing.Properties.Settings>
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj	(revision 4119)
@@ -74,4 +74,7 @@
     <Content Include="Files.x64.txt" />
     <Content Include="Files.x86.txt" />
+    <Content Include="HeuristicLab.Hive.log4net.xml">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
     <Content Include="HeuristicLab.ico" />
   </ItemGroup>
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/HeuristicLab.Hive.log4net.xml
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/HeuristicLab.Hive.log4net.xml	(revision 4119)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/HeuristicLab.Hive.log4net.xml	(revision 4119)
@@ -0,0 +1,93 @@
+﻿<log4net>
+  
+  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
+    <file value="Hive.log" />
+    <appendToFile value="true" />
+    <rollingStyle value="Size" />
+    <maxSizeRollBackups value="10" />
+    <maximumFileSize value="100MB" />
+    <staticLogFileName value="true" />
+    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
+    <layout type="HeuristicLab.Tracing.MethodCallPatternLayout, HeuristicLab.Tracing-3.2">
+      <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss.ffff} %-4timestamp %-5level %-5thread %logger.%RM - %message%newline%exception" />
+    </layout>
+  </appender>
+
+  <appender name="ServerRollingFileAppender" type="log4net.Appender.RollingFileAppender">
+    <file value="Hive.Server.log" />
+    <appendToFile value="true" />
+    <rollingStyle value="Size" />
+    <maxSizeRollBackups value="10" />
+    <maximumFileSize value="100MB" />
+    <staticLogFileName value="true" />
+    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
+    <layout type="HeuristicLab.Tracing.MethodCallPatternLayout, HeuristicLab.Tracing-3.2">
+      <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss.ffff} %-4timestamp %-5level %-5thread %logger.%RM - %message%newline%exception" />
+    </layout>
+  </appender>
+
+  <appender name="ClientRollingFileAppender" type="log4net.Appender.RollingFileAppender">
+    <file value="Hive.Client.log" />
+    <appendToFile value="true" />
+    <rollingStyle value="Size" />
+    <maxSizeRollBackups value="10" />
+    <maximumFileSize value="100MB" />
+    <staticLogFileName value="true" />
+    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
+    <layout type="HeuristicLab.Tracing.MethodCallPatternLayout, HeuristicLab.Tracing-3.2">
+      <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss.ffff} %-4timestamp %-5level %-5thread %logger.%RM - %message%newline%exception" />
+    </layout>
+  </appender>
+  
+  <appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
+    <bufferSize value="128" />
+    <lossy value="true" />
+    <evaluator type="log4net.Core.LevelEvaluator">
+        <threshold value="DEBUG"/>
+    </evaluator>
+    <appender-ref ref="RollingFileAppender" />
+  </appender>
+
+  <appender name="ClientBufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
+    <bufferSize value="128" />
+    <lossy value="true" />
+    <evaluator type="log4net.Core.LevelEvaluator">
+      <threshold value="DEBUG"/>
+    </evaluator>
+    <appender-ref ref="ClientRollingFileAppender" />
+  </appender>
+
+  <appender name="ServerBufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
+    <bufferSize value="128" />
+    <lossy value="true" />
+    <evaluator type="log4net.Core.LevelEvaluator">
+      <threshold value="DEBUG"/>
+    </evaluator>
+    <appender-ref ref="ServerRollingFileAppender" />
+  </appender>
+  
+  <appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
+    <bufferSize value="128" />
+    <lossy value="true" />
+    <evaluator type="log4net.Core.LevelEvaluator">
+      <threshold value="DEBUG"/>
+    </evaluator>
+    <appender-ref ref="RollingFileAppender" />
+  </appender>
+  
+  <root>
+    <level value="DEBUG" />
+    <appender-ref ref="BufferingForwardingAppender" />
+  </root>
+
+  <logger name="HeuristicLab.Hive.Server">
+    <level value="DEBUG" />
+    <appender-ref ref="ServerBufferingForwardingAppender" />    
+  </logger>
+
+  <logger name="HeuristicLab.Hive.Client">
+    <level value="DEBUG" />
+    <appender-ref ref="ClientBufferingForwardingAppender" />  
+  </logger>
+  
+</log4net>
Index: branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/Properties/AssemblyInfo.cs
===================================================================
--- branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/Properties/AssemblyInfo.cs	(revision 4116)
+++ branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/Properties/AssemblyInfo.cs	(revision 4119)
@@ -51,4 +51,4 @@
 //      Revision
 //
-[assembly: AssemblyVersion("3.3.0.4111")]
-[assembly: AssemblyFileVersion("3.3.0.4111")]
+[assembly: AssemblyVersion("3.3.0.4116")]
+[assembly: AssemblyFileVersion("3.3.0.4116")]
