Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/RefreshableHiveExperimentView.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/RefreshableHiveExperimentView.cs	(revision 6218)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.4/ExperimentManager/RefreshableHiveExperimentView.cs	(revision 6219)
@@ -60,4 +60,5 @@
       Content.IsControllableChanged += new EventHandler(Content_IsControllableChanged);
       Content.JobStatisticsChanged += new EventHandler(Content_JobStatisticsChanged);
+      Content.ExceptionOccured += new EventHandler<EventArgs<Exception>>(Content_ExceptionOccured);
     }
 
@@ -67,4 +68,5 @@
       Content.IsControllableChanged -= new EventHandler(Content_IsControllableChanged);
       Content.JobStatisticsChanged -= new EventHandler(Content_JobStatisticsChanged);
+      Content.ExceptionOccured -= new EventHandler<EventArgs<Exception>>(Content_ExceptionOccured);
       base.DeregisterContentEvents();
     }
@@ -252,4 +254,10 @@
       }
     }
+    private void Content_ExceptionOccured(object sender, EventArgs<Exception> e) {
+      if (Content.IsControllable) {
+        // show error dialog only if Controllable (otherwise it should continue trying without an error dialog (e.g. HiveEngine))
+        ErrorHandling.ShowErrorDialog(this, e.Value);
+      }
+    }
     #endregion
 
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ExperimentManager/ConcurrentJobDownloader.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ExperimentManager/ConcurrentJobDownloader.cs	(revision 6218)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ExperimentManager/ConcurrentJobDownloader.cs	(revision 6219)
@@ -2,4 +2,5 @@
 using System.Threading;
 using System.Threading.Tasks;
+using HeuristicLab.Common;
 using HeuristicLab.Hive;
 
@@ -20,5 +21,5 @@
     }
 
