Index: branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager.Views/3.3/HiveExperimentListView.cs
===================================================================
--- branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager.Views/3.3/HiveExperimentListView.cs	(revision 5397)
+++ branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager.Views/3.3/HiveExperimentListView.cs	(revision 5399)
@@ -28,7 +28,7 @@
 namespace HeuristicLab.Hive.ExperimentManager.Views {
   [View("HiveExperimentList View")]
-  [Content(typeof(HiveExperimentList), true)]
+  [Content(typeof(HiveExperimentCollection), true)]
   [Content(typeof(IItemList<HiveExperiment>), false)]
-  public partial class HiveExperimentListView : ItemListView<HiveExperiment> {
+  public partial class HiveExperimentListView : ItemCollectionView<HiveExperiment> {
 
     public HiveExperimentListView() {
@@ -46,14 +46,5 @@
       } else {
         base.SetEnabledStateOfControls();
-        if (Content != null) {
-          if (itemsListView.SelectedItems.Count > 0) {
-            // only allow delete-operation if all selected items are stored in hive (they have HiveExperimentId)
-            bool canRemove = true;
-            foreach (ListViewItem item in itemsListView.SelectedItems) {
-              canRemove = canRemove && Content[item.Index].HiveExperimentId != Guid.Empty;
-            }
-            this.removeButton.Enabled = canRemove;
-          }
-        }
+        this.removeButton.Enabled = Content != null && itemsListView.SelectedItems.Count > 0;
       }
     }
Index: branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager.Views/3.3/HiveJobView.Designer.cs
===================================================================
--- branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager.Views/3.3/HiveJobView.Designer.cs	(revision 5397)
+++ branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager.Views/3.3/HiveJobView.Designer.cs	(revision 5399)
@@ -24,4 +24,5 @@
     /// </summary>
     private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
       this.stateLabel = new System.Windows.Forms.Label();
       this.stateTextBox = new System.Windows.Forms.TextBox();
@@ -55,7 +56,8 @@
       this.childHiveJobView = new HeuristicLab.Hive.ExperimentManager.Views.HiveJobListView();
       this.runsTabPage = new System.Windows.Forms.TabPage();
+      this.runCollectionViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
       this.logTabPage = new System.Windows.Forms.TabPage();
       this.logView = new HeuristicLab.Core.Views.LogView();
-      this.runCollectionViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
       this.jobStatusGroupBox.SuspendLayout();
       this.tabControl.SuspendLayout();
@@ -66,4 +68,5 @@
       this.runsTabPage.SuspendLayout();
       this.logTabPage.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       this.SuspendLayout();
       // 
@@ -278,4 +281,6 @@
       this.priorityTextBox.Size = new System.Drawing.Size(496, 20);
       this.priorityTextBox.TabIndex = 41;
+      this.priorityTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.priorityTextBox_Validating);
+      this.priorityTextBox.Validated += new System.EventHandler(this.priorityTextBox_Validated);
       // 
       // priorityLabel
@@ -296,4 +301,6 @@
       this.coresNeededTextBox.Size = new System.Drawing.Size(496, 20);
       this.coresNeededTextBox.TabIndex = 37;
+      this.coresNeededTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.coresNeededTextBox_Validating);
+      this.coresNeededTextBox.Validated += new System.EventHandler(this.coresNeededTextBox_Validated);
       // 
       // memoryNeededTextBox
@@ -305,4 +312,6 @@
       this.memoryNeededTextBox.Size = new System.Drawing.Size(496, 20);
       this.memoryNeededTextBox.TabIndex = 38;
+      this.memoryNeededTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.memoryNeededTextBox_Validating);
+      this.memoryNeededTextBox.Validated += new System.EventHandler(this.memoryNeededTextBox_Validated);
       // 
       // memoryNeededLabel
@@ -393,4 +402,20 @@
       this.runsTabPage.Text = "Runs";
       this.runsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // runCollectionViewHost
