Index: branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access.csproj
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access.csproj	(revision 6820)
+++ branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access.csproj	(revision 6820)
@@ -0,0 +1,75 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{494F87F4-0F25-4D33-A382-10CDB2174D48}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Clients.Access</RootNamespace>
+    <AssemblyName>HeuristicLab.Clients.Access</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Runtime.Serialization" />
+    <Reference Include="System.ServiceModel" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ServiceClients\AccessServiceClient.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config" />
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="ServiceClients\GenerateServiceClients.cmd" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/Properties/AssemblyInfo.frame	(revision 6820)
+++ branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/Properties/AssemblyInfo.frame	(revision 6820)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Services.Clients.Access")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("7032d7ba-4799-4708-803d-9f6cb3feed35")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.5.0")]
+[assembly: AssemblyFileVersion("3.3.5.$WCREV$")]
Index: branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ServiceClients/AccessServiceClient.cs
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ServiceClients/AccessServiceClient.cs	(revision 6820)
+++ branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ServiceClients/AccessServiceClient.cs	(revision 6820)
@@ -0,0 +1,1133 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.237
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Clients.Access
+{
+    using System.Runtime.Serialization;
+    using System;
+    
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="AccessItem", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+        "")]
+    [System.SerializableAttribute()]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.ClientLog))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.User))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.UserGroup))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.Role))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.Resource))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.ClientGroup))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.Client))]
+    public partial class AccessItem : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="ClientLog", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+        "")]
+    [System.SerializableAttribute()]
+    public partial class ClientLog : HeuristicLab.Clients.Access.AccessItem
+    {
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string ExceptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string MessageField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid ResourceIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.DateTime TimestampField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Exception
+        {
+            get
+            {
+                return this.ExceptionField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ExceptionField, value) != true))
+                {
+                    this.ExceptionField = value;
+                    this.RaisePropertyChanged("Exception");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Message
+        {
+            get
+            {
+                return this.MessageField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.MessageField, value) != true))
+                {
+                    this.MessageField = value;
+                    this.RaisePropertyChanged("Message");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid ResourceId
+        {
+            get
+            {
+                return this.ResourceIdField;
+            }
+            set
+            {
+                if ((this.ResourceIdField.Equals(value) != true))
+                {
+                    this.ResourceIdField = value;
+                    this.RaisePropertyChanged("ResourceId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.DateTime Timestamp
+        {
+            get
+            {
+                return this.TimestampField;
+            }
+            set
+            {
+                if ((this.TimestampField.Equals(value) != true))
+                {
+                    this.TimestampField = value;
+                    this.RaisePropertyChanged("Timestamp");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="User", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+        "")]
+    [System.SerializableAttribute()]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.Client))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.Resource))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.AccessItem))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientGroup>))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.ClientGroup))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(System.Collections.Generic.List<HeuristicLab.Clients.Access.Client>))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.ClientLog))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientLog>))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(System.Collections.Generic.List<HeuristicLab.Clients.Access.User>))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(System.Collections.Generic.List<HeuristicLab.Clients.Access.UserGroup>))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.UserGroup))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.Role))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(System.Collections.Generic.List<HeuristicLab.Clients.Access.Role>))]
+    public partial class User : HeuristicLab.Clients.Access.AccessItem
+    {
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string CommentField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.DateTime CreationDateField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string EmailField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string FullNameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private bool IsApprovedField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private bool IsLockedOutField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private bool IsOnlineField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.DateTime LastActivityDateField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.DateTime LastLockoutDateField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.DateTime LastLoginDateField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.DateTime LastPasswordChangedDateField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string PasswordQuestionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string ProviderNameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private object ProviderUserKeyField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.Clients.Access.UserGroup> UserGroupsField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string UserNameField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Comment
+        {
+            get
+            {
+                return this.CommentField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.CommentField, value) != true))
+                {
+                    this.CommentField = value;
+                    this.RaisePropertyChanged("Comment");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.DateTime CreationDate
+        {
+            get
+            {
+                return this.CreationDateField;
+            }
+            set
+            {
+                if ((this.CreationDateField.Equals(value) != true))
+                {
+                    this.CreationDateField = value;
+                    this.RaisePropertyChanged("CreationDate");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Email
+        {
+            get
+            {
+                return this.EmailField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.EmailField, value) != true))
+                {
+                    this.EmailField = value;
+                    this.RaisePropertyChanged("Email");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string FullName
+        {
+            get
+            {
+                return this.FullNameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.FullNameField, value) != true))
+                {
+                    this.FullNameField = value;
+                    this.RaisePropertyChanged("FullName");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public bool IsApproved
+        {
+            get
+            {
+                return this.IsApprovedField;
+            }
+            set
+            {
+                if ((this.IsApprovedField.Equals(value) != true))
+                {
+                    this.IsApprovedField = value;
+                    this.RaisePropertyChanged("IsApproved");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public bool IsLockedOut
+        {
+            get
+            {
+                return this.IsLockedOutField;
+            }
+            set
+            {
+                if ((this.IsLockedOutField.Equals(value) != true))
+                {
+                    this.IsLockedOutField = value;
+                    this.RaisePropertyChanged("IsLockedOut");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public bool IsOnline
+        {
+            get
+            {
+                return this.IsOnlineField;
+            }
+            set
+            {
+                if ((this.IsOnlineField.Equals(value) != true))
+                {
+                    this.IsOnlineField = value;
+                    this.RaisePropertyChanged("IsOnline");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.DateTime LastActivityDate
+        {
+            get
+            {
+                return this.LastActivityDateField;
+            }
+            set
+            {
+                if ((this.LastActivityDateField.Equals(value) != true))
+                {
+                    this.LastActivityDateField = value;
+                    this.RaisePropertyChanged("LastActivityDate");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.DateTime LastLockoutDate
+        {
+            get
+            {
+                return this.LastLockoutDateField;
+            }
+            set
+            {
+                if ((this.LastLockoutDateField.Equals(value) != true))
+                {
+                    this.LastLockoutDateField = value;
+                    this.RaisePropertyChanged("LastLockoutDate");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.DateTime LastLoginDate
+        {
+            get
+            {
+                return this.LastLoginDateField;
+            }
+            set
+            {
+                if ((this.LastLoginDateField.Equals(value) != true))
+                {
+                    this.LastLoginDateField = value;
+                    this.RaisePropertyChanged("LastLoginDate");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.DateTime LastPasswordChangedDate
+        {
+            get
+            {
+                return this.LastPasswordChangedDateField;
+            }
+            set
+            {
+                if ((this.LastPasswordChangedDateField.Equals(value) != true))
+                {
+                    this.LastPasswordChangedDateField = value;
+                    this.RaisePropertyChanged("LastPasswordChangedDate");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string PasswordQuestion
+        {
+            get
+            {
+                return this.PasswordQuestionField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.PasswordQuestionField, value) != true))
+                {
+                    this.PasswordQuestionField = value;
+                    this.RaisePropertyChanged("PasswordQuestion");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string ProviderName
+        {
+            get
+            {
+                return this.ProviderNameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ProviderNameField, value) != true))
+                {
+                    this.ProviderNameField = value;
+                    this.RaisePropertyChanged("ProviderName");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public object ProviderUserKey
+        {
+            get
+            {
+                return this.ProviderUserKeyField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ProviderUserKeyField, value) != true))
+                {
+                    this.ProviderUserKeyField = value;
+                    this.RaisePropertyChanged("ProviderUserKey");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.UserGroup> UserGroups
+        {
+            get
+            {
+                return this.UserGroupsField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.UserGroupsField, value) != true))
+                {
+                    this.UserGroupsField = value;
+                    this.RaisePropertyChanged("UserGroups");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string UserName
+        {
+            get
+            {
+                return this.UserNameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.UserNameField, value) != true))
+                {
+                    this.UserNameField = value;
+                    this.RaisePropertyChanged("UserName");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="UserGroup", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+        "")]
+    [System.SerializableAttribute()]
+    public partial class UserGroup : HeuristicLab.Clients.Access.AccessItem
+    {
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid ParentUserGroupField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Name
+        {
+            get
+            {
+                return this.NameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.NameField, value) != true))
+                {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid ParentUserGroup
+        {
+            get
+            {
+                return this.ParentUserGroupField;
+            }
+            set
+            {
+                if ((this.ParentUserGroupField.Equals(value) != true))
+                {
+                    this.ParentUserGroupField = value;
+                    this.RaisePropertyChanged("ParentUserGroup");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="Role", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+        "")]
+    [System.SerializableAttribute()]
+    public partial class Role : HeuristicLab.Clients.Access.AccessItem
+    {
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string RoleNameField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string RoleName
+        {
+            get
+            {
+                return this.RoleNameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.RoleNameField, value) != true))
+                {
+                    this.RoleNameField = value;
+                    this.RaisePropertyChanged("RoleName");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="Resource", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+        "")]
+    [System.SerializableAttribute()]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.ClientGroup))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.Client))]
+    public partial class Resource : HeuristicLab.Clients.Access.AccessItem
+    {
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string DescriptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientGroup> ParentGroupsField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string TypeField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Description
+        {
+            get
+            {
+                return this.DescriptionField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.DescriptionField, value) != true))
+                {
+                    this.DescriptionField = value;
+                    this.RaisePropertyChanged("Description");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid Id
+        {
+            get
+            {
+                return this.IdField;
+            }
+            set
+            {
+                if ((this.IdField.Equals(value) != true))
+                {
+                    this.IdField = value;
+                    this.RaisePropertyChanged("Id");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Name
+        {
+            get
+            {
+                return this.NameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.NameField, value) != true))
+                {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientGroup> ParentGroups
+        {
+            get
+            {
+                return this.ParentGroupsField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ParentGroupsField, value) != true))
+                {
+                    this.ParentGroupsField = value;
+                    this.RaisePropertyChanged("ParentGroups");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Type
+        {
+            get
+            {
+                return this.TypeField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.TypeField, value) != true))
+                {
+                    this.TypeField = value;
+                    this.RaisePropertyChanged("Type");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="ClientGroup", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+        "")]
+    [System.SerializableAttribute()]
+    public partial class ClientGroup : HeuristicLab.Clients.Access.Resource
+    {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="Client", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+        "")]
+    [System.SerializableAttribute()]
+    public partial class Client : HeuristicLab.Clients.Access.Resource
+    {
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string CountryField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string HeuristicLabVersionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string IPAddressField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Nullable<int> MemorySizeField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Nullable<int> NumberOfCoresField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string OperatingSystemField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string ProcessorTypeField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Country
+        {
+            get
+            {
+                return this.CountryField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.CountryField, value) != true))
+                {
+                    this.CountryField = value;
+                    this.RaisePropertyChanged("Country");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string HeuristicLabVersion
+        {
+            get
+            {
+                return this.HeuristicLabVersionField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.HeuristicLabVersionField, value) != true))
+                {
+                    this.HeuristicLabVersionField = value;
+                    this.RaisePropertyChanged("HeuristicLabVersion");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string IPAddress
+        {
+            get
+            {
+                return this.IPAddressField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.IPAddressField, value) != true))
+                {
+                    this.IPAddressField = value;
+                    this.RaisePropertyChanged("IPAddress");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Nullable<int> MemorySize
+        {
+            get
+            {
+                return this.MemorySizeField;
+            }
+            set
+            {
+                if ((this.MemorySizeField.Equals(value) != true))
+                {
+                    this.MemorySizeField = value;
+                    this.RaisePropertyChanged("MemorySize");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Nullable<int> NumberOfCores
+        {
+            get
+            {
+                return this.NumberOfCoresField;
+            }
+            set
+            {
+                if ((this.NumberOfCoresField.Equals(value) != true))
+                {
+                    this.NumberOfCoresField = value;
+                    this.RaisePropertyChanged("NumberOfCores");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string OperatingSystem
+        {
+            get
+            {
+                return this.OperatingSystemField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.OperatingSystemField, value) != true))
+                {
+                    this.OperatingSystemField = value;
+                    this.RaisePropertyChanged("OperatingSystem");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string ProcessorType
+        {
+            get
+            {
+                return this.ProcessorTypeField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ProcessorTypeField, value) != true))
+                {
+                    this.ProcessorTypeField = value;
+                    this.RaisePropertyChanged("ProcessorType");
+                }
+            }
+        }
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="HeuristicLab.Clients.Access.IAccessService")]
+    public interface IAccessService
+    {
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/ClientExists", ReplyAction="http://tempuri.org/IAccessService/ClientExistsResponse")]
+        bool ClientExists(System.Guid id);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetClient", ReplyAction="http://tempuri.org/IAccessService/GetClientResponse")]
+        HeuristicLab.Clients.Access.Client GetClient(System.Guid id);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetClients", ReplyAction="http://tempuri.org/IAccessService/GetClientsResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.Client> GetClients();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/AddClient", ReplyAction="http://tempuri.org/IAccessService/AddClientResponse")]
+        System.Guid AddClient(HeuristicLab.Clients.Access.Client client);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/UpdateClient", ReplyAction="http://tempuri.org/IAccessService/UpdateClientResponse")]
+        void UpdateClient(HeuristicLab.Clients.Access.Client client);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/DeleteClient", ReplyAction="http://tempuri.org/IAccessService/DeleteClientResponse")]
+        void DeleteClient(HeuristicLab.Clients.Access.Client client);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetLastClientLog", ReplyAction="http://tempuri.org/IAccessService/GetLastClientLogResponse")]
+        HeuristicLab.Clients.Access.ClientLog GetLastClientLog(System.Guid clientId);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetClientLogs", ReplyAction="http://tempuri.org/IAccessService/GetClientLogsResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientLog> GetClientLogs(System.Guid clientId);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetClientLogsSince", ReplyAction="http://tempuri.org/IAccessService/GetClientLogsSinceResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientLog> GetClientLogsSince(System.DateTime startDate);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/AddClientLogEntry", ReplyAction="http://tempuri.org/IAccessService/AddClientLogEntryResponse")]
+        void AddClientLogEntry(HeuristicLab.Clients.Access.ClientLog log);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/DeleteClientLogEntry", ReplyAction="http://tempuri.org/IAccessService/DeleteClientLogEntryResponse")]
+        void DeleteClientLogEntry(HeuristicLab.Clients.Access.ClientLog log);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetClientGroups", ReplyAction="http://tempuri.org/IAccessService/GetClientGroupsResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientGroup> GetClientGroups();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/AddClientGroup", ReplyAction="http://tempuri.org/IAccessService/AddClientGroupResponse")]
+        System.Guid AddClientGroup(HeuristicLab.Clients.Access.ClientGroup group);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/UpdateClientGroup", ReplyAction="http://tempuri.org/IAccessService/UpdateClientGroupResponse")]
+        void UpdateClientGroup(HeuristicLab.Clients.Access.ClientGroup group);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/DeleteClientGroup", ReplyAction="http://tempuri.org/IAccessService/DeleteClientGroupResponse")]
+        void DeleteClientGroup(HeuristicLab.Clients.Access.ClientGroup group);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/Login", ReplyAction="http://tempuri.org/IAccessService/LoginResponse")]
+        void Login();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetUsers", ReplyAction="http://tempuri.org/IAccessService/GetUsersResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.User> GetUsers();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/AddUser", ReplyAction="http://tempuri.org/IAccessService/AddUserResponse")]
+        HeuristicLab.Clients.Access.User AddUser(HeuristicLab.Clients.Access.User user);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/DeleteUser", ReplyAction="http://tempuri.org/IAccessService/DeleteUserResponse")]
+        void DeleteUser(HeuristicLab.Clients.Access.User user);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/UpdateUser", ReplyAction="http://tempuri.org/IAccessService/UpdateUserResponse")]
+        void UpdateUser(HeuristicLab.Clients.Access.User user);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/AddUserToRole", ReplyAction="http://tempuri.org/IAccessService/AddUserToRoleResponse")]
+        void AddUserToRole(HeuristicLab.Clients.Access.Role role, HeuristicLab.Clients.Access.User user);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/RemoveUserFromRole", ReplyAction="http://tempuri.org/IAccessService/RemoveUserFromRoleResponse")]
+        void RemoveUserFromRole(HeuristicLab.Clients.Access.Role role, HeuristicLab.Clients.Access.User user);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/ResetPassword", ReplyAction="http://tempuri.org/IAccessService/ResetPasswordResponse")]
+        void ResetPassword(HeuristicLab.Clients.Access.User user, string password);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetRoles", ReplyAction="http://tempuri.org/IAccessService/GetRolesResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.Role> GetRoles();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/AddRole", ReplyAction="http://tempuri.org/IAccessService/AddRoleResponse")]
+        HeuristicLab.Clients.Access.Role AddRole(HeuristicLab.Clients.Access.Role role);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/UpdateRole", ReplyAction="http://tempuri.org/IAccessService/UpdateRoleResponse")]
+        void UpdateRole(HeuristicLab.Clients.Access.Role role);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/DeleteRole", ReplyAction="http://tempuri.org/IAccessService/DeleteRoleResponse")]
+        void DeleteRole(HeuristicLab.Clients.Access.Role role);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetUserRoles", ReplyAction="http://tempuri.org/IAccessService/GetUserRolesResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.Role> GetUserRoles(HeuristicLab.Clients.Access.User user);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetUserGroups", ReplyAction="http://tempuri.org/IAccessService/GetUserGroupsResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.UserGroup> GetUserGroups();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/AddUserGroup", ReplyAction="http://tempuri.org/IAccessService/AddUserGroupResponse")]
+        HeuristicLab.Clients.Access.UserGroup AddUserGroup(HeuristicLab.Clients.Access.UserGroup group);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/UpdateUserGroup", ReplyAction="http://tempuri.org/IAccessService/UpdateUserGroupResponse")]
+        void UpdateUserGroup(HeuristicLab.Clients.Access.UserGroup group);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/DeleteUserGroup", ReplyAction="http://tempuri.org/IAccessService/DeleteUserGroupResponse")]
+        void DeleteUserGroup(HeuristicLab.Clients.Access.UserGroup group);
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public interface IAccessServiceChannel : HeuristicLab.Clients.Access.IAccessService, System.ServiceModel.IClientChannel
+    {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class AccessServiceClient : System.ServiceModel.ClientBase<HeuristicLab.Clients.Access.IAccessService>, HeuristicLab.Clients.Access.IAccessService
+    {
+        
+        public AccessServiceClient()
+        {
+        }
+        
+        public AccessServiceClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName)
+        {
+        }
+        
+        public AccessServiceClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress)
+        {
+        }
+        
+        public AccessServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress)
+        {
+        }
+        
+        public AccessServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress)
+        {
+        }
+        
+        public bool ClientExists(System.Guid id)
+        {
+            return base.Channel.ClientExists(id);
+        }
+        
+        public HeuristicLab.Clients.Access.Client GetClient(System.Guid id)
+        {
+            return base.Channel.GetClient(id);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.Client> GetClients()
+        {
+            return base.Channel.GetClients();
+        }
+        
+        public System.Guid AddClient(HeuristicLab.Clients.Access.Client client)
+        {
+            return base.Channel.AddClient(client);
+        }
+        
+        public void UpdateClient(HeuristicLab.Clients.Access.Client client)
+        {
+            base.Channel.UpdateClient(client);
+        }
+        
+        public void DeleteClient(HeuristicLab.Clients.Access.Client client)
+        {
+            base.Channel.DeleteClient(client);
+        }
+        
+        public HeuristicLab.Clients.Access.ClientLog GetLastClientLog(System.Guid clientId)
+        {
+            return base.Channel.GetLastClientLog(clientId);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientLog> GetClientLogs(System.Guid clientId)
+        {
+            return base.Channel.GetClientLogs(clientId);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientLog> GetClientLogsSince(System.DateTime startDate)
+        {
+            return base.Channel.GetClientLogsSince(startDate);
+        }
+        
+        public void AddClientLogEntry(HeuristicLab.Clients.Access.ClientLog log)
+        {
+            base.Channel.AddClientLogEntry(log);
+        }
+        
+        public void DeleteClientLogEntry(HeuristicLab.Clients.Access.ClientLog log)
+        {
+            base.Channel.DeleteClientLogEntry(log);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientGroup> GetClientGroups()
+        {
+            return base.Channel.GetClientGroups();
+        }
+        
+        public System.Guid AddClientGroup(HeuristicLab.Clients.Access.ClientGroup group)
+        {
+            return base.Channel.AddClientGroup(group);
+        }
+        
+        public void UpdateClientGroup(HeuristicLab.Clients.Access.ClientGroup group)
+        {
+            base.Channel.UpdateClientGroup(group);
+        }
+        
+        public void DeleteClientGroup(HeuristicLab.Clients.Access.ClientGroup group)
+        {
+            base.Channel.DeleteClientGroup(group);
+        }
+        
+        public void Login()
+        {
+            base.Channel.Login();
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.User> GetUsers()
+        {
+            return base.Channel.GetUsers();
+        }
+        
+        public HeuristicLab.Clients.Access.User AddUser(HeuristicLab.Clients.Access.User user)
+        {
+            return base.Channel.AddUser(user);
+        }
+        
+        public void DeleteUser(HeuristicLab.Clients.Access.User user)
+        {
+            base.Channel.DeleteUser(user);
+        }
+        
+        public void UpdateUser(HeuristicLab.Clients.Access.User user)
+        {
+            base.Channel.UpdateUser(user);
+        }
+        
+        public void AddUserToRole(HeuristicLab.Clients.Access.Role role, HeuristicLab.Clients.Access.User user)
+        {
+            base.Channel.AddUserToRole(role, user);
+        }
+        
+        public void RemoveUserFromRole(HeuristicLab.Clients.Access.Role role, HeuristicLab.Clients.Access.User user)
+        {
+            base.Channel.RemoveUserFromRole(role, user);
+        }
+        
+        public void ResetPassword(HeuristicLab.Clients.Access.User user, string password)
+        {
+            base.Channel.ResetPassword(user, password);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.Role> GetRoles()
+        {
+            return base.Channel.GetRoles();
+        }
+        
+        public HeuristicLab.Clients.Access.Role AddRole(HeuristicLab.Clients.Access.Role role)
+        {
+            return base.Channel.AddRole(role);
+        }
+        
+        public void UpdateRole(HeuristicLab.Clients.Access.Role role)
+        {
+            base.Channel.UpdateRole(role);
+        }
+        
+        public void DeleteRole(HeuristicLab.Clients.Access.Role role)
+        {
+            base.Channel.DeleteRole(role);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.Role> GetUserRoles(HeuristicLab.Clients.Access.User user)
+        {
+            return base.Channel.GetUserRoles(user);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.UserGroup> GetUserGroups()
+        {
+            return base.Channel.GetUserGroups();
+        }
+        
+        public HeuristicLab.Clients.Access.UserGroup AddUserGroup(HeuristicLab.Clients.Access.UserGroup group)
+        {
+            return base.Channel.AddUserGroup(group);
+        }
+        
+        public void UpdateUserGroup(HeuristicLab.Clients.Access.UserGroup group)
+        {
+            base.Channel.UpdateUserGroup(group);
+        }
+        
+        public void DeleteUserGroup(HeuristicLab.Clients.Access.UserGroup group)
+        {
+            base.Channel.DeleteUserGroup(group);
+        }
+    }
+}
Index: branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ServiceClients/GenerateServiceClients.cmd
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ServiceClients/GenerateServiceClients.cmd	(revision 6820)
+++ branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ServiceClients/GenerateServiceClients.cmd	(revision 6820)
@@ -0,0 +1,30 @@
+echo off
+
+echo.
+echo *******************************************************************************************
+echo Generating HiveService client
+echo.
+
+svcutil.exe ^
+  http://localhost/AccessService?wsdl ^
+  /out:AccessServiceClient ^
+  /namespace:*,HeuristicLab.Clients.Access ^
+  /collectionType:System.Collections.Generic.List`1 ^
+  /targetClientVersion:Version35 ^
+  /serializable ^
+  /enableDataBinding ^
+  /config:..\app.config 
+
+echo.
+echo ---------------------------------------------------------------------------------------
+echo !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!!
+echo.
+echo Following modifications have to be done manually in generated data contracts:
+echo  * Remove method "protected void RaisePropertyChanged(string propertyName)" in HiveItem
+echo.
+echo !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!!
+echo ---------------------------------------------------------------------------------------
+echo.
+echo Generation of HiveService client finished.
+echo *******************************************************************************************
+
Index: branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/app.config
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/app.config	(revision 6820)
+++ branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/app.config	(revision 6820)
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+    <system.serviceModel>
+        <bindings>
+            <wsHttpBinding>
+                <binding name="WSHttpBinding_IAccessService" closeTimeout="00:01:00"
+                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+                    bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
+                    maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
+                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
+                    allowCookies="false">
+                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
+                        enabled="false" />
+                    <security mode="Message">
+                        <transport clientCredentialType="Windows" proxyCredentialType="None"
+                            realm="" />
+                        <message clientCredentialType="UserName" negotiateServiceCredential="true"
+                            algorithmSuite="Default" />
+                    </security>
+                </binding>
+            </wsHttpBinding>
+        </bindings>
+        <client>
+            <endpoint address="http://localhost/AccessService" binding="wsHttpBinding"
+                bindingConfiguration="WSHttpBinding_IAccessService" contract="HeuristicLab.Clients.Access.IAccessService"
+                name="WSHttpBinding_IAccessService">
+                <identity>
+                    <certificate encodedValue="AwAAAAEAAAAUAAAAQkazTmWcZqFuuREaov8jmDtOu4UgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAVedIj+0w6jEdhZErAeemyMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTExMDkwNjA4NDUzOVoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCiKeSwXFm0qxkuMFao9NHftClUYvX0jpiyKFthUnutfhB2FF3Ie8a8U15M+GBYSZOV5vXlEn3D30HsV/x6L9/UU1fiJndJd5lWI2/4mP2jra0qP0b8xyitHfRhePIfpDkufZqIOvOmT/DoFqMTK3joexzuEmAw5Ugil6fbOxELlwIDAQABo0kwRzBFBgNVHQEEPjA8gBCJmAWIXCTyTFXdjdnseED4oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAVedIj+0w6jEdhZErAeemyMAkGBSsOAwIdBQADgYEACW9nLJnu1+OJg93AAKfWqkiETHcXUcULrPjMWJQsy5fkHY1qExKBGeUJHK0REvqQs3KRY3GqikMjlAnDmb/e9P1h+PynsRv7y2zAGCnKW4nryWVncWf1xJL9xvKNuH2aR4+Wdq9oo2m793+RXtA7YTSsr/OiiIdkQcjUGQtkaYo=" />
+                </identity>
+            </endpoint>
+        </client>
+    </system.serviceModel>
+</configuration>
Index: branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.dbml
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.dbml	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.dbml	(revision 6820)
@@ -18,4 +18,5 @@
         <Column Name="HeuristicLabVersion" Type="System.String" DbType="NVarChar(MAX)" CanBeNull="true" />
         <Column Name="Country" Type="System.String" DbType="NVarChar(MAX)" CanBeNull="true" />
+        <Column Name="ClientType" Type="System.String" DbType="NVarChar(MAX)" CanBeNull="true" />
       </Type>
       <Type Name="Group" InheritanceCode="Group" />
Index: branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.dbml.layout
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.dbml.layout	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.dbml.layout	(revision 6820)
@@ -35,8 +35,8 @@
       </nestedChildShapes>
     </classShape>
-    <classShape Id="93bcfe43-938e-49f8-90db-b5056196257b" absoluteBounds="2.875, 2.875, 2, 2.1554996744791666">
+    <classShape Id="93bcfe43-938e-49f8-90db-b5056196257b" absoluteBounds="2.875, 2.875, 2, 2.3478011067708326">
       <DataClassMoniker Name="/ClientManagementDataContext/Client" />
       <nestedChildShapes>
-        <elementListCompartment Id="f89c2c39-17cc-4b0e-b5e0-245107753b38" absoluteBounds="2.89, 3.335, 1.9700000000000002, 1.5954996744791665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+        <elementListCompartment Id="f89c2c39-17cc-4b0e-b5e0-245107753b38" absoluteBounds="2.89, 3.335, 1.9700000000000002, 1.7878011067708333" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
       </nestedChildShapes>
     </classShape>
@@ -84,5 +84,5 @@
       </nestedChildShapes>
     </classShape>
-    <associationConnector edgePoints="[(7.0625 : 5.31899251302083); (7.0625 : 6.125)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+    <associationConnector edgePoints="[(7.0625 : 5.31899251302083); (7.0625 : 6.125)]" fixedFrom="NotFixed" fixedTo="NotFixed">
       <AssociationMoniker Name="/ClientManagementDataContext/User/User_UserUserGroup" />
       <nodes>
Index: branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.designer.cs
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.designer.cs	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.designer.cs	(revision 6820)
@@ -368,4 +368,6 @@
 		private string _Country;
 		
+		private string _ClientType;
+		
     #region Extensibility Method Definitions
     partial void OnLoaded();
@@ -386,4 +388,6 @@
     partial void OnCountryChanging(string value);
     partial void OnCountryChanged();
+    partial void OnClientTypeChanging(string value);
+    partial void OnClientTypeChanged();
     #endregion
 		
@@ -529,4 +533,24 @@
 					this.SendPropertyChanged("Country");
 					this.OnCountryChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ClientType", DbType="NVarChar(MAX)")]
+		public string ClientType
+		{
+			get
+			{
+				return this._ClientType;
+			}
+			set
+			{
+				if ((this._ClientType != value))
+				{
+					this.OnClientTypeChanging(value);
+					this.SendPropertyChanging();
+					this._ClientType = value;
+					this.SendPropertyChanged("ClientType");
+					this.OnClientTypeChanged();
 				}
 			}
Index: branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/SQL Scripts/Initialize ClientManagement.sql
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/SQL Scripts/Initialize ClientManagement.sql	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/SQL Scripts/Initialize ClientManagement.sql	(revision 6820)
@@ -2,5 +2,5 @@
 GO
 
-/****** Object:  Table [dbo].[Resource]    Script Date: 09/19/2011 13:24:05 ******/
+/****** Object:  Table [dbo].[Resource]    Script Date: 09/22/2011 12:53:30 ******/
 SET ANSI_NULLS ON
 GO
@@ -15,10 +15,11 @@
 	[Type] [nvarchar](max) NOT NULL,
 	[ProcessorType] [nvarchar](max) NULL,
-	[NumberOfCores] [int](max) NULL,
+	[NumberOfCores] [int] NULL,
 	[IPAddress] [nvarchar](max) NULL,
-	[MemorySize] [int](max) NULL,
+	[MemorySize] [int] NULL,
 	[OperatingSystem] [nvarchar](max) NULL,
 	[Country] [nvarchar](max) NULL,
 	[HeuristicLabVersion] [nvarchar](max) NULL,
+	[ClientType] [nvarchar](max) NULL,
  CONSTRAINT [PK_Resource] PRIMARY KEY CLUSTERED 
 (
@@ -28,6 +29,5 @@
 
 GO
-
-/****** Object:  Table [dbo].[ResourceResourceGroup]    Script Date: 09/19/2011 13:24:08 ******/
+/****** Object:  Table [dbo].[ResourceResourceGroup]    Script Date: 09/22/2011 12:53:47 ******/
 SET ANSI_NULLS ON
 GO
@@ -60,7 +60,6 @@
 
 ALTER TABLE [dbo].[ResourceResourceGroup] CHECK CONSTRAINT [FK_ResourceResourceGroup_ResourceId]
-GO
 
-/****** Object:  Table [dbo].[ClientLog]    Script Date: 09/19/2011 13:24:11 ******/
+/****** Object:  Table [dbo].[ClientLog]    Script Date: 09/22/2011 12:54:07 ******/
 SET ANSI_NULLS ON
 GO
@@ -90,7 +89,71 @@
 GO
 
+/****** Object:  Table [dbo].[User]    Script Date: 09/22/2011 12:54:23 ******/
+SET ANSI_NULLS ON
+GO
 
+SET QUOTED_IDENTIFIER ON
+GO
 
+CREATE TABLE [dbo].[User](
+	[Id] [uniqueidentifier] NOT NULL,
+	[FullName] [nvarchar](max) NULL,
+ CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED 
+(
+	[Id] ASC
+)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
+) ON [PRIMARY]
 
+GO
 
+/****** Object:  Table [dbo].[UserGroup]    Script Date: 09/22/2011 12:54:35 ******/
+SET ANSI_NULLS ON
+GO
 
+SET QUOTED_IDENTIFIER ON
+GO
+
+CREATE TABLE [dbo].[UserGroup](
+	[Id] [uniqueidentifier] NOT NULL,
+	[Name] [nvarchar](max) NOT NULL,
+	[ParentUserGroup] [uniqueidentifier] NULL,
+ CONSTRAINT [PK_UserGroup] PRIMARY KEY CLUSTERED 
+(
+	[Id] ASC
+)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
+) ON [PRIMARY]
+
+GO
+
+/****** Object:  Table [dbo].[UserUserGroup]    Script Date: 09/22/2011 12:54:52 ******/
+SET ANSI_NULLS ON
+GO
+
+SET QUOTED_IDENTIFIER ON
+GO
+
+CREATE TABLE [dbo].[UserUserGroup](
+	[UserId] [uniqueidentifier] NOT NULL,
+	[UserGroupId] [uniqueidentifier] NOT NULL,
+ CONSTRAINT [PK_UserUserGroup] PRIMARY KEY CLUSTERED 
+(
+	[UserId] ASC,
+	[UserGroupId] ASC
+)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
+) ON [PRIMARY]
+
+GO
+
+ALTER TABLE [dbo].[UserUserGroup]  WITH CHECK ADD  CONSTRAINT [FK_UserUserGroup_User] FOREIGN KEY([UserId])
+REFERENCES [dbo].[User] ([Id])
+GO
+
+ALTER TABLE [dbo].[UserUserGroup] CHECK CONSTRAINT [FK_UserUserGroup_User]
+GO
+
+ALTER TABLE [dbo].[UserUserGroup]  WITH CHECK ADD  CONSTRAINT [FK_UserUserGroup_UserGroup] FOREIGN KEY([UserGroupId])
+REFERENCES [dbo].[UserGroup] ([Id])
+GO
+
+ALTER TABLE [dbo].[UserUserGroup] CHECK CONSTRAINT [FK_UserUserGroup_UserGroup]
+GO
Index: branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/Convert.cs
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/Convert.cs	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/Convert.cs	(revision 6820)
@@ -79,5 +79,6 @@
         NumberOfCores = source.NumberOfCores,
         OperatingSystem = source.OperatingSystem,
-        ProcessorType = source.ProcessorType
+        ProcessorType = source.ProcessorType,
+        ClientType = source.ClientType
       };
     }
@@ -95,5 +96,6 @@
         NumberOfCores = source.NumberOfCores,
         OperatingSystem = source.OperatingSystem,
-        ProcessorType = source.ProcessorType
+        ProcessorType = source.ProcessorType,
+        ClientType = source.ClientType
       };
     }
Index: branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/Client.cs
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/Client.cs	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/Client.cs	(revision 6820)
@@ -39,4 +39,6 @@
     [DataMember]
     public string Country { get; set; }
+    [DataMember]
+    public string ClientType { get; set; }
   }
 }
Index: branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/Role.cs
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/Role.cs	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/Role.cs	(revision 6820)
@@ -26,7 +26,6 @@
   [DataContract]
   public class Role : AccessItem {
-
     [DataMember]
-    public string RoleName { get; set; }
+    public string Name { get; set; }
   }
 }
Index: branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/User.cs
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/User.cs	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/User.cs	(revision 6820)
@@ -29,49 +29,22 @@
     [DataMember]
     public string UserName { get; set; }
-
     [DataMember]
     public string FullName { get; set; }
-
     [DataMember]
     public string Comment { get; set; }
-
     [DataMember]
     public string Email { get; set; }
-
+    [DataMember]
+    public IEnumerable<UserGroup> UserGroups { get; set; }
     [DataMember]
     public DateTime CreationDate { get; set; }
-
-    [DataMember]
-    public IEnumerable<UserGroup> UserGroups { get; set; }
-
     [DataMember]
     public DateTime LastLoginDate { get; set; }
-
     [DataMember]
     public DateTime LastPasswordChangedDate { get; set; }
-
     [DataMember]
-    public DateTime LastLockoutDate { get; set; }
-
+    public DateTime LastActivityDate { get; set; }
     [DataMember]
     public bool IsApproved { get; set; }
-
-    [DataMember]
-    public bool IsLockedOut { get; set; }
-
-    [DataMember]
-    public bool IsOnline { get; set; }
-
-    [DataMember]
-    public DateTime LastActivityDate { get; set; }
-
-    [DataMember]
-    public string PasswordQuestion { get; set; }
-
-    [DataMember]
-    public string ProviderName { get; set; }
-
-    [DataMember]
-    public object ProviderUserKey { get; set; }
   }
 }
Index: branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/UserGroup.cs
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/UserGroup.cs	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/UserGroup.cs	(revision 6820)
@@ -28,5 +28,4 @@
     [DataMember]
     public string Name { get; set; }
-
     [DataMember]
     public Guid ParentUserGroup { get; set; }
