Index: /trunk/sources/HeuristicLab.Clients.Hive/3.3/ConcurrentTaskDownloader.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.Hive/3.3/ConcurrentTaskDownloader.cs	(revision 7124)
+++ /trunk/sources/HeuristicLab.Clients.Hive/3.3/ConcurrentTaskDownloader.cs	(revision 7125)
@@ -78,5 +78,4 @@
     protected Tuple<Task, TaskData> DownloadTaskData(Task task) {
       downloadSemaphore.WaitOne();
-      deserializeSemaphore.WaitOne();
       TaskData result;
       try {
@@ -90,4 +89,5 @@
 
     protected Tuple<Task, T> DeserializeTask(Tuple<Task, TaskData> taskData) {
+      deserializeSemaphore.WaitOne();
       try {
         if (abort || taskData.Item2 == null || taskData.Item1 == null) return null;
Index: /trunk/sources/HeuristicLab.Clients.Hive/3.3/HiveClient.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.Hive/3.3/HiveClient.cs	(revision 7124)
+++ /trunk/sources/HeuristicLab.Clients.Hive/3.3/HiveClient.cs	(revision 7125)
@@ -113,6 +113,5 @@
         jobs = null;
         throw;
-      }
-      finally {
+      } finally {
         OnRefreshed();
       }
@@ -297,6 +296,5 @@
         }
         refreshableJob.Job.Modified = false;
-      }
-      finally {
+      } finally {
         refreshableJob.IsProgressing = false;
       }
@@ -362,5 +360,5 @@
             }
           }
-        }, -1, "Failed to upload plugins");
+        }, Settings.Default.MaxRepeatServiceCalls, "Failed to upload plugins");
         cancellationToken.ThrowIfCancellationRequested();
         hiveTask.Task.PluginsNeededIds.Add(configPluginId);
@@ -377,5 +375,5 @@
             }
           }
-        }, 50, "Failed to add task", log);
+        }, Settings.Default.MaxRepeatServiceCalls, "Failed to add task", log);
         cancellationToken.ThrowIfCancellationRequested();
 
@@ -400,6 +398,5 @@
           if (!ae.InnerExceptions.All(e => e is TaskCanceledException)) throw ae; // for some reason the WaitAll throws a AggregateException containg a TaskCanceledException. i don't know where it comes from, however the tasks all finish properly, so for now just ignore it
         }
-      }
-      finally {
+      } finally {
         if (!semaphoreReleased) taskUploadSemaphore.Release();
       }
@@ -423,4 +420,5 @@
         totalJobCount = allTasks.Count();
 
+        refreshableJob.Progress.Status = "Downloading tasks...";
         TaskDownloader downloader = new TaskDownloader(allTasks.Select(x => x.Id));
         downloader.StartAsync();
@@ -445,4 +443,5 @@
         }
 
+        refreshableJob.Progress.Status = "Downloading/deserializing complete. Displaying tasks...";
         // build child-task tree
         foreach (HiveTask hiveTask in refreshableJob.HiveTasks) {
@@ -451,19 +450,18 @@
 
         refreshableJob.OnLoaded();
-      }
-      finally {
+      } finally {
         refreshableJob.IsProgressing = false;
       }
     }
 
-    private static void BuildHiveJobTree(HiveTask parentHiveJob, IEnumerable<LightweightTask> allJobs, IDictionary<Guid, HiveTask> allHiveJobs) {
-      IEnumerable<LightweightTask> childTasks = from job in allJobs
-                                                where job.ParentTaskId.HasValue && job.ParentTaskId.Value == parentHiveJob.Task.Id
+    private static void BuildHiveJobTree(HiveTask parentHiveTask, IEnumerable<LightweightTask> allTasks, IDictionary<Guid, HiveTask> allHiveTasks) {
+      IEnumerable<LightweightTask> childTasks = from job in allTasks
+                                                where job.ParentTaskId.HasValue && job.ParentTaskId.Value == parentHiveTask.Task.Id
                                                 orderby job.DateCreated ascending
                                                 select job;
       foreach (LightweightTask task in childTasks) {
-        HiveTask childHiveTask = allHiveJobs[task.Id];
-        parentHiveJob.AddChildHiveJob(childHiveTask);
-        BuildHiveJobTree(childHiveTask, allJobs, allHiveJobs);
+        HiveTask childHiveTask = allHiveTasks[task.Id];
+        parentHiveTask.AddChildHiveTask(childHiveTask);
+        BuildHiveJobTree(childHiveTask, allTasks, allHiveTasks);
       }
     }
Index: /trunk/sources/HeuristicLab.Clients.Hive/3.3/HiveJobs/HiveTask.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.Hive/3.3/HiveJobs/HiveTask.cs	(revision 7124)
+++ /trunk/sources/HeuristicLab.Clients.Hive/3.3/HiveJobs/HiveTask.cs	(revision 7125)
@@ -238,8 +238,8 @@
     }
 
-    public virtual void AddChildHiveJob(HiveTask hiveJob) {
+    public virtual void AddChildHiveTask(HiveTask hiveTask) {
       childHiveTasksLock.EnterWriteLock();
       try {
-        this.childHiveTasks.Add(hiveJob);
+        this.childHiveTasks.Add(hiveTask);
       }
       finally { childHiveTasksLock.ExitWriteLock(); }
Index: /trunk/sources/HeuristicLab.Clients.Hive/3.3/HiveJobs/OptimizerHiveTask.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.Hive/3.3/HiveJobs/OptimizerHiveTask.cs	(revision 7124)
+++ /trunk/sources/HeuristicLab.Clients.Hive/3.3/HiveJobs/OptimizerHiveTask.cs	(revision 7125)
@@ -136,6 +136,5 @@
             }
           }
