Index: branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/Imports/AccessAdministrationClient.cs
===================================================================
--- branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/Imports/AccessAdministrationClient.cs	(revision 13860)
+++ branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/Imports/AccessAdministrationClient.cs	(revision 13862)
@@ -26,9 +26,9 @@
 using System.ServiceModel;
 using HeuristicLab.Clients.Hive.WebJobManager.ViewModels;
-using HeuristicLab.Clients.Hive.WebJobManager.Services;
 using System.Collections.Generic;
 using System.ServiceModel.Security;
-
-namespace HeuristicLab.Clients.Access.Administration
+using HeuristicLab.Clients.Access;
+
+namespace HeuristicLab.Clients.Hive.WebJobManager.Services.Imports
 {
     /// <summary>
@@ -485,4 +485,21 @@
         }
         #endregion
+
+        internal bool CheckLogin()
+        {
+            try
+            {
+                this.RefreshUsers();
+                return true;
+            }
+            catch (SecurityAccessDeniedException e)
+            {
+                return false;
+            }
+            catch (MessageSecurityException e)
+            {
+                return false;
+            }
+        }
     }
 }
Index: branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/Imports/HiveAdminClientWeb.cs
===================================================================
--- branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/Imports/HiveAdminClientWeb.cs	(revision 13860)
+++ branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/Imports/HiveAdminClientWeb.cs	(revision 13862)
@@ -25,6 +25,7 @@
 using HeuristicLab.Core;
 using HeuristicLab.Clients.Hive.WebJobManager.Services;
-
-namespace HeuristicLab.Clients.Hive
+using System.ServiceModel.Security;
+
+namespace HeuristicLab.Clients.Hive.WebJobManager.Services.Imports
 {
     [Item("Hive Administrator", "Hive Administrator")]
@@ -99,7 +100,7 @@
                 });
             }
-            catch
-            {
-                throw;
+            catch(Exception e)
+            {
+                throw e;
             }
             finally
@@ -200,4 +201,21 @@
             }
         }
+
+        internal bool CheckLogin()
+        {
+            try
+            {
+                this.Refresh();
+                return true;
+            }
+            catch (MessageSecurityException e)
+            {
+                return false;
+            }
+            catch(SecurityAccessDeniedException e)
+            {
+                return false;
+            }
+        }
     }
 }
Index: branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/Imports/HiveClientWeb.cs
===================================================================
--- branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/Imports/HiveClientWeb.cs	(revision 13860)
+++ branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/Imports/HiveClientWeb.cs	(revision 13862)
@@ -33,10 +33,7 @@
 using HeuristicLab.PluginInfrastructure;
 using TS = System.Threading.Tasks;
-using HeuristicLab.Clients.Hive.WebJobManager.Services;
-using HeuristicLab.Clients.Common.Properties;
 using Microsoft.AspNetCore.Hosting;
