Index: /trunk/sources/HeuristicLab.Hive.Contracts/HeuristicLab.Hive.Contracts.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Contracts/HeuristicLab.Hive.Contracts.csproj	(revision 799)
+++ /trunk/sources/HeuristicLab.Hive.Contracts/HeuristicLab.Hive.Contracts.csproj	(revision 800)
@@ -69,4 +69,5 @@
     <Compile Include="Interfaces\IClientManager.cs" />
     <Compile Include="Interfaces\IJobManager.cs" />
+    <Compile Include="Interfaces\IServerConsoleFacade.cs" />
     <Compile Include="Interfaces\IUserRoleManager.cs" />
     <Compile Include="MessageContainer.cs" />
Index: /trunk/sources/HeuristicLab.Hive.Contracts/Interfaces/IServerConsoleFacade.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Contracts/Interfaces/IServerConsoleFacade.cs	(revision 800)
+++ /trunk/sources/HeuristicLab.Hive.Contracts/Interfaces/IServerConsoleFacade.cs	(revision 800)
@@ -0,0 +1,14 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ServiceModel;
+
+namespace HeuristicLab.Hive.Contracts.Interfaces {
+  /// <summary>
+  /// Facade for the server management console
+  /// </summary>
+  [ServiceContract]
+  public interface IServerConsoleFacade : IClientManager, IJobManager, IUserRoleManager {
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/ClientManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/ClientManager.cs	(revision 800)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/ClientManager.cs	(revision 800)
@@ -0,0 +1,26 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.Core {
+  class ClientManager: IClientManager {
+    #region IClientManager Members
+
+    public List<ClientInfo> GetAllClients() {
+      return new List<ClientInfo>();
+    }
+
+    public List<ClientGroup> GetAllClientGroups() {
+      return new List<ClientGroup>();
+    }
+
+    public List<UpTimeStatistics> GetAllUpTimeStatistics() {
+      return new List<UpTimeStatistics>();
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/HeuristicLab.Hive.Server.Core.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/HeuristicLab.Hive.Server.Core.csproj	(revision 799)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/HeuristicLab.Hive.Server.Core.csproj	(revision 800)
@@ -49,6 +49,10 @@
   <ItemGroup>
     <Compile Include="ClientCommunicator.cs" />
+    <Compile Include="ClientManager.cs" />
     <Compile Include="HiveServerCorePlugin.cs" />
+    <Compile Include="JobManager.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ServerConsoleFacade.cs" />
+    <Compile Include="UserRoleManager.cs" />
   </ItemGroup>
   <ItemGroup>
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/JobManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/JobManager.cs	(revision 800)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/JobManager.cs	(revision 800)
@@ -0,0 +1,18 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.Core {
+  class JobManager: IJobManager {
+    #region IJobManager Members
+
+    public List<Job> GetAllJobs() {
+      throw new NotImplementedException();
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/ServerConsoleFacade.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/ServerConsoleFacade.cs	(revision 800)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/ServerConsoleFacade.cs	(revision 800)
@@ -0,0 +1,48 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.Core {
+  public class ServerConsoleFacade: IServerConsoleFacade {
+    private IClientManager clientManager = new ClientManager();
+    
+    #region IClientManager Members
+
+    public List<ClientInfo> GetAllClients() {
+      return clientManager.GetAllClients();
+    }
+
+    public List<ClientGroup> GetAllClientGroups() {
+      return clientManager.GetAllClientGroups();
+    }
+
+    public List<UpTimeStatistics> GetAllUpTimeStatistics() {
+      return clientManager.GetAllUpTimeStatistics();
+    }
+
+    #endregion
+
+    #region IJobManager Members
+
+    public List<HeuristicLab.Hive.Contracts.BusinessObjects.Job> GetAllJobs() {
+      throw new NotImplementedException();
+    }
+
+    #endregion
+
+    #region IUserRoleManager Members
+
+    public List<HeuristicLab.Hive.Contracts.BusinessObjects.User> GetAllUsers() {
+      throw new NotImplementedException();
+    }
+
+    public List<HeuristicLab.Hive.Contracts.BusinessObjects.UserGroup> GetAllUserGroups() {
+      throw new NotImplementedException();
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/UserRoleManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/UserRoleManager.cs	(revision 800)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/UserRoleManager.cs	(revision 800)
@@ -0,0 +1,22 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.Core {
+  class UserRoleManager: IUserRoleManager {
+    #region IUserRoleManager Members
+
+    public List<User> GetAllUsers() {
+      throw new NotImplementedException();
+    }
+
+    public List<UserGroup> GetAllUserGroups() {
+      throw new NotImplementedException();
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Server/HiveServerApplication.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server/HiveServerApplication.cs	(revision 799)
+++ /trunk/sources/HeuristicLab.Hive.Server/HiveServerApplication.cs	(revision 800)
@@ -36,24 +36,34 @@
       AutoRestart = true)]
   class HiveServerApplication : ApplicationBase {
-    const int port = 9000;
+    const int port = 
+      9000;
 
-    public override void Run() {
-      IPHostEntry IPHost = Dns.GetHostEntry(Dns.GetHostName());
-      string externalIP = IPHost.AddressList[0].ToString();
+    DiscoveryService discService =
+        new DiscoveryService();
 
-      DiscoveryService discService =
-        new DiscoveryService();
-      IClientCommunicator[] instances = 
+    private bool AddMexEndpoint(ServiceHost serviceHost) {
+      if(serviceHost != null) {
+        ServiceMetadataBehavior behavior =
+            new ServiceMetadataBehavior();
+          serviceHost.Description.Behaviors.Add(behavior);
+
+          return serviceHost.AddServiceEndpoint(
+            typeof(IMetadataExchange),
+            MetadataExchangeBindings.CreateMexTcpBinding(),
+            "mex") != null;
+      } else
+        return false;
+    }
+
+    private ServiceHost StartClientCommunicator(Uri uriTcp) {
+      IClientCommunicator[] clientCommunicatorInstances =
         discService.GetInstances<IClientCommunicator>();
 
-      if (instances.Length > 0) {
-        Uri uriTcp =
-          new Uri("net.tcp://" + externalIP + ":" + port +"/HiveServer/"); 
-
+      if (clientCommunicatorInstances.Length > 0) {
         ServiceHost serviceHost =
-                new ServiceHost(instances[0].GetType(),
+                new ServiceHost(clientCommunicatorInstances[0].GetType(),
                   uriTcp);
 
-        System.ServiceModel.Channels.Binding binding = 
+        System.ServiceModel.Channels.Binding binding =
           new NetTcpBinding();
 
@@ -63,22 +73,72 @@
               "ClientCommunicator");
 
-        ServiceMetadataBehavior behavior =
-          new ServiceMetadataBehavior();
-        serviceHost.Description.Behaviors.Add(behavior);
-
-        serviceHost.AddServiceEndpoint(
-          typeof(IMetadataExchange),
-          MetadataExchangeBindings.CreateMexTcpBinding(),
-          "mex");
+        AddMexEndpoint(serviceHost);
 
         serviceHost.Open();
 
-        Form mainForm = new MainForm(serviceHost.BaseAddresses[0]);
-        Application.Run(mainForm);
+        return serviceHost;
+      } else
+        return null;
+    }
 
-        serviceHost.Close();
-      } else {
-        MessageBox.Show("Error - no ClientCommunicator instance");
-      }
+    private ServiceHost StartServerConsoleFacade(Uri uriTcp) {
+      IServerConsoleFacade[] serverConsoleInstances =
+        discService.GetInstances<IServerConsoleFacade>();
+
+      if (serverConsoleInstances.Length > 0) {
+        ServiceHost serviceHost =
+                new ServiceHost(serverConsoleInstances[0].GetType(),
+                  uriTcp);
+
+        System.ServiceModel.Channels.Binding binding =
+          new NetTcpBinding();
+
+        serviceHost.AddServiceEndpoint(
+          typeof(IClientManager),
+              binding,
+              "ClientManager");
+
+        serviceHost.AddServiceEndpoint(
+          typeof(IJobManager),
+              binding,
+              "JobManager");
+
+        serviceHost.AddServiceEndpoint(
+          typeof(IUserRoleManager),
+              binding,
+              "UserRoleManager");
+
+        AddMexEndpoint(serviceHost);
+
+        serviceHost.Open();
+
+        return serviceHost;
+      } else
+        return null;
+    }
+
+    public override void Run() {
+      string externalIP =
+        Dns.GetHostEntry(Dns.GetHostName()).AddressList[0].ToString();
+
+      Uri uriTcp =
+          new Uri("net.tcp://" + externalIP + ":" + port + "/HiveServer/");
+
+      ServiceHost clientCommunicator = 
+        StartClientCommunicator(uriTcp);
+
+      uriTcp =
+        new Uri("net.tcp://" + externalIP + ":" + port + "/HiveServerConsole/");
+
+      ServiceHost serverConsoleFacade =
+        StartServerConsoleFacade(uriTcp);
+
+      Form mainForm = new MainForm(clientCommunicator.BaseAddresses[0],
+        serverConsoleFacade.BaseAddresses[0]);
+
+      Application.Run(mainForm);
+
+      clientCommunicator.Close();
+      serverConsoleFacade.Close();
     }
   }
Index: /trunk/sources/HeuristicLab.Hive.Server/MainForm.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server/MainForm.Designer.cs	(revision 799)
+++ /trunk/sources/HeuristicLab.Hive.Server/MainForm.Designer.cs	(revision 800)
@@ -30,5 +30,7 @@
         {
           this.label1 = new System.Windows.Forms.Label();
-          this.lblAddress = new System.Windows.Forms.Label();
+          this.lblAddress1 = new System.Windows.Forms.Label();
+          this.label2 = new System.Windows.Forms.Label();
+          this.lblAddress2 = new System.Windows.Forms.Label();
           this.SuspendLayout();
           // 
@@ -42,12 +44,30 @@
           this.label1.Text = "Hive server running @";
           // 
-          // lblAddress
+          // lblAddress1
           // 
-          this.lblAddress.AutoSize = true;
-          this.lblAddress.Location = new System.Drawing.Point(18, 43);
-          this.lblAddress.Name = "lblAddress";
-          this.lblAddress.Size = new System.Drawing.Size(44, 13);
-          this.lblAddress.TabIndex = 1;
-          this.lblAddress.Text = "address";
+          this.lblAddress1.AutoSize = true;
+          this.lblAddress1.Location = new System.Drawing.Point(18, 43);
+          this.lblAddress1.Name = "lblAddress1";
+          this.lblAddress1.Size = new System.Drawing.Size(44, 13);
+          this.lblAddress1.TabIndex = 1;
+          this.lblAddress1.Text = "address";
+          // 
+          // label2
+          // 
+          this.label2.AutoSize = true;
+          this.label2.Location = new System.Drawing.Point(18, 76);
+          this.label2.Name = "label2";
+          this.label2.Size = new System.Drawing.Size(195, 13);
+          this.label2.TabIndex = 2;
+          this.label2.Text = "Hive Server Console Facade running @";
+          // 
+          // lblAddress2
+          // 
+          this.lblAddress2.AutoSize = true;
+          this.lblAddress2.Location = new System.Drawing.Point(18, 102);
+          this.lblAddress2.Name = "lblAddress2";
+          this.lblAddress2.Size = new System.Drawing.Size(44, 13);
+          this.lblAddress2.TabIndex = 3;
+          this.lblAddress2.Text = "address";
           // 
           // MainForm
@@ -55,6 +75,8 @@
           this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
           this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-          this.ClientSize = new System.Drawing.Size(304, 78);
-          this.Controls.Add(this.lblAddress);
+          this.ClientSize = new System.Drawing.Size(304, 128);
+          this.Controls.Add(this.lblAddress2);
+          this.Controls.Add(this.label2);
+          this.Controls.Add(this.lblAddress1);
           this.Controls.Add(this.label1);
           this.Name = "MainForm";
@@ -68,5 +90,7 @@
 
         private System.Windows.Forms.Label label1;
-        private System.Windows.Forms.Label lblAddress;
+        private System.Windows.Forms.Label lblAddress1;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label lblAddress2;
     }
 }
Index: /trunk/sources/HeuristicLab.Hive.Server/MainForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server/MainForm.cs	(revision 799)
+++ /trunk/sources/HeuristicLab.Hive.Server/MainForm.cs	(revision 800)
@@ -11,8 +11,10 @@
 {
     public partial class MainForm : Form {
-        public MainForm(Uri address) {
+        public MainForm(Uri address1, Uri address2) {
           InitializeComponent();
-          if(address != null)
-            this.lblAddress.Text = address.ToString();
+          if(address1 != null)
+            this.lblAddress1.Text = address1.ToString();
+          if (address2 != null)
+            this.lblAddress2.Text = address2.ToString();
         }
     }