+      // 
+      this.runCollectionViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.runCollectionViewHost.Caption = "View";
+      this.runCollectionViewHost.Content = null;
+      this.runCollectionViewHost.Enabled = false;
+      this.runCollectionViewHost.Location = new System.Drawing.Point(3, 3);
+      this.runCollectionViewHost.Name = "runCollectionViewHost";
+      this.runCollectionViewHost.ReadOnly = false;
+      this.runCollectionViewHost.Size = new System.Drawing.Size(613, 486);
+      this.runCollectionViewHost.TabIndex = 0;
+      this.runCollectionViewHost.ViewsLabelVisible = true;
+      this.runCollectionViewHost.ViewType = null;
       // 
       // logTabPage
@@ -418,18 +443,7 @@
       this.logView.TabIndex = 0;
       // 
-      // runCollectionViewHost
-      // 
-      this.runCollectionViewHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.runCollectionViewHost.Caption = "View";
-      this.runCollectionViewHost.Content = null;
-      this.runCollectionViewHost.Enabled = false;
-      this.runCollectionViewHost.Location = new System.Drawing.Point(3, 3);
-      this.runCollectionViewHost.Name = "runCollectionViewHost";
-      this.runCollectionViewHost.ReadOnly = false;
-      this.runCollectionViewHost.Size = new System.Drawing.Size(613, 486);
-      this.runCollectionViewHost.TabIndex = 0;
-      this.runCollectionViewHost.ViewType = null;
+      // errorProvider
+      // 
+      this.errorProvider.ContainerControl = this;
       // 
       // HiveJobView
@@ -451,4 +465,5 @@
       this.runsTabPage.ResumeLayout(false);
       this.logTabPage.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
       this.ResumeLayout(false);
 
@@ -491,4 +506,5 @@
     private System.Windows.Forms.TabPage runsTabPage;
     private MainForm.WindowsForms.ViewHost runCollectionViewHost;
+    private System.Windows.Forms.ErrorProvider errorProvider;
   }
 }
Index: branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager.Views/3.3/HiveJobView.cs
===================================================================
--- branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager.Views/3.3/HiveJobView.cs	(revision 5397)
+++ branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager.Views/3.3/HiveJobView.cs	(revision 5399)
@@ -24,4 +24,6 @@
 using HeuristicLab.Core.Views;
 using HeuristicLab.MainForm;
+using System.Text;
+using HeuristicLab.Data;
 
 namespace HeuristicLab.Hive.ExperimentManager.Views {
@@ -71,35 +73,25 @@
       Content_JobStateChanged(this, EventArgs.Empty);
     }
