Index: stable/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj
===================================================================
--- stable/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj	(revision 17059)
+++ stable/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj	(revision 17062)
@@ -236,4 +236,9 @@
       <Private>False</Private>
     </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm.WindowsForms\3.3\HeuristicLab.MainForm.WindowsForms-3.3.csproj">
+      <Project>{AB687BBE-1BFE-476B-906D-44237135431D}</Project>
+      <Name>HeuristicLab.MainForm.WindowsForms-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.MainForm\3.3\HeuristicLab.MainForm-3.3.csproj">
       <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
Index: stable/HeuristicLab.Clients.Hive/3.3/HiveClient.cs
===================================================================
--- stable/HeuristicLab.Clients.Hive/3.3/HiveClient.cs	(revision 17059)
+++ stable/HeuristicLab.Clients.Hive/3.3/HiveClient.cs	(revision 17062)
@@ -167,12 +167,10 @@
         RefreshDisabledParentProjects();
         RefreshDisabledParentResources();
-      }
-      catch {
+      } catch {
         jobs = null;
         projects = null;
         resources = null;
         throw;
-      }
-      finally {
+      } finally {
         OnRefreshed();
       }
@@ -215,14 +213,13 @@
 
     public void RefreshAsync(Action<Exception> exceptionCallback) {
-      var call = new Func<Exception>(delegate() {
+      var call = new Func<Exception>(delegate () {
         try {
           Refresh();
-        }
-        catch (Exception ex) {
+        } catch (Exception ex) {
           return ex;
         }
         return null;
       });
-      call.BeginInvoke(delegate(IAsyncResult result) {
+      call.BeginInvoke(delegate (IAsyncResult result) {
         Exception ex = call.EndInvoke(result);
         if (ex != null) exceptionCallback(ex);
@@ -244,5 +241,5 @@
       resourceAncestors.Keys.ToList().ForEach(k => resourceDescendants.Add(k, new HashSet<Guid>()));
       foreach (var ra in resourceAncestors) {
-        foreach(var ancestor in ra.Value) {
+        foreach (var ancestor in ra.Value) {
           resourceDescendants[ancestor].Add(ra.Key);
         }
@@ -263,6 +260,6 @@
       // build project descendant list
       projectAncestors.Keys.ToList().ForEach(k => projectDescendants.Add(k, new HashSet<Guid>()));
-      foreach(var pa in projectAncestors) {
-        foreach(var ancestor in pa.Value) {
+      foreach (var pa in projectAncestors) {
+        foreach (var ancestor in pa.Value) {
           projectDescendants[ancestor].Add(pa.Key);
         }
@@ -362,14 +359,13 @@
     }
     public static void StoreAsync(Action<Exception> exceptionCallback, IHiveItem item, CancellationToken cancellationToken) {
-      var call = new Func<Exception>(delegate() {
+      var call = new Func<Exception>(delegate () {
         try {
           Store(item, cancellationToken);
-        }
-        catch (Exception ex) {
+        } catch (Exception ex) {
           return ex;
         }
         return null;
       });
-      call.BeginInvoke(delegate(IAsyncResult result) {
+      call.BeginInvoke(delegate (IAsyncResult result) {
         Exception ex = call.EndInvoke(result);
         if (ex != null) exceptionCallback(ex);
@@ -460,5 +456,5 @@
     public static void UpdateJob(Action<Exception> exceptionCallback, RefreshableJob refreshableJob, CancellationToken cancellationToken) {
       refreshableJob.IsProgressing = true;
-      refreshableJob.Progress.Status = "Saving Job...";
+      refreshableJob.Progress.Message = "Saving Job...";
       HiveClient.StoreAsync(
         new Action<Exception>((Exception ex) => {
@@ -473,5 +469,5 @@
 
       try {
-        refreshableJob.Progress.Start("Saving Job...");
+        refreshableJob.Progress.Start("Saving Job...", ProgressMode.Indeterminate);
         HiveClient.StoreAsync(new Action<Exception>((Exception ex) => {
           throw new Exception("Update failed.", ex);
@@ -492,5 +488,5 @@
       try {
         refreshableJob.IsProgressing = true;
-        refreshableJob.Progress.Start("Connecting to server...");
+        refreshableJob.Progress.Start("Connecting to server...", ProgressMode.Indeterminate);
 
         foreach (OptimizerHiveTask hiveJob in refreshableJob.HiveTasks.OfType<OptimizerHiveTask>()) {
@@ -499,5 +495,5 @@
 
         // upload Job
-        refreshableJob.Progress.Status = "Uploading Job...";
+        refreshableJob.Progress.Message = "Uploading Job...";
         refreshableJob.Job.Id = HiveServiceLocator.Instance.CallHiveService((s) => s.AddJob(refreshableJob.Job, refreshableJob.Job.ResourceIds));
         refreshableJob.Job = HiveServiceLocator.Instance.CallHiveService((s) => s.GetJob(refreshableJob.Job.Id)); // update owner and permissions
@@ -509,5 +505,5 @@
 
         // upload plugins
-        refreshableJob.Progress.Status = "Uploading plugins...";
+        refreshableJob.Progress.Message = "Uploading plugins...";
         this.OnlinePlugins = HiveServiceLocator.Instance.CallHiveService((s) => s.GetPlugins());
         this.AlreadyUploadedPlugins = new List<Plugin>();
@@ -517,5 +513,7 @@
 
         // upload tasks
-        refreshableJob.Progress.Status = "Uploading tasks...";
+        refreshableJob.Progress.Message = "Uploading tasks...";
+        refreshableJob.Progress.ProgressMode = ProgressMode.Determinate;
+        refreshableJob.Progress.ProgressValue = 0;
 
         var tasks = new List<TS.Task>();
@@ -528,6 +526,5 @@
         }
         TS.Task.WaitAll(tasks.ToArray());
-      }
-      finally {
+      } finally {
         refreshableJob.Job.Modified = false;
         refreshableJob.IsProgressing = false;
@@ -615,5 +612,5 @@
         lock (jobCountLocker) {
           progress.ProgressValue = (double)taskCount[0] / totalJobCount;
-          progress.Status = string.Format("Uploaded task ({0} of {1})", taskCount[0], totalJobCount);
+          progress.Message = string.Format("Uploaded task ({0} of {1})", taskCount[0], totalJobCount);
         }
 
@@ -646,9 +643,11 @@
 
         // fetch all task objects to create the full tree of tree of HiveTask objects
-        refreshableJob.Progress.Start("Downloading list of tasks...");
+        refreshableJob.Progress.Start("Downloading list of tasks...", ProgressMode.Indeterminate);
         allTasks = HiveServiceLocator.Instance.CallHiveService(s => s.GetLightweightJobTasksWithoutStateLog(hiveExperiment.Id));
         totalJobCount = allTasks.Count();
 
-        refreshableJob.Progress.Status = "Downloading tasks...";
+        refreshableJob.Progress.Message = "Downloading tasks...";
+        refreshableJob.Progress.ProgressMode = ProgressMode.Determinate;
+        refreshableJob.Progress.ProgressValue = 0.0;
         downloader = new TaskDownloader(allTasks.Select(x => x.Id));
         downloader.StartAsync();
@@ -656,5 +655,5 @@
         while (!downloader.IsFinished) {
           refreshableJob.Progress.ProgressValue = downloader.FinishedCount / (double)totalJobCount;
-          refreshableJob.Progress.Status = string.Format("Downloading/deserializing tasks... ({0}/{1} finished)", downloader.FinishedCount, totalJobCount);
+          refreshableJob.Progress.Message = string.Format("Downloading/deserializing tasks... ({0}/{1} finished)", downloader.FinishedCount, totalJobCount);
           Thread.Sleep(500);
 
@@ -666,5 +665,7 @@
         var parents = allHiveTasks.Values.Where(x => !x.Task.ParentTaskId.HasValue);
 
-        refreshableJob.Progress.Status = "Downloading/deserializing complete. Displaying tasks...";
+        refreshableJob.Progress.Message = "Downloading/deserializing complete. Displaying tasks...";
+        refreshableJob.Progress.ProgressMode = ProgressMode.Indeterminate;
+
         // build child-task tree
         foreach (HiveTask hiveTask in parents) {
@@ -677,10 +678,9 @@
         } else if (refreshableJob.IsPaused()) {
           refreshableJob.ExecutionState = Core.ExecutionState.Paused;
-        } else { 
+        } else {
           refreshableJob.ExecutionState = Core.ExecutionState.Started;
         }
         refreshableJob.OnLoaded();
-      }
-      finally {
+      } finally {
         refreshableJob.IsProgressing = false;
         refreshableJob.Progress.Finish();
@@ -719,6 +719,5 @@
       try {
         return PersistenceUtil.Deserialize<ItemTask>(taskData.Data);
-      }
-      catch {
+      } catch {
         return null;
       }
@@ -731,6 +730,5 @@
     public static void TryAndRepeat(Action action, int repetitions, string errorMessage, ILog log = null) {
       while (true) {
-        try { action(); return; }
-        catch (Exception e) {
+        try { action(); return; } catch (Exception e) {
           if (repetitions == 0) throw new HiveException(errorMessage, e);
           if (log != null) log.LogMessage(string.Format("{0}: {1} - will try again!", errorMessage, e.ToString()));
Index: stable/HeuristicLab.Clients.Hive/3.3/Plugin.cs.frame
===================================================================
--- stable/HeuristicLab.Clients.Hive/3.3/Plugin.cs.frame	(revision 17059)
+++ stable/HeuristicLab.Clients.Hive/3.3/Plugin.cs.frame	(revision 17062)
@@ -37,4 +37,5 @@
   [PluginDependency("HeuristicLab.Hive", "3.3")]  
   [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
   [PluginDependency("HeuristicLab.Optimization", "3.3")]
   [PluginDependency("HeuristicLab.Persistence", "3.3")]
