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 7367)
@@ -2,5 +2,5 @@
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.237
+//     Runtime Version:4.0.30319.239
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
@@ -20,11 +20,18 @@
         "")]
     [System.SerializableAttribute()]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.UserGroupBase))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.User))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.LightweightUser))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.UserGroup))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.ClientError))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.Resource))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.Client))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.ClientConfiguration))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.ClientType))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.Country))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.OperatingSystem))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.ClientGroup))]
     [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
     {
@@ -55,4 +62,937 @@
             }
         }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="UserGroupBase", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+        "")]
+    [System.SerializableAttribute()]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.User))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.LightweightUser))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.UserGroup))]
+    public partial class UserGroupBase : HeuristicLab.Clients.Access.AccessItem
+    {
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid IdField;
+        
+        [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.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()]
+    public partial class User : HeuristicLab.Clients.Access.UserGroupBase
+    {
+        
+        [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 System.DateTime LastActivityDateField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.DateTime LastLoginDateField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.DateTime LastPasswordChangedDateField;
+        
+        [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 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 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 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="LightweightUser", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+        "")]
+    [System.SerializableAttribute()]
+    public partial class LightweightUser : HeuristicLab.Clients.Access.UserGroupBase
+    {
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string FullNameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string UserNameField;
+        
+        [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 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.UserGroupBase
+    {
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [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.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="ClientError", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+        "")]
+    [System.SerializableAttribute()]
+    public partial class ClientError : HeuristicLab.Clients.Access.AccessItem
+    {
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid ClientIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string ConfigDumpField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string ExceptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.DateTime TimestampField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string UserCommentField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid UserIdField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid ClientId
+        {
+            get
+            {
+                return this.ClientIdField;
+            }
+            set
+            {
+                if ((this.ClientIdField.Equals(value) != true))
+                {
+                    this.ClientIdField = value;
+                    this.RaisePropertyChanged("ClientId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string ConfigDump
+        {
+            get
+            {
+                return this.ConfigDumpField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ConfigDumpField, value) != true))
+                {
+                    this.ConfigDumpField = value;
+                    this.RaisePropertyChanged("ConfigDump");
+                }
+            }
+        }
+        
+        [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 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 System.DateTime Timestamp
+        {
+            get
+            {
+                return this.TimestampField;
+            }
+            set
+            {
+                if ((this.TimestampField.Equals(value) != true))
+                {
+                    this.TimestampField = value;
+                    this.RaisePropertyChanged("Timestamp");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string UserComment
+        {
+            get
+            {
+                return this.UserCommentField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.UserCommentField, value) != true))
+                {
+                    this.UserCommentField = value;
+                    this.RaisePropertyChanged("UserComment");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid UserId
+        {
+            get
+            {
+                return this.UserIdField;
+            }
+            set
+            {
+                if ((this.UserIdField.Equals(value) != true))
+                {
+                    this.UserIdField = value;
+                    this.RaisePropertyChanged("UserId");
+                }
+            }
+        }
+    }
+    
+    [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.Client))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.ClientGroup))]
+    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.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.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 HeuristicLab.Clients.Access.ClientConfiguration ClientConfigurationField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.Clients.Access.ClientType ClientTypeField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.Clients.Access.Country CountryField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string HeuristicLabVersionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int MemorySizeField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int NumberOfCoresField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.Clients.Access.OperatingSystem OperatingSystemField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string ProcessorTypeField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.DateTime TimestampField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.Access.ClientConfiguration ClientConfiguration
+        {
+            get
+            {
+                return this.ClientConfigurationField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ClientConfigurationField, value) != true))
+                {
+                    this.ClientConfigurationField = value;
+                    this.RaisePropertyChanged("ClientConfiguration");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.Access.ClientType ClientType
+        {
+            get
+            {
+                return this.ClientTypeField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ClientTypeField, value) != true))
+                {
+                    this.ClientTypeField = value;
+                    this.RaisePropertyChanged("ClientType");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.Access.Country 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 int MemorySize
+        {
+            get
+            {
+                return this.MemorySizeField;
+            }
+            set
+            {
+                if ((this.MemorySizeField.Equals(value) != true))
+                {
+                    this.MemorySizeField = value;
+                    this.RaisePropertyChanged("MemorySize");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int NumberOfCores
+        {
+            get
+            {
+                return this.NumberOfCoresField;
+            }
+            set
+            {
+                if ((this.NumberOfCoresField.Equals(value) != true))
+                {
+                    this.NumberOfCoresField = value;
+                    this.RaisePropertyChanged("NumberOfCores");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Clients.Access.OperatingSystem 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.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="ClientConfiguration", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+        "")]
+    [System.SerializableAttribute()]
+    public partial class ClientConfiguration : HeuristicLab.Clients.Access.AccessItem
+    {
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string DescriptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string HashField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid IdField;
+        
+        [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 string Hash
+        {
+            get
+            {
+                return this.HashField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.HashField, value) != true))
+                {
+                    this.HashField = value;
+                    this.RaisePropertyChanged("Hash");
+                }
+            }
+        }
+        
+        [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.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="ClientType", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+        "")]
+    [System.SerializableAttribute()]
+    public partial class ClientType : HeuristicLab.Clients.Access.AccessItem
+    {
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [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.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="Country", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+        "")]
+    [System.SerializableAttribute()]
+    public partial class Country : HeuristicLab.Clients.Access.AccessItem
+    {
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [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.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="OperatingSystem", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+        "")]
+    [System.SerializableAttribute()]
+    public partial class OperatingSystem : HeuristicLab.Clients.Access.AccessItem
+    {
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [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.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
+    {
     }
     
@@ -66,7 +1006,4 @@
         
         [System.Runtime.Serialization.OptionalFieldAttribute()]
-        private string ExceptionField;
-        
-        [System.Runtime.Serialization.OptionalFieldAttribute()]
         private string MessageField;
         
@@ -76,21 +1013,4 @@
         [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()]
@@ -141,395 +1061,4 @@
                     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");
                 }
             }
@@ -546,19 +1075,19 @@
         
         [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");
+        private string NameField;
+        
+        [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");
                 }
             }
@@ -568,109 +1097,73 @@
     [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.Runtime.Serialization.DataContractAttribute(Name="ClientGroupMapping", 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");
-                }
+    public partial class ClientGroupMapping : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid ChildField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid ParentField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid Child
+        {
+            get
+            {
+                return this.ChildField;
+            }
+            set
+            {
+                if ((this.ChildField.Equals(value) != true))
+                {
+                    this.ChildField = value;
+                    this.RaisePropertyChanged("Child");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid Parent
+        {
+            get
+            {
+                return this.ParentField;
+            }
+            set
+            {
+                if ((this.ParentField.Equals(value) != true))
+                {
+                    this.ParentField = value;
+                    this.RaisePropertyChanged("Parent");
+                }
+            }
+        }
+        
+        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));
             }
         }
@@ -679,156 +1172,73 @@
     [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.Runtime.Serialization.DataContractAttribute(Name="UserGroupMapping", 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");
-                }
+    public partial class UserGroupMapping : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid ChildField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid ParentField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid Child
+        {
+            get
+            {
+                return this.ChildField;
+            }
+            set
+            {
+                if ((this.ChildField.Equals(value) != true))
+                {
+                    this.ChildField = value;
+                    this.RaisePropertyChanged("Child");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid Parent
+        {
+            get
+            {
+                return this.ParentField;
+            }
+            set
+            {
+                if ((this.ParentField.Equals(value) != true))
+                {
+                    this.ParentField = value;
+                    this.RaisePropertyChanged("Parent");
+                }
+            }
+        }
+        
+        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));
             }
         }
@@ -840,4 +1250,31 @@
     {
         
+        [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/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/AddRoleToGroup", ReplyAction="http://tempuri.org/IAccessService/AddRoleToGroupResponse")]
+        void AddRoleToGroup(HeuristicLab.Clients.Access.UserGroup userGroup, HeuristicLab.Clients.Access.Role role);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/RemoveRoleFromGroup", ReplyAction="http://tempuri.org/IAccessService/RemoveRoleFromGroupResponse")]
+        void RemoveRoleFromGroup(HeuristicLab.Clients.Access.UserGroup userGroup, HeuristicLab.Clients.Access.Role role);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/ReportError", ReplyAction="http://tempuri.org/IAccessService/ReportErrorResponse")]
+        void ReportError(HeuristicLab.Clients.Access.ClientError error);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetClientErrors", ReplyAction="http://tempuri.org/IAccessService/GetClientErrorsResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientError> GetClientErrors();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetLastClientErrors", ReplyAction="http://tempuri.org/IAccessService/GetLastClientErrorsResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientError> GetLastClientErrors(System.DateTime startDate);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/DeleteError", ReplyAction="http://tempuri.org/IAccessService/DeleteErrorResponse")]
+        void DeleteError(HeuristicLab.Clients.Access.ClientError error);
+        
         [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/ClientExists", ReplyAction="http://tempuri.org/IAccessService/ClientExistsResponse")]
         bool ClientExists(System.Guid id);
@@ -847,5 +1284,8 @@
         
         [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.Collections.Generic.List<HeuristicLab.Clients.Access.Client> GetClients(System.Collections.Generic.List<System.Guid> ids);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetAllClients", ReplyAction="http://tempuri.org/IAccessService/GetAllClientsResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.Client> GetAllClients();
         
         [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/AddClient", ReplyAction="http://tempuri.org/IAccessService/AddClientResponse")]
@@ -858,4 +1298,31 @@
         void DeleteClient(HeuristicLab.Clients.Access.Client client);
         
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetAllClientGroups", ReplyAction="http://tempuri.org/IAccessService/GetAllClientGroupsResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientGroup> GetAllClientGroups();
+        
+        [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.Collections.Generic.List<System.Guid> ids);
+        
+        [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/AddResourceToGroup", ReplyAction="http://tempuri.org/IAccessService/AddResourceToGroupResponse")]
+        void AddResourceToGroup(HeuristicLab.Clients.Access.Resource resource, HeuristicLab.Clients.Access.ClientGroup group);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/RemoveResourceFromGroup", ReplyAction="http://tempuri.org/IAccessService/RemoveResourceFromGroupResponse")]
+        void RemoveResourceFromGroup(HeuristicLab.Clients.Access.Resource resource, HeuristicLab.Clients.Access.ClientGroup group);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetClientGroupMapping", ReplyAction="http://tempuri.org/IAccessService/GetClientGroupMappingResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientGroupMapping> GetClientGroupMapping();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetResources", ReplyAction="http://tempuri.org/IAccessService/GetResourcesResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.Resource> GetResources();
+        
         [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetLastClientLog", ReplyAction="http://tempuri.org/IAccessService/GetLastClientLogResponse")]
         HeuristicLab.Clients.Access.ClientLog GetLastClientLog(System.Guid clientId);
@@ -867,27 +1334,21 @@
         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/AddClientLog", ReplyAction="http://tempuri.org/IAccessService/AddClientLogResponse")]
+        void AddClientLog(HeuristicLab.Clients.Access.ClientLog log);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/DeleteClientLog", ReplyAction="http://tempuri.org/IAccessService/DeleteClientLogResponse")]
+        void DeleteClientLog(HeuristicLab.Clients.Access.ClientLog log);
         
         [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/Login", ReplyAction="http://tempuri.org/IAccessService/LoginResponse")]
-        void Login();
+        HeuristicLab.Clients.Access.User Login();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetAllLightweightUsers", ReplyAction="http://tempuri.org/IAccessService/GetAllLightweightUsersResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.LightweightUser> GetAllLightweightUsers();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetAllUsers", ReplyAction="http://tempuri.org/IAccessService/GetAllUsersResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.User> GetAllUsers();
         
         [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.Collections.Generic.List<HeuristicLab.Clients.Access.User> GetUsers(System.Collections.Generic.List<System.Guid> ids);
         
         [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/AddUser", ReplyAction="http://tempuri.org/IAccessService/AddUserResponse")]
@@ -907,32 +1368,38 @@
         
         [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/ResetPassword", ReplyAction="http://tempuri.org/IAccessService/ResetPasswordResponse")]
-        void ResetPassword(HeuristicLab.Clients.Access.User user, string password);
+        bool ResetPassword(HeuristicLab.Clients.Access.User user, string oldPassword, string newPassword);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetAllUserGroups", ReplyAction="http://tempuri.org/IAccessService/GetAllUserGroupsResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.UserGroup> GetAllUserGroups();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetUserGroupsOfUser", ReplyAction="http://tempuri.org/IAccessService/GetUserGroupsOfUserResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.UserGroup> GetUserGroupsOfUser(System.Guid userId);
+        
+        [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.Collections.Generic.List<System.Guid> ids);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/AddUserGroup", ReplyAction="http://tempuri.org/IAccessService/AddUserGroupResponse")]
+        System.Guid 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.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/AddUserGroupBaseToGroup", ReplyAction="http://tempuri.org/IAccessService/AddUserGroupBaseToGroupResponse")]
+        void AddUserGroupBaseToGroup(HeuristicLab.Clients.Access.UserGroupBase resource, HeuristicLab.Clients.Access.UserGroup group);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/RemoveUserGroupBaseFromGroup", ReplyAction="http://tempuri.org/IAccessService/RemoveUserGroupBaseFromGroupResponse")]
+        void RemoveUserGroupBaseFromGroup(HeuristicLab.Clients.Access.UserGroupBase resource, HeuristicLab.Clients.Access.UserGroup group);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetUsersAndGroups", ReplyAction="http://tempuri.org/IAccessService/GetUsersAndGroupsResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.UserGroupBase> GetUsersAndGroups();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetUserGroupMapping", ReplyAction="http://tempuri.org/IAccessService/GetUserGroupMappingResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.UserGroupMapping> GetUserGroupMapping();
         
         [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);
     }
     
@@ -971,4 +1438,49 @@
         }
         
+        public HeuristicLab.Clients.Access.Role AddRole(HeuristicLab.Clients.Access.Role role)
+        {
+            return base.Channel.AddRole(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 void AddRoleToGroup(HeuristicLab.Clients.Access.UserGroup userGroup, HeuristicLab.Clients.Access.Role role)
+        {
+            base.Channel.AddRoleToGroup(userGroup, role);
+        }
+        
+        public void RemoveRoleFromGroup(HeuristicLab.Clients.Access.UserGroup userGroup, HeuristicLab.Clients.Access.Role role)
+        {
+            base.Channel.RemoveRoleFromGroup(userGroup, role);
+        }
+        
+        public void ReportError(HeuristicLab.Clients.Access.ClientError error)
+        {
+            base.Channel.ReportError(error);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientError> GetClientErrors()
+        {
+            return base.Channel.GetClientErrors();
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientError> GetLastClientErrors(System.DateTime startDate)
+        {
+            return base.Channel.GetLastClientErrors(startDate);
+        }
+        
+        public void DeleteError(HeuristicLab.Clients.Access.ClientError error)
+        {
+            base.Channel.DeleteError(error);
+        }
+        
         public bool ClientExists(System.Guid id)
         {
@@ -981,7 +1493,12 @@
         }
         
-        public System.Collections.Generic.List<HeuristicLab.Clients.Access.Client> GetClients()
-        {
-            return base.Channel.GetClients();
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.Client> GetClients(System.Collections.Generic.List<System.Guid> ids)
+        {
+            return base.Channel.GetClients(ids);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.Client> GetAllClients()
+        {
+            return base.Channel.GetAllClients();
         }
         
@@ -1001,4 +1518,49 @@
         }
         
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientGroup> GetAllClientGroups()
+        {
+            return base.Channel.GetAllClientGroups();
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientGroup> GetClientGroups(System.Collections.Generic.List<System.Guid> ids)
+        {
+            return base.Channel.GetClientGroups(ids);
+        }
+        
+        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 AddResourceToGroup(HeuristicLab.Clients.Access.Resource resource, HeuristicLab.Clients.Access.ClientGroup group)
+        {
+            base.Channel.AddResourceToGroup(resource, group);
+        }
+        
+        public void RemoveResourceFromGroup(HeuristicLab.Clients.Access.Resource resource, HeuristicLab.Clients.Access.ClientGroup group)
+        {
+            base.Channel.RemoveResourceFromGroup(resource, group);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientGroupMapping> GetClientGroupMapping()
+        {
+            return base.Channel.GetClientGroupMapping();
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.Resource> GetResources()
+        {
+            return base.Channel.GetResources();
+        }
+        
         public HeuristicLab.Clients.Access.ClientLog GetLastClientLog(System.Guid clientId)
         {
@@ -1016,42 +1578,32 @@
         }
         
-        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 void AddClientLog(HeuristicLab.Clients.Access.ClientLog log)
+        {
+            base.Channel.AddClientLog(log);
+        }
+        
+        public void DeleteClientLog(HeuristicLab.Clients.Access.ClientLog log)
+        {
+            base.Channel.DeleteClientLog(log);
+        }
+        
+        public HeuristicLab.Clients.Access.User Login()
+        {
+            return base.Channel.Login();
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.LightweightUser> GetAllLightweightUsers()
+        {
+            return base.Channel.GetAllLightweightUsers();
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.User> GetAllUsers()
+        {
+            return base.Channel.GetAllUsers();
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.User> GetUsers(System.Collections.Generic.List<System.Guid> ids)
+        {
+            return base.Channel.GetUsers(ids);
         }
         
@@ -1081,7 +1633,57 @@
         }
         
-        public void ResetPassword(HeuristicLab.Clients.Access.User user, string password)
-        {
-            base.Channel.ResetPassword(user, password);
+        public bool ResetPassword(HeuristicLab.Clients.Access.User user, string oldPassword, string newPassword)
+        {
+            return base.Channel.ResetPassword(user, oldPassword, newPassword);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.UserGroup> GetAllUserGroups()
+        {
+            return base.Channel.GetAllUserGroups();
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.UserGroup> GetUserGroupsOfUser(System.Guid userId)
+        {
+            return base.Channel.GetUserGroupsOfUser(userId);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.UserGroup> GetUserGroups(System.Collections.Generic.List<System.Guid> ids)
+        {
+            return base.Channel.GetUserGroups(ids);
+        }
+        
+        public System.Guid 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);
+        }
+        
+        public void AddUserGroupBaseToGroup(HeuristicLab.Clients.Access.UserGroupBase resource, HeuristicLab.Clients.Access.UserGroup group)
+        {
+            base.Channel.AddUserGroupBaseToGroup(resource, group);
+        }
+        
+        public void RemoveUserGroupBaseFromGroup(HeuristicLab.Clients.Access.UserGroupBase resource, HeuristicLab.Clients.Access.UserGroup group)
+        {
+            base.Channel.RemoveUserGroupBaseFromGroup(resource, group);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.UserGroupBase> GetUsersAndGroups()
+        {
+            return base.Channel.GetUsersAndGroups();
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.UserGroupMapping> GetUserGroupMapping()
+        {
+            return base.Channel.GetUserGroupMapping();
         }
         
@@ -1090,44 +1692,4 @@
             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 7367)
@@ -7,5 +7,5 @@
 
 svcutil.exe ^
-  http://localhost/AccessService?wsdl ^
+  http://localhost:81/AccessService?wsdl ^
   /out:AccessServiceClient ^
   /namespace:*,HeuristicLab.Clients.Access ^