-
-    void Content_JobChanged(object sender, EventArgs e) {
+    
+    private void RegisterJobEvents() {
+      if (Content != null && Content.Job != null) {
+        Content.Job.ComputeInParallelChanged += new EventHandler(Job_ComputeInParallelChanged);
+        Content.Job.OptimizerChanged += new EventHandler(Job_OptimizerChanged);
+      }
+    }
+
+    private void DeregisterJobEvents() {
+      if (Content != null && Content.Job != null) {
+        Content.Job.ComputeInParallelChanged -= new EventHandler(Job_ComputeInParallelChanged);
+        Content.Job.OptimizerChanged -= new EventHandler(Job_OptimizerChanged);
+      }
+    }
+
+    #region Content Events  
+    private void Content_JobChanged(object sender, EventArgs e) {
       RegisterJobEvents();
       Job_OptimizerChanged(this, e);
     }
 
-    void Job_OptimizerChanged(object sender, EventArgs e) {
-      if (Content != null && Content.Job != null && Content.Job.Optimizer != null) {
-        optimizerNamedItemView.Content = Content.Job.Optimizer;
-        runCollectionViewHost.Content = Content.Job.Optimizer.Runs;
-      } else {
-        optimizerNamedItemView.Content = null;
-        runCollectionViewHost.Content = null;
-      }
-    }
-
-    private void RegisterJobEvents() {
-      if (Content != null && Content.Job != null) {
-        Content.Job.ComputeInParallelChanged += new EventHandler(Job_ComputeInParallelChanged);
-        Content.Job.OptimizerChanged += new EventHandler(Job_OptimizerChanged);
-      }
-    }
-
-    private void DeregisterJobEvents() {
-      if (Content != null && Content.Job != null) {
-        Content.Job.ComputeInParallelChanged -= new EventHandler(Job_ComputeInParallelChanged);
-        Content.Job.OptimizerChanged -= new EventHandler(Job_OptimizerChanged);
-      }
-    }
-
-    #region Content Events
     private void Content_JobDtoChanged(object sender, EventArgs e) {
       if (InvokeRequired) {
@@ -141,4 +133,36 @@
       }
     }
+    
+    private void Job_OptimizerChanged(object sender, EventArgs e) {
+      if (Content != null && Content.Job != null && Content.Job.Optimizer != null) {
+        optimizerNamedItemView.Content = Content.Job.Optimizer;
+        runCollectionViewHost.Content = Content.Job.Optimizer.Runs;
+      } else {
+        optimizerNamedItemView.Content = null;
+        runCollectionViewHost.Content = null;
+      }
+    }
+
+    private void Job_ComputeInParallelChanged(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(Job_ComputeInParallelChanged), sender, e);
+      } else {
+        computeInParallelCheckBox.Checked = Content.Job.ComputeInParallel;
+        ShowOrHideChildJobTabPage();
+      }
+    }
+
+    private void ShowOrHideChildJobTabPage() {
+      if (Content != null && Content.Job != null) {
+        if (!Content.Job.ComputeInParallel) {
+          if (tabControl.TabPages.Contains(childJobsTabPage))
+            tabControl.TabPages.Remove(childJobsTabPage);
+        } else {
+          if (!tabControl.TabPages.Contains(childJobsTabPage))
+            tabControl.TabPages.Insert(1, childJobsTabPage);
+        }
+      }
+    }
+    #endregion
 
     protected override void SetEnabledStateOfControls() {
@@ -165,31 +189,67 @@
     }
 
