Index: trunk/sources/HeuristicLab.Hive.Contracts/BusinessObjects/Client.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Contracts/BusinessObjects/Client.cs	(revision 841)
+++ trunk/sources/HeuristicLab.Hive.Contracts/BusinessObjects/Client.cs	(revision 842)
@@ -28,5 +28,5 @@
 namespace HeuristicLab.Hive.Contracts.BusinessObjects {
 
-  public enum State { idle, calculating };
+  public enum State { idle, calculating, offline };
 
   [DataContract]
Index: trunk/sources/HeuristicLab.Hive.Contracts/Interfaces/IUserRoleManager.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Contracts/Interfaces/IUserRoleManager.cs	(revision 841)
+++ trunk/sources/HeuristicLab.Hive.Contracts/Interfaces/IUserRoleManager.cs	(revision 842)
@@ -15,4 +15,6 @@
     List<User> GetAllUsers();
     [OperationContract]
+    void AddNewUser(User user);
+    [OperationContract]
     List<UserGroup> GetAllUserGroups();
   }
Index: trunk/sources/HeuristicLab.Hive.Server.Core/ClientCommunicator.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Server.Core/ClientCommunicator.cs	(revision 841)
+++ trunk/sources/HeuristicLab.Hive.Server.Core/ClientCommunicator.cs	(revision 842)
@@ -7,4 +7,7 @@
 using HeuristicLab.Hive.Contracts;
 using HeuristicLab.Core;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess;
+using System.Resources;
+using System.Reflection;
 
 namespace HeuristicLab.Hive.Server.Core {
@@ -17,5 +20,11 @@
     int nrOfJobs = 1;
 
+    IClientAdapter clientAdapter;
+    ResourceManager rm;
+
     public ClientCommunicator() {
+      clientAdapter = ServiceLocator.GetClientAdapter();
+      rm = new ResourceManager("HiveServerMessages.resx", Assembly.GetExecutingAssembly()); 
+
       jobs = new LinkedList<long>();
       for (long i = 0; i < nrOfJobs; i++) {
@@ -27,12 +36,24 @@
 
     public Response Login(ClientInfo clientInfo) {
-      if (clients == null)
-        clients = new List<ClientInfo>();
-
-      clients.Add(clientInfo);
-
       Response response = new Response();
       response.Success = true;
-      response.StatusMessage = "Client with GUID " + clientInfo.ClientId + " successuflly logged in";
+
+      ICollection<ClientInfo> allClients = clientAdapter.GetAllClients();
+      foreach (ClientInfo client in allClients) {
+        if (client.ClientId.Equals(clientInfo.ClientId)) {
+          if (client.State != State.offline) {
+            response.Success = false;
+            response.StatusMessage = rm.GetString("UserAllreadyOnline");
+            break;
+          } else
+            break; // searching for clients can be stopped, because it was found and it's state is offline
+        } 
+      }
+
+      if (response.Success) {
+        clientAdapter.UpdateClient(clientInfo);
+        response.Success = true;
+        response.StatusMessage = rm.GetString("LoginSuccess");
+      }
 
       return response;
Index: trunk/sources/HeuristicLab.Hive.Server.Core/HeuristicLab.Hive.Server.Core.csproj
===================================================================
--- trunk/sources/HeuristicLab.Hive.Server.Core/HeuristicLab.Hive.Server.Core.csproj	(revision 841)
+++ trunk/sources/HeuristicLab.Hive.Server.Core/HeuristicLab.Hive.Server.Core.csproj	(revision 842)
@@ -54,4 +54,9 @@
     <Compile Include="DbTestApp.cs" />
     <Compile Include="HiveServerCorePlugin.cs" />
+    <Compile Include="HiveServerMessages.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>HiveServerMessages.resx</DependentUpon>
+    </Compile>
     <Compile Include="InternalInterfaces\DataAccess\IClientAdapter.cs" />
     <Compile Include="InternalInterfaces\DataAccess\IResourceAdapter.cs" />
@@ -60,7 +65,9 @@
     <Compile Include="ServerConsoleFacade.cs" />
     <Compile Include="ServiceLocator.cs" />
+    <Compile Include="Settings.cs" />
     <Compile Include="UserRoleManager.cs" />
   </ItemGroup>
   <ItemGroup>
+    <None Include="app.config" />
     <None Include="HeuristicLab.snk" />
     <None Include="Properties\AssemblyInfo.frame" />
@@ -80,4 +87,10 @@
     </ProjectReference>
   </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="HiveServerMessages.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>HiveServerMessages.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
Index: trunk/sources/HeuristicLab.Hive.Server.Core/ServerConsoleFacade.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Server.Core/ServerConsoleFacade.cs	(revision 841)
+++ trunk/sources/HeuristicLab.Hive.Server.Core/ServerConsoleFacade.cs	(revision 842)
@@ -42,4 +42,8 @@
     }
 
+    public void AddNewUser(User user) {
+      userRoleManager.AddNewUser(user);
+    }
+
     public List<HeuristicLab.Hive.Contracts.BusinessObjects.UserGroup> GetAllUserGroups() {
       return userRoleManager.GetAllUserGroups();
Index: trunk/sources/HeuristicLab.Hive.Server.Core/UserRoleManager.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Server.Core/UserRoleManager.cs	(revision 841)
+++ trunk/sources/HeuristicLab.Hive.Server.Core/UserRoleManager.cs	(revision 842)
@@ -30,4 +30,8 @@
     }
 
+    public void AddNewUser(User user) {
+
+    }
+
     public List<UserGroup> GetAllUserGroups() {
       return userGroups;