-    public void DownloadJob(Job job, Action<Job, T, Exception> onFinishedAction) {
+    public void DownloadJob(Job job, Action<Job, T> onFinishedAction) {
       Task<T> task = Task<JobData>.Factory.StartNew((x) => DownloadJob(x), job.Id)
                                      .ContinueWith((x) => DeserializeJob(x.Result));
@@ -27,9 +28,11 @@
     }
 
-    private void OnJobFinished(Job job, Task<T> task, Action<Job, T, Exception> onFinishedAction) {
-      onFinishedAction(job, task.Result, null);
+    private void OnJobFinished(Job job, Task<T> task, Action<Job, T> onFinishedAction) {
+      onFinishedAction(job, task.Result);
     }
-    private void OnJobFailed(Job job, Task<T> task, Action<Job, T, Exception> onFinishedAction) {
-      onFinishedAction(job, task.Result, task.Exception.Flatten());
+    private void OnJobFailed(Job job, Task<T> task, Action<Job, T> onFinishedAction) {
+      task.Exception.Flatten().Handle((e) => { return true; });
+      OnExceptionOccured(task.Exception.Flatten());
+      onFinishedAction(job, null);
     }
 
@@ -64,4 +67,11 @@
     private void TaskScheduler_UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e) {
       e.SetObserved(); // avoid crash of process because task crashes. first exception found is handled in Results property
+      OnExceptionOccured(new HiveException("Unobserved Exception in ConcurrentJobDownloader", e.Exception));
+    }
+
+    public event EventHandler<EventArgs<Exception>> ExceptionOccured;
+    private void OnExceptionOccured(Exception exception) {
+      var handler = ExceptionOccured;
+      if (handler != null) handler(this, new EventArgs<Exception>(exception));
     }
   }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ExperimentManager/ExperimentManagerClient.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ExperimentManager/ExperimentManagerClient.cs	(revision 6218)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ExperimentManager/ExperimentManagerClient.cs	(revision 6219)
@@ -192,10 +192,10 @@
 
     #region Upload Experiment
-    private void UploadExperiment(RefreshableHiveExperiment optimizerHiveExperiment) {
+    private void UploadExperiment(RefreshableHiveExperiment refreshableHiveExperiment) {
       try {
-        optimizerHiveExperiment.HiveExperiment.Progress = new Progress("Connecting to server...");
-        optimizerHiveExperiment.HiveExperiment.IsProgressing = true;
+        refreshableHiveExperiment.HiveExperiment.Progress = new Progress("Connecting to server...");
+        refreshableHiveExperiment.HiveExperiment.IsProgressing = true;
         ServiceLocator.Instance.CallHiveService(service => {
-          IEnumerable<string> resourceNames = ToResourceNameList(optimizerHiveExperiment.HiveExperiment.ResourceNames);
+          IEnumerable<string> resourceNames = ToResourceNameList(refreshableHiveExperiment.HiveExperiment.ResourceNames);
           var resourceIds = new List<Guid>();
           foreach (var resourceName in resourceNames) {
@@ -207,17 +207,17 @@
           }
 
-          foreach (OptimizerHiveJob hiveJob in optimizerHiveExperiment.HiveExperiment.HiveJobs.OfType<OptimizerHiveJob>()) {
+          foreach (OptimizerHiveJob hiveJob in refreshableHiveExperiment.HiveExperiment.HiveJobs.OfType<OptimizerHiveJob>()) {
             hiveJob.SetIndexInParentOptimizerList(null);
           }
 
           // upload HiveExperiment
-          optimizerHiveExperiment.HiveExperiment.Progress.Status = "Uploading HiveExperiment...";
-          optimizerHiveExperiment.HiveExperiment.Id = service.AddHiveExperiment(optimizerHiveExperiment.HiveExperiment);
-
-          int totalJobCount = optimizerHiveExperiment.HiveExperiment.GetAllHiveJobs().Count();
+          refreshableHiveExperiment.HiveExperiment.Progress.Status = "Uploading HiveExperiment...";
+          refreshableHiveExperiment.HiveExperiment.Id = service.AddHiveExperiment(refreshableHiveExperiment.HiveExperiment);
+
+          int totalJobCount = refreshableHiveExperiment.HiveExperiment.GetAllHiveJobs().Count();
           int jobCount = 0;
 
           // upload plugins
-          optimizerHiveExperiment.HiveExperiment.Progress.Status = "Uploading plugins...";
+          refreshableHiveExperiment.HiveExperiment.Progress.Status = "Uploading plugins...";
           this.OnlinePlugins = service.GetPlugins();
           this.AlreadyUploadedPlugins = new List<Plugin>();
@@ -226,15 +226,15 @@
 
           // upload jobs
-          optimizerHiveExperiment.HiveExperiment.Progress.Status = "Uploading jobs...";
-
-          foreach (HiveJob hiveJob in optimizerHiveExperiment.HiveExperiment.HiveJobs) {
-            UploadJobWithChildren(optimizerHiveExperiment.HiveExperiment.Progress, service, hiveJob, null, resourceIds, ref jobCount, totalJobCount, configFilePlugin.Id, optimizerHiveExperiment.HiveExperiment.UseLocalPlugins, optimizerHiveExperiment.HiveExperiment.Id);
+          refreshableHiveExperiment.HiveExperiment.Progress.Status = "Uploading jobs...";
+
+          foreach (HiveJob hiveJob in refreshableHiveExperiment.HiveExperiment.HiveJobs) {
+            UploadJobWithChildren(refreshableHiveExperiment.HiveExperiment.Progress, service, hiveJob, null, resourceIds, ref jobCount, totalJobCount, configFilePlugin.Id, refreshableHiveExperiment.HiveExperiment.UseLocalPlugins, refreshableHiveExperiment.HiveExperiment.Id, refreshableHiveExperiment.Log);
           }
 
-          if (optimizerHiveExperiment.RefreshAutomatically) optimizerHiveExperiment.StartResultPolling();
+          if (refreshableHiveExperiment.RefreshAutomatically) refreshableHiveExperiment.StartResultPolling();
         });
       }
       finally {
-        optimizerHiveExperiment.HiveExperiment.IsProgressing = false;
+        refreshableHiveExperiment.HiveExperiment.IsProgressing = false;
       }
     }
@@ -268,5 +268,5 @@
     /// <param name="parentHiveJob">shall be null if its the root job</param>
     /// <param name="groups"></param>
-    private void UploadJobWithChildren(IProgress progress, IHiveService service, HiveJob hiveJob, HiveJob parentHiveJob, IEnumerable<Guid> groups, ref int jobCount, int totalJobCount, Guid configPluginId, bool useLocalPlugins, Guid hiveExperimentId) {
+    private void UploadJobWithChildren(IProgress progress, IHiveService service, HiveJob hiveJob, HiveJob parentHiveJob, IEnumerable<Guid> groups, ref int jobCount, int totalJobCount, Guid configPluginId, bool useLocalPlugins, Guid hiveExperimentId, ILog log) {
       jobCount++;
       progress.Status = string.Format("Serializing job {0} of {1}", jobCount, totalJobCount);
@@ -292,8 +292,8 @@
       hiveJob.Job.HiveExperimentId = hiveExperimentId;
 
-      progress.Status = string.Format("Uploading job {0} of {1} ({2} kb)", jobCount, totalJobCount, jobData.Data.Count() / 1024);
+      progress.Status = string.Format("Uploading job {0} of {1} ({2} kb, {3} objects)", jobCount, totalJobCount, jobData.Data.Count() / 1024, hiveJob.ItemJob.GetObjectGraphObjects().Count());
       progress.ProgressValue = (double)jobCount / totalJobCount;
 
-
+      log.LogMessage(progress.Status);
       TryAndRepeat(() => {
         if (parentHiveJob != null) {
@@ -305,5 +305,5 @@
 
       foreach (HiveJob child in hiveJob.ChildHiveJobs) {
-        UploadJobWithChildren(progress, service, child, hiveJob, groups, ref jobCount, totalJobCount, configPluginId, useLocalPlugins, hiveExperimentId);
+        UploadJobWithChildren(progress, service, child, hiveJob, groups, ref jobCount, totalJobCount, configPluginId, useLocalPlugins, hiveExperimentId, log);
       }
     }
@@ -331,4 +331,8 @@
           hiveExperiment.Progress.Status = string.Format("Downloading/deserializing jobs... ({0}/{1} finished)", downloader.FinishedCount, totalJobCount);
           Thread.Sleep(500);
+
+          if (downloader.IsFaulted) {
+            throw downloader.Exception;
+          }
         }
         IDictionary<Guid, HiveJob> allHiveJobs = downloader.Results;
@@ -393,10 +397,11 @@
     /// </summary>
     public static void TryAndRepeat(Action action, int repetitions, string errorMessage) {
-      try { action(); }
-      catch (Exception e) {
-        repetitions--;
-        if (repetitions == 0)
-          throw new HiveException(errorMessage, e);
-        TryAndRepeat(action, repetitions, errorMessage);
+      while (true) {
+        try { action(); return; }
+        catch (Exception e) {
+          if (repetitions == 0)
+            throw new HiveException(errorMessage, e);
+          repetitions--;
+        }
       }
     }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ExperimentManager/HiveJobDownloader.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ExperimentManager/HiveJobDownloader.cs	(revision 6218)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ExperimentManager/HiveJobDownloader.cs	(revision 6219)
@@ -25,4 +25,5 @@
 using HeuristicLab.Clients.Hive.ExperimentManager;
 using HeuristicLab.Clients.Hive.Jobs;
+using HeuristicLab.Common;
 using HeuristicLab.Hive;
 
@@ -32,4 +33,6 @@
     private ConcurrentJobDownloader<ItemJob> jobDownloader;
     private IDictionary<Guid, HiveJob> results;
+    private bool exceptionOccured = false;
+    private Exception currentException;
 
     public bool IsFinished {
@@ -39,4 +42,16 @@
     }
 
+    public bool IsFaulted {
+      get {
+        return exceptionOccured;
+      }
+    }
+
+    public Exception Exception {
+      get {
+        return currentException;
+      }
+    }
+    
     public int FinishedCount {
       get {
@@ -54,7 +69,8 @@
       this.jobIds = jobIds;
       this.jobDownloader = new ConcurrentJobDownloader<ItemJob>(2, 2);
+      this.jobDownloader.ExceptionOccured += new EventHandler<EventArgs<Exception>>(jobDownloader_ExceptionOccured);
       this.results = new Dictionary<Guid, HiveJob>();
     }
-
+    
     public void StartAsync() {
       foreach (Guid jobId in jobIds) {
@@ -62,8 +78,5 @@
 
         jobDownloader.DownloadJob(job,
-          (localJob, itemJob, exception) => {
-            if (exception != null) {
-              throw new ConcurrentJobDownloaderException("Downloading job failed", exception);
-            }
+          (localJob, itemJob) => {
             if (localJob != null && itemJob != null) {
               HiveJob hiveJob;
@@ -79,4 +92,16 @@
       }      
     }
+
+    private void jobDownloader_ExceptionOccured(object sender, EventArgs<Exception> e) {
+      OnExceptionOccured(e.Value);
+    }
+
+    public event EventHandler<EventArgs<Exception>> ExceptionOccured;
+    private void OnExceptionOccured(Exception exception) {
+      this.exceptionOccured = true;
+      this.currentException = exception;
+      var handler = ExceptionOccured;
+      if (handler != null) handler(this, new EventArgs<Exception>(exception));
+    }
   }
 }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ExperimentManager/JobResultPoller.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ExperimentManager/JobResultPoller.cs	(revision 6218)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ExperimentManager/JobResultPoller.cs	(revision 6219)
@@ -54,4 +54,11 @@
     }
 
+    private bool autoResumeOnException = false;
+    public bool AutoResumeOnException {
+      get { return autoResumeOnException; }
+      set { autoResumeOnException = value; }
+    }
+
+
     public JobResultPoller(Guid hiveExperimentId, TimeSpan interval) {
       this.isPolling = false;
@@ -61,12 +68,11 @@
 
     public void Start() {
+      IsPolling = true;
       stopRequested = false;
       thread = new Thread(RunPolling);
       thread.Start();
-      IsPolling = true;
     }
 
     public void Stop() {
-      // use AutoResetEvent.Set instead if Thread.Interrupt because its much cleaner
       stopRequested = true;
       waitHandle.Set();
@@ -76,19 +82,23 @@
 
     private void RunPolling() {
-      try {
-        waitHandle = new AutoResetEvent(false);
-        while (!stopRequested) {
-          OnPollingStarted();
-          FetchJobResults();
-          OnPollingFinished();
-          waitHandle.WaitOne(Interval);
+      while (true) {
+        IsPolling = true;
+        try {
+          waitHandle = new AutoResetEvent(false);
+          while (!stopRequested) {
+            OnPollingStarted();
+            FetchJobResults();
+            OnPollingFinished();
+            waitHandle.WaitOne(Interval);
+          }
+          waitHandle.Close();
         }
-        waitHandle.Close();
-      }
-      catch (Exception e) {
-        OnExceptionOccured(e);
-      }
-      finally {
-        IsPolling = false;
+        catch (Exception e) {
+          OnExceptionOccured(e);
+        }
+        finally {
+          IsPolling = false;
+        }
+        if (!autoResumeOnException) return;
       }
     }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ExperimentManager/RefreshableHiveExperiment.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ExperimentManager/RefreshableHiveExperiment.cs	(revision 6218)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.4/ExperimentManager/RefreshableHiveExperiment.cs	(revision 6219)
@@ -32,5 +32,5 @@
   public class RefreshableHiveExperiment : IHiveItem, IDeepCloneable, IContent, IProgressReporter {
     private JobResultPoller jobResultPoller;
-    private ConcurrentJobDownloader<ItemJob> jobDownloader = new ConcurrentJobDownloader<ItemJob>(2, 2);
+    private ConcurrentJobDownloader<ItemJob> jobDownloader;
     private static object locker = new object();
 
@@ -78,4 +78,5 @@
     }
 
+    // if true, all control buttons should be enabled. otherwise disabled (used for HiveEngine)
     private bool isControllable = true;
     public bool IsControllable {
@@ -103,4 +104,6 @@
       this.HiveExperiment = new HiveExperiment();
       this.log = new Log();
+      this.jobDownloader = new ConcurrentJobDownloader<ItemJob>(2, 2);
+      this.jobDownloader.ExceptionOccured += new EventHandler<EventArgs<Exception>>(jobDownloader_ExceptionOccured);
     }
     public RefreshableHiveExperiment(HiveExperiment hiveExperiment) {
@@ -109,4 +112,6 @@
       this.HiveExperiment = hiveExperiment;
       this.log = new Log();
+      this.jobDownloader = new ConcurrentJobDownloader<ItemJob>(2, 2);
+      this.jobDownloader.ExceptionOccured += new EventHandler<EventArgs<Exception>>(jobDownloader_ExceptionOccured);
     }
     protected RefreshableHiveExperiment(RefreshableHiveExperiment original, Cloner cloner) {
@@ -117,4 +122,6 @@
       this.Log = cloner.Clone(original.Log);
       this.RefreshAutomatically = false; // do not start results polling automatically
+      this.jobDownloader = new ConcurrentJobDownloader<ItemJob>(2, 2);
+      this.jobDownloader.ExceptionOccured += new EventHandler<EventArgs<Exception>>(jobDownloader_ExceptionOccured);
     }
     public IDeepCloneable Clone(Cloner cloner) {
@@ -143,4 +150,5 @@
         jobResultPoller = new JobResultPoller(hiveExperiment.Id, /*ApplicationConstants.ResultPollingInterval*/new TimeSpan(0, 0, 5)); //TODO: find a better place for ApplicationConstants
         RegisterResultPollingEvents();
+        jobResultPoller.AutoResumeOnException = !IsControllable;
       }
 
@@ -184,13 +192,10 @@
             LogMessage(string.Format("Downloading job {0}", lightweightJob.Id));
             hiveJob.IsDownloading = true;
-            jobDownloader.DownloadJob(hiveJob.Job, (localJob, itemJob, exception) => {
+            jobDownloader.DownloadJob(hiveJob.Job, (localJob, itemJob) => {
               LogMessage(string.Format("Finished downloading job {0}", localJob.Id));
               HiveJob localHiveJob = GetHiveJobById(localJob.Id);
 
-              if (exception != null) {
-                var ex = new ConcurrentJobDownloaderException("Downloading job failed", exception);
-                LogException(ex);
+              if (itemJob == null) {
                 localHiveJob.IsDownloading = false;
-                throw ex;
               }
 
@@ -247,5 +252,4 @@
       return null;
     }
-
     private void UpdateStatistics() {
       var jobs = hiveExperiment.GetAllHiveJobs();
@@ -264,7 +268,9 @@
 
     private void jobResultPoller_ExceptionOccured(object sender, EventArgs<Exception> e) {
-      //OnExceptionOccured(e.Value);
-    }
-
+      OnExceptionOccured(e.Value);
+    }
+    private void jobDownloader_ExceptionOccured(object sender, EventArgs<Exception> e) {
+      OnExceptionOccured(e.Value);
+    }
     public void UpdateTotalExecutionTime() {
       hiveExperiment.ExecutionTime = TimeSpan.FromMilliseconds(hiveExperiment.GetAllHiveJobs().Sum(x => x.Job.ExecutionTime.HasValue ? x.Job.ExecutionTime.Value.TotalMilliseconds : 0));
@@ -354,4 +360,11 @@
       if (handler != null) handler(this, EventArgs.Empty);
     }
+
+    public event EventHandler<EventArgs<Exception>> ExceptionOccured;
+    private void OnExceptionOccured(Exception exception) {
+      LogException(exception);
+      var handler = ExceptionOccured;
+      if (handler != null) handler(this, new EventArgs<Exception>(exception));
+    }
     #endregion
 
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Hive/3.4/ItemJob.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Hive/3.4/ItemJob.cs	(revision 6218)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Hive/3.4/ItemJob.cs	(revision 6219)
@@ -47,5 +47,5 @@
         }
       }
-    } 
+    }
 
     [Storable]
@@ -108,7 +108,7 @@
     #region IJob Members
 
-    public abstract ExecutionState ExecutionState{ get; }
-
-    public abstract TimeSpan ExecutionTime{ get; }
+    public abstract ExecutionState ExecutionState { get; }
+
+    public abstract TimeSpan ExecutionTime { get; }
 
     public abstract void Prepare();
@@ -176,5 +176,5 @@
     }
     #endregion
-    
+
     #region INamedItem Members
     public abstract bool CanChangeDescription { get; }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine.Test/Program.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine.Test/Program.cs	(revision 6218)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine.Test/Program.cs	(revision 6219)
@@ -32,5 +32,4 @@
     public override void Run() {
       ContentManager.Initialize(new PersistenceContentManager());
-
 
       OptimizerJob job = new OptimizerJob(new Experiment());
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine.Views/3.4/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine.Views/3.4/Properties/AssemblyInfo.cs.frame	(revision 6218)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine.Views/3.4/Properties/AssemblyInfo.cs.frame	(revision 6219)
@@ -54,4 +54,4 @@
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyVersion("3.4.0.0")]
+[assembly: AssemblyFileVersion("3.4.0.$WCREV$")]
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine/3.4/HeuristicLab.HiveEngine-3.4.csproj
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine/3.4/HeuristicLab.HiveEngine-3.4.csproj	(revision 6218)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine/3.4/HeuristicLab.HiveEngine-3.4.csproj	(revision 6219)
@@ -134,4 +134,5 @@
     <Compile Include="HeuristicLabHiveEnginePlugin.cs" />
     <Compile Include="Exceptions\ScopeMergeException.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
     <None Include="HeuristicLabHiveEnginePlugin.cs.frame" />
     <Compile Include="HiveEngine.cs" />
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine/3.4/HiveEngine.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine/3.4/HiveEngine.cs	(revision 6218)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine/3.4/HiveEngine.cs	(revision 6219)
@@ -106,5 +106,5 @@
       this.executionTimeOnHive = original.executionTimeOnHive;
       this.useLocalPlugins = original.useLocalPlugins;
-      this.hiveExperiments = cloner.Clone(original.hiveExperiments);
+      // this.hiveExperiments = cloner.Clone(original.hiveExperiments); do not clone hiveExperiments - otherwise they would be sent with every job
     }
     public override IDeepCloneable Clone(Cloner cloner) {
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine/3.4/Properties/AssemblyInfo.cs.frame
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine/3.4/Properties/AssemblyInfo.cs.frame	(revision 6218)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine/3.4/Properties/AssemblyInfo.cs.frame	(revision 6219)
@@ -54,4 +54,4 @@
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyVersion("3.4.0.0")]
+[assembly: AssemblyFileVersion("3.4.0.$WCREV$")]
