Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Tests-3.4/HeuristicLab.Clients.Hive.Slave.Tests-3.4.csproj
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Tests-3.4/HeuristicLab.Clients.Hive.Slave.Tests-3.4.csproj	(revision 5061)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Tests-3.4/HeuristicLab.Clients.Hive.Slave.Tests-3.4.csproj	(revision 5062)
@@ -297,4 +297,5 @@
       <RequiredTargetFramework>3.5</RequiredTargetFramework>
     </Reference>
+    <Reference Include="System.Drawing" />
     <Reference Include="WeifenLuo.WinFormsUI.Docking-2.3.1">
       <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\WeifenLuo.WinFormsUI.Docking-2.3.1.dll</HintPath>
@@ -307,8 +308,9 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="Mocks\HiveServiceMock.cs" />
+    <Compile Include="Mocks\MockHiveService.cs" />
+    <Compile Include="Mocks\MockJob.cs" />
     <Compile Include="PluginLoader.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="Mocks\ServiceLocatorMock.cs" />
+    <Compile Include="Mocks\MockServiceLocator.cs" />
     <Compile Include="SlaveTest.cs" />
   </ItemGroup>
Index: anches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Tests-3.4/Mocks/HiveServiceMock.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Tests-3.4/Mocks/HiveServiceMock.cs	(revision 5061)
+++ 	(revision )
@@ -1,137 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Services.Hive.Common.ServiceContracts;
-
-namespace HeuristicLab.Clients.Hive.Slave.Tests {
-  internal class HiveServiceMock : IHiveService {
-    #region IHiveService Members
-
-    public Guid AddJob(Services.Hive.Common.DataTransfer.Job job, Services.Hive.Common.DataTransfer.JobData jobData) {
-      throw new NotImplementedException();
-    }
-
-    public Guid AddChildJob(Guid parentJobId, Services.Hive.Common.DataTransfer.Job job, Services.Hive.Common.DataTransfer.JobData jobData) {
-      throw new NotImplementedException();
-    }
-
-    public Services.Hive.Common.DataTransfer.Job GetJob(Guid jobId) {
-      return new Services.Hive.Common.DataTransfer.Job() { Exception = "test" };
-    }
-
-    public IEnumerable<Services.Hive.Common.DataTransfer.Job> GetJobs() {
-      throw new NotImplementedException();
-    }
-
-    public IEnumerable<Services.Hive.Common.DataTransfer.LightweightJob> GetLightweightJobs(IEnumerable<Guid> jobIds) {
-      throw new NotImplementedException();
-    }
-
-    public IEnumerable<Services.Hive.Common.DataTransfer.LightweightJob> GetLightweightChildJobs(Guid? parentJobId, bool recursive, bool includeParent) {
-      throw new NotImplementedException();
-    }
-
-    public Services.Hive.Common.DataTransfer.JobData GetJobData(Guid jobId) {
-      throw new NotImplementedException();
-    }
-
-    public void UpdateJob(Services.Hive.Common.DataTransfer.Job jobDto, Services.Hive.Common.DataTransfer.JobData jobDataDto) {
-      throw new NotImplementedException();
-    }
-
-    public void DeleteChildJobs(Guid parentJobId) {
-      throw new NotImplementedException();
-    }
-
-    public Services.Hive.Common.DataTransfer.Job AquireJob(Guid slaveId) {
-      throw new NotImplementedException();
-    }
-
-    public void StopJob(Guid jobId) {
-      throw new NotImplementedException();
-    }
-
-    public Services.Hive.Common.DataTransfer.Job PauseJob(Guid jobId) {
-      throw new NotImplementedException();
-    }
-
-    public Services.Hive.Common.DataTransfer.HiveExperiment GetHiveExperiment(Guid id) {
-      throw new NotImplementedException();
-    }
-
-    public IEnumerable<Services.Hive.Common.DataTransfer.HiveExperiment> GetHiveExperiments() {
-      throw new NotImplementedException();
-    }
-
-    public Guid AddHiveExperiment(Services.Hive.Common.DataTransfer.HiveExperiment hiveExperimentDto) {
-      throw new NotImplementedException();
-    }
-
-    public void UpdateHiveExperiment(Services.Hive.Common.DataTransfer.HiveExperiment hiveExperimentDto) {
-      throw new NotImplementedException();
-    }
-
-    public void DeleteHiveExperiment(Guid hiveExperimentId) {
-      throw new NotImplementedException();
-    }
-
-    public void Hello(Guid slaveId, string name, int cores, int memory) {
-      throw new NotImplementedException();
-    }
-
-    public void GoodBye() {
-      throw new NotImplementedException();
-    }
-
-    public List<Services.Hive.Common.MessageContainer> Heartbeat(Services.Hive.Common.DataTransfer.Heartbeat heartbeat) {
-      throw new NotImplementedException();
-    }
-
-    public Guid AddPlugin(Services.Hive.Common.DataTransfer.Plugin plugin, List<Services.Hive.Common.DataTransfer.PluginData> pluginData) {
-      throw new NotImplementedException();
-    }
-
-    public IEnumerable<Services.Hive.Common.DataTransfer.Plugin> GetPlugins() {
-      throw new NotImplementedException();
-    }
-
-    public IEnumerable<Services.Hive.Common.DataTransfer.PluginData> GetPluginDatas(List<Guid> pluginIds) {
-      throw new NotImplementedException();
-    }
-
-    public Guid AddSlave(Services.Hive.Common.DataTransfer.Slave slave) {
-      throw new NotImplementedException();
-    }
-
-    public Guid AddSlaveGroup(Services.Hive.Common.DataTransfer.SlaveGroup slaveGroup) {
-      throw new NotImplementedException();
-    }
-
-    public IEnumerable<Services.Hive.Common.DataTransfer.Slave> GetSlaves() {
-      throw new NotImplementedException();
-    }
-
-    public IEnumerable<Services.Hive.Common.DataTransfer.SlaveGroup> GetSlaveGroups() {
-      throw new NotImplementedException();
-    }
-
-    public void DeleteSlaveGroup(Guid clientGroupId) {
-      throw new NotImplementedException();
-    }
-
-    public void AddResourceToGroup(Guid slaveGroupId, Services.Hive.Common.DataTransfer.Resource resource) {
-      throw new NotImplementedException();
-    }
-
-    public void RemoveResourceFromGroup(Guid slaveGroupId, Guid resourceId) {
-      throw new NotImplementedException();
-    }
-
-    public void UpdateSlave(Services.Hive.Common.DataTransfer.Slave slave) {
-      throw new NotImplementedException();
-    }
-
-    #endregion
-  }
-}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Tests-3.4/Mocks/MockHiveService.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Tests-3.4/Mocks/MockHiveService.cs	(revision 5062)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Tests-3.4/Mocks/MockHiveService.cs	(revision 5062)
@@ -0,0 +1,187 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Services.Hive.Common.ServiceContracts;
+using HeuristicLab.Services.Hive.Common.DataTransfer;
+using HeuristicLab.Services.Hive.Common;
+
+namespace HeuristicLab.Clients.Hive.Slave.Tests {
+  internal class MockHiveService : IHiveService {
+    private static List<Job> jobs;
+    private static List<JobData> jobDatas;
+    private static List<HiveExperiment> hiveExperiments;
+
+    static MockHiveService() {
+      
+      byte[] data = PersistenceUtil.Serialize(new MockJob(5000));
+
+      jobs = new List<Job>();
+      jobs.Add(new Job { Id = Guid.NewGuid(), JobState = JobState.Waiting, DateCreated = DateTime.Now, CoresNeeded = 1, MemoryNeeded = 0 });
+      jobs.Add(new Job { Id = Guid.NewGuid(), JobState = JobState.Offline, DateCreated = DateTime.Now, CoresNeeded = 1, MemoryNeeded = 100, ParentJobId = jobs.First().Id });
+      jobs.Add(new Job { Id = Guid.NewGuid(), JobState = JobState.Offline, DateCreated = DateTime.Now, CoresNeeded = 1, MemoryNeeded = 1024, ParentJobId = jobs.First().Id });
+      jobs.Add(new Job { Id = Guid.NewGuid(), JobState = JobState.Offline, DateCreated = DateTime.Now, CoresNeeded = 1, MemoryNeeded = 4096, ParentJobId = jobs.First().Id });
+
+      jobDatas = new List<JobData>();
+      foreach (var job in jobs) {
+        jobDatas.Add(new JobData() { JobId = job.Id, Data = data });
+      }
+
+      hiveExperiments = new List<HiveExperiment>();
+      hiveExperiments.Add(new HiveExperiment() { Id = Guid.NewGuid(), Name = "Hive Exp 1", Description = "", RootJobId = jobs[0].Id });
+    }
+
+    #region Job Methods
+    public Guid AddJob(Job job, JobData jobData) {
+      job.Id = Guid.NewGuid();
+      jobData.JobId = job.Id;
+      jobs.Add(job);
+      jobDatas.Add(jobData);
+      return job.Id;
+    }
+
+    public Guid AddChildJob(Guid parentJobId, Job job, JobData jobData) {
+      job.Id = Guid.NewGuid();
+      job.ParentJobId = parentJobId;
+      jobData.JobId = job.Id;
+      jobs.Add(job);
+      jobDatas.Add(jobData);
+      return job.Id;
+    }
+
+    public Job GetJob(Guid jobId) {
+      return jobs.Where(j => j.Id == jobId).SingleOrDefault();
+    }
+
+    public IEnumerable<Job> GetJobs() {
+      return jobs;
+    }
+
+    public IEnumerable<LightweightJob> GetLightweightJobs(IEnumerable<Guid> jobIds) {
+      return jobs.Select(j => new LightweightJob(j)); // not real
+    }
+
+    public IEnumerable<LightweightJob> GetLightweightChildJobs(Guid? parentJobId, bool recursive, bool includeParent) {
+      return jobs.Where(j => j.ParentJobId.HasValue).Select(j => new LightweightJob(j));
+    }
+
+    public JobData GetJobData(Guid jobId) {
+      return jobDatas.Where(jd => jd.JobId == jobId).SingleOrDefault();
+    }
+
+    public void UpdateJob(Job jobDto, JobData jobDataDto) {
+      // do nothing
+    }
+
+    public void DeleteChildJobs(Guid parentJobId) {
+      // do nothing
+    }
+    #endregion
+
+    #region JobControl Methods
+    public Job AquireJob(Guid slaveId) {
+      var job = jobs.First();
+      job.SlaveId = slaveId;
+      return job;
+    }
+
+    public void StopJob(Guid jobId) {
+      // do nothing
+    }
+
+    public void PauseJob(Guid jobId) {
+      // do nothing
+    }
+    #endregion
+
+    #region HiveExperiment Methods
+    public HiveExperiment GetHiveExperiment(Guid id) {
+      return hiveExperiments.Where(he => he.Id == id).SingleOrDefault();
+    }
+
+    public IEnumerable<HiveExperiment> GetHiveExperiments() {
+      return hiveExperiments;
+    }
+
+    public Guid AddHiveExperiment(HiveExperiment hiveExperimentDto) {
+      hiveExperimentDto.Id = Guid.NewGuid();
+      hiveExperiments.Add(hiveExperimentDto);
+      return hiveExperimentDto.Id;
+    }
+
+    public void UpdateHiveExperiment(HiveExperiment hiveExperimentDto) {
+      // do nothing
+    }
+
+    public void DeleteHiveExperiment(Guid hiveExperimentId) {
+      // do nothing
+    }
+    #endregion
+
+    #region Login Methods
+    public void Hello(Guid slaveId, string name, int cores, int memory) {
+      // do nothing
+    }
+
+    public void GoodBye() {
+      // do nothing
+    }
+
+    public List<MessageContainer> Heartbeat(Heartbeat heartbeat) {
+      // todo
+      return new List<MessageContainer>();
+    }
+    #endregion
+
+    #region Plugin Methods
+    public Guid AddPlugin(Plugin plugin, List<PluginData> pluginData) {
+      // todo
+      return Guid.NewGuid();
+    }
+
+    public IEnumerable<Plugin> GetPlugins() {
+      // todo
+      return new List<Plugin>();
+    }
+
+    public IEnumerable<PluginData> GetPluginDatas(List<Guid> pluginIds) {
+      // todo
+      return new List<PluginData>();
+    }
+    #endregion
+
+    #region Slave Methods
+    public Guid AddSlave(Services.Hive.Common.DataTransfer.Slave slave) {
+      throw new NotImplementedException();
+    }
+
+    public Guid AddSlaveGroup(SlaveGroup slaveGroup) {
+      throw new NotImplementedException();
+    }
+
+    public IEnumerable<Services.Hive.Common.DataTransfer.Slave> GetSlaves() {
+      throw new NotImplementedException();
+    }
+
+    public IEnumerable<SlaveGroup> GetSlaveGroups() {
+      throw new NotImplementedException();
+    }
+
+    public void DeleteSlaveGroup(Guid clientGroupId) {
+      throw new NotImplementedException();
+    }
+
+    public void AddResourceToGroup(Guid slaveGroupId, Resource resource) {
+      throw new NotImplementedException();
+    }
+
+    public void RemoveResourceFromGroup(Guid slaveGroupId, Guid resourceId) {
+      throw new NotImplementedException();
+    }
+
+    public void UpdateSlave(Services.Hive.Common.DataTransfer.Slave slave) {
+      throw new NotImplementedException();
+    }
+    #endregion
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Tests-3.4/Mocks/MockJob.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Tests-3.4/Mocks/MockJob.cs	(revision 5062)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Tests-3.4/Mocks/MockJob.cs	(revision 5062)
@@ -0,0 +1,152 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Core;
+using HeuristicLab.Common;
+using System.Drawing;
+using System.Threading;
+
+namespace HeuristicLab.Clients.Hive.Slave.Tests {
+  [Item("Mock Job", "Represents mocked Job which just SpinWaits.")]
+  [StorableClass]
+  public class MockJob : NamedItem, IJob {
+    public virtual bool IsParallelizable {
+      get { return false; }
+    }
+
+    [Storable]
+    protected bool computeInParallel;
+    public bool ComputeInParallel {
+      get { return computeInParallel; }
+      set {
+        if (computeInParallel != value) {
+          computeInParallel = value;
+          OnComputeInParallelChanged();
+        }
+      }
+    }
+
+    [Storable]
+    private int indexInParentOptimizerList = -1;
+    public int IndexInParentOptimizerList {
+      get { return indexInParentOptimizerList; }
+      set { this.indexInParentOptimizerList = value; }
+    }
+
+    [Storable]
+    private bool collectChildJobs;
+    public bool CollectChildJobs {
+      get { return collectChildJobs; }
+      set { collectChildJobs = value; }
+    }
+
+    private int ms = 1000; //ms
+    public MockJob(int ms) {
+      this.ms = ms;
+    }
+    public MockJob() { }
+    [StorableConstructor]
+    protected MockJob(bool deserializing) { }
+    protected MockJob(MockJob original, Cloner cloner) : base(original, cloner) {
+      this.ComputeInParallel = original.ComputeInParallel;
+      this.IndexInParentOptimizerList = original.IndexInParentOptimizerList;
+      this.CollectChildJobs = original.CollectChildJobs;
+      this.ExecutionTime = original.executionTime;
+      this.ExecutionState = original.executionState;
+      this.ms = original.ms;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MockJob(this, cloner);
+    }
+
+    [Storable]
+    private ExecutionState executionState;
+    public virtual ExecutionState ExecutionState {
+      get { return executionState; }
+      set {
+        if (executionState != value) {
+          this.executionState = value;
+          OnExecutionStateChanged();
+        }
+      }
+    }
+
+    [Storable]
+    private TimeSpan executionTime;
+    public TimeSpan ExecutionTime {
+      get { return executionTime; }
+      set {
+        if (executionTime != value) {
+          executionTime = value;
+          OnExecutionTimeChanged();
+        }
+      }
+    }
+
+    public virtual void Prepare() {
+      this.ExecutionState = Core.ExecutionState.Prepared;
+    }
+
+    public virtual void Start() {
+      DateTime start = DateTime.Now;
+      do {
+        Thread.SpinWait(1000);
+        this.ExecutionTime = DateTime.Now - start;
+      } while (ExecutionTime.TotalMilliseconds < ms);
+      this.ExecutionState = Core.ExecutionState.Stopped;
+    }
+
+    public virtual void Pause() {
+      this.ExecutionState = Core.ExecutionState.Paused;
+    }
+
+    public virtual void Stop() {
+      ExecutionState = Core.ExecutionState.Stopped;
+    }
+
+    public virtual void Resume(IEnumerable<IJob> childJobs) {
+      ExecutionState = Core.ExecutionState.Stopped;
+    }
+
+    #region Events
+    public event EventHandler<EventArgs<IJob>> NewChildJob;
+    protected virtual void OnNewChildJob(IJob job) {
+      EventHandler<EventArgs<IJob>> handler = NewChildJob;
+      if (handler != null) handler(this, new EventArgs<IJob>(job));
+    }
+
+    public event EventHandler WaitForChildJobs;
+    protected virtual void OnWaitForChildJobs() {
+      EventHandler handler = WaitForChildJobs;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler DeleteChildJobs;
+    protected virtual void OnDeleteChildJobs() {
+      EventHandler handler = DeleteChildJobs;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ComputeInParallelChanged;
+    protected virtual void OnComputeInParallelChanged() {
+      EventHandler handler = ComputeInParallelChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ExecutionTimeChanged;
+    protected virtual void OnExecutionTimeChanged() {
+      EventHandler handler = ExecutionTimeChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ExecutionStateChanged;
+    protected virtual void OnExecutionStateChanged() {
+      EventHandler handler = ExecutionStateChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    #endregion
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Tests-3.4/Mocks/MockServiceLocator.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Tests-3.4/Mocks/MockServiceLocator.cs	(revision 5062)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Tests-3.4/Mocks/MockServiceLocator.cs	(revision 5062)
@@ -0,0 +1,15 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Clients.Common;
+using HeuristicLab.Services.Hive.Common.ServiceContracts;
+
+namespace HeuristicLab.Clients.Hive.Slave.Tests {
+  internal class MockServiceLocator : IServiceLocator {
+
+    public Disposable<IHiveService> GetService() {
+      return new Disposable<IHiveService>(new MockHiveService());
+    }
+  }
+}
Index: anches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Tests-3.4/Mocks/ServiceLocatorMock.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Tests-3.4/Mocks/ServiceLocatorMock.cs	(revision 5061)
+++ 	(revision )
@@ -1,15 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Clients.Common;
-using HeuristicLab.Services.Hive.Common.ServiceContracts;
-
-namespace HeuristicLab.Clients.Hive.Slave.Tests {
-  internal class ServiceLocatorMock : IServiceLocator {
-
-    public Disposable<IHiveService> GetService() {
-      return new Disposable<IHiveService>(new HiveServiceMock());
-    }
-  }
-}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Tests-3.4/SlaveTest.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Tests-3.4/SlaveTest.cs	(revision 5061)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Tests-3.4/SlaveTest.cs	(revision 5062)
@@ -13,5 +13,5 @@
     public static void MyClassInitialize(TestContext testContext) {
       PluginLoader.pluginAssemblies.Any();
-      ServiceLocator.Instance = new ServiceLocatorMock();
+      ServiceLocator.Instance = new MockServiceLocator();
     }
 
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/SlaveDummy.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/SlaveDummy.cs	(revision 5061)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.4/SlaveDummy.cs	(revision 5062)
@@ -6,4 +6,5 @@
 namespace HeuristicLab.Clients.Hive.Slave {
   public class SlaveDummy {
+
     public void SayHello() {
       using (var service = ServiceLocator.Instance.GetService()) {
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/HeuristicLab.Clients.Hive-3.4.csproj
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/HeuristicLab.Clients.Hive-3.4.csproj	(revision 5061)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/HeuristicLab.Clients.Hive-3.4.csproj	(revision 5062)
@@ -83,12 +83,12 @@
     <Compile Include="Exceptions\JobResultPollingException.cs" />
     <Compile Include="Exceptions\OptimizerNotFoundException.cs" />
-    <Compile Include="HiveExperiment\PluginClient.cs" />
+    <Compile Include="ExperimentManager\PluginClient.cs" />
     <Compile Include="IServiceLocator.cs" />
     <Compile Include="Jobs\OptimizerJob.cs" />
     <Compile Include="HeuristicLabClientsHivePlugin.cs" />
-    <Compile Include="HiveExperiment\HiveExperimentManagerClient.cs" />
-    <Compile Include="HiveExperiment\HiveJobClient.cs" />
-    <Compile Include="HiveExperiment\HiveExperimentClient.cs" />
-    <Compile Include="HiveExperiment\JobResultPoller.cs" />
+    <Compile Include="ExperimentManager\HiveExperimentManagerClient.cs" />
+    <Compile Include="ExperimentManager\HiveJobClient.cs" />
+    <Compile Include="ExperimentManager\HiveExperimentClient.cs" />
+    <Compile Include="ExperimentManager\JobResultPoller.cs" />
     <Compile Include="Progress\IProgress.cs" />
     <Compile Include="Progress\IProgressReporter.cs" />
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/Jobs/OptimizerJob.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/Jobs/OptimizerJob.cs	(revision 5061)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/Jobs/OptimizerJob.cs	(revision 5062)
@@ -32,4 +32,8 @@
   [StorableClass]
   public class OptimizerJob : DeepCloneable, IJob {
+    public virtual bool IsParallelizable {
+      get { return this.Optimizer is Optimization.Experiment || this.Optimizer is BatchRun; }
+    }
+
     [Storable]
     protected IOptimizer optimizer;
@@ -81,6 +85,5 @@
       this.log = new Log();
     }
-    public OptimizerJob(IOptimizer optimizer)
-      : this() {
+    public OptimizerJob(IOptimizer optimizer) : this() {
       this.Optimizer = optimizer;
 
@@ -95,6 +98,5 @@
     [StorableConstructor]
     protected OptimizerJob(bool deserializing) { }
-    protected OptimizerJob(OptimizerJob original, Cloner cloner)
-      : base(original, cloner) {
+    protected OptimizerJob(OptimizerJob original, Cloner cloner) : base(original, cloner) {
       this.Optimizer = cloner.Clone(original.Optimizer);
       this.log = cloner.Clone(original.Log);
@@ -135,8 +137,4 @@
     public TimeSpan ExecutionTime {
       get { return optimizer.ExecutionTime; }
-    }
-
-    public virtual void Run() {
-      throw new NotSupportedException();
     }
 
@@ -152,4 +150,8 @@
         optimizer.Start();
       }
+    }
+
+    public void Pause() {
+      throw new NotImplementedException();
     }
 
@@ -301,4 +303,14 @@
       if (handler != null) handler(this, new CancelEventArgs<string>(value, cancel));
     }
+    public event EventHandler ExecutionTimeChanged;
+    protected virtual void OnExecutionTimeChanged() {
+      EventHandler handler = ExecutionTimeChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    public event EventHandler ExecutionStateChanged;
+    protected virtual void OnExecutionStateChanged() {
+      EventHandler handler = ExecutionStateChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
     #endregion
 
@@ -330,9 +342,4 @@
       return Name;
     }
-
-    public virtual bool IsParallelizable {
-      get { return this.Optimizer is Optimization.Experiment || this.Optimizer is BatchRun; }
-    }
-
   }
 }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Hive-3.4.sln
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Hive-3.4.sln	(revision 5061)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Hive-3.4.sln	(revision 5062)
@@ -52,5 +52,5 @@
 	EndProjectSection
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Clients.Hive.Slave.Tests-3.4", "HeuristicLab.Clients.Hive.Slave.Tests-3.4\HeuristicLab.Clients.Hive.Slave.Tests-3.4.csproj", "{C4CBD11E-1B83-464A-B0AD-0DC0FF7E57AA}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Clients.Hive.Slave.Tests-3.4", "HeuristicLab.Clients.Hive.Slave.Tests\HeuristicLab.Clients.Hive.Slave.Tests-3.4.csproj", "{C4CBD11E-1B83-464A-B0AD-0DC0FF7E57AA}"
 EndProject
 Global
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Hive/3.4/IJob.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Hive/3.4/IJob.cs	(revision 5061)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Hive/3.4/IJob.cs	(revision 5062)
@@ -27,4 +27,5 @@
 namespace HeuristicLab.Hive {
   public interface IJob : INamedItem {
+
     TimeSpan ExecutionTime { get; }
 
@@ -41,15 +42,26 @@
     /// </summary>
     bool ComputeInParallel { get; set; }
+
+    /// <summary>
+    /// If this is set to true, the job should be Resumed with the child-jobs attatched instead of Started
+    /// </summary>
+    bool CollectChildJobs { get; set; }
+    
+    void Prepare();
+
+    void Start();
+
+    void Pause();
+
+    void Stop();
+
+    void Resume(IEnumerable<IJob> childJobs);
+
     event EventHandler ComputeInParallelChanged;
 
-    void Run();
-    void Prepare();
-    void Start();
-    void Stop();
-    void Resume(IEnumerable<IJob> childJobs);
+    event EventHandler ExecutionTimeChanged;
 
-    event EventHandler JobStopped;
-    event EventHandler JobFailed;
-
+    event EventHandler ExecutionStateChanged;
+        
     /// <summary>
     /// When this event occurs the job wants to sleep until all his child jobs are finished
@@ -67,8 +79,5 @@
     event EventHandler DeleteChildJobs;
     
-    /// <summary>
-    /// If this is set to true, the job should be Resumed with the child-jobs attatched instead of Started
-    /// </summary>
-    bool CollectChildJobs { get; set; }
+
   }
 }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Common/3.4/ServiceContracts/IHiveService.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Common/3.4/ServiceContracts/IHiveService.cs	(revision 5061)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Common/3.4/ServiceContracts/IHiveService.cs	(revision 5062)
@@ -35,12 +35,6 @@
     JobData GetJobData(Guid jobId);
 
-    //[OperationContract]
-    //Stream GetJobDataStreamed(Guid jobId);
-
     [OperationContract]
     void UpdateJob(Job jobDto, JobData jobDataDto);
-        
-    //[OperationContract] // formerly StoreFinishedJobResultStreamed
-    //void UpdateJobDataStreamed(Stream stream);
 
     [OperationContract]
@@ -49,25 +43,4 @@
     [OperationContract] // new method: appropriate job is choosen and set to 'calculating'. the slave is responsible for requesting the jobData. Server should wait some timeout until he redistributes the job
     Job AquireJob(Guid slaveId);
-
-    //[OperationContract] // dump?
-    //Job GetJobByIdWithDetails(Guid jobId);
-
-    //[OperationContract] dump?
-    //Job AddNewJob(JobData job);
-
-    //[OperationContract]
-    //void RemoveJob(Guid jobId);
-
-    //[OperationContract] // GetJobForCalculation (was this used?
-    //Job GetJob(Guid slaveId);
-
-    //[OperationContract] --> replaced by UpdateJob
-    //void StoreFinishedJobResult(Guid slaveId, Guid jobId, byte[] result, TimeSpan executionTime, string exception);
-
-    //[OperationContract] dump this! a slave should just check if job is still offline, if so it can submit the finished job, otherwise throw away! its a rare case that a slave reawakes with a finished job
-    //void IsJobStillNeeded(Guid jobId);
-
-    //[OperationContract] // dump?
-    //Job AddJobWithGroupStrings(JobData jobObj, IEnumerable<string> groups);
     #endregion
 
@@ -77,5 +50,5 @@
 
     [OperationContract]
-    Job PauseJob(Guid jobId);
+    void PauseJob(Guid jobId);
     #endregion
 
@@ -101,19 +74,4 @@
 
     #region Login Methods
-    // rename "Login"-methods to "Register" or "SayHello", since its only purpose is to send Slave-Info (is Login() should not be used anymore)
-    /// <summary>
-    /// Method can be used to check if security credentials are valid, but it does not do anything
-    /// </summary>
-    /// <returns></returns>
-    //[OperationContract]
-    //void Login();
-    ///// <summary>
-    ///// This method registers the slave and marks it as online
-    ///// </summary>
-    //[OperationContract]
-    //void Login(Slave slave);
-    //[OperationContract]
-    //void Logout(Guid clientId);
-
     [OperationContract]
     void Hello(Guid slaveId, string name, int cores, int memory);
@@ -136,17 +94,5 @@
     IEnumerable<PluginData> GetPluginDatas(List<Guid> pluginIds);
     #endregion
-
-    // slave should be unaware of calendar. only server decides based on calendar if slave gets jobs
-    //#region Calendar Methods
-    //[OperationContract]
-    //IEnumerable<Appointment> GetCalendar(Guid slaveId);
-    //[OperationContract]
-    //void SetCalendarStatus(Guid clientId, CalendarState state);
-    //[OperationContract]
-    //IEnumerable<Appointment> GetUptimeCalendarForResource(Guid guid);
-    //[OperationContract]
-    //void SetUptimeCalendarForResource(Guid guid, IEnumerable<Appointment> appointments, bool isForced);
-    //#endregion
-
+    
     #region Slave Methods
     [OperationContract]
@@ -160,7 +106,7 @@
     
     [OperationContract]
-    //[ServiceKnownType(typeof(Resource))] - not sure about those
-    //[ServiceKnownType(typeof(Slave))]
-    //[ServiceKnownType(typeof(SlaveGroup))]
+    [ServiceKnownType(typeof(Resource))]
+    [ServiceKnownType(typeof(Slave))]
+    [ServiceKnownType(typeof(SlaveGroup))]
     IEnumerable<SlaveGroup> GetSlaveGroups();
 
@@ -169,7 +115,7 @@
 
     [OperationContract]
-    //[ServiceKnownType(typeof(Resource))]
-    //[ServiceKnownType(typeof(Slave))]
-    //[ServiceKnownType(typeof(SlaveGroup))]
+    [ServiceKnownType(typeof(Resource))]
+    [ServiceKnownType(typeof(Slave))]
+    [ServiceKnownType(typeof(SlaveGroup))]
     void AddResourceToGroup(Guid slaveGroupId, Resource resource);
 
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.4/HiveService.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.4/HiveService.cs	(revision 5061)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.4/HiveService.cs	(revision 5062)
@@ -119,5 +119,5 @@
       }
     }
-    public Job PauseJob(Guid jobId) {
+    public void PauseJob(Guid jobId) {
       using (trans.OpenTransaction()) {
         throw new NotImplementedException();
Index: /branches/HeuristicLab.Hive-3.4/sources/TraceAndTestImpact.testsettings
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/TraceAndTestImpact.testsettings	(revision 5062)
+++ /branches/HeuristicLab.Hive-3.4/sources/TraceAndTestImpact.testsettings	(revision 5062)
@@ -0,0 +1,21 @@
+﻿<?xml version="1.0" encoding="UTF-8"?>
+<TestSettings name="Trace and Test Impact" id="5a7d4ac6-f54c-4e10-8ce3-f216db4fa8a2" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
+  <Description>These are test settings for Trace and Test Impact.</Description>
+  <Execution>
+    <TestTypeSpecific />
+    <AgentRule name="Execution Agents">
+      <DataCollectors>
+        <DataCollector uri="datacollector://microsoft/SystemInfo/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TestTools.DataCollection.SystemInfo.SystemInfoDataCollector, Microsoft.VisualStudio.TestTools.DataCollection.SystemInfo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="System Information">
+        </DataCollector>
+        <DataCollector uri="datacollector://microsoft/ActionLog/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TestTools.ManualTest.ActionLog.ActionLogPlugin, Microsoft.VisualStudio.TestTools.ManualTest.ActionLog, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="Actions">
+        </DataCollector>
+        <DataCollector uri="datacollector://microsoft/HttpProxy/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.HttpProxyCollector, Microsoft.VisualStudio.TraceCollector, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="ASP.NET Client Proxy for IntelliTrace and Test Impact">
+        </DataCollector>
+        <DataCollector uri="datacollector://microsoft/TestImpact/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.TestImpactDataCollector, Microsoft.VisualStudio.TraceCollector, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="Test Impact">
+        </DataCollector>
+        <DataCollector uri="datacollector://microsoft/TraceDebugger/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.TraceDebuggerDataCollector, Microsoft.VisualStudio.TraceCollector, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="IntelliTrace">
+        </DataCollector>
+      </DataCollectors>
+    </AgentRule>
+  </Execution>
+</TestSettings>