-    void Job_ComputeInParallelChanged(object sender, EventArgs e) {
-      if (InvokeRequired) {
-        Invoke(new EventHandler(Job_ComputeInParallelChanged), sender, e);
-      } else {
-        computeInParallelCheckBox.Checked = Content.Job.ComputeInParallel;
-        ShowOrHideChildJobTabPage();
-      }
-    }
-
-    private void ShowOrHideChildJobTabPage() {
-      if (Content != null && Content.Job != null) {
-        if (!Content.Job.ComputeInParallel) {
-          if (tabControl.TabPages.Contains(childJobsTabPage))
-            tabControl.TabPages.Remove(childJobsTabPage);
-        } else {
-          if (!tabControl.TabPages.Contains(childJobsTabPage))
-            tabControl.TabPages.Insert(1, childJobsTabPage);
-        }
-      }
+    #region Control Events
+    private void computeInParallelCheckBox_CheckedChanged(object sender, EventArgs e) {
+      if (Content != null) this.Content.Job.ComputeInParallel = this.computeInParallelCheckBox.Checked;
+    }
+
+    private void coresNeededTextBox_Validating(object sender, System.ComponentModel.CancelEventArgs e) {
+      int val;
+      if ((!string.IsNullOrEmpty(coresNeededTextBox.Text)) && (!int.TryParse(coresNeededTextBox.Text, out val))) {
+        e.Cancel = true;
+        StringBuilder sb = new StringBuilder();
+        sb.Append("Invalid Value (Valid Value Format: \"");
+        sb.Append(FormatPatterns.GetIntFormatPattern());
+        sb.Append("\")");
+        errorProvider.SetError(coresNeededTextBox, sb.ToString());
+        coresNeededTextBox.SelectAll();
+      }
+    }
+
+    private void coresNeededTextBox_Validated(object sender, EventArgs e) {
+      if (string.IsNullOrEmpty(coresNeededTextBox.Text)) Content.JobDto.CoresNeeded = 1;
+      else Content.JobDto.CoresNeeded = int.Parse(coresNeededTextBox.Text);
+      errorProvider.SetError(coresNeededTextBox, string.Empty);
+    }
+
+    private void memoryNeededTextBox_Validating(object sender, System.ComponentModel.CancelEventArgs e) {
+      int val;
+      if ((!string.IsNullOrEmpty(memoryNeededTextBox.Text)) && (!int.TryParse(memoryNeededTextBox.Text, out val))) {
+        e.Cancel = true;
+        StringBuilder sb = new StringBuilder();
+        sb.Append("Invalid Value (Valid Value Format: \"");
+        sb.Append(FormatPatterns.GetIntFormatPattern());
+        sb.Append("\")");
+        errorProvider.SetError(memoryNeededTextBox, sb.ToString());
+        memoryNeededTextBox.SelectAll();
+      }
+    }
+
+    private void memoryNeededTextBox_Validated(object sender, EventArgs e) {
+      if (string.IsNullOrEmpty(memoryNeededTextBox.Text)) Content.JobDto.MemoryNeeded = 0;
+      else Content.JobDto.MemoryNeeded = int.Parse(memoryNeededTextBox.Text);
+      errorProvider.SetError(memoryNeededTextBox, string.Empty);
+    }
+
+    private void priorityTextBox_Validating(object sender, System.ComponentModel.CancelEventArgs e) {
+      int val;
+      if ((!string.IsNullOrEmpty(priorityTextBox.Text)) && (!int.TryParse(priorityTextBox.Text, out val))) {
+        e.Cancel = true;
+        StringBuilder sb = new StringBuilder();
+        sb.Append("Invalid Value (Valid Value Format: \"");
+        sb.Append(FormatPatterns.GetIntFormatPattern());
+        sb.Append("\")");
+        errorProvider.SetError(priorityTextBox, sb.ToString());
+        priorityTextBox.SelectAll();
+      }
+    }
+
+    private void priorityTextBox_Validated(object sender, EventArgs e) {
+      if (string.IsNullOrEmpty(priorityTextBox.Text)) Content.JobDto.Priority = 0;
+      else Content.JobDto.Priority = int.Parse(priorityTextBox.Text);
+      errorProvider.SetError(priorityTextBox, string.Empty);
     }
     #endregion
 
-    private void computeInParallelCheckBox_CheckedChanged(object sender, EventArgs e) {
-      if (Content != null) {
-        this.Content.Job.ComputeInParallel = this.computeInParallelCheckBox.Checked;
-      }
-    }
   }
 }
Index: branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager.Views/3.3/HiveJobView.resx
===================================================================
--- branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager.Views/3.3/HiveJobView.resx	(revision 5397)
+++ branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager.Views/3.3/HiveJobView.resx	(revision 5399)
@@ -113,8 +113,11 @@
   </resheader>
   <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
   <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
+  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
 </root>