-using HeuristicLab.Clients.Hive.WebJobManager.Services.Imports;
-
-namespace HeuristicLab.Clients.Hive.WebJobManager
+
+namespace HeuristicLab.Clients.Hive.WebJobManager.Services.Imports
 {
     /// <summary>
Index: branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/Imports/HiveServiceLocatorWeb.cs
===================================================================
--- branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/Imports/HiveServiceLocatorWeb.cs	(revision 13860)
+++ branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/Imports/HiveServiceLocatorWeb.cs	(revision 13862)
@@ -11,5 +11,5 @@
 using System.Threading.Tasks;
 
-namespace HeuristicLab.Clients.Hive.WebJobManager.Services
+namespace HeuristicLab.Clients.Hive.WebJobManager.Services.Imports
 {
     /// <summary>
Index: branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/Imports/OkbAdministrationWebClient.cs
===================================================================
--- branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/Imports/OkbAdministrationWebClient.cs	(revision 13862)
+++ branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/Imports/OkbAdministrationWebClient.cs	(revision 13862)
@@ -0,0 +1,358 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Clients.Common;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using System.ServiceModel;
+using HeuristicLab.Clients.Hive.WebJobManager.Services;
+using HeuristicLab.Clients.Hive.WebJobManager.ViewModels;
+using System.ServiceModel.Security;
+using HeuristicLab.Clients.OKB.Administration;
+
+namespace HeuristicLab.Clients.Hive.WebJobManager.Services.Imports
+{
+    [Item("OkbAdministrationWebClient", "OKB administration web client.")]
+    public sealed class OkbAdministrationWebClient : IContent
+    {
+
+
+
+        private string log;
+        private string pass;
+
+        private AdministrationServiceClient client;
+        public Guid UserId { get; set; }
+        public OkbAdministrationWebClient(Guid u) : this()
+        {
+            UserId = u;
+            client = null;
+            log = WebLoginService.Instance.getServiceLocator(UserId).Username;
+            pass = WebLoginService.Instance.getServiceLocator(UserId).Password;
+        }
+        public OkbAdministrationWebClient(LoginViewModel log, string pass) : this()
+        {
+            client = null;
+            this.UserId = log.userId;
+            this.log = log.loginName;
+            this.pass = pass;
+
+        }
+
+
+        #region Properties
+        private ItemCollection<Platform> platforms;
+        public ItemCollection<Platform> Platforms
+        {
+            get { return platforms; }
+        }
+        private ItemCollection<AlgorithmClass> algorithmClasses;
+        public ItemCollection<AlgorithmClass> AlgorithmClasses
+        {
+            get { return algorithmClasses; }
+        }
+        private ItemCollection<Algorithm> algorithms;
+        public ItemCollection<Algorithm> Algorithms
+        {
+            get { return algorithms; }
+        }
+        private ItemCollection<ProblemClass> problemClasses;
+        public ItemCollection<ProblemClass> ProblemClasses
+        {
+            get { return problemClasses; }
+        }
+        private ItemCollection<Problem> problems;
+        public ItemCollection<Problem> Problems
+        {
+            get { return problems; }
+        }
+        #endregion
+
+        public OkbAdministrationWebClient() { }
+
+        #region Refresh
+        public void Refresh()
+        {
+            OnRefreshing();
+
+            platforms = new OKBItemCollection<Platform>();
+            algorithmClasses = new OKBItemCollection<AlgorithmClass>();
+            algorithms = new OKBItemCollection<Algorithm>();
+            problemClasses = new OKBItemCollection<ProblemClass>();
+            problems = new OKBItemCollection<Problem>();
+
+            try
+            {
+                platforms.AddRange(CallAdministrationService<List<Platform>>(s => s.GetPlatforms()).OrderBy(x => x.Name));
+                algorithmClasses.AddRange(CallAdministrationService<List<AlgorithmClass>>(s => s.GetAlgorithmClasses()).OrderBy(x => x.Name));
+                algorithms.AddRange(CallAdministrationService<List<Algorithm>>(s => s.GetAlgorithms()).OrderBy(x => x.Name));
+                problemClasses.AddRange(CallAdministrationService<List<ProblemClass>>(s => s.GetProblemClasses()).OrderBy(x => x.Name));
+                problems.AddRange(CallAdministrationService<List<Problem>>(s => s.GetProblems()).OrderBy(x => x.Name));
+            }
+            finally
+            {
+                OnRefreshed();
+            }
+        }
+        public void RefreshAsync(Action<Exception> exceptionCallback)
+        {
+            var call = new Func<Exception>(delegate ()
+            {
+                try
+                {
+                    Refresh();
+                }
+                catch (Exception ex)
+                {
+                    return ex;
+                }
+                return null;
+            });
+            call.BeginInvoke(delegate (IAsyncResult result)
+            {
+                Exception ex = call.EndInvoke(result);
+                if (ex != null) exceptionCallback(ex);
+            }, null);
+        }
+        #endregion
+
+        #region Store
+        public void Store(IOKBItem item)
+        {
+            if (item.Id == 0)
+            {
+                if (item is Platform)
+                    item.Id = CallAdministrationService<long>(s => s.AddPlatform((Platform)item));
+                else if (item is AlgorithmClass)
+                    item.Id = CallAdministrationService<long>(s => s.AddAlgorithmClass((AlgorithmClass)item));
+                else if (item is Algorithm)
+                    item.Id = CallAdministrationService<long>(s => s.AddAlgorithm((Algorithm)item));
+                else if (item is ProblemClass)
+                    item.Id = CallAdministrationService<long>(s => s.AddProblemClass((ProblemClass)item));
+                else if (item is Problem)
+                    item.Id = CallAdministrationService<long>(s => s.AddProblem((Problem)item));
+            }
+            else
+            {
+                if (item is Platform)
+                    CallAdministrationService(s => s.UpdatePlatform((Platform)item));
+                else if (item is AlgorithmClass)
+                    CallAdministrationService(s => s.UpdateAlgorithmClass((AlgorithmClass)item));
+                else if (item is Algorithm)
+                    CallAdministrationService(s => s.UpdateAlgorithm((Algorithm)item));
+                else if (item is ProblemClass)
+                    CallAdministrationService(s => s.UpdateProblemClass((ProblemClass)item));
+                else if (item is Problem)
+                    CallAdministrationService(s => s.UpdateProblem((Problem)item));
+            }
+        }
+        #endregion
+
+        #region Delete
+        public  void Delete(IOKBItem item)
+        {
+            if (item is Platform)
+                CallAdministrationService(s => s.DeletePlatform(item.Id));
+            else if (item is AlgorithmClass)
+                CallAdministrationService(s => s.DeleteAlgorithmClass(item.Id));
+            else if (item is Algorithm)
+                CallAdministrationService(s => s.DeleteAlgorithm(item.Id));
+            else if (item is ProblemClass)
+                CallAdministrationService(s => s.DeleteProblemClass(item.Id));
+            else if (item is Problem)
+                CallAdministrationService(s => s.DeleteProblem(item.Id));
+            item.Id = 0;
+        }
+        #endregion
+
+        #region Algorithm Methods
+        public  List<Guid> GetAlgorithmUsers(long algorithmId)
+        {
+            return CallAdministrationService<List<Guid>>(s => s.GetAlgorithmUsers(algorithmId));
+        }
+        public  void UpdateAlgorithmUsers(long algorithmId, List<Guid> users)
+        {
+            CallAdministrationService(s => s.UpdateAlgorithmUsers(algorithmId, users));
+        }
+        public  byte[] GetAlgorithmData(long algorithmId)
+        {
+            return CallAdministrationService<byte[]>(s => s.GetAlgorithmData(algorithmId));
+        }
+        public  void UpdateAlgorithmData(long algorithmId, byte[] algorithmData)
+        {
+            CallAdministrationService(s => s.UpdateAlgorithmData(algorithmId, algorithmData));
+        }
+        #endregion
+
+        #region Problem Methods
+        public  List<Guid> GetProblemUsers(long problemId)
+        {
+            return CallAdministrationService<List<Guid>>(s => s.GetProblemUsers(problemId));
+        }
+        public  void UpdateProblemUsers(long problemId, List<Guid> users)
+        {
+            CallAdministrationService(s => s.UpdateProblemUsers(problemId, users));
+        }
+        public  byte[] GetProblemData(long problemId)
+        {
+            return CallAdministrationService<byte[]>(s => s.GetProblemData(problemId));
+        }
+        public  void UpdateProblemData(long problemId, byte[] problemData)
+        {
+            CallAdministrationService(s => s.UpdateProblemData(problemId, problemData));
+        }
+        #endregion
+
+        #region Events
+        public event EventHandler Refreshing;
+        private void OnRefreshing()
+        {
+            EventHandler handler = Refreshing;
+            if (handler != null) handler(this, EventArgs.Empty);
+        }
+        public event EventHandler Refreshed;
+        private void OnRefreshed()
+        {
+            var handler = Refreshed;
+            if (handler != null) handler(this, EventArgs.Empty);
+        }
+        #endregion
+
+        #region Helpers
+        private void CallAdministrationService(Action<IAdministrationService> call)
+        {
+            if (client == null || client.State == CommunicationState.Closed || client.State == CommunicationState.Faulted)
+            {
+                client = createServiceClient();
+            }
+            try
+            {
+                call(client);
+            }
+            finally
+            {
+                try
+                {
+                    client.Close();
+                }
+                catch (Exception)
+                {
+                    client.Abort();
+                }
+            }
+        }
+        private T CallAdministrationService<T>(Func<IAdministrationService, T> call)
+        {
+            if (client == null || client.State == CommunicationState.Closed || client.State == CommunicationState.Faulted)
+            {
+                client = createServiceClient();
+            }
+            try
+            {
+                return call(client);
+            }
+            finally
+            {
+                try
+                {
+                    client.Close();
+                }
+                catch (Exception)
+                {
+                    client.Abort();
+                }
+            }
+        }
+        #endregion
+
+        #region Binding
+        private AdministrationServiceClient createServiceClient()
+        {
+            WSHttpBinding binding = new WSHttpBinding();
+            
+
+            binding.Name = "wsHttpBinding_IAdministrationService";
+            binding.CloseTimeout = TimeSpan.FromMinutes(1);
+            binding.OpenTimeout = TimeSpan.FromMinutes(1);
+            binding.ReceiveTimeout = TimeSpan.FromMinutes(10);
+            binding.SendTimeout = TimeSpan.FromMinutes(1);
+            binding.BypassProxyOnLocal = false;
+            binding.TransactionFlow = false;
+
+            binding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
+            binding.MaxBufferPoolSize = 524288;
+            binding.MaxReceivedMessageSize = 200000000;
+            binding.MessageEncoding = WSMessageEncoding.Text;
+
+            binding.TextEncoding = System.Text.Encoding.UTF8;
+            binding.UseDefaultWebProxy = true;
+            // binding.TransferMode = TransferMode.Buffered;
+            binding.AllowCookies = false;
+
+            binding.ReaderQuotas.MaxDepth = 32;
+            binding.ReaderQuotas.MaxStringContentLength = 8192;
+            binding.ReaderQuotas.MaxArrayLength = 200000000;
+            binding.ReaderQuotas.MaxBytesPerRead = 4096;
+            binding.ReaderQuotas.MaxNameTableCharCount = 16384;
+
+            binding.ReliableSession.Ordered = true;
+            binding.ReliableSession.InactivityTimeout = TimeSpan.Parse("00:10:00");
+            binding.ReliableSession.Enabled = false;
+
+
+            binding.Security.Mode = SecurityMode.Message;
+            binding.Security.Message.ClientCredentialType = MessageCredentialType.UserName;
+            binding.Security.Message.AlgorithmSuite = System.ServiceModel.Security.SecurityAlgorithmSuite.Default;
+            // binding.Security.Message.NegotiateServiceCredential = true;
+
+
+            EndpointAddress end = new EndpointAddress("http://services.heuristiclab.com/OKB-3.3/AdministrationService.svc");
+
+            AdministrationServiceClient client = new AdministrationServiceClient(binding, end);
+            client.ClientCredentials.UserName.UserName = log;
+            client.ClientCredentials.UserName.Password = pass;
+            client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None;
+
+            return client;
+        }
+
+        internal bool CheckLogin()
+        {
+            try
+            {
+                this.Refresh();
+                return true;
+            }
+            catch (MessageSecurityException e )
+            {
+                return false;
+            }
+            catch (SecurityAccessDeniedException ex)
+            {
+                return false;
+            }
+        }
+        #endregion
+    }
+}
Index: branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/Imports/QueryWebClient.cs
===================================================================
--- branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/Imports/QueryWebClient.cs	(revision 13862)
+++ branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/Imports/QueryWebClient.cs	(revision 13862)
@@ -0,0 +1,313 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using HeuristicLab.Clients.Common;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.Xml;
+using System.ServiceModel;
+using HeuristicLab.Clients.Hive.WebJobManager.Services;
+using HeuristicLab.Clients.OKB.Query;
+using System.ServiceModel.Security;
+using HeuristicLab.Clients.Hive.WebJobManager.ViewModels;
+
+namespace HeuristicLab.Clients.Hive.WebJobManager.Services.Imports
+{
+    [Item("QueryWebClient", "OKB query client.")]
+    public sealed class QueryWebClient : IContent
+    {
+        private string log;
+        private string pass;
+
+        private QueryServiceClient client; 
+        public Guid UserId { get; set; }
+        public QueryWebClient(Guid u) : this()
+        {
+            UserId = u;
+            client = null;
+            log = WebLoginService.Instance.getServiceLocator(UserId).Username;
+            pass = WebLoginService.Instance.getServiceLocator(UserId).Password;
+        }
+        public QueryWebClient(LoginViewModel log, string pass): this()
+        {
+            client = null;
+            this.UserId = log.userId;
+            this.log = log.loginName;
+            this.pass = pass;
+            
+        }
+        #region Properties
+        private List<Filter> filters;
+        public IEnumerable<Filter> Filters
+        {
+            get { return filters; }
+        }
+        private List<ValueName> valueNames;
+        public IEnumerable<ValueName> ValueNames
+        {
+            get { return valueNames; }
+        }
+        #endregion
+
+        private QueryWebClient()
+        {
+            filters = new List<Filter>();
+            valueNames = new List<ValueName>();
+        }
+
+        #region Refresh
+        public void Refresh()
+        {
+            OnRefreshing();
+            filters = new List<Filter>();
+            valueNames = new List<ValueName>();
+            try
+            {
+                filters.AddRange(CallQueryService<List<Filter>>(s => s.GetFilters()));
+                valueNames.AddRange(CallQueryService<List<ValueName>>(s => s.GetValueNames()));
+            }
+            finally
+            {
+                OnRefreshed();
+            }
+        }
+        public void RefreshAsync(Action<Exception> exceptionCallback)
+        {
+            var call = new Func<Exception>(delegate ()
+            {
+                try
+                {
+                    Refresh();
+                }
+                catch (Exception ex)
+                {
+                    return ex;
+                }
+                return null;
+            });
+            call.BeginInvoke(delegate (IAsyncResult result)
+            {
+                Exception ex = call.EndInvoke(result);
+                if (ex != null) exceptionCallback(ex);
+            }, null);
+        }
+        #endregion
+
+        #region Query Methods
+        public long GetNumberOfRuns(Filter filter)
+        {
+            return CallQueryService<long>(x => x.GetNumberOfRuns(filter));
+        }
+        public IEnumerable<long> GetRunIds(Filter filter)
+        {
+            return CallQueryService<IEnumerable<long>>(x => x.GetRunIds(filter));
+        }
+        public IEnumerable<Run> GetRuns(IEnumerable<long> ids, bool includeBinaryValues)
+        {
+            return CallQueryService<IEnumerable<Run>>(s => s.GetRuns(ids.ToList(), includeBinaryValues));
+        }
+        public IEnumerable<Run> GetRunsWithValues(IEnumerable<long> ids, bool includeBinaryValues, IEnumerable<ValueName> vn)
+        {
+            return CallQueryService<IEnumerable<Run>>(s => s.GetRunsWithValues(ids.ToList(), includeBinaryValues, vn.ToList()));
+        }
+        #endregion
+
+        #region OKB-Item Conversion
+        public Optimization.IRun ConvertToOptimizationRun(Run run)
+        {
+            Optimization.Run optRun = new Optimization.Run();
+            foreach (Value value in run.ParameterValues)
+                optRun.Parameters.Add(value.Name, ConvertToItem(value));
+            foreach (Value value in run.ResultValues)
+                optRun.Results.Add(value.Name, ConvertToItem(value));
+            return optRun;
+        }
+
+        public IItem ConvertToItem(Value value)
+        {
+            if (value is BinaryValue)
+            {
+                IItem item = null;
+                var binaryValue = (BinaryValue)value;
+                if (binaryValue.Value != null)
+                {
+                    using (var stream = new MemoryStream(binaryValue.Value))
+                    {
+                        try
+                        {
+                            item = XmlParser.Deserialize<IItem>(stream);
+                        }
+                        catch (Exception) { }
+                        stream.Close();
+                    }
+                }
+                return item ?? new Data.StringValue(value.DataType.Name);
+            }
+            else if (value is BoolValue)
+            {
+                return new Data.BoolValue(((BoolValue)value).Value);
+            }
+            else if (value is FloatValue)
+            {
+                return new Data.DoubleValue(((FloatValue)value).Value);
+            }
+            else if (value is PercentValue)
+            {
+                return new Data.PercentValue(((PercentValue)value).Value);
+            }
+            else if (value is DoubleValue)
+            {
+                return new Data.DoubleValue(((DoubleValue)value).Value);
+            }
+            else if (value is IntValue)
+            {
+                return new Data.IntValue((int)((IntValue)value).Value);
+            }
+            else if (value is LongValue)
+            {
+                return new Data.IntValue((int)((LongValue)value).Value);
+            }
+            else if (value is StringValue)
+            {
+                return new Data.StringValue(((StringValue)value).Value);
+            }
+            else if (value is TimeSpanValue)
+            {
+                return new Data.TimeSpanValue(TimeSpan.FromSeconds((long)((TimeSpanValue)value).Value));
+            }
+            return null;
+        }
+        #endregion
+
+        #region Events
+        public event EventHandler Refreshing;
+        private void OnRefreshing()
+        {
+            EventHandler handler = Refreshing;
+            if (handler != null) handler(this, EventArgs.Empty);
+        }
+        public event EventHandler Refreshed;
+        private void OnRefreshed()
+        {
+            EventHandler handler = Refreshed;
+            if (handler != null) handler(this, EventArgs.Empty);
+        }
+        #endregion
+
+        #region Helpers
+        private T CallQueryService<T>(Func<IQueryService, T> call)
+        {
+
+            if (client == null || client.State == CommunicationState.Closed || client.State == CommunicationState.Faulted)
+            {
+            client = createServiceClient();
+            }
+
+            try
+            {
+                return call(client);
+            }
+            finally
+            {
+                try
+                {
+                    client.Close();
+                }
+                catch (Exception)
+                {
+                    client.Abort();
+                }
+            }
+        }
+
+        private QueryServiceClient createServiceClient()
+        {
+            WSHttpBinding binding = new WSHttpBinding();
+            // I think most (or all) of these are defaults--I just copied them from app.config:
+
+            binding.Name = "wsHttpBinding_IQueryService";
+            binding.CloseTimeout = TimeSpan.FromMinutes(1);
+            binding.OpenTimeout = TimeSpan.FromMinutes(1);
+            binding.ReceiveTimeout = TimeSpan.FromMinutes(10);
+            binding.SendTimeout = TimeSpan.FromMinutes(1);
+            binding.BypassProxyOnLocal = false;
+            binding.TransactionFlow = false;
+
+            binding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
+            binding.MaxBufferPoolSize = 524288;
+            binding.MaxReceivedMessageSize = 200000000;
+            binding.MessageEncoding = WSMessageEncoding.Text;
+
+            binding.TextEncoding = System.Text.Encoding.UTF8;
+            binding.UseDefaultWebProxy = true;
+            // binding.TransferMode = TransferMode.Buffered;
+            binding.AllowCookies = false;
+
+            binding.ReaderQuotas.MaxDepth = 32;
+            binding.ReaderQuotas.MaxStringContentLength = 8192;
+            binding.ReaderQuotas.MaxArrayLength = 200000000;
+            binding.ReaderQuotas.MaxBytesPerRead = 4096;
+            binding.ReaderQuotas.MaxNameTableCharCount = 16384;
+
+            binding.ReliableSession.Ordered = true;
+            binding.ReliableSession.InactivityTimeout = TimeSpan.Parse("00:10:00");
+            binding.ReliableSession.Enabled = false;
+
+
+            binding.Security.Mode = SecurityMode.Message;
+            binding.Security.Message.ClientCredentialType = MessageCredentialType.UserName;
+            binding.Security.Message.AlgorithmSuite = System.ServiceModel.Security.SecurityAlgorithmSuite.Default;
+           // binding.Security.Message.NegotiateServiceCredential = true;
+
+
+            EndpointAddress end = new EndpointAddress("http://services.heuristiclab.com/OKB-3.3/QueryService.svc");
+
+            QueryServiceClient client = new QueryServiceClient(binding, end);
+            client.ClientCredentials.UserName.UserName = log;
+            client.ClientCredentials.UserName.Password = pass;
+            client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None;
+
+            return client;
+        }
+
+        internal bool CheckLogin()
+        {
+            try
+            {
+                this.Refresh();
+                return true;
+            }
+            catch (MessageSecurityException e)
+            {
+                return false;
+            }
+            catch (SecurityAccessDeniedException e)
+            {
+                return false;
+            }
+        }
+        #endregion
+    }
+}
Index: branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/JSONResolvers/JsonTaskResolver.cs
===================================================================
--- branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/JSONResolvers/JsonTaskResolver.cs	(revision 13862)
+++ branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/JSONResolvers/JsonTaskResolver.cs	(revision 13862)
@@ -0,0 +1,60 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using Newtonsoft.Json;
+using Newtonsoft.Json.Serialization;
+using System.Reflection;
+
+namespace HeuristicLab.Clients.Hive.WebJobManager.Services
+{
+    /// <summary>
+    /// Throws some properties out to save on bandwidth space while refreshing 
+    /// the selected job
+    /// </summary>
+    public class JsonTaskResolver : DefaultContractResolver
+    {
+        protected override JsonProperty CreateProperty(MemberInfo member,
+                                            MemberSerialization memberSerialization)
+        {
+            JsonProperty property = base.CreateProperty(member, memberSerialization);
+            if (property.PropertyName == "ItemImage" ||
+                property.PropertyName == "Parameters" ||
+                property.PropertyName == "OperatorGraph" ||
+                property.PropertyName == "DistanceMatrix" ||
+                property.PropertyName == "Operators" ||
+                property.PropertyName == "Engine" ||
+                property.PropertyName == "ActualValue" ||
+                property.PropertyName == "CurrentScope" ||
+                property.PropertyName == "Problems" ||
+                property.PropertyName == "Random" ||
+                property.PropertyName == "Optimizer" ||
+                property.PropertyName == "Optimizers" ||
+                property.PropertyName == "Problem" ||
+                property.PropertyName == "NestedOptimizers")
+            {
+                property.ShouldSerialize = instanceOfProblematic => false;
+            }
+
+            return property;
+        }
+    }
+
+}
Index: branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/WebLoginService.cs
===================================================================
--- branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/WebLoginService.cs	(revision 13860)
+++ branches/WebJobManager/HeuristicLab.Clients.Hive.WebJobManager/Services/WebLoginService.cs	(revision 13862)
@@ -21,6 +21,6 @@
 
 
-using HeuristicLab.Clients.Access.Administration;
 using HeuristicLab.Clients.Hive.WebJobManager.Models;
+using HeuristicLab.Clients.Hive.WebJobManager.Services.Imports;
 using HeuristicLab.Clients.Hive.WebJobManager.ViewModels;
 using System;
@@ -48,4 +48,5 @@
         private List<HiveWebUser> loggedinUsers;
         private List<QueryWebClient> queryclients;
+        private List<OkbAdministrationWebClient> okbmanclients;
         /// <summary>
         /// Service instance that keeps all the information per user seperated. Data is in  different lists so 
@@ -77,5 +78,6 @@
             adminclients = new List<HiveAdminClientWeb>();
             loggedinUsers = new List<HiveWebUser>();
-            queryclients = new List<QueryWebClient>(); 
+            queryclients = new List<QueryWebClient>();
+            okbmanclients = new List<OkbAdministrationWebClient>();
         }
         /// <summary>
@@ -94,13 +96,23 @@
             loggedIn.Add(log);
             locators.Add(loc);
+            
             webclients.Add(new HiveClientWeb(loc, log.userId));
             fileopeners.Add(new FileOpeningService(log.userId));
             jobopeners.Add(new FileOpeningService(log.userId));
-            accessclients.Add(new AccessAdministrationClient(log.userId));
-            adminclients.Add(new HiveAdminClientWeb(log.userId));
+            var acc = new AccessAdministrationClient(log.userId);
+            if(acc.CheckLogin())
+                accessclients.Add(acc);
             loggedinUsers.Add(new HiveWebUser(log.userId, log.loginName, false).updateUserInfo());
-            queryclients.Add(new QueryWebClient(log.userId));
-        }
-        public void newLoginOKBOnly(LoginViewModel log, QueryWebClient qwc)
+            var ad = new HiveAdminClientWeb(log.userId);
+            if(ad.CheckLogin())
+                adminclients.Add(ad);  
+            var qu = new QueryWebClient(log.userId);
+            if(qu.CheckLogin())
+                queryclients.Add(qu);
+            var okb = new OkbAdministrationWebClient(log.userId);
+            if (okb.CheckLogin())
+                okbmanclients.Add(okb);
+        }
+        public void newLoginOKBOnly(LoginViewModel log, QueryWebClient qwc, string pass)
         {
             destroyPossiblePreviousSessions(log.loginName);
@@ -113,4 +125,7 @@
             queryclients.Add(qwc);
             loggedinUsers.Add(new HiveWebUser(log.userId, log.loginName, true).updateUserInfo());
+            var okb = new OkbAdministrationWebClient(log, pass);
+            if (okb.CheckLogin())
+                okbmanclients.Add(okb);
             
         }
@@ -194,4 +209,9 @@
         {
             return loggedinUsers.Find(x => x.webIdToken == id);
+        }
+
+        public OkbAdministrationWebClient getOkbAdminClient(Guid id)
+        {
+            return okbmanclients.Find(x => x.UserId == id);
         }
         /// <summary>
@@ -209,4 +229,5 @@
             adminclients.RemoveAll(x => x.userId == id);
             queryclients.RemoveAll(x => x.UserId == id);
+            okbmanclients.RemoveAll(x => x.UserId == id);
             loggedIn.RemoveAll(x => x.userId == id);
             loggedinUsers.RemoveAll(x => x.webIdToken == id);
