Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.SlaveWindowsServiceSetup/HeuristicLab.Clients.Hive.Slave.SlaveWindowsServiceSetup.vdproj
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.SlaveWindowsServiceSetup/HeuristicLab.Clients.Hive.Slave.SlaveWindowsServiceSetup.vdproj	(revision 5788)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.SlaveWindowsServiceSetup/HeuristicLab.Clients.Hive.Slave.SlaveWindowsServiceSetup.vdproj	(revision 5789)
@@ -2827,4 +2827,15 @@
                 "Folders"
                 {
+                    "{9EF0B969-E518-4E46-987F-47570745A589}:_1CAB3452A07143398B4B614C5E7BFBF1"
+                    {
+                    "Name" = "8:Startup"
+                    "AlwaysCreate" = "11:FALSE"
+                    "Condition" = "8:"
+                    "Transitive" = "11:FALSE"
+                    "Property" = "8:_44D8CB6B7BF4473FB08F71EF2CABE42F"
+                        "Folders"
+                        {
+                        }
+                    }
                     "{9EF0B969-E518-4E46-987F-47570745A589}:_EB172448DA454A1EACE198BCA7BC8A03"
                     {
@@ -2857,5 +2868,5 @@
         "ProductName" = "8:HeuristicLab Hive Slave"
         "ProductCode" = "8:{83D128A1-4766-4B19-A449-15B0A1969B99}"
-        "PackageCode" = "8:{E16E0DDF-7849-45C1-8379-6F7070E7248C}"
+        "PackageCode" = "8:{C4FAB079-1A52-4750-8B10-308DD1D8A0EE}"
         "UpgradeCode" = "8:{F27A07F7-B96C-4375-B9C2-6623E5C2B03E}"
         "AspNetVersion" = "8:4.0.30319.0"
@@ -2987,4 +2998,18 @@
             "Target" = "8:_E425C85EBBC047D2944046574F2FB159"
             "Folder" = "8:_EB172448DA454A1EACE198BCA7BC8A03"
+            "WorkingFolder" = "8:_8564EC48868C45BDB6F26256DBC6B288"
+            "Icon" = "8:_98295B7BD0CC41ED881E9A9207EF6DB4"
+            "Feature" = "8:"
+            }
+            "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_3B4D8FB05FCC4E9A908C03F543D4D3B2"
+            {
+            "Name" = "8:HeuristicLab Hive Slave"
+            "Arguments" = "8:"
+            "Description" = "8:"
+            "ShowCmd" = "3:1"
+            "IconIndex" = "3:0"
+            "Transitive" = "11:FALSE"
+            "Target" = "8:_E425C85EBBC047D2944046574F2FB159"
+            "Folder" = "8:_1CAB3452A07143398B4B614C5E7BFBF1"
             "WorkingFolder" = "8:_8564EC48868C45BDB6F26256DBC6B288"
             "Icon" = "8:_98295B7BD0CC41ED881E9A9207EF6DB4"
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Views/3.4/HeuristicLab.Clients.Hive.Slave.Views-3.4.csproj
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Views/3.4/HeuristicLab.Clients.Hive.Slave.Views-3.4.csproj	(revision 5788)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Views/3.4/HeuristicLab.Clients.Hive.Slave.Views-3.4.csproj	(revision 5789)
@@ -119,4 +119,5 @@
     <Reference Include="System.ServiceProcess" />
     <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Windows.Forms.DataVisualization" />
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Views/3.4/SlaveView.Designer.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Views/3.4/SlaveView.Designer.cs	(revision 5788)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Views/3.4/SlaveView.Designer.cs	(revision 5789)
@@ -45,5 +45,7 @@
     /// </summary>
     private void InitializeComponent() {
-      this.label1 = new System.Windows.Forms.Label();
+      System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
+      System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
+      System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
       this.txtLog = new System.Windows.Forms.TextBox();
       this.btnPauseAll = new System.Windows.Forms.Button();
@@ -52,31 +54,24 @@
       this.btnSleep = new System.Windows.Forms.Button();
       this.btnAbout = new System.Windows.Forms.Button();
+      this.jobChart = new System.Windows.Forms.DataVisualization.Charting.Chart();
+      ((System.ComponentModel.ISupportInitialize)(this.jobChart)).BeginInit();
       this.SuspendLayout();
-      // 
-      // label1
-      // 
-      this.label1.AutoSize = true;
-      this.label1.Location = new System.Drawing.Point(17, 24);
-      this.label1.Name = "label1";
-      this.label1.Size = new System.Drawing.Size(85, 13);
-      this.label1.TabIndex = 0;
-      this.label1.Text = "Hive Slave View";
       // 
       // txtLog
       // 
       this.txtLog.BackColor = System.Drawing.Color.White;
-      this.txtLog.Location = new System.Drawing.Point(20, 172);
+      this.txtLog.Location = new System.Drawing.Point(3, 150);
       this.txtLog.Multiline = true;
       this.txtLog.Name = "txtLog";
       this.txtLog.ReadOnly = true;
       this.txtLog.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
-      this.txtLog.Size = new System.Drawing.Size(546, 244);
+      this.txtLog.Size = new System.Drawing.Size(584, 273);
       this.txtLog.TabIndex = 1;
       // 
       // btnPauseAll
       // 
-      this.btnPauseAll.Location = new System.Drawing.Point(455, 24);
+      this.btnPauseAll.Location = new System.Drawing.Point(476, 3);
       this.btnPauseAll.Name = "btnPauseAll";
-      this.btnPauseAll.Size = new System.Drawing.Size(111, 23);
+      this.btnPauseAll.Size = new System.Drawing.Size(111, 28);
       this.btnPauseAll.TabIndex = 2;
       this.btnPauseAll.Text = "Pause all jobs";
@@ -86,7 +81,7 @@
       // btnStopAll
       // 
-      this.btnStopAll.Location = new System.Drawing.Point(455, 53);
+      this.btnStopAll.Location = new System.Drawing.Point(476, 32);
       this.btnStopAll.Name = "btnStopAll";
-      this.btnStopAll.Size = new System.Drawing.Size(111, 23);
+      this.btnStopAll.Size = new System.Drawing.Size(111, 28);
       this.btnStopAll.TabIndex = 3;
       this.btnStopAll.Text = "Stop all jobs";
@@ -96,7 +91,7 @@
       // btnRestart
       // 
-      this.btnRestart.Location = new System.Drawing.Point(455, 111);
+      this.btnRestart.Location = new System.Drawing.Point(476, 90);
       this.btnRestart.Name = "btnRestart";
-      this.btnRestart.Size = new System.Drawing.Size(111, 23);
+      this.btnRestart.Size = new System.Drawing.Size(111, 28);
       this.btnRestart.TabIndex = 4;
       this.btnRestart.Text = "Restart Core";
@@ -106,7 +101,7 @@
       // btnSleep
       // 
-      this.btnSleep.Location = new System.Drawing.Point(455, 82);
+      this.btnSleep.Location = new System.Drawing.Point(476, 61);
       this.btnSleep.Name = "btnSleep";
-      this.btnSleep.Size = new System.Drawing.Size(111, 23);
+      this.btnSleep.Size = new System.Drawing.Size(111, 28);
       this.btnSleep.TabIndex = 5;
       this.btnSleep.Text = "Send slave to sleep";
@@ -116,7 +111,7 @@
       // btnAbout
       // 
-      this.btnAbout.Location = new System.Drawing.Point(455, 140);
+      this.btnAbout.Location = new System.Drawing.Point(476, 119);
       this.btnAbout.Name = "btnAbout";
-      this.btnAbout.Size = new System.Drawing.Size(111, 23);
+      this.btnAbout.Size = new System.Drawing.Size(111, 28);
       this.btnAbout.TabIndex = 6;
       this.btnAbout.Text = "About Hive";
@@ -124,8 +119,25 @@
       this.btnAbout.Click += new System.EventHandler(this.btnAbout_Click);
       // 
+      // jobChart
+      // 
+      chartArea1.Name = "ChartArea1";
+      this.jobChart.ChartAreas.Add(chartArea1);
+      legend1.Name = "Legend1";
+      this.jobChart.Legends.Add(legend1);
+      this.jobChart.Location = new System.Drawing.Point(3, 3);
+      this.jobChart.Name = "jobChart";
+      series1.ChartArea = "ChartArea1";
+      series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Doughnut;
+      series1.Legend = "Legend1";
+      series1.Name = "Series1";
+      this.jobChart.Series.Add(series1);
+      this.jobChart.Size = new System.Drawing.Size(272, 138);
+      this.jobChart.TabIndex = 7;
+      // 
       // SlaveView
       // 
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.jobChart);
       this.Controls.Add(this.btnAbout);
       this.Controls.Add(this.btnSleep);
@@ -134,7 +146,7 @@
       this.Controls.Add(this.btnPauseAll);
       this.Controls.Add(this.txtLog);
-      this.Controls.Add(this.label1);
       this.Name = "SlaveView";
-      this.Size = new System.Drawing.Size(590, 435);
+      this.Size = new System.Drawing.Size(590, 426);
+      ((System.ComponentModel.ISupportInitialize)(this.jobChart)).EndInit();
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -144,5 +156,4 @@
     #endregion
 
-    private System.Windows.Forms.Label label1;
     private System.Windows.Forms.TextBox txtLog;
     private System.Windows.Forms.Button btnPauseAll;
@@ -151,4 +162,5 @@
     private System.Windows.Forms.Button btnSleep;
     private System.Windows.Forms.Button btnAbout;
+    private System.Windows.Forms.DataVisualization.Charting.Chart jobChart;
   }
 }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Views/3.4/SlaveView.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Views/3.4/SlaveView.cs	(revision 5788)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Views/3.4/SlaveView.cs	(revision 5789)
