Index: branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Hubs/JobUpdaterHub.cs
===================================================================
--- branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Hubs/JobUpdaterHub.cs	(revision 13735)
+++ branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Hubs/JobUpdaterHub.cs	(revision 13739)
@@ -1,8 +1,10 @@
 ﻿using HeuristicLab.Clients.Hive.WebJobManager.Services;
 using HeuristicLab.Common;
+using Microsoft.AspNet.Http;
 using Microsoft.AspNet.SignalR;
 using Newtonsoft.Json;
 using System;
 using System.Collections.Generic;
+using System.Threading.Tasks;
 
 namespace HeuristicLab.Clients.Hive.WebJobManager
@@ -15,5 +17,22 @@
         
         private RefreshableJob Job;//Current job (only used as reference, instance gets lost)
-     
+
+        private WebLoginService weblog;
+        private FileOpeningService fileopener;
+        private Guid userId;
+
+        private void loader()
+        {
+            weblog = WebLoginService.Instance;
+            string uid = Context.QueryString["userid"];
+            if (uid == null || uid == "" || Guid.Parse(uid) == Guid.Empty)
+            {
+                userId = Guid.Empty;
+            }
+            else {
+                userId = Guid.Parse(uid);
+                fileopener = weblog.getFileOpener(userId);
+            }
+        }
         /// <summary>
         /// Initial connection call from client
@@ -21,7 +40,8 @@
         public void initConnection()
         {
-            FileOpeningService.Instance.previousids = new List<Guid>();
-            FileOpeningService.Instance.previousLogs = new List<int>();
-            Job = FileOpeningService.Instance.Job;
+            loader();
+            fileopener.previousids = new List<Guid>();
+            fileopener.previousLogs = new List<int>();
+            Job = fileopener.Job;
             updateAll();//start initial update
 
@@ -32,6 +52,7 @@
         public void updateAll()
         {
-            FileOpeningService.Instance.refreshJob();//refresh all data from job
-            Job = FileOpeningService.Instance.Job;
+            loader();
+            fileopener.refreshJob();//refresh all data from job
+            Job = fileopener.Job;
             updateJob();
             foreach (var t in Job.HiveTasks)
@@ -45,5 +66,5 @@
 
         }
-        public void updateJob()
+        private void updateJob()
         {
             Clients.Caller.processJobData(Job.Job.CalculatingCount, Job.Job.FinishedCount);
@@ -59,19 +80,19 @@
                 int index;
                 bool test = false;
-                if (FileOpeningService.Instance.previousids.Contains(task.Task.Id))
+                if (fileopener.previousids.Contains(task.Task.Id))
                 {
-                    index = FileOpeningService.Instance.previousids.IndexOf(task.Task.Id);
+                    index = fileopener.previousids.IndexOf(task.Task.Id);
                 }
                 else
                 {//initial add to previous list, used to check if updates happened
-                    FileOpeningService.Instance.previousids.Add(task.Task.Id);
-                    index = FileOpeningService.Instance.previousids.IndexOf(task.Task.Id);
-                    FileOpeningService.Instance.previousLogs.Add(task.Task.StateLog.Count);
+                    fileopener.previousids.Add(task.Task.Id);
+                    index = fileopener.previousids.IndexOf(task.Task.Id);
+                    fileopener.previousLogs.Add(task.Task.StateLog.Count);
                     test = true;//initial added task, data must be sent
                 }
-                var previous = FileOpeningService.Instance.previousLogs[index];
+                var previous = fileopener.previousLogs[index];
                 if (test || previous < task.Task.StateLog.Count)
                 {//Checks if change happened so data is not sent unnecessary 
-                    FileOpeningService.Instance.previousLogs[index] = task.Task.StateLog.Count;
+                    fileopener.previousLogs[index] = task.Task.StateLog.Count;
                     JsonSerializerSettings settings = new JsonSerializerSettings();
                     settings.ContractResolver = new JsonTaskResolver();
@@ -94,5 +115,6 @@
         public void restartTask(Guid id)
         {
-            ((HiveServiceLocatorWeb)(HiveServiceLocatorWeb.Instance)).getHiveServiceClient().RestartTask(id);
+            loader();
+            weblog.getServiceLocator(userId).getHiveServiceClient().RestartTask(id);
         }
     }
Index: branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Hubs/ProgressHub.cs
===================================================================
--- branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Hubs/ProgressHub.cs	(revision 13735)
+++ branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Hubs/ProgressHub.cs	(revision 13739)
@@ -15,5 +15,21 @@
     public class ProgressHub : Hub
     {
-        private RefreshableJob Job;
+        private WebLoginService weblog;
+        private Guid userId;
+        private FileOpeningService fileopener;
+        private void loader()
+        {
+            weblog = WebLoginService.Instance;
+            string uid = Context.QueryString["userid"];
+            if (uid == null || uid == "" || Guid.Parse(uid) == Guid.Empty)
+            {
+                userId = Guid.Empty;
+            }
+            else {
+                userId = Guid.Parse(uid);
+                fileopener = weblog.getFileOpener(userId);
+            }
+        }
+
         /// <summary>
         /// First message from client
@@ -22,8 +38,7 @@
         public void HandleMessage(string receivedString)
         {
-
+            loader();
             Clients.Caller.processMessage("Connection Established");
-            Job = FileOpeningService.Instance.Job;
-            Job.Progress.StatusChanged += runHub;
+            fileopener.Job.Progress.StatusChanged += runHub;
         }
         /// <summary>
@@ -33,9 +48,10 @@
         public void ChangeNameResource(string name, string resource)
         {
+            loader();
             if (name != null)
-                FileOpeningService.Instance.Job.Job.Name = name;
+                fileopener.Job.Job.Name = name;
             if(resource != null && resource != "")
             {
-                FileOpeningService.Instance.Job.Job.ResourceNames += "/" + resource;
+                fileopener.Job.Job.ResourceNames += "/" + resource;
             }
         }
@@ -49,6 +65,6 @@
         public void ToggleChild(int[][] arr)
         {
-            Job = FileOpeningService.Instance.Job;
-            HiveTask current = Job.HiveTasks.ToList()[0];
+            loader();
+            HiveTask current = fileopener.Job.HiveTasks.ToList()[0];
             if (arr.Length == 0)
             {//check if upper job
@@ -92,6 +108,6 @@
         public void ChangePriority(int[][] arr, int prior)
         {
-            Job = FileOpeningService.Instance.Job;
-            HiveTask current = Job.HiveTasks.ToList()[0];
+            loader();
+            HiveTask current = fileopener.Job.HiveTasks.ToList()[0];
             if (arr.Length == 0)
             {//check if upper job
@@ -132,7 +148,8 @@
         public void runHub(object sender, EventArgs e)
         {
+            loader();
             int value = 0;
 
-            switch (Job.Progress.Status)
+            switch (fileopener.Job.Progress.Status)
             {
                 case "Connecting to server...":
@@ -152,10 +169,10 @@
                     break;
                 default://Tasks are uploading individually
-                    value = (int)(50 + (40 * Job.Progress.ProgressValue));
+                    value = (int)(50 + (40 * fileopener.Job.Progress.ProgressValue));
                     break;
 
             }
             //send info to client
-            Clients.Caller.processMessage(Job.Progress.Status, value);
+            Clients.Caller.processMessage(fileopener.Job.Progress.Status, value);
 
         }