-        }
-        finally { childHiveTasksLock.ExitWriteLock(); }
+        } finally { childHiveTasksLock.ExitWriteLock(); }
       }
     }
@@ -152,6 +151,5 @@
             }
           }
-        }
-        finally { childHiveTasksLock.ExitWriteLock(); }
+        } finally { childHiveTasksLock.ExitWriteLock(); }
       }
     }
@@ -163,6 +161,5 @@
             this.childHiveTasks.Remove(this.GetChildByOptimizer(item.Value));
           }
-        }
-        finally { childHiveTasksLock.ExitWriteLock(); }
+        } finally { childHiveTasksLock.ExitWriteLock(); }
       }
     }
@@ -174,6 +171,5 @@
             this.childHiveTasks.Remove(this.GetChildByOptimizer(item.Value));
           }
-        }
-        finally { childHiveTasksLock.ExitWriteLock(); }
+        } finally { childHiveTasksLock.ExitWriteLock(); }
       }
     }
@@ -205,6 +201,5 @@
           child.syncTasksWithOptimizers = true;
         }
-      }
-      finally { childHiveTasksLock.ExitReadLock(); }
+      } finally { childHiveTasksLock.ExitReadLock(); }
       syncTasksWithOptimizers = true;
     }
@@ -268,11 +263,10 @@
           child.SetIndexInParentOptimizerList(this);
         }
-      }
-      finally { childHiveTasksLock.ExitReadLock(); }
-    }
-
-    public override void AddChildHiveJob(HiveTask hiveJob) {
-      base.AddChildHiveJob(hiveJob);
-      var optimizerHiveJob = (OptimizerHiveTask)hiveJob;
+      } finally { childHiveTasksLock.ExitReadLock(); }
+    }
+
+    public override void AddChildHiveTask(HiveTask hiveTask) {
+      base.AddChildHiveTask(hiveTask);
+      var optimizerHiveJob = (OptimizerHiveTask)hiveTask;
       syncTasksWithOptimizers = false;
       if (this.ItemTask != null && optimizerHiveJob.ItemTask != null) {
@@ -339,6 +333,5 @@
         }
         return null;
-      }
-      finally { childHiveTasksLock.ExitReadLock(); }
+      } finally { childHiveTasksLock.ExitReadLock(); }
     }
 
@@ -351,6 +344,5 @@
         }
         return null;
-      }
-      finally { childHiveTasksLock.ExitReadLock(); }
+      } finally { childHiveTasksLock.ExitReadLock(); }
     }
 
Index: /trunk/sources/HeuristicLab.Clients.Hive/3.3/Settings.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Clients.Hive/3.3/Settings.Designer.cs	(revision 7124)
+++ /trunk/sources/HeuristicLab.Clients.Hive/3.3/Settings.Designer.cs	(revision 7125)
@@ -44,5 +44,5 @@
         [global::System.Configuration.ApplicationScopedSettingAttribute()]
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        [global::System.Configuration.DefaultSettingValueAttribute("00:00:10")]
+        [global::System.Configuration.DefaultSettingValueAttribute("00:00:20")]
         public global::System.TimeSpan ResultPollingInterval {
             get {
@@ -53,5 +53,5 @@
         [global::System.Configuration.ApplicationScopedSettingAttribute()]
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        [global::System.Configuration.DefaultSettingValueAttribute("2")]
+        [global::System.Configuration.DefaultSettingValueAttribute("5")]
         public int MaxParallelDownloads {
             get {
@@ -59,4 +59,13 @@
             }
         }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("5")]
+        public int MaxRepeatServiceCalls {
+            get {
+                return ((int)(this["MaxRepeatServiceCalls"]));
+            }
+        }
     }
 }
Index: /trunk/sources/HeuristicLab.Clients.Hive/3.3/Settings.settings
===================================================================
--- /trunk/sources/HeuristicLab.Clients.Hive/3.3/Settings.settings	(revision 7124)
+++ /trunk/sources/HeuristicLab.Clients.Hive/3.3/Settings.settings	(revision 7125)
@@ -10,8 +10,11 @@
     </Setting>
     <Setting Name="ResultPollingInterval" Type="System.TimeSpan" Scope="Application">
-      <Value Profile="(Default)">00:00:10</Value>
+      <Value Profile="(Default)">00:00:20</Value>
     </Setting>
     <Setting Name="MaxParallelDownloads" Type="System.Int32" Scope="Application">
-      <Value Profile="(Default)">2</Value>
+      <Value Profile="(Default)">5</Value>
+    </Setting>
+    <Setting Name="MaxRepeatServiceCalls" Type="System.Int32" Scope="Application">
+      <Value Profile="(Default)">5</Value>
     </Setting>
   </Settings>
Index: /trunk/sources/HeuristicLab.Clients.Hive/3.3/app.config
===================================================================
--- /trunk/sources/HeuristicLab.Clients.Hive/3.3/app.config	(revision 7124)
+++ /trunk/sources/HeuristicLab.Clients.Hive/3.3/app.config	(revision 7125)
@@ -15,8 +15,11 @@
       </setting>
       <setting name="ResultPollingInterval" serializeAs="String">
-        <value>00:00:10</value>
+        <value>00:00:20</value>
       </setting>
       <setting name="MaxParallelDownloads" serializeAs="String">
-        <value>2</value>
+        <value>5</value>
+      </setting>
+      <setting name="MaxRepeatServiceCalls" serializeAs="String">
+        <value>5</value>
       </setting>
     </HeuristicLab.Clients.Hive.Settings>