@@ -21,4 +21,5 @@
 
 using System.Windows.Forms;
+using System.Windows.Forms.DataVisualization.Charting;
 using HeuristicLab.Common;
 using HeuristicLab.Core.Views;
@@ -83,4 +84,5 @@
     void Content_SlaveStatusChanged(object sender, EventArgs<StatusCommons> e) {
       txtLog.AppendText("got a status changed object from slave\n");
+      RenderChart(e.Value);
     }
 
@@ -93,4 +95,17 @@
     }
     #endregion
+
+    private void RenderChart(StatusCommons status) {
+
+      DataPoint pJobs = new DataPoint(status.Jobs.Count, status.Jobs.Count);
+      DataPoint pJobsAborted = new DataPoint(status.JobsAborted, status.JobsAborted);
+      DataPoint pJobsDone = new DataPoint(status.JobsDone, status.JobsDone);
+      DataPoint pJobsFetched = new DataPoint(status.JobsFetched, status.JobsFetched);
+
+      jobChart.Series[0].Points.Add(pJobs);
+      jobChart.Series[0].Points.Add(pJobsAborted);
+      jobChart.Series[0].Points.Add(pJobsDone);
+      jobChart.Series[0].Points.Add(pJobsFetched);
+    }
 
     private void btnSoftPause_Click(object sender, System.EventArgs e) {
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/ConfigManager.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/ConfigManager.cs	(revision 5788)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/ConfigManager.cs	(revision 5789)
@@ -29,5 +29,5 @@
 namespace HeuristicLab.Clients.Hive.SlaveCore {
   /// <summary>
-  /// accesses the Server and sends his data (uuid, uptimes, hardware config) 
+  /// accesses the server and sends his data (uuid, uptimes, hardware config) 
   /// </summary>
   public class ConfigManager {
@@ -65,6 +65,4 @@
     /// <returns>the ClientInfo object</returns>
     public Slave GetClientInfo() {
-      //TODO: how to display connectedsince in gui?
-      //hardwareInfo.Login = WcfService.Instance.ConnectedSince;
       return slave;
     }
@@ -75,5 +73,4 @@
     /// <returns></returns>
     public StatusCommons GetStatusForClientConsole() {
-      //Todo: Locking
       StatusCommons st = new StatusCommons();
       st.ClientGuid = slave.Id;
@@ -143,5 +140,5 @@
 
     /// <summary>
-    /// MegaBytes
+    /// returns total physical memory of the machine in MB
     /// </summary>
     private static int? GetPhysicalMemory() {
@@ -154,5 +151,5 @@
 
     /// <summary>
-    /// Mhz
+    /// returns CPU frequence of the machine in Mhz
     /// </summary>
     private static int? GetCpuSpeed() {
@@ -189,5 +186,6 @@
                 }
 
-                Guid guid = new Guid(0, 0, 0, b);
+                // also get machine name and save it to the first 4 bytes                
+                Guid guid = new Guid(Environment.MachineName.GetHashCode(), 0, 0, b);
                 return guid;
               } else
@@ -239,4 +237,7 @@
     }
 
+    /// <summary>
+    /// returns free memory of machine in MB
+    /// </summary>    
     public static int GetFreeMemory() {
       int mb = 0;
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/Core.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/Core.cs	(revision 5788)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/Core.cs	(revision 5789)
@@ -438,4 +438,7 @@
     private void StartJobInAppDomain(Job myJob, JobData jobData) {
       clientCom.LogMessage("Received new job with id " + myJob.Id);
+      if (engines.ContainsKey(myJob.Id))
+        throw new Exception("Job with key " + myJob.Id + " already exists");
+
       String pluginDir = Path.Combine(PluginCache.Instance.PluginTempBaseDir, myJob.Id.ToString());
       bool pluginsPrepared = false;
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/Executor.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/Executor.cs	(revision 5788)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/Executor.cs	(revision 5789)
@@ -82,4 +82,5 @@
       catch (Exception e) {
         this.currentException = e;
+        Job_JobFailed(this, new HeuristicLab.Common.EventArgs<Exception>(e));
       }
     }