Index: branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager/3.3/HiveExperimentList.cs
===================================================================
--- branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager/3.3/HiveExperimentList.cs	(revision 5397)
+++ branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager/3.3/HiveExperimentList.cs	(revision 5399)
@@ -26,18 +26,18 @@
 
 namespace HeuristicLab.Hive.ExperimentManager {
-  [Item("HiveExperiment List", "Represents a list of hive experiments.")]
+  [Item("HiveExperiment Collection", "Represents a list of hive experiments.")]
   [StorableClass]
-  public class HiveExperimentList : ItemList<HiveExperiment> {
-    public HiveExperimentList() : base() { }
-    public HiveExperimentList(int capacity) : base(capacity) { }
-    public HiveExperimentList(IEnumerable<HiveExperiment> collection) : base(collection) { }
+  public class HiveExperimentCollection : ItemCollection<HiveExperiment> {
+    public HiveExperimentCollection() : base() { }
+    public HiveExperimentCollection(int capacity) : base(capacity) { }
+    public HiveExperimentCollection(IEnumerable<HiveExperiment> collection) : base(collection) { }
 
     [StorableConstructor]
-    protected HiveExperimentList(bool deserializing) : base(deserializing) { }
-    protected HiveExperimentList(HiveExperimentList original, Cloner cloner)
+    protected HiveExperimentCollection(bool deserializing) : base(deserializing) { }
+    protected HiveExperimentCollection(HiveExperimentCollection original, Cloner cloner)
       : base(original, cloner) {
     }
     public override IDeepCloneable Clone(Cloner cloner) {
-      return new HiveExperimentList(this, cloner);
+      return new HiveExperimentCollection(this, cloner);
     }
   }
Index: branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager/3.3/HiveExperimentManager.cs
===================================================================
--- branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager/3.3/HiveExperimentManager.cs	(revision 5397)
+++ branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager/3.3/HiveExperimentManager.cs	(revision 5399)
@@ -42,6 +42,6 @@
     }
 
-    private HiveExperimentList hiveExperiments;
-    public HiveExperimentList HiveExperiments {
+    private HiveExperimentCollection hiveExperiments;
+    public HiveExperimentCollection HiveExperiments {
       get { return hiveExperiments; }
       set {
@@ -73,5 +73,5 @@
     private void RegisterHiveExperimentsEvent() {
       if (hiveExperiments != null) {
-        hiveExperiments.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<HiveExperiment>>(hiveExperiments_ItemsRemoved);
+        hiveExperiments.ItemsRemoved += new CollectionItemsChangedEventHandler<HiveExperiment>(hiveExperiments_ItemsRemoved);
       }
     }
@@ -79,5 +79,5 @@
     private void DeRegisterHiveExperimentsEvents() {
       if (hiveExperiments != null) {
-        hiveExperiments.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<HiveExperiment>>(hiveExperiments_ItemsRemoved);
+        hiveExperiments.ItemsRemoved -= new CollectionItemsChangedEventHandler<HiveExperiment>(hiveExperiments_ItemsRemoved);
       }
     }
@@ -100,5 +100,5 @@
         IsProgressing = true;
         if (this.HiveExperiments == null) {
-          this.HiveExperiments = new HiveExperimentList();
+          this.HiveExperiments = new HiveExperimentCollection();
         }
         using (Disposable<IClientFacade> service = ServiceLocator.Instance.ClientFacadePool.GetService()) {
@@ -149,10 +149,10 @@
     }
 
-    void hiveExperiments_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<Collections.IndexedItem<HiveExperiment>> e) {
+    void hiveExperiments_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<HiveExperiment> e) {
       if (!currentlyUpdating) {
         using (Disposable<IClientFacade> service = ServiceLocator.Instance.ClientFacadePool.GetService()) {
-          foreach (IndexedItem<HiveExperiment> item in e.Items) {
-            if (item.Value.HiveExperimentId != Guid.Empty) {
-              service.Obj.DeleteHiveExperiment(item.Value.HiveExperimentId);
+          foreach (HiveExperiment item in e.Items) {
+            if (item.HiveExperimentId != Guid.Empty) {
+              service.Obj.DeleteHiveExperiment(item.HiveExperimentId);
             }
           }
Index: branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager/3.3/JobResultPoller.cs
===================================================================
--- branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager/3.3/JobResultPoller.cs	(revision 5397)
+++ branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.Hive.ExperimentManager/3.3/JobResultPoller.cs	(revision 5399)
@@ -92,11 +92,22 @@
       catch (Exception e) {
         OnExceptionOccured(e);
+        IsPolling = false;
       }
     }
 
     private void FetchJobResults() {
-      ResponseObject<JobResultList> response;
-      using (Disposable<IClientFacade> service = ServiceLocator.Instance.StreamedClientFacadePool.GetService()) {
-        response = service.Obj.GetChildJobResults(hiveJob.JobDto.Id, true, true);
+      int repetitions = 5;
+      ResponseObject<JobResultList> response = null;
+      while (response == null && repetitions > 0) {
+        repetitions--;
+        try {
+          using (Disposable<IClientFacade> service = ServiceLocator.Instance.StreamedClientFacadePool.GetService()) {
+            response = service.Obj.GetChildJobResults(hiveJob.JobDto.Id, true, true);
+          }
+        }
+        catch (Exception e) {
+          if (repetitions == 0)
+            throw e;
+        }
       }
       if (response.StatusMessage == ResponseStatus.Ok) {
Index: branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.HiveEngine/3.3/HiveEngine.cs
===================================================================
--- branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.HiveEngine/3.3/HiveEngine.cs	(revision 5397)
+++ branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.HiveEngine/3.3/HiveEngine.cs	(revision 5399)
@@ -51,5 +51,5 @@
       }
     }
-    
+
     #region constructors and cloning
     public HiveEngine() {
@@ -310,11 +310,13 @@
     private void DeleteJobs(IDictionary<Guid, int> jobIndices) {
       if (jobIndices.Count > 0) {
-        using (Disposable<IClientFacade> service = ServiceLocator.Instance.ClientFacadePool.GetService()) {
-          foreach (Guid jobId in jobIndices.Keys) {
-            service.Obj.DeleteJob(jobId);
-          }
-          LogMessage(string.Format("Deleted {0} jobs on hive.", jobIndices.Count));
-          jobIndices.Clear();
-        }
+        TryAndRepeat(() => {
+          LogMessage(string.Format("Deleting {0} jobs on hive.", jobIndices.Count));
+          using (Disposable<IClientFacade> service = ServiceLocator.Instance.ClientFacadePool.GetService()) {
+            foreach (Guid jobId in jobIndices.Keys) {
+              service.Obj.DeleteJob(jobId);
+            }
+            jobIndices.Clear();
+          }
+        }, 5, string.Format("Could not delete {0} jobs", jobIndices.Count));
       }
     }
@@ -364,4 +366,5 @@
             catch (Exception e) {
               LogException(e);
+              LogMessage("Repeating upload");
             }
           }
@@ -393,4 +396,5 @@
           catch (Exception e) {
             LogException(e);
+            LogMessage("Repeating download");
           }
         }
@@ -423,4 +427,24 @@
       }
     }
+
+    /// <summary>
+    /// Executes the action. If it throws an exception it is repeated until repetition-count is reached.
+    /// If repetitions is -1, it is repeated infinitely.
+    /// </summary>
+    private static void TryAndRepeat(Action action, int repetitions, string errorMessage) {
+      while (repetitions > 0) {
+        try { action(); }
+        catch (Exception e) {
+          repetitions--;
+          if (repetitions == 0) {
+            throw new HiveEngineException(errorMessage, e);
+          }
+        }
+      }
+    }
+
+    private static void TryAndRepeat(Action action) {
+      TryAndRepeat(action, -1, string.Empty);
+    }
   }
 
Index: branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.HiveEngine/3.3/HiveEngineException.cs
===================================================================
--- branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.HiveEngine/3.3/HiveEngineException.cs	(revision 5397)
+++ branches/HeuristicLab.Hive-3.3/sources/HeuristicLab.Hive/HeuristicLab.HiveEngine/3.3/HiveEngineException.cs	(revision 5399)
@@ -7,4 +7,6 @@
   public class HiveEngineException : Exception {
     public HiveEngineException(string message) : base(message) { }
+
+    public HiveEngineException(string message, Exception innerException) : base (message, innerException) { }
   }
 }
