Index: branches/ClientUserManagement/HeuristicLab.ClientUserManagement.sln
===================================================================
--- branches/ClientUserManagement/HeuristicLab.ClientUserManagement.sln	(revision 6810)
+++ 	(revision )
@@ -1,83 +1,0 @@
-﻿
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{FAC56B1A-B544-430E-931B-68519E07E8AF}"
-	ProjectSection(SolutionItems) = preProject
-		PreBuildEvent.cmd = PreBuildEvent.cmd
-	EndProjectSection
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.ClientManagement.DataAccess", "HeuristicLab.Services.ClientManagement.DataAccess\3.3\HeuristicLab.Services.ClientManagement.DataAccess.csproj", "{5C6595CF-436E-4C45-9B6C-FC3948A6E117}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.UserManagement", "HeuristicLab.Services.UserManagement\3.3\HeuristicLab.Services.UserManagement.csproj", "{7FAF6FD7-F5C4-42AA-BA32-E89B563BDF60}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.UserManagement.DataAccess", "HeuristicLab.Services.UserManagement.DataAccess\3.3\HeuristicLab.Services.UserManagement.DataAccess.csproj", "{AB586CCE-F953-458F-9061-8E4B83FC90D6}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.ClientManagement", "HeuristicLab.Services.ClientManagement\3.3\HeuristicLab.Services.ClientManagement.csproj", "{63D4C87A-030B-4578-8E9E-DAE6F3E39C90}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Clients.UserManagement", "HeuristicLab.Clients.UserManagement\3.3\HeuristicLab.Clients.UserManagement.csproj", "{494F87F4-0F25-4D33-A382-10CDB2174D48}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Any CPU = Debug|Any CPU
-		Debug|Mixed Platforms = Debug|Mixed Platforms
-		Debug|x86 = Debug|x86
-		Release|Any CPU = Release|Any CPU
-		Release|Mixed Platforms = Release|Mixed Platforms
-		Release|x86 = Release|x86
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{5C6595CF-436E-4C45-9B6C-FC3948A6E117}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{5C6595CF-436E-4C45-9B6C-FC3948A6E117}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{5C6595CF-436E-4C45-9B6C-FC3948A6E117}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{5C6595CF-436E-4C45-9B6C-FC3948A6E117}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{5C6595CF-436E-4C45-9B6C-FC3948A6E117}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{5C6595CF-436E-4C45-9B6C-FC3948A6E117}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{5C6595CF-436E-4C45-9B6C-FC3948A6E117}.Release|Any CPU.Build.0 = Release|Any CPU
-		{5C6595CF-436E-4C45-9B6C-FC3948A6E117}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{5C6595CF-436E-4C45-9B6C-FC3948A6E117}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-		{5C6595CF-436E-4C45-9B6C-FC3948A6E117}.Release|x86.ActiveCfg = Release|Any CPU
-		{7FAF6FD7-F5C4-42AA-BA32-E89B563BDF60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{7FAF6FD7-F5C4-42AA-BA32-E89B563BDF60}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{7FAF6FD7-F5C4-42AA-BA32-E89B563BDF60}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{7FAF6FD7-F5C4-42AA-BA32-E89B563BDF60}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{7FAF6FD7-F5C4-42AA-BA32-E89B563BDF60}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{7FAF6FD7-F5C4-42AA-BA32-E89B563BDF60}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{7FAF6FD7-F5C4-42AA-BA32-E89B563BDF60}.Release|Any CPU.Build.0 = Release|Any CPU
-		{7FAF6FD7-F5C4-42AA-BA32-E89B563BDF60}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{7FAF6FD7-F5C4-42AA-BA32-E89B563BDF60}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-		{7FAF6FD7-F5C4-42AA-BA32-E89B563BDF60}.Release|x86.ActiveCfg = Release|Any CPU
-		{AB586CCE-F953-458F-9061-8E4B83FC90D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{AB586CCE-F953-458F-9061-8E4B83FC90D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{AB586CCE-F953-458F-9061-8E4B83FC90D6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{AB586CCE-F953-458F-9061-8E4B83FC90D6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{AB586CCE-F953-458F-9061-8E4B83FC90D6}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{AB586CCE-F953-458F-9061-8E4B83FC90D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{AB586CCE-F953-458F-9061-8E4B83FC90D6}.Release|Any CPU.Build.0 = Release|Any CPU
-		{AB586CCE-F953-458F-9061-8E4B83FC90D6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{AB586CCE-F953-458F-9061-8E4B83FC90D6}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-		{AB586CCE-F953-458F-9061-8E4B83FC90D6}.Release|x86.ActiveCfg = Release|Any CPU
-		{63D4C87A-030B-4578-8E9E-DAE6F3E39C90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{63D4C87A-030B-4578-8E9E-DAE6F3E39C90}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{63D4C87A-030B-4578-8E9E-DAE6F3E39C90}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{63D4C87A-030B-4578-8E9E-DAE6F3E39C90}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{63D4C87A-030B-4578-8E9E-DAE6F3E39C90}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{63D4C87A-030B-4578-8E9E-DAE6F3E39C90}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{63D4C87A-030B-4578-8E9E-DAE6F3E39C90}.Release|Any CPU.Build.0 = Release|Any CPU
-		{63D4C87A-030B-4578-8E9E-DAE6F3E39C90}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{63D4C87A-030B-4578-8E9E-DAE6F3E39C90}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-		{63D4C87A-030B-4578-8E9E-DAE6F3E39C90}.Release|x86.ActiveCfg = Release|Any CPU
-		{494F87F4-0F25-4D33-A382-10CDB2174D48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{494F87F4-0F25-4D33-A382-10CDB2174D48}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{494F87F4-0F25-4D33-A382-10CDB2174D48}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{494F87F4-0F25-4D33-A382-10CDB2174D48}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{494F87F4-0F25-4D33-A382-10CDB2174D48}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{494F87F4-0F25-4D33-A382-10CDB2174D48}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{494F87F4-0F25-4D33-A382-10CDB2174D48}.Release|Any CPU.Build.0 = Release|Any CPU
-		{494F87F4-0F25-4D33-A382-10CDB2174D48}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{494F87F4-0F25-4D33-A382-10CDB2174D48}.Release|Mixed Platforms.Build.0 = Release|Any CPU
-		{494F87F4-0F25-4D33-A382-10CDB2174D48}.Release|x86.ActiveCfg = Release|Any CPU
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
Index: branches/ClientUserManagement/HeuristicLab.Clients.UserManagement/3.3/HeuristicLab.Clients.Access.csproj
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Clients.UserManagement/3.3/HeuristicLab.Clients.Access.csproj	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Clients.UserManagement/3.3/HeuristicLab.Clients.Access.csproj	(revision 6815)
@@ -0,0 +1,75 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{494F87F4-0F25-4D33-A382-10CDB2174D48}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Clients.Access</RootNamespace>
+    <AssemblyName>HeuristicLab.Clients.Access</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Runtime.Serialization" />
+    <Reference Include="System.ServiceModel" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ServiceClients\AccessServiceClient.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config" />
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="ServiceClients\GenerateServiceClients.cmd" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: branches/ClientUserManagement/HeuristicLab.Clients.UserManagement/3.3/HeuristicLab.Clients.UserManagement.csproj
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Clients.UserManagement/3.3/HeuristicLab.Clients.UserManagement.csproj	(revision 6810)
+++ 	(revision )
@@ -1,75 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>8.0.30703</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{494F87F4-0F25-4D33-A382-10CDB2174D48}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>HeuristicLab.Clients.UserManagement</RootNamespace>
-    <AssemblyName>HeuristicLab.Clients.UserManagement</AssemblyName>
-    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup>
-    <SignAssembly>true</SignAssembly>
-  </PropertyGroup>
-  <PropertyGroup>
-    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Core" />
-    <Reference Include="System.Runtime.Serialization" />
-    <Reference Include="System.ServiceModel" />
-    <Reference Include="System.Xml.Linq" />
-    <Reference Include="System.Data.DataSetExtensions" />
-    <Reference Include="Microsoft.CSharp" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="ServiceClients\UserManagementClient.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="app.config" />
-    <None Include="HeuristicLab.snk" />
-    <None Include="Properties\AssemblyInfo.frame" />
-    <None Include="ServiceClients\GenerateServiceClients.cmd" />
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <PropertyGroup>
-    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
-set ProjectDir=$(ProjectDir)
-set SolutionDir=$(SolutionDir)
-set Outdir=$(Outdir)
-call PreBuildEvent.cmd</PreBuildEvent>
-  </PropertyGroup>
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
-</Project>
Index: branches/ClientUserManagement/HeuristicLab.Clients.UserManagement/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Clients.UserManagement/3.3/Properties/AssemblyInfo.frame	(revision 6810)
+++ branches/ClientUserManagement/HeuristicLab.Clients.UserManagement/3.3/Properties/AssemblyInfo.frame	(revision 6815)
@@ -27,5 +27,5 @@
 // set of attributes. Change these attribute values to modify the information
 // associated with an assembly.
-[assembly: AssemblyTitle("HeuristicLab.Services.Clients.UserManagement")]
+[assembly: AssemblyTitle("HeuristicLab.Services.Clients.Access")]
 [assembly: AssemblyDescription("")]
 [assembly: AssemblyConfiguration("")]
Index: branches/ClientUserManagement/HeuristicLab.Clients.UserManagement/3.3/ServiceClients/AccessServiceClient.cs
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Clients.UserManagement/3.3/ServiceClients/AccessServiceClient.cs	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Clients.UserManagement/3.3/ServiceClients/AccessServiceClient.cs	(revision 6815)
@@ -0,0 +1,1133 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.237
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Clients.Access
+{
+    using System.Runtime.Serialization;
+    using System;
+    
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="AccessItem", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+        "")]
+    [System.SerializableAttribute()]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.ClientLog))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.User))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.UserGroup))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.Role))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.Resource))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.ClientGroup))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.Client))]
+    public partial class AccessItem : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="ClientLog", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+        "")]
+    [System.SerializableAttribute()]
+    public partial class ClientLog : HeuristicLab.Clients.Access.AccessItem
+    {
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string ExceptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string MessageField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid ResourceIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.DateTime TimestampField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Exception
+        {
+            get
+            {
+                return this.ExceptionField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ExceptionField, value) != true))
+                {
+                    this.ExceptionField = value;
+                    this.RaisePropertyChanged("Exception");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Message
+        {
+            get
+            {
+                return this.MessageField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.MessageField, value) != true))
+                {
+                    this.MessageField = value;
+                    this.RaisePropertyChanged("Message");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid ResourceId
+        {
+            get
+            {
+                return this.ResourceIdField;
+            }
+            set
+            {
+                if ((this.ResourceIdField.Equals(value) != true))
+                {
+                    this.ResourceIdField = value;
+                    this.RaisePropertyChanged("ResourceId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.DateTime Timestamp
+        {
+            get
+            {
+                return this.TimestampField;
+            }
+            set
+            {
+                if ((this.TimestampField.Equals(value) != true))
+                {
+                    this.TimestampField = value;
+                    this.RaisePropertyChanged("Timestamp");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="User", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+        "")]
+    [System.SerializableAttribute()]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.Client))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.Resource))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.AccessItem))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientGroup>))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.ClientGroup))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(System.Collections.Generic.List<HeuristicLab.Clients.Access.Client>))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.ClientLog))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientLog>))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(System.Collections.Generic.List<HeuristicLab.Clients.Access.User>))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(System.Collections.Generic.List<HeuristicLab.Clients.Access.UserGroup>))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.UserGroup))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.Role))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(System.Collections.Generic.List<HeuristicLab.Clients.Access.Role>))]
+    public partial class User : HeuristicLab.Clients.Access.AccessItem
+    {
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string CommentField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.DateTime CreationDateField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string EmailField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string FullNameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private bool IsApprovedField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private bool IsLockedOutField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private bool IsOnlineField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.DateTime LastActivityDateField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.DateTime LastLockoutDateField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.DateTime LastLoginDateField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.DateTime LastPasswordChangedDateField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string PasswordQuestionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string ProviderNameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private object ProviderUserKeyField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.Clients.Access.UserGroup> UserGroupsField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string UserNameField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Comment
+        {
+            get
+            {
+                return this.CommentField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.CommentField, value) != true))
+                {
+                    this.CommentField = value;
+                    this.RaisePropertyChanged("Comment");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.DateTime CreationDate
+        {
+            get
+            {
+                return this.CreationDateField;
+            }
+            set
+            {
+                if ((this.CreationDateField.Equals(value) != true))
+                {
+                    this.CreationDateField = value;
+                    this.RaisePropertyChanged("CreationDate");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Email
+        {
+            get
+            {
+                return this.EmailField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.EmailField, value) != true))
+                {
+                    this.EmailField = value;
+                    this.RaisePropertyChanged("Email");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string FullName
+        {
+            get
+            {
+                return this.FullNameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.FullNameField, value) != true))
+                {
+                    this.FullNameField = value;
+                    this.RaisePropertyChanged("FullName");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public bool IsApproved
+        {
+            get
+            {
+                return this.IsApprovedField;
+            }
+            set
+            {
+                if ((this.IsApprovedField.Equals(value) != true))
+                {
+                    this.IsApprovedField = value;
+                    this.RaisePropertyChanged("IsApproved");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public bool IsLockedOut
+        {
+            get
+            {
+                return this.IsLockedOutField;
+            }
+            set
+            {
+                if ((this.IsLockedOutField.Equals(value) != true))
+                {
+                    this.IsLockedOutField = value;
+                    this.RaisePropertyChanged("IsLockedOut");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public bool IsOnline
+        {
+            get
+            {
+                return this.IsOnlineField;
+            }
+            set
+            {
+                if ((this.IsOnlineField.Equals(value) != true))
+                {
+                    this.IsOnlineField = value;
+                    this.RaisePropertyChanged("IsOnline");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.DateTime LastActivityDate
+        {
+            get
+            {
+                return this.LastActivityDateField;
+            }
+            set
+            {
+                if ((this.LastActivityDateField.Equals(value) != true))
+                {
+                    this.LastActivityDateField = value;
+                    this.RaisePropertyChanged("LastActivityDate");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.DateTime LastLockoutDate
+        {
+            get
+            {
+                return this.LastLockoutDateField;
+            }
+            set
+            {
+                if ((this.LastLockoutDateField.Equals(value) != true))
+                {
+                    this.LastLockoutDateField = value;
+                    this.RaisePropertyChanged("LastLockoutDate");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.DateTime LastLoginDate
+        {
+            get
+            {
+                return this.LastLoginDateField;
+            }
+            set
+            {
+                if ((this.LastLoginDateField.Equals(value) != true))
+                {
+                    this.LastLoginDateField = value;
+                    this.RaisePropertyChanged("LastLoginDate");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.DateTime LastPasswordChangedDate
+        {
+            get
+            {
+                return this.LastPasswordChangedDateField;
+            }
+            set
+            {
+                if ((this.LastPasswordChangedDateField.Equals(value) != true))
+                {
+                    this.LastPasswordChangedDateField = value;
+                    this.RaisePropertyChanged("LastPasswordChangedDate");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string PasswordQuestion
+        {
+            get
+            {
+                return this.PasswordQuestionField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.PasswordQuestionField, value) != true))
+                {
+                    this.PasswordQuestionField = value;
+                    this.RaisePropertyChanged("PasswordQuestion");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string ProviderName
+        {
+            get
+            {
+                return this.ProviderNameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ProviderNameField, value) != true))
+                {
+                    this.ProviderNameField = value;
+                    this.RaisePropertyChanged("ProviderName");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public object ProviderUserKey
+        {
+            get
+            {
+                return this.ProviderUserKeyField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ProviderUserKeyField, value) != true))
+                {
+                    this.ProviderUserKeyField = value;
+                    this.RaisePropertyChanged("ProviderUserKey");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.UserGroup> UserGroups
+        {
+            get
+            {
+                return this.UserGroupsField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.UserGroupsField, value) != true))
+                {
+                    this.UserGroupsField = value;
+                    this.RaisePropertyChanged("UserGroups");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string UserName
+        {
+            get
+            {
+                return this.UserNameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.UserNameField, value) != true))
+                {
+                    this.UserNameField = value;
+                    this.RaisePropertyChanged("UserName");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="UserGroup", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+        "")]
+    [System.SerializableAttribute()]
+    public partial class UserGroup : HeuristicLab.Clients.Access.AccessItem
+    {
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid ParentUserGroupField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Name
+        {
+            get
+            {
+                return this.NameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.NameField, value) != true))
+                {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid ParentUserGroup
+        {
+            get
+            {
+                return this.ParentUserGroupField;
+            }
+            set
+            {
+                if ((this.ParentUserGroupField.Equals(value) != true))
+                {
+                    this.ParentUserGroupField = value;
+                    this.RaisePropertyChanged("ParentUserGroup");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="Role", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+        "")]
+    [System.SerializableAttribute()]
+    public partial class Role : HeuristicLab.Clients.Access.AccessItem
+    {
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string RoleNameField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string RoleName
+        {
+            get
+            {
+                return this.RoleNameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.RoleNameField, value) != true))
+                {
+                    this.RoleNameField = value;
+                    this.RaisePropertyChanged("RoleName");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="Resource", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+        "")]
+    [System.SerializableAttribute()]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.ClientGroup))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.Client))]
+    public partial class Resource : HeuristicLab.Clients.Access.AccessItem
+    {
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string DescriptionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid IdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientGroup> ParentGroupsField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string TypeField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Description
+        {
+            get
+            {
+                return this.DescriptionField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.DescriptionField, value) != true))
+                {
+                    this.DescriptionField = value;
+                    this.RaisePropertyChanged("Description");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid Id
+        {
+            get
+            {
+                return this.IdField;
+            }
+            set
+            {
+                if ((this.IdField.Equals(value) != true))
+                {
+                    this.IdField = value;
+                    this.RaisePropertyChanged("Id");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Name
+        {
+            get
+            {
+                return this.NameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.NameField, value) != true))
+                {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientGroup> ParentGroups
+        {
+            get
+            {
+                return this.ParentGroupsField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ParentGroupsField, value) != true))
+                {
+                    this.ParentGroupsField = value;
+                    this.RaisePropertyChanged("ParentGroups");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Type
+        {
+            get
+            {
+                return this.TypeField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.TypeField, value) != true))
+                {
+                    this.TypeField = value;
+                    this.RaisePropertyChanged("Type");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="ClientGroup", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+        "")]
+    [System.SerializableAttribute()]
+    public partial class ClientGroup : HeuristicLab.Clients.Access.Resource
+    {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="Client", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+        "")]
+    [System.SerializableAttribute()]
+    public partial class Client : HeuristicLab.Clients.Access.Resource
+    {
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string CountryField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string HeuristicLabVersionField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string IPAddressField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Nullable<int> MemorySizeField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Nullable<int> NumberOfCoresField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string OperatingSystemField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string ProcessorTypeField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Country
+        {
+            get
+            {
+                return this.CountryField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.CountryField, value) != true))
+                {
+                    this.CountryField = value;
+                    this.RaisePropertyChanged("Country");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string HeuristicLabVersion
+        {
+            get
+            {
+                return this.HeuristicLabVersionField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.HeuristicLabVersionField, value) != true))
+                {
+                    this.HeuristicLabVersionField = value;
+                    this.RaisePropertyChanged("HeuristicLabVersion");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string IPAddress
+        {
+            get
+            {
+                return this.IPAddressField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.IPAddressField, value) != true))
+                {
+                    this.IPAddressField = value;
+                    this.RaisePropertyChanged("IPAddress");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Nullable<int> MemorySize
+        {
+            get
+            {
+                return this.MemorySizeField;
+            }
+            set
+            {
+                if ((this.MemorySizeField.Equals(value) != true))
+                {
+                    this.MemorySizeField = value;
+                    this.RaisePropertyChanged("MemorySize");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Nullable<int> NumberOfCores
+        {
+            get
+            {
+                return this.NumberOfCoresField;
+            }
+            set
+            {
+                if ((this.NumberOfCoresField.Equals(value) != true))
+                {
+                    this.NumberOfCoresField = value;
+                    this.RaisePropertyChanged("NumberOfCores");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string OperatingSystem
+        {
+            get
+            {
+                return this.OperatingSystemField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.OperatingSystemField, value) != true))
+                {
+                    this.OperatingSystemField = value;
+                    this.RaisePropertyChanged("OperatingSystem");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string ProcessorType
+        {
+            get
+            {
+                return this.ProcessorTypeField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.ProcessorTypeField, value) != true))
+                {
+                    this.ProcessorTypeField = value;
+                    this.RaisePropertyChanged("ProcessorType");
+                }
+            }
+        }
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="HeuristicLab.Clients.Access.IAccessService")]
+    public interface IAccessService
+    {
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/ClientExists", ReplyAction="http://tempuri.org/IAccessService/ClientExistsResponse")]
+        bool ClientExists(System.Guid id);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetClient", ReplyAction="http://tempuri.org/IAccessService/GetClientResponse")]
+        HeuristicLab.Clients.Access.Client GetClient(System.Guid id);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetClients", ReplyAction="http://tempuri.org/IAccessService/GetClientsResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.Client> GetClients();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/AddClient", ReplyAction="http://tempuri.org/IAccessService/AddClientResponse")]
+        System.Guid AddClient(HeuristicLab.Clients.Access.Client client);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/UpdateClient", ReplyAction="http://tempuri.org/IAccessService/UpdateClientResponse")]
+        void UpdateClient(HeuristicLab.Clients.Access.Client client);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/DeleteClient", ReplyAction="http://tempuri.org/IAccessService/DeleteClientResponse")]
+        void DeleteClient(HeuristicLab.Clients.Access.Client client);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetLastClientLog", ReplyAction="http://tempuri.org/IAccessService/GetLastClientLogResponse")]
+        HeuristicLab.Clients.Access.ClientLog GetLastClientLog(System.Guid clientId);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetClientLogs", ReplyAction="http://tempuri.org/IAccessService/GetClientLogsResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientLog> GetClientLogs(System.Guid clientId);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetClientLogsSince", ReplyAction="http://tempuri.org/IAccessService/GetClientLogsSinceResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientLog> GetClientLogsSince(System.DateTime startDate);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/AddClientLogEntry", ReplyAction="http://tempuri.org/IAccessService/AddClientLogEntryResponse")]
+        void AddClientLogEntry(HeuristicLab.Clients.Access.ClientLog log);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/DeleteClientLogEntry", ReplyAction="http://tempuri.org/IAccessService/DeleteClientLogEntryResponse")]
+        void DeleteClientLogEntry(HeuristicLab.Clients.Access.ClientLog log);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetClientGroups", ReplyAction="http://tempuri.org/IAccessService/GetClientGroupsResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientGroup> GetClientGroups();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/AddClientGroup", ReplyAction="http://tempuri.org/IAccessService/AddClientGroupResponse")]
+        System.Guid AddClientGroup(HeuristicLab.Clients.Access.ClientGroup group);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/UpdateClientGroup", ReplyAction="http://tempuri.org/IAccessService/UpdateClientGroupResponse")]
+        void UpdateClientGroup(HeuristicLab.Clients.Access.ClientGroup group);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/DeleteClientGroup", ReplyAction="http://tempuri.org/IAccessService/DeleteClientGroupResponse")]
+        void DeleteClientGroup(HeuristicLab.Clients.Access.ClientGroup group);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/Login", ReplyAction="http://tempuri.org/IAccessService/LoginResponse")]
+        void Login();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetUsers", ReplyAction="http://tempuri.org/IAccessService/GetUsersResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.User> GetUsers();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/AddUser", ReplyAction="http://tempuri.org/IAccessService/AddUserResponse")]
+        HeuristicLab.Clients.Access.User AddUser(HeuristicLab.Clients.Access.User user);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/DeleteUser", ReplyAction="http://tempuri.org/IAccessService/DeleteUserResponse")]
+        void DeleteUser(HeuristicLab.Clients.Access.User user);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/UpdateUser", ReplyAction="http://tempuri.org/IAccessService/UpdateUserResponse")]
+        void UpdateUser(HeuristicLab.Clients.Access.User user);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/AddUserToRole", ReplyAction="http://tempuri.org/IAccessService/AddUserToRoleResponse")]
+        void AddUserToRole(HeuristicLab.Clients.Access.Role role, HeuristicLab.Clients.Access.User user);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/RemoveUserFromRole", ReplyAction="http://tempuri.org/IAccessService/RemoveUserFromRoleResponse")]
+        void RemoveUserFromRole(HeuristicLab.Clients.Access.Role role, HeuristicLab.Clients.Access.User user);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/ResetPassword", ReplyAction="http://tempuri.org/IAccessService/ResetPasswordResponse")]
+        void ResetPassword(HeuristicLab.Clients.Access.User user, string password);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetRoles", ReplyAction="http://tempuri.org/IAccessService/GetRolesResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.Role> GetRoles();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/AddRole", ReplyAction="http://tempuri.org/IAccessService/AddRoleResponse")]
+        HeuristicLab.Clients.Access.Role AddRole(HeuristicLab.Clients.Access.Role role);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/UpdateRole", ReplyAction="http://tempuri.org/IAccessService/UpdateRoleResponse")]
+        void UpdateRole(HeuristicLab.Clients.Access.Role role);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/DeleteRole", ReplyAction="http://tempuri.org/IAccessService/DeleteRoleResponse")]
+        void DeleteRole(HeuristicLab.Clients.Access.Role role);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetUserRoles", ReplyAction="http://tempuri.org/IAccessService/GetUserRolesResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.Role> GetUserRoles(HeuristicLab.Clients.Access.User user);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/GetUserGroups", ReplyAction="http://tempuri.org/IAccessService/GetUserGroupsResponse")]
+        System.Collections.Generic.List<HeuristicLab.Clients.Access.UserGroup> GetUserGroups();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/AddUserGroup", ReplyAction="http://tempuri.org/IAccessService/AddUserGroupResponse")]
+        HeuristicLab.Clients.Access.UserGroup AddUserGroup(HeuristicLab.Clients.Access.UserGroup group);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/UpdateUserGroup", ReplyAction="http://tempuri.org/IAccessService/UpdateUserGroupResponse")]
+        void UpdateUserGroup(HeuristicLab.Clients.Access.UserGroup group);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAccessService/DeleteUserGroup", ReplyAction="http://tempuri.org/IAccessService/DeleteUserGroupResponse")]
+        void DeleteUserGroup(HeuristicLab.Clients.Access.UserGroup group);
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public interface IAccessServiceChannel : HeuristicLab.Clients.Access.IAccessService, System.ServiceModel.IClientChannel
+    {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class AccessServiceClient : System.ServiceModel.ClientBase<HeuristicLab.Clients.Access.IAccessService>, HeuristicLab.Clients.Access.IAccessService
+    {
+        
+        public AccessServiceClient()
+        {
+        }
+        
+        public AccessServiceClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName)
+        {
+        }
+        
+        public AccessServiceClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress)
+        {
+        }
+        
+        public AccessServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress)
+        {
+        }
+        
+        public AccessServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress)
+        {
+        }
+        
+        public bool ClientExists(System.Guid id)
+        {
+            return base.Channel.ClientExists(id);
+        }
+        
+        public HeuristicLab.Clients.Access.Client GetClient(System.Guid id)
+        {
+            return base.Channel.GetClient(id);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.Client> GetClients()
+        {
+            return base.Channel.GetClients();
+        }
+        
+        public System.Guid AddClient(HeuristicLab.Clients.Access.Client client)
+        {
+            return base.Channel.AddClient(client);
+        }
+        
+        public void UpdateClient(HeuristicLab.Clients.Access.Client client)
+        {
+            base.Channel.UpdateClient(client);
+        }
+        
+        public void DeleteClient(HeuristicLab.Clients.Access.Client client)
+        {
+            base.Channel.DeleteClient(client);
+        }
+        
+        public HeuristicLab.Clients.Access.ClientLog GetLastClientLog(System.Guid clientId)
+        {
+            return base.Channel.GetLastClientLog(clientId);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientLog> GetClientLogs(System.Guid clientId)
+        {
+            return base.Channel.GetClientLogs(clientId);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientLog> GetClientLogsSince(System.DateTime startDate)
+        {
+            return base.Channel.GetClientLogsSince(startDate);
+        }
+        
+        public void AddClientLogEntry(HeuristicLab.Clients.Access.ClientLog log)
+        {
+            base.Channel.AddClientLogEntry(log);
+        }
+        
+        public void DeleteClientLogEntry(HeuristicLab.Clients.Access.ClientLog log)
+        {
+            base.Channel.DeleteClientLogEntry(log);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.ClientGroup> GetClientGroups()
+        {
+            return base.Channel.GetClientGroups();
+        }
+        
+        public System.Guid AddClientGroup(HeuristicLab.Clients.Access.ClientGroup group)
+        {
+            return base.Channel.AddClientGroup(group);
+        }
+        
+        public void UpdateClientGroup(HeuristicLab.Clients.Access.ClientGroup group)
+        {
+            base.Channel.UpdateClientGroup(group);
+        }
+        
+        public void DeleteClientGroup(HeuristicLab.Clients.Access.ClientGroup group)
+        {
+            base.Channel.DeleteClientGroup(group);
+        }
+        
+        public void Login()
+        {
+            base.Channel.Login();
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.User> GetUsers()
+        {
+            return base.Channel.GetUsers();
+        }
+        
+        public HeuristicLab.Clients.Access.User AddUser(HeuristicLab.Clients.Access.User user)
+        {
+            return base.Channel.AddUser(user);
+        }
+        
+        public void DeleteUser(HeuristicLab.Clients.Access.User user)
+        {
+            base.Channel.DeleteUser(user);
+        }
+        
+        public void UpdateUser(HeuristicLab.Clients.Access.User user)
+        {
+            base.Channel.UpdateUser(user);
+        }
+        
+        public void AddUserToRole(HeuristicLab.Clients.Access.Role role, HeuristicLab.Clients.Access.User user)
+        {
+            base.Channel.AddUserToRole(role, user);
+        }
+        
+        public void RemoveUserFromRole(HeuristicLab.Clients.Access.Role role, HeuristicLab.Clients.Access.User user)
+        {
+            base.Channel.RemoveUserFromRole(role, user);
+        }
+        
+        public void ResetPassword(HeuristicLab.Clients.Access.User user, string password)
+        {
+            base.Channel.ResetPassword(user, password);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.Role> GetRoles()
+        {
+            return base.Channel.GetRoles();
+        }
+        
+        public HeuristicLab.Clients.Access.Role AddRole(HeuristicLab.Clients.Access.Role role)
+        {
+            return base.Channel.AddRole(role);
+        }
+        
+        public void UpdateRole(HeuristicLab.Clients.Access.Role role)
+        {
+            base.Channel.UpdateRole(role);
+        }
+        
+        public void DeleteRole(HeuristicLab.Clients.Access.Role role)
+        {
+            base.Channel.DeleteRole(role);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.Role> GetUserRoles(HeuristicLab.Clients.Access.User user)
+        {
+            return base.Channel.GetUserRoles(user);
+        }
+        
+        public System.Collections.Generic.List<HeuristicLab.Clients.Access.UserGroup> GetUserGroups()
+        {
+            return base.Channel.GetUserGroups();
+        }
+        
+        public HeuristicLab.Clients.Access.UserGroup AddUserGroup(HeuristicLab.Clients.Access.UserGroup group)
+        {
+            return base.Channel.AddUserGroup(group);
+        }
+        
+        public void UpdateUserGroup(HeuristicLab.Clients.Access.UserGroup group)
+        {
+            base.Channel.UpdateUserGroup(group);
+        }
+        
+        public void DeleteUserGroup(HeuristicLab.Clients.Access.UserGroup group)
+        {
+            base.Channel.DeleteUserGroup(group);
+        }
+    }
+}
Index: branches/ClientUserManagement/HeuristicLab.Clients.UserManagement/3.3/ServiceClients/GenerateServiceClients.cmd
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Clients.UserManagement/3.3/ServiceClients/GenerateServiceClients.cmd	(revision 6810)
+++ branches/ClientUserManagement/HeuristicLab.Clients.UserManagement/3.3/ServiceClients/GenerateServiceClients.cmd	(revision 6815)
@@ -7,7 +7,7 @@
 
 svcutil.exe ^
-  http://localhost/UserManagementService?wsdl ^
-  /out:UserManagementClient ^
-  /namespace:*,HeuristicLab.Clients.UserManagement ^
+  http://localhost/AccessService?wsdl ^
+  /out:AccessServiceClient ^
+  /namespace:*,HeuristicLab.Clients.Access ^
   /collectionType:System.Collections.Generic.List`1 ^
   /targetClientVersion:Version35 ^
Index: branches/ClientUserManagement/HeuristicLab.Clients.UserManagement/3.3/ServiceClients/UserManagementClient.cs
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Clients.UserManagement/3.3/ServiceClients/UserManagementClient.cs	(revision 6810)
+++ 	(revision )
@@ -1,568 +1,0 @@
-﻿//------------------------------------------------------------------------------
-// <auto-generated>
-//     This code was generated by a tool.
-//     Runtime Version:4.0.30319.237
-//
-//     Changes to this file may cause incorrect behavior and will be lost if
-//     the code is regenerated.
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-namespace HeuristicLab.Clients.UserManagement {
-
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "UserManagementItem", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.UserManagement.Data" +
-      "Transfer")]
-  [System.SerializableAttribute()]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.UserManagement.User))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.UserManagement.Role))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.UserManagement.Application))]
-  public partial class UserManagementItem : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
-
-    [System.NonSerializedAttribute()]
-    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
-
-    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
-      get {
-        return this.extensionDataField;
-      }
-      set {
-        this.extensionDataField = value;
-      }
-    }
-
-    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
-
-    protected void RaisePropertyChanged(string propertyName) {
-      System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
-      if ((propertyChanged != null)) {
-        propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
-      }
-    }
-  }
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "User", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.UserManagement.Data" +
-      "Transfer")]
-  [System.SerializableAttribute()]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.UserManagement.Application))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.UserManagement.UserManagementItem))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(System.Collections.Generic.List<HeuristicLab.Clients.UserManagement.User>))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.UserManagement.Role))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(System.Collections.Generic.List<HeuristicLab.Clients.UserManagement.Role>))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(System.Collections.Generic.List<HeuristicLab.Clients.UserManagement.Application>))]
-  public partial class User : HeuristicLab.Clients.UserManagement.UserManagementItem {
-
-    [System.Runtime.Serialization.OptionalFieldAttribute()]
-    private HeuristicLab.Clients.UserManagement.Application AppField;
-
-    [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 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 string UserNameField;
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public HeuristicLab.Clients.UserManagement.Application App {
-      get {
-        return this.AppField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.AppField, value) != true)) {
-          this.AppField = value;
-          this.RaisePropertyChanged("App");
-        }
-      }
-    }
-
-    [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 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 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 = "Role", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.UserManagement.Data" +
-      "Transfer")]
-  [System.SerializableAttribute()]
-  public partial class Role : HeuristicLab.Clients.UserManagement.UserManagementItem {
-
-    [System.Runtime.Serialization.OptionalFieldAttribute()]
-    private HeuristicLab.Clients.UserManagement.Application AppField;
-
-    [System.Runtime.Serialization.OptionalFieldAttribute()]
-    private string RoleNameField;
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public HeuristicLab.Clients.UserManagement.Application App {
-      get {
-        return this.AppField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.AppField, value) != true)) {
-          this.AppField = value;
-          this.RaisePropertyChanged("App");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public string RoleName {
-      get {
-        return this.RoleNameField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.RoleNameField, value) != true)) {
-          this.RoleNameField = value;
-          this.RaisePropertyChanged("RoleName");
-        }
-      }
-    }
-  }
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "Application", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.UserManagement.Data" +
-      "Transfer")]
-  [System.SerializableAttribute()]
-  public partial class Application : HeuristicLab.Clients.UserManagement.UserManagementItem {
-
-    [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.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
-  [System.ServiceModel.ServiceContractAttribute(ConfigurationName = "HeuristicLab.Clients.UserManagement.IUserManagementService")]
-  public interface IUserManagementService {
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IUserManagementService/GetUsers", ReplyAction = "http://tempuri.org/IUserManagementService/GetUsersResponse")]
-    System.Collections.Generic.List<HeuristicLab.Clients.UserManagement.User> GetUsers(HeuristicLab.Clients.UserManagement.Application application);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IUserManagementService/AddUser", ReplyAction = "http://tempuri.org/IUserManagementService/AddUserResponse")]
-    HeuristicLab.Clients.UserManagement.User AddUser(HeuristicLab.Clients.UserManagement.User user);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IUserManagementService/DeleteUser", ReplyAction = "http://tempuri.org/IUserManagementService/DeleteUserResponse")]
-    void DeleteUser(HeuristicLab.Clients.UserManagement.User user);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IUserManagementService/UpdateUser", ReplyAction = "http://tempuri.org/IUserManagementService/UpdateUserResponse")]
-    void UpdateUser(HeuristicLab.Clients.UserManagement.User user);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IUserManagementService/AddUserToRole", ReplyAction = "http://tempuri.org/IUserManagementService/AddUserToRoleResponse")]
-    void AddUserToRole(HeuristicLab.Clients.UserManagement.Role role, HeuristicLab.Clients.UserManagement.User user);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IUserManagementService/RemoveUserFromRole", ReplyAction = "http://tempuri.org/IUserManagementService/RemoveUserFromRoleResponse")]
-    void RemoveUserFromRole(HeuristicLab.Clients.UserManagement.Role role, HeuristicLab.Clients.UserManagement.User user);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IUserManagementService/IsUserInRole", ReplyAction = "http://tempuri.org/IUserManagementService/IsUserInRoleResponse")]
-    bool IsUserInRole(HeuristicLab.Clients.UserManagement.User user, HeuristicLab.Clients.UserManagement.Role role);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IUserManagementService/ResetPassword", ReplyAction = "http://tempuri.org/IUserManagementService/ResetPasswordResponse")]
-    HeuristicLab.Clients.UserManagement.User ResetPassword(string applicationName, string userName, string password);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IUserManagementService/GetRoles", ReplyAction = "http://tempuri.org/IUserManagementService/GetRolesResponse")]
-    System.Collections.Generic.List<HeuristicLab.Clients.UserManagement.Role> GetRoles(HeuristicLab.Clients.UserManagement.Application application);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IUserManagementService/AddRole", ReplyAction = "http://tempuri.org/IUserManagementService/AddRoleResponse")]
-    HeuristicLab.Clients.UserManagement.Role AddRole(HeuristicLab.Clients.UserManagement.Role role);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IUserManagementService/UpdateRole", ReplyAction = "http://tempuri.org/IUserManagementService/UpdateRoleResponse")]
-    void UpdateRole(HeuristicLab.Clients.UserManagement.Role role);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IUserManagementService/DeleteRole", ReplyAction = "http://tempuri.org/IUserManagementService/DeleteRoleResponse")]
-    void DeleteRole(HeuristicLab.Clients.UserManagement.Role role);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IUserManagementService/GetUserRoles", ReplyAction = "http://tempuri.org/IUserManagementService/GetUserRolesResponse")]
-    System.Collections.Generic.List<HeuristicLab.Clients.UserManagement.Role> GetUserRoles(HeuristicLab.Clients.UserManagement.User user);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IUserManagementService/GetApplications", ReplyAction = "http://tempuri.org/IUserManagementService/GetApplicationsResponse")]
-    System.Collections.Generic.List<HeuristicLab.Clients.UserManagement.Application> GetApplications();
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IUserManagementService/GetApplicationUsers", ReplyAction = "http://tempuri.org/IUserManagementService/GetApplicationUsersResponse")]
-    System.Collections.Generic.List<HeuristicLab.Clients.UserManagement.User> GetApplicationUsers(HeuristicLab.Clients.UserManagement.Application application);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IUserManagementService/AddApplication", ReplyAction = "http://tempuri.org/IUserManagementService/AddApplicationResponse")]
-    HeuristicLab.Clients.UserManagement.Application AddApplication(HeuristicLab.Clients.UserManagement.Application application);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IUserManagementService/UpdateApplication", ReplyAction = "http://tempuri.org/IUserManagementService/UpdateApplicationResponse")]
-    void UpdateApplication(HeuristicLab.Clients.UserManagement.Application application);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IUserManagementService/DeleteApplication", ReplyAction = "http://tempuri.org/IUserManagementService/DeleteApplicationResponse")]
-    void DeleteApplication(HeuristicLab.Clients.UserManagement.Application application);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IUserManagementService/CheckUserExists", ReplyAction = "http://tempuri.org/IUserManagementService/CheckUserExistsResponse")]
-    bool CheckUserExists(string application, string userName, string password);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IUserManagementService/GetUser", ReplyAction = "http://tempuri.org/IUserManagementService/GetUserResponse")]
-    bool GetUser(string application, string userName, string password);
-  }
-
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
-  public interface IUserManagementServiceChannel : HeuristicLab.Clients.UserManagement.IUserManagementService, System.ServiceModel.IClientChannel {
-  }
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
-  public partial class UserManagementServiceClient : System.ServiceModel.ClientBase<HeuristicLab.Clients.UserManagement.IUserManagementService>, HeuristicLab.Clients.UserManagement.IUserManagementService {
-
-    public UserManagementServiceClient() {
-    }
-
-    public UserManagementServiceClient(string endpointConfigurationName) :
-      base(endpointConfigurationName) {
-    }
-
-    public UserManagementServiceClient(string endpointConfigurationName, string remoteAddress) :
-      base(endpointConfigurationName, remoteAddress) {
-    }
-
-    public UserManagementServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
-      base(endpointConfigurationName, remoteAddress) {
-    }
-
-    public UserManagementServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
-      base(binding, remoteAddress) {
-    }
-
-    public System.Collections.Generic.List<HeuristicLab.Clients.UserManagement.User> GetUsers(HeuristicLab.Clients.UserManagement.Application application) {
-      return base.Channel.GetUsers(application);
-    }
-
-    public HeuristicLab.Clients.UserManagement.User AddUser(HeuristicLab.Clients.UserManagement.User user) {
-      return base.Channel.AddUser(user);
-    }
-
-    public void DeleteUser(HeuristicLab.Clients.UserManagement.User user) {
-      base.Channel.DeleteUser(user);
-    }
-
-    public void UpdateUser(HeuristicLab.Clients.UserManagement.User user) {
-      base.Channel.UpdateUser(user);
-    }
-
-    public void AddUserToRole(HeuristicLab.Clients.UserManagement.Role role, HeuristicLab.Clients.UserManagement.User user) {
-      base.Channel.AddUserToRole(role, user);
-    }
-
-    public void RemoveUserFromRole(HeuristicLab.Clients.UserManagement.Role role, HeuristicLab.Clients.UserManagement.User user) {
-      base.Channel.RemoveUserFromRole(role, user);
-    }
-
-    public bool IsUserInRole(HeuristicLab.Clients.UserManagement.User user, HeuristicLab.Clients.UserManagement.Role role) {
-      return base.Channel.IsUserInRole(user, role);
-    }
-
-    public HeuristicLab.Clients.UserManagement.User ResetPassword(string applicationName, string userName, string password) {
-      return base.Channel.ResetPassword(applicationName, userName, password);
-    }
-
-    public System.Collections.Generic.List<HeuristicLab.Clients.UserManagement.Role> GetRoles(HeuristicLab.Clients.UserManagement.Application application) {
-      return base.Channel.GetRoles(application);
-    }
-
-    public HeuristicLab.Clients.UserManagement.Role AddRole(HeuristicLab.Clients.UserManagement.Role role) {
-      return base.Channel.AddRole(role);
-    }
-
-    public void UpdateRole(HeuristicLab.Clients.UserManagement.Role role) {
-      base.Channel.UpdateRole(role);
-    }
-
-    public void DeleteRole(HeuristicLab.Clients.UserManagement.Role role) {
-      base.Channel.DeleteRole(role);
-    }
-
-    public System.Collections.Generic.List<HeuristicLab.Clients.UserManagement.Role> GetUserRoles(HeuristicLab.Clients.UserManagement.User user) {
-      return base.Channel.GetUserRoles(user);
-    }
-
-    public System.Collections.Generic.List<HeuristicLab.Clients.UserManagement.Application> GetApplications() {
-      return base.Channel.GetApplications();
-    }
-
-    public System.Collections.Generic.List<HeuristicLab.Clients.UserManagement.User> GetApplicationUsers(HeuristicLab.Clients.UserManagement.Application application) {
-      return base.Channel.GetApplicationUsers(application);
-    }
-
-    public HeuristicLab.Clients.UserManagement.Application AddApplication(HeuristicLab.Clients.UserManagement.Application application) {
-      return base.Channel.AddApplication(application);
-    }
-
-    public void UpdateApplication(HeuristicLab.Clients.UserManagement.Application application) {
-      base.Channel.UpdateApplication(application);
-    }
-
-    public void DeleteApplication(HeuristicLab.Clients.UserManagement.Application application) {
-      base.Channel.DeleteApplication(application);
-    }
-
-    public bool CheckUserExists(string application, string userName, string password) {
-      return base.Channel.CheckUserExists(application, userName, password);
-    }
-
-    public bool GetUser(string application, string userName, string password) {
-      return base.Channel.GetUser(application, userName, password);
-    }
-  }
-}
Index: branches/ClientUserManagement/HeuristicLab.Clients.UserManagement/3.3/app.config
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Clients.UserManagement/3.3/app.config	(revision 6810)
+++ branches/ClientUserManagement/HeuristicLab.Clients.UserManagement/3.3/app.config	(revision 6815)
@@ -4,5 +4,5 @@
         <bindings>
             <wsHttpBinding>
-                <binding name="WSHttpBinding_IUserManagementService" closeTimeout="00:01:00"
+                <binding name="WSHttpBinding_IAccessService" closeTimeout="00:01:00"
                     openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                     bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
@@ -24,8 +24,7 @@
         </bindings>
         <client>
-            <endpoint address="http://localhost/UserManagementService" binding="wsHttpBinding"
-                bindingConfiguration="WSHttpBinding_IUserManagementService"
-                contract="HeuristicLab.Clients.UserManagement.IUserManagementService"
-                name="WSHttpBinding_IUserManagementService">
+            <endpoint address="http://localhost/AccessService" binding="wsHttpBinding"
+                bindingConfiguration="WSHttpBinding_IAccessService" contract="HeuristicLab.Clients.Access.IAccessService"
+                name="WSHttpBinding_IAccessService">
                 <identity>
                     <certificate encodedValue="AwAAAAEAAAAUAAAAQkazTmWcZqFuuREaov8jmDtOu4UgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAVedIj+0w6jEdhZErAeemyMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTExMDkwNjA4NDUzOVoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCiKeSwXFm0qxkuMFao9NHftClUYvX0jpiyKFthUnutfhB2FF3Ie8a8U15M+GBYSZOV5vXlEn3D30HsV/x6L9/UU1fiJndJd5lWI2/4mP2jra0qP0b8xyitHfRhePIfpDkufZqIOvOmT/DoFqMTK3joexzuEmAw5Ugil6fbOxELlwIDAQABo0kwRzBFBgNVHQEEPjA8gBCJmAWIXCTyTFXdjdnseED4oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAVedIj+0w6jEdhZErAeemyMAkGBSsOAwIdBQADgYEACW9nLJnu1+OJg93AAKfWqkiETHcXUcULrPjMWJQsy5fkHY1qExKBGeUJHK0REvqQs3KRY3GqikMjlAnDmb/e9P1h+PynsRv7y2zAGCnKW4nryWVncWf1xJL9xvKNuH2aR4+Wdq9oo2m793+RXtA7YTSsr/OiiIdkQcjUGQtkaYo=" />
Index: branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ASPNETAuthentication.dbml
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ASPNETAuthentication.dbml	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ASPNETAuthentication.dbml	(revision 6815)
@@ -0,0 +1,74 @@
+﻿<?xml version="1.0" encoding="utf-8"?><Database Name="HeuristicLab.Authentication" Class="ASPNETAuthenticationDataContext" xmlns="http://schemas.microsoft.com/linqtosql/dbml/2007">
+  <Connection Mode="AppSettings" ConnectionString="Data Source=.;Initial Catalog=HeuristicLab.Authentication;Integrated Security=True" SettingsObjectName="HeuristicLab.Services.Access.DataAccess.Properties.Settings" SettingsPropertyName="HeuristicLab_AuthenticationConnectionString" Provider="System.Data.SqlClient" />
+  <Table Name="dbo.aspnet_Applications" Member="aspnet_Applications">
+    <Type Name="aspnet_Application">
+      <Column Name="ApplicationName" Type="System.String" DbType="NVarChar(256) NOT NULL" CanBeNull="false" />
+      <Column Name="LoweredApplicationName" Type="System.String" DbType="NVarChar(256) NOT NULL" CanBeNull="false" />
+      <Column Name="ApplicationId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="Description" Type="System.String" DbType="NVarChar(256)" CanBeNull="true" />
+      <Association Name="aspnet_Application_aspnet_Membership" Member="aspnet_Memberships" ThisKey="ApplicationId" OtherKey="ApplicationId" Type="aspnet_Membership" />
+      <Association Name="aspnet_Application_aspnet_Role" Member="aspnet_Roles" ThisKey="ApplicationId" OtherKey="ApplicationId" Type="aspnet_Role" />
+      <Association Name="aspnet_Application_aspnet_User" Member="aspnet_Users" ThisKey="ApplicationId" OtherKey="ApplicationId" Type="aspnet_User" />
+    </Type>
+  </Table>
+  <Table Name="dbo.aspnet_Membership" Member="aspnet_Memberships">
+    <Type Name="aspnet_Membership">
+      <Column Name="ApplicationId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="UserId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="Password" Type="System.String" DbType="NVarChar(128) NOT NULL" CanBeNull="false" />
+      <Column Name="PasswordFormat" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Column Name="PasswordSalt" Type="System.String" DbType="NVarChar(128) NOT NULL" CanBeNull="false" />
+      <Column Name="MobilePIN" Type="System.String" DbType="NVarChar(16)" CanBeNull="true" />
+      <Column Name="Email" Type="System.String" DbType="NVarChar(256)" CanBeNull="true" />
+      <Column Name="LoweredEmail" Type="System.String" DbType="NVarChar(256)" CanBeNull="true" />
+      <Column Name="PasswordQuestion" Type="System.String" DbType="NVarChar(256)" CanBeNull="true" />
+      <Column Name="PasswordAnswer" Type="System.String" DbType="NVarChar(128)" CanBeNull="true" />
+      <Column Name="IsApproved" Type="System.Boolean" DbType="Bit NOT NULL" CanBeNull="false" />
+      <Column Name="IsLockedOut" Type="System.Boolean" DbType="Bit NOT NULL" CanBeNull="false" />
+      <Column Name="CreateDate" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="false" />
+      <Column Name="LastLoginDate" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="false" />
+      <Column Name="LastPasswordChangedDate" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="false" />
+      <Column Name="LastLockoutDate" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="false" />
+      <Column Name="FailedPasswordAttemptCount" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Column Name="FailedPasswordAttemptWindowStart" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="false" />
+      <Column Name="FailedPasswordAnswerAttemptCount" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Column Name="FailedPasswordAnswerAttemptWindowStart" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="false" />
+      <Column Name="Comment" Type="System.String" DbType="NText" CanBeNull="true" UpdateCheck="Never" />
+      <Association Name="aspnet_Application_aspnet_Membership" Member="aspnet_Application" ThisKey="ApplicationId" OtherKey="ApplicationId" Type="aspnet_Application" IsForeignKey="true" />
+      <Association Name="aspnet_User_aspnet_Membership" Member="aspnet_User" ThisKey="UserId" OtherKey="UserId" Type="aspnet_User" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.aspnet_Roles" Member="aspnet_Roles">
+    <Type Name="aspnet_Role">
+      <Column Name="ApplicationId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="RoleId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="RoleName" Type="System.String" DbType="NVarChar(256) NOT NULL" CanBeNull="false" />
+      <Column Name="LoweredRoleName" Type="System.String" DbType="NVarChar(256) NOT NULL" CanBeNull="false" />
+      <Column Name="Description" Type="System.String" DbType="NVarChar(256)" CanBeNull="true" />
+      <Association Name="aspnet_Role_aspnet_UsersInRole" Member="aspnet_UsersInRoles" ThisKey="RoleId" OtherKey="RoleId" Type="aspnet_UsersInRole" />
+      <Association Name="aspnet_Application_aspnet_Role" Member="aspnet_Application" ThisKey="ApplicationId" OtherKey="ApplicationId" Type="aspnet_Application" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.aspnet_Users" Member="aspnet_Users">
+    <Type Name="aspnet_User">
+      <Column Name="ApplicationId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="UserId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="UserName" Type="System.String" DbType="NVarChar(256) NOT NULL" CanBeNull="false" />
+      <Column Name="LoweredUserName" Type="System.String" DbType="NVarChar(256) NOT NULL" CanBeNull="false" />
+      <Column Name="MobileAlias" Type="System.String" DbType="NVarChar(16)" CanBeNull="true" />
+      <Column Name="IsAnonymous" Type="System.Boolean" DbType="Bit NOT NULL" CanBeNull="false" />
+      <Column Name="LastActivityDate" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="false" />
+      <Association Name="aspnet_User_aspnet_Membership" Member="aspnet_Membership" ThisKey="UserId" OtherKey="UserId" Type="aspnet_Membership" Cardinality="One" />
+      <Association Name="aspnet_User_aspnet_UsersInRole" Member="aspnet_UsersInRoles" ThisKey="UserId" OtherKey="UserId" Type="aspnet_UsersInRole" />
+      <Association Name="aspnet_Application_aspnet_User" Member="aspnet_Application" ThisKey="ApplicationId" OtherKey="ApplicationId" Type="aspnet_Application" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.aspnet_UsersInRoles" Member="aspnet_UsersInRoles">
+    <Type Name="aspnet_UsersInRole">
+      <Column Name="UserId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="RoleId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Association Name="aspnet_Role_aspnet_UsersInRole" Member="aspnet_Role" ThisKey="RoleId" OtherKey="RoleId" Type="aspnet_Role" IsForeignKey="true" />
+      <Association Name="aspnet_User_aspnet_UsersInRole" Member="aspnet_User" ThisKey="UserId" OtherKey="UserId" Type="aspnet_User" IsForeignKey="true" />
+    </Type>
+  </Table>
+</Database>
Index: branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ASPNETAuthentication.dbml.layout
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ASPNETAuthentication.dbml.layout	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ASPNETAuthentication.dbml.layout	(revision 6815)
@@ -0,0 +1,78 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<ordesignerObjectsDiagram dslVersion="1.0.0.0" absoluteBounds="0, 0, 11.125, 8.5" name="ASPNETAuthentication">
+  <DataContextMoniker Name="/ASPNETAuthenticationDataContext" />
+  <nestedChildShapes>
+    <classShape Id="30f32d54-6ca2-4085-91e3-c40762ed5dec" absoluteBounds="4.375, 2.375, 2, 1.5785953776041666">
+      <DataClassMoniker Name="/ASPNETAuthenticationDataContext/aspnet_Application" />
+      <nestedChildShapes>
+        <elementListCompartment Id="ea0c60e8-16d2-4885-b829-578dbe1447e1" absoluteBounds="4.39, 2.835, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="fc68dc58-9c2c-41e9-8e1e-15c4cec77b11" absoluteBounds="8.875, 0.5, 2, 4.8477197265625">
+      <DataClassMoniker Name="/ASPNETAuthenticationDataContext/aspnet_Membership" />
+      <nestedChildShapes>
+        <elementListCompartment Id="3ec1d2d0-cf0b-44f3-8271-c5f092efb701" absoluteBounds="8.89, 0.96, 1.9700000000000002, 4.2877197265625" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(6.375 : 3.16429768880208); (8.875 : 3.16429768880208)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/ASPNETAuthenticationDataContext/aspnet_Application/aspnet_Application_aspnet_Membership" />
+      <nodes>
+        <classShapeMoniker Id="30f32d54-6ca2-4085-91e3-c40762ed5dec" />
+        <classShapeMoniker Id="fc68dc58-9c2c-41e9-8e1e-15c4cec77b11" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="62f46e31-2029-4816-bc19-70cb549b2cdc" absoluteBounds="4.5, 4.625, 2, 1.7708968098958331">
+      <DataClassMoniker Name="/ASPNETAuthenticationDataContext/aspnet_Role" />
+      <nestedChildShapes>
+        <elementListCompartment Id="243846a1-e6d9-4fe1-8539-2ccdacba6be6" absoluteBounds="4.5150000000000006, 5.085, 1.9700000000000002, 1.2108968098958333" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(5.4375 : 3.95359537760417); (5.4375 : 4.625)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/ASPNETAuthenticationDataContext/aspnet_Application/aspnet_Application_aspnet_Role" />
+      <nodes>
+        <classShapeMoniker Id="30f32d54-6ca2-4085-91e3-c40762ed5dec" />
+        <classShapeMoniker Id="62f46e31-2029-4816-bc19-70cb549b2cdc" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="eeebc434-a03f-4e46-81f3-642f8a9e3967" absoluteBounds="1.5, 0.5, 2, 2.1554996744791666">
+      <DataClassMoniker Name="/ASPNETAuthenticationDataContext/aspnet_User" />
+      <nestedChildShapes>
+        <elementListCompartment Id="41739192-447a-492a-b8a5-1beff1f4ddd9" absoluteBounds="1.5149999999999997, 0.96, 1.9700000000000002, 1.5954996744791665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(3.5 : 1.57774983723958); (8.875 : 1.57774983723958)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/ASPNETAuthenticationDataContext/aspnet_User/aspnet_User_aspnet_Membership" />
+      <nodes>
+        <classShapeMoniker Id="eeebc434-a03f-4e46-81f3-642f8a9e3967" />
+        <classShapeMoniker Id="fc68dc58-9c2c-41e9-8e1e-15c4cec77b11" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(4.375 : 3.33580002604167); (2.9687525 : 3.33580002604167); (2.9687525 : 2.65549967447917)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/ASPNETAuthenticationDataContext/aspnet_Application/aspnet_Application_aspnet_User" />
+      <nodes>
+        <classShapeMoniker Id="30f32d54-6ca2-4085-91e3-c40762ed5dec" />
+        <classShapeMoniker Id="eeebc434-a03f-4e46-81f3-642f8a9e3967" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="4256bc99-82fa-423f-818e-5939fa5c65b2" absoluteBounds="1.25, 4.875, 2, 1.1939925130208333">
+      <DataClassMoniker Name="/ASPNETAuthenticationDataContext/aspnet_UsersInRole" />
+      <nestedChildShapes>
+        <elementListCompartment Id="177c31b3-ee36-40b7-ba29-a60b2ee7231b" absoluteBounds="1.2650000000000001, 5.335, 1.9700000000000002, 0.63399251302083326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(4.5 : 5.47199625651042); (3.25 : 5.47199625651042)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/ASPNETAuthenticationDataContext/aspnet_Role/aspnet_Role_aspnet_UsersInRole" />
+      <nodes>
+        <classShapeMoniker Id="62f46e31-2029-4816-bc19-70cb549b2cdc" />
+        <classShapeMoniker Id="4256bc99-82fa-423f-818e-5939fa5c65b2" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(2.375 : 2.65549967447917); (2.375 : 4.875)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/ASPNETAuthenticationDataContext/aspnet_User/aspnet_User_aspnet_UsersInRole" />
+      <nodes>
+        <classShapeMoniker Id="eeebc434-a03f-4e46-81f3-642f8a9e3967" />
+        <classShapeMoniker Id="4256bc99-82fa-423f-818e-5939fa5c65b2" />
+      </nodes>
+    </associationConnector>
+  </nestedChildShapes>
+</ordesignerObjectsDiagram>
Index: branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ASPNETAuthentication.designer.cs
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ASPNETAuthentication.designer.cs	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ASPNETAuthentication.designer.cs	(revision 6815)
@@ -0,0 +1,1665 @@
+﻿#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.237
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Services.Access.DataAccess
+{
+	using System.Data.Linq;
+	using System.Data.Linq.Mapping;
+	using System.Data;
+	using System.Collections.Generic;
+	using System.Reflection;
+	using System.Linq;
+	using System.Linq.Expressions;
+	using System.ComponentModel;
+	using System;
+	
+	
+	[global::System.Data.Linq.Mapping.DatabaseAttribute(Name="HeuristicLab.Authentication")]
+	public partial class ASPNETAuthenticationDataContext : System.Data.Linq.DataContext
+	{
+		
+		private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();
+		
+    #region Extensibility Method Definitions
+    partial void OnCreated();
+    partial void Insertaspnet_Application(aspnet_Application instance);
+    partial void Updateaspnet_Application(aspnet_Application instance);
+    partial void Deleteaspnet_Application(aspnet_Application instance);
+    partial void Insertaspnet_Membership(aspnet_Membership instance);
+    partial void Updateaspnet_Membership(aspnet_Membership instance);
+    partial void Deleteaspnet_Membership(aspnet_Membership instance);
+    partial void Insertaspnet_Role(aspnet_Role instance);
+    partial void Updateaspnet_Role(aspnet_Role instance);
+    partial void Deleteaspnet_Role(aspnet_Role instance);
+    partial void Insertaspnet_User(aspnet_User instance);
+    partial void Updateaspnet_User(aspnet_User instance);
+    partial void Deleteaspnet_User(aspnet_User instance);
+    partial void Insertaspnet_UsersInRole(aspnet_UsersInRole instance);
+    partial void Updateaspnet_UsersInRole(aspnet_UsersInRole instance);
+    partial void Deleteaspnet_UsersInRole(aspnet_UsersInRole instance);
+    #endregion
+		
+		public ASPNETAuthenticationDataContext() : 
+				base(global::HeuristicLab.Services.Access.DataAccess.Properties.Settings.Default.HeuristicLab_AuthenticationConnectionString, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public ASPNETAuthenticationDataContext(string connection) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public ASPNETAuthenticationDataContext(System.Data.IDbConnection connection) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public ASPNETAuthenticationDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public ASPNETAuthenticationDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public System.Data.Linq.Table<aspnet_Application> aspnet_Applications
+		{
+			get
+			{
+				return this.GetTable<aspnet_Application>();
+			}
+		}
+		
+		public System.Data.Linq.Table<aspnet_Membership> aspnet_Memberships
+		{
+			get
+			{
+				return this.GetTable<aspnet_Membership>();
+			}
+		}
+		
+		public System.Data.Linq.Table<aspnet_Role> aspnet_Roles
+		{
+			get
+			{
+				return this.GetTable<aspnet_Role>();
+			}
+		}
+		
+		public System.Data.Linq.Table<aspnet_User> aspnet_Users
+		{
+			get
+			{
+				return this.GetTable<aspnet_User>();
+			}
+		}
+		
+		public System.Data.Linq.Table<aspnet_UsersInRole> aspnet_UsersInRoles
+		{
+			get
+			{
+				return this.GetTable<aspnet_UsersInRole>();
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.aspnet_Applications")]
+	public partial class aspnet_Application : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private string _ApplicationName;
+		
+		private string _LoweredApplicationName;
+		
+		private System.Guid _ApplicationId;
+		
+		private string _Description;
+		
+		private EntitySet<aspnet_Membership> _aspnet_Memberships;
+		
+		private EntitySet<aspnet_Role> _aspnet_Roles;
+		
+		private EntitySet<aspnet_User> _aspnet_Users;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnApplicationNameChanging(string value);
+    partial void OnApplicationNameChanged();
+    partial void OnLoweredApplicationNameChanging(string value);
+    partial void OnLoweredApplicationNameChanged();
+    partial void OnApplicationIdChanging(System.Guid value);
+    partial void OnApplicationIdChanged();
+    partial void OnDescriptionChanging(string value);
+    partial void OnDescriptionChanged();
+    #endregion
+		
+		public aspnet_Application()
+		{
+			this._aspnet_Memberships = new EntitySet<aspnet_Membership>(new Action<aspnet_Membership>(this.attach_aspnet_Memberships), new Action<aspnet_Membership>(this.detach_aspnet_Memberships));
+			this._aspnet_Roles = new EntitySet<aspnet_Role>(new Action<aspnet_Role>(this.attach_aspnet_Roles), new Action<aspnet_Role>(this.detach_aspnet_Roles));
+			this._aspnet_Users = new EntitySet<aspnet_User>(new Action<aspnet_User>(this.attach_aspnet_Users), new Action<aspnet_User>(this.detach_aspnet_Users));
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ApplicationName", DbType="NVarChar(256) NOT NULL", CanBeNull=false)]
+		public string ApplicationName
+		{
+			get
+			{
+				return this._ApplicationName;
+			}
+			set
+			{
+				if ((this._ApplicationName != value))
+				{
+					this.OnApplicationNameChanging(value);
+					this.SendPropertyChanging();
+					this._ApplicationName = value;
+					this.SendPropertyChanged("ApplicationName");
+					this.OnApplicationNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_LoweredApplicationName", DbType="NVarChar(256) NOT NULL", CanBeNull=false)]
+		public string LoweredApplicationName
+		{
+			get
+			{
+				return this._LoweredApplicationName;
+			}
+			set
+			{
+				if ((this._LoweredApplicationName != value))
+				{
+					this.OnLoweredApplicationNameChanging(value);
+					this.SendPropertyChanging();
+					this._LoweredApplicationName = value;
+					this.SendPropertyChanged("LoweredApplicationName");
+					this.OnLoweredApplicationNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ApplicationId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid ApplicationId
+		{
+			get
+			{
+				return this._ApplicationId;
+			}
+			set
+			{
+				if ((this._ApplicationId != value))
+				{
+					this.OnApplicationIdChanging(value);
+					this.SendPropertyChanging();
+					this._ApplicationId = value;
+					this.SendPropertyChanged("ApplicationId");
+					this.OnApplicationIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Description", DbType="NVarChar(256)")]
+		public string Description
+		{
+			get
+			{
+				return this._Description;
+			}
+			set
+			{
+				if ((this._Description != value))
+				{
+					this.OnDescriptionChanging(value);
+					this.SendPropertyChanging();
+					this._Description = value;
+					this.SendPropertyChanged("Description");
+					this.OnDescriptionChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="aspnet_Application_aspnet_Membership", Storage="_aspnet_Memberships", ThisKey="ApplicationId", OtherKey="ApplicationId")]
+		public EntitySet<aspnet_Membership> aspnet_Memberships
+		{
+			get
+			{
+				return this._aspnet_Memberships;
+			}
+			set
+			{
+				this._aspnet_Memberships.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="aspnet_Application_aspnet_Role", Storage="_aspnet_Roles", ThisKey="ApplicationId", OtherKey="ApplicationId")]
+		public EntitySet<aspnet_Role> aspnet_Roles
+		{
+			get
+			{
+				return this._aspnet_Roles;
+			}
+			set
+			{
+				this._aspnet_Roles.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="aspnet_Application_aspnet_User", Storage="_aspnet_Users", ThisKey="ApplicationId", OtherKey="ApplicationId")]
+		public EntitySet<aspnet_User> aspnet_Users
+		{
+			get
+			{
+				return this._aspnet_Users;
+			}
+			set
+			{
+				this._aspnet_Users.Assign(value);
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_aspnet_Memberships(aspnet_Membership entity)
+		{
+			this.SendPropertyChanging();
+			entity.aspnet_Application = this;
+		}
+		
+		private void detach_aspnet_Memberships(aspnet_Membership entity)
+		{
+			this.SendPropertyChanging();
+			entity.aspnet_Application = null;
+		}
+		
+		private void attach_aspnet_Roles(aspnet_Role entity)
+		{
+			this.SendPropertyChanging();
+			entity.aspnet_Application = this;
+		}
+		
+		private void detach_aspnet_Roles(aspnet_Role entity)
+		{
+			this.SendPropertyChanging();
+			entity.aspnet_Application = null;
+		}
+		
+		private void attach_aspnet_Users(aspnet_User entity)
+		{
+			this.SendPropertyChanging();
+			entity.aspnet_Application = this;
+		}
+		
+		private void detach_aspnet_Users(aspnet_User entity)
+		{
+			this.SendPropertyChanging();
+			entity.aspnet_Application = null;
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.aspnet_Membership")]
+	public partial class aspnet_Membership : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _ApplicationId;
+		
+		private System.Guid _UserId;
+		
+		private string _Password;
+		
+		private int _PasswordFormat;
+		
+		private string _PasswordSalt;
+		
+		private string _MobilePIN;
+		
+		private string _Email;
+		
+		private string _LoweredEmail;
+		
+		private string _PasswordQuestion;
+		
+		private string _PasswordAnswer;
+		
+		private bool _IsApproved;
+		
+		private bool _IsLockedOut;
+		
+		private System.DateTime _CreateDate;
+		
+		private System.DateTime _LastLoginDate;
+		
+		private System.DateTime _LastPasswordChangedDate;
+		
+		private System.DateTime _LastLockoutDate;
+		
+		private int _FailedPasswordAttemptCount;
+		
+		private System.DateTime _FailedPasswordAttemptWindowStart;
+		
+		private int _FailedPasswordAnswerAttemptCount;
+		
+		private System.DateTime _FailedPasswordAnswerAttemptWindowStart;
+		
+		private string _Comment;
+		
+		private EntityRef<aspnet_Application> _aspnet_Application;
+		
+		private EntityRef<aspnet_User> _aspnet_User;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnApplicationIdChanging(System.Guid value);
+    partial void OnApplicationIdChanged();
+    partial void OnUserIdChanging(System.Guid value);
+    partial void OnUserIdChanged();
+    partial void OnPasswordChanging(string value);
+    partial void OnPasswordChanged();
+    partial void OnPasswordFormatChanging(int value);
+    partial void OnPasswordFormatChanged();
+    partial void OnPasswordSaltChanging(string value);
+    partial void OnPasswordSaltChanged();
+    partial void OnMobilePINChanging(string value);
+    partial void OnMobilePINChanged();
+    partial void OnEmailChanging(string value);
+    partial void OnEmailChanged();
+    partial void OnLoweredEmailChanging(string value);
+    partial void OnLoweredEmailChanged();
+    partial void OnPasswordQuestionChanging(string value);
+    partial void OnPasswordQuestionChanged();
+    partial void OnPasswordAnswerChanging(string value);
+    partial void OnPasswordAnswerChanged();
+    partial void OnIsApprovedChanging(bool value);
+    partial void OnIsApprovedChanged();
+    partial void OnIsLockedOutChanging(bool value);
+    partial void OnIsLockedOutChanged();
+    partial void OnCreateDateChanging(System.DateTime value);
+    partial void OnCreateDateChanged();
+    partial void OnLastLoginDateChanging(System.DateTime value);
+    partial void OnLastLoginDateChanged();
+    partial void OnLastPasswordChangedDateChanging(System.DateTime value);
+    partial void OnLastPasswordChangedDateChanged();
+    partial void OnLastLockoutDateChanging(System.DateTime value);
+    partial void OnLastLockoutDateChanged();
+    partial void OnFailedPasswordAttemptCountChanging(int value);
+    partial void OnFailedPasswordAttemptCountChanged();
+    partial void OnFailedPasswordAttemptWindowStartChanging(System.DateTime value);
+    partial void OnFailedPasswordAttemptWindowStartChanged();
+    partial void OnFailedPasswordAnswerAttemptCountChanging(int value);
+    partial void OnFailedPasswordAnswerAttemptCountChanged();
+    partial void OnFailedPasswordAnswerAttemptWindowStartChanging(System.DateTime value);
+    partial void OnFailedPasswordAnswerAttemptWindowStartChanged();
+    partial void OnCommentChanging(string value);
+    partial void OnCommentChanged();
+    #endregion
+		
+		public aspnet_Membership()
+		{
+			this._aspnet_Application = default(EntityRef<aspnet_Application>);
+			this._aspnet_User = default(EntityRef<aspnet_User>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ApplicationId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid ApplicationId
+		{
+			get
+			{
+				return this._ApplicationId;
+			}
+			set
+			{
+				if ((this._ApplicationId != value))
+				{
+					if (this._aspnet_Application.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnApplicationIdChanging(value);
+					this.SendPropertyChanging();
+					this._ApplicationId = value;
+					this.SendPropertyChanged("ApplicationId");
+					this.OnApplicationIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid UserId
+		{
+			get
+			{
+				return this._UserId;
+			}
+			set
+			{
+				if ((this._UserId != value))
+				{
+					if (this._aspnet_User.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnUserIdChanging(value);
+					this.SendPropertyChanging();
+					this._UserId = value;
+					this.SendPropertyChanged("UserId");
+					this.OnUserIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Password", DbType="NVarChar(128) NOT NULL", CanBeNull=false)]
+		public string Password
+		{
+			get
+			{
+				return this._Password;
+			}
+			set
+			{
+				if ((this._Password != value))
+				{
+					this.OnPasswordChanging(value);
+					this.SendPropertyChanging();
+					this._Password = value;
+					this.SendPropertyChanged("Password");
+					this.OnPasswordChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_PasswordFormat", DbType="Int NOT NULL")]
+		public int PasswordFormat
+		{
+			get
+			{
+				return this._PasswordFormat;
+			}
+			set
+			{
+				if ((this._PasswordFormat != value))
+				{
+					this.OnPasswordFormatChanging(value);
+					this.SendPropertyChanging();
+					this._PasswordFormat = value;
+					this.SendPropertyChanged("PasswordFormat");
+					this.OnPasswordFormatChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_PasswordSalt", DbType="NVarChar(128) NOT NULL", CanBeNull=false)]
+		public string PasswordSalt
+		{
+			get
+			{
+				return this._PasswordSalt;
+			}
+			set
+			{
+				if ((this._PasswordSalt != value))
+				{
+					this.OnPasswordSaltChanging(value);
+					this.SendPropertyChanging();
+					this._PasswordSalt = value;
+					this.SendPropertyChanged("PasswordSalt");
+					this.OnPasswordSaltChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_MobilePIN", DbType="NVarChar(16)")]
+		public string MobilePIN
+		{
+			get
+			{
+				return this._MobilePIN;
+			}
+			set
+			{
+				if ((this._MobilePIN != value))
+				{
+					this.OnMobilePINChanging(value);
+					this.SendPropertyChanging();
+					this._MobilePIN = value;
+					this.SendPropertyChanged("MobilePIN");
+					this.OnMobilePINChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Email", DbType="NVarChar(256)")]
+		public string Email
+		{
+			get
+			{
+				return this._Email;
+			}
+			set
+			{
+				if ((this._Email != value))
+				{
+					this.OnEmailChanging(value);
+					this.SendPropertyChanging();
+					this._Email = value;
+					this.SendPropertyChanged("Email");
+					this.OnEmailChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_LoweredEmail", DbType="NVarChar(256)")]
+		public string LoweredEmail
+		{
+			get
+			{
+				return this._LoweredEmail;
+			}
+			set
+			{
+				if ((this._LoweredEmail != value))
+				{
+					this.OnLoweredEmailChanging(value);
+					this.SendPropertyChanging();
+					this._LoweredEmail = value;
+					this.SendPropertyChanged("LoweredEmail");
+					this.OnLoweredEmailChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_PasswordQuestion", DbType="NVarChar(256)")]
+		public string PasswordQuestion
+		{
+			get
+			{
+				return this._PasswordQuestion;
+			}
+			set
+			{
+				if ((this._PasswordQuestion != value))
+				{
+					this.OnPasswordQuestionChanging(value);
+					this.SendPropertyChanging();
+					this._PasswordQuestion = value;
+					this.SendPropertyChanged("PasswordQuestion");
+					this.OnPasswordQuestionChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_PasswordAnswer", DbType="NVarChar(128)")]
+		public string PasswordAnswer
+		{
+			get
+			{
+				return this._PasswordAnswer;
+			}
+			set
+			{
+				if ((this._PasswordAnswer != value))
+				{
+					this.OnPasswordAnswerChanging(value);
+					this.SendPropertyChanging();
+					this._PasswordAnswer = value;
+					this.SendPropertyChanged("PasswordAnswer");
+					this.OnPasswordAnswerChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_IsApproved", DbType="Bit NOT NULL")]
+		public bool IsApproved
+		{
+			get
+			{
+				return this._IsApproved;
+			}
+			set
+			{
+				if ((this._IsApproved != value))
+				{
+					this.OnIsApprovedChanging(value);
+					this.SendPropertyChanging();
+					this._IsApproved = value;
+					this.SendPropertyChanged("IsApproved");
+					this.OnIsApprovedChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_IsLockedOut", DbType="Bit NOT NULL")]
+		public bool IsLockedOut
+		{
+			get
+			{
+				return this._IsLockedOut;
+			}
+			set
+			{
+				if ((this._IsLockedOut != value))
+				{
+					this.OnIsLockedOutChanging(value);
+					this.SendPropertyChanging();
+					this._IsLockedOut = value;
+					this.SendPropertyChanged("IsLockedOut");
+					this.OnIsLockedOutChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_CreateDate", DbType="DateTime NOT NULL")]
+		public System.DateTime CreateDate
+		{
+			get
+			{
+				return this._CreateDate;
+			}
+			set
+			{
+				if ((this._CreateDate != value))
+				{
+					this.OnCreateDateChanging(value);
+					this.SendPropertyChanging();
+					this._CreateDate = value;
+					this.SendPropertyChanged("CreateDate");
+					this.OnCreateDateChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_LastLoginDate", DbType="DateTime NOT NULL")]
+		public System.DateTime LastLoginDate
+		{
+			get
+			{
+				return this._LastLoginDate;
+			}
+			set
+			{
+				if ((this._LastLoginDate != value))
+				{
+					this.OnLastLoginDateChanging(value);
+					this.SendPropertyChanging();
+					this._LastLoginDate = value;
+					this.SendPropertyChanged("LastLoginDate");
+					this.OnLastLoginDateChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_LastPasswordChangedDate", DbType="DateTime NOT NULL")]
+		public System.DateTime LastPasswordChangedDate
+		{
+			get
+			{
+				return this._LastPasswordChangedDate;
+			}
+			set
+			{
+				if ((this._LastPasswordChangedDate != value))
+				{
+					this.OnLastPasswordChangedDateChanging(value);
+					this.SendPropertyChanging();
+					this._LastPasswordChangedDate = value;
+					this.SendPropertyChanged("LastPasswordChangedDate");
+					this.OnLastPasswordChangedDateChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_LastLockoutDate", DbType="DateTime NOT NULL")]
+		public System.DateTime LastLockoutDate
+		{
+			get
+			{
+				return this._LastLockoutDate;
+			}
+			set
+			{
+				if ((this._LastLockoutDate != value))
+				{
+					this.OnLastLockoutDateChanging(value);
+					this.SendPropertyChanging();
+					this._LastLockoutDate = value;
+					this.SendPropertyChanged("LastLockoutDate");
+					this.OnLastLockoutDateChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_FailedPasswordAttemptCount", DbType="Int NOT NULL")]
+		public int FailedPasswordAttemptCount
+		{
+			get
+			{
+				return this._FailedPasswordAttemptCount;
+			}
+			set
+			{
+				if ((this._FailedPasswordAttemptCount != value))
+				{
+					this.OnFailedPasswordAttemptCountChanging(value);
+					this.SendPropertyChanging();
+					this._FailedPasswordAttemptCount = value;
+					this.SendPropertyChanged("FailedPasswordAttemptCount");
+					this.OnFailedPasswordAttemptCountChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_FailedPasswordAttemptWindowStart", DbType="DateTime NOT NULL")]
+		public System.DateTime FailedPasswordAttemptWindowStart
+		{
+			get
+			{
+				return this._FailedPasswordAttemptWindowStart;
+			}
+			set
+			{
+				if ((this._FailedPasswordAttemptWindowStart != value))
+				{
+					this.OnFailedPasswordAttemptWindowStartChanging(value);
+					this.SendPropertyChanging();
+					this._FailedPasswordAttemptWindowStart = value;
+					this.SendPropertyChanged("FailedPasswordAttemptWindowStart");
+					this.OnFailedPasswordAttemptWindowStartChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_FailedPasswordAnswerAttemptCount", DbType="Int NOT NULL")]
+		public int FailedPasswordAnswerAttemptCount
+		{
+			get
+			{
+				return this._FailedPasswordAnswerAttemptCount;
+			}
+			set
+			{
+				if ((this._FailedPasswordAnswerAttemptCount != value))
+				{
+					this.OnFailedPasswordAnswerAttemptCountChanging(value);
+					this.SendPropertyChanging();
+					this._FailedPasswordAnswerAttemptCount = value;
+					this.SendPropertyChanged("FailedPasswordAnswerAttemptCount");
+					this.OnFailedPasswordAnswerAttemptCountChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_FailedPasswordAnswerAttemptWindowStart", DbType="DateTime NOT NULL")]
+		public System.DateTime FailedPasswordAnswerAttemptWindowStart
+		{
+			get
+			{
+				return this._FailedPasswordAnswerAttemptWindowStart;
+			}
+			set
+			{
+				if ((this._FailedPasswordAnswerAttemptWindowStart != value))
+				{
+					this.OnFailedPasswordAnswerAttemptWindowStartChanging(value);
+					this.SendPropertyChanging();
+					this._FailedPasswordAnswerAttemptWindowStart = value;
+					this.SendPropertyChanged("FailedPasswordAnswerAttemptWindowStart");
+					this.OnFailedPasswordAnswerAttemptWindowStartChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Comment", DbType="NText", UpdateCheck=UpdateCheck.Never)]
+		public string Comment
+		{
+			get
+			{
+				return this._Comment;
+			}
+			set
+			{
+				if ((this._Comment != value))
+				{
+					this.OnCommentChanging(value);
+					this.SendPropertyChanging();
+					this._Comment = value;
+					this.SendPropertyChanged("Comment");
+					this.OnCommentChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="aspnet_Application_aspnet_Membership", Storage="_aspnet_Application", ThisKey="ApplicationId", OtherKey="ApplicationId", IsForeignKey=true)]
+		public aspnet_Application aspnet_Application
+		{
+			get
+			{
+				return this._aspnet_Application.Entity;
+			}
+			set
+			{
+				aspnet_Application previousValue = this._aspnet_Application.Entity;
+				if (((previousValue != value) 
+							|| (this._aspnet_Application.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._aspnet_Application.Entity = null;
+						previousValue.aspnet_Memberships.Remove(this);
+					}
+					this._aspnet_Application.Entity = value;
+					if ((value != null))
+					{
+						value.aspnet_Memberships.Add(this);
+						this._ApplicationId = value.ApplicationId;
+					}
+					else
+					{
+						this._ApplicationId = default(System.Guid);
+					}
+					this.SendPropertyChanged("aspnet_Application");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="aspnet_User_aspnet_Membership", Storage="_aspnet_User", ThisKey="UserId", OtherKey="UserId", IsForeignKey=true)]
+		public aspnet_User aspnet_User
+		{
+			get
+			{
+				return this._aspnet_User.Entity;
+			}
+			set
+			{
+				aspnet_User previousValue = this._aspnet_User.Entity;
+				if (((previousValue != value) 
+							|| (this._aspnet_User.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._aspnet_User.Entity = null;
+						previousValue.aspnet_Membership = null;
+					}
+					this._aspnet_User.Entity = value;
+					if ((value != null))
+					{
+						value.aspnet_Membership = this;
+						this._UserId = value.UserId;
+					}
+					else
+					{
+						this._UserId = default(System.Guid);
+					}
+					this.SendPropertyChanged("aspnet_User");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.aspnet_Roles")]
+	public partial class aspnet_Role : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _ApplicationId;
+		
+		private System.Guid _RoleId;
+		
+		private string _RoleName;
+		
+		private string _LoweredRoleName;
+		
+		private string _Description;
+		
+		private EntitySet<aspnet_UsersInRole> _aspnet_UsersInRoles;
+		
+		private EntityRef<aspnet_Application> _aspnet_Application;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnApplicationIdChanging(System.Guid value);
+    partial void OnApplicationIdChanged();
+    partial void OnRoleIdChanging(System.Guid value);
+    partial void OnRoleIdChanged();
+    partial void OnRoleNameChanging(string value);
+    partial void OnRoleNameChanged();
+    partial void OnLoweredRoleNameChanging(string value);
+    partial void OnLoweredRoleNameChanged();
+    partial void OnDescriptionChanging(string value);
+    partial void OnDescriptionChanged();
+    #endregion
+		
+		public aspnet_Role()
+		{
+			this._aspnet_UsersInRoles = new EntitySet<aspnet_UsersInRole>(new Action<aspnet_UsersInRole>(this.attach_aspnet_UsersInRoles), new Action<aspnet_UsersInRole>(this.detach_aspnet_UsersInRoles));
+			this._aspnet_Application = default(EntityRef<aspnet_Application>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ApplicationId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid ApplicationId
+		{
+			get
+			{
+				return this._ApplicationId;
+			}
+			set
+			{
+				if ((this._ApplicationId != value))
+				{
+					if (this._aspnet_Application.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnApplicationIdChanging(value);
+					this.SendPropertyChanging();
+					this._ApplicationId = value;
+					this.SendPropertyChanged("ApplicationId");
+					this.OnApplicationIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_RoleId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid RoleId
+		{
+			get
+			{
+				return this._RoleId;
+			}
+			set
+			{
+				if ((this._RoleId != value))
+				{
+					this.OnRoleIdChanging(value);
+					this.SendPropertyChanging();
+					this._RoleId = value;
+					this.SendPropertyChanged("RoleId");
+					this.OnRoleIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_RoleName", DbType="NVarChar(256) NOT NULL", CanBeNull=false)]
+		public string RoleName
+		{
+			get
+			{
+				return this._RoleName;
+			}
+			set
+			{
+				if ((this._RoleName != value))
+				{
+					this.OnRoleNameChanging(value);
+					this.SendPropertyChanging();
+					this._RoleName = value;
+					this.SendPropertyChanged("RoleName");
+					this.OnRoleNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_LoweredRoleName", DbType="NVarChar(256) NOT NULL", CanBeNull=false)]
+		public string LoweredRoleName
+		{
+			get
+			{
+				return this._LoweredRoleName;
+			}
+			set
+			{
+				if ((this._LoweredRoleName != value))
+				{
+					this.OnLoweredRoleNameChanging(value);
+					this.SendPropertyChanging();
+					this._LoweredRoleName = value;
+					this.SendPropertyChanged("LoweredRoleName");
+					this.OnLoweredRoleNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Description", DbType="NVarChar(256)")]
+		public string Description
+		{
+			get
+			{
+				return this._Description;
+			}
+			set
+			{
+				if ((this._Description != value))
+				{
+					this.OnDescriptionChanging(value);
+					this.SendPropertyChanging();
+					this._Description = value;
+					this.SendPropertyChanged("Description");
+					this.OnDescriptionChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="aspnet_Role_aspnet_UsersInRole", Storage="_aspnet_UsersInRoles", ThisKey="RoleId", OtherKey="RoleId")]
+		public EntitySet<aspnet_UsersInRole> aspnet_UsersInRoles
+		{
+			get
+			{
+				return this._aspnet_UsersInRoles;
+			}
+			set
+			{
+				this._aspnet_UsersInRoles.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="aspnet_Application_aspnet_Role", Storage="_aspnet_Application", ThisKey="ApplicationId", OtherKey="ApplicationId", IsForeignKey=true)]
+		public aspnet_Application aspnet_Application
+		{
+			get
+			{
+				return this._aspnet_Application.Entity;
+			}
+			set
+			{
+				aspnet_Application previousValue = this._aspnet_Application.Entity;
+				if (((previousValue != value) 
+							|| (this._aspnet_Application.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._aspnet_Application.Entity = null;
+						previousValue.aspnet_Roles.Remove(this);
+					}
+					this._aspnet_Application.Entity = value;
+					if ((value != null))
+					{
+						value.aspnet_Roles.Add(this);
+						this._ApplicationId = value.ApplicationId;
+					}
+					else
+					{
+						this._ApplicationId = default(System.Guid);
+					}
+					this.SendPropertyChanged("aspnet_Application");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_aspnet_UsersInRoles(aspnet_UsersInRole entity)
+		{
+			this.SendPropertyChanging();
+			entity.aspnet_Role = this;
+		}
+		
+		private void detach_aspnet_UsersInRoles(aspnet_UsersInRole entity)
+		{
+			this.SendPropertyChanging();
+			entity.aspnet_Role = null;
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.aspnet_Users")]
+	public partial class aspnet_User : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _ApplicationId;
+		
+		private System.Guid _UserId;
+		
+		private string _UserName;
+		
+		private string _LoweredUserName;
+		
+		private string _MobileAlias;
+		
+		private bool _IsAnonymous;
+		
+		private System.DateTime _LastActivityDate;
+		
+		private EntityRef<aspnet_Membership> _aspnet_Membership;
+		
+		private EntitySet<aspnet_UsersInRole> _aspnet_UsersInRoles;
+		
+		private EntityRef<aspnet_Application> _aspnet_Application;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnApplicationIdChanging(System.Guid value);
+    partial void OnApplicationIdChanged();
+    partial void OnUserIdChanging(System.Guid value);
+    partial void OnUserIdChanged();
+    partial void OnUserNameChanging(string value);
+    partial void OnUserNameChanged();
+    partial void OnLoweredUserNameChanging(string value);
+    partial void OnLoweredUserNameChanged();
+    partial void OnMobileAliasChanging(string value);
+    partial void OnMobileAliasChanged();
+    partial void OnIsAnonymousChanging(bool value);
+    partial void OnIsAnonymousChanged();
+    partial void OnLastActivityDateChanging(System.DateTime value);
+    partial void OnLastActivityDateChanged();
+    #endregion
+		
+		public aspnet_User()
+		{
+			this._aspnet_Membership = default(EntityRef<aspnet_Membership>);
+			this._aspnet_UsersInRoles = new EntitySet<aspnet_UsersInRole>(new Action<aspnet_UsersInRole>(this.attach_aspnet_UsersInRoles), new Action<aspnet_UsersInRole>(this.detach_aspnet_UsersInRoles));
+			this._aspnet_Application = default(EntityRef<aspnet_Application>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ApplicationId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid ApplicationId
+		{
+			get
+			{
+				return this._ApplicationId;
+			}
+			set
+			{
+				if ((this._ApplicationId != value))
+				{
+					if (this._aspnet_Application.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnApplicationIdChanging(value);
+					this.SendPropertyChanging();
+					this._ApplicationId = value;
+					this.SendPropertyChanged("ApplicationId");
+					this.OnApplicationIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid UserId
+		{
+			get
+			{
+				return this._UserId;
+			}
+			set
+			{
+				if ((this._UserId != value))
+				{
+					this.OnUserIdChanging(value);
+					this.SendPropertyChanging();
+					this._UserId = value;
+					this.SendPropertyChanged("UserId");
+					this.OnUserIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserName", DbType="NVarChar(256) NOT NULL", CanBeNull=false)]
+		public string UserName
+		{
+			get
+			{
+				return this._UserName;
+			}
+			set
+			{
+				if ((this._UserName != value))
+				{
+					this.OnUserNameChanging(value);
+					this.SendPropertyChanging();
+					this._UserName = value;
+					this.SendPropertyChanged("UserName");
+					this.OnUserNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_LoweredUserName", DbType="NVarChar(256) NOT NULL", CanBeNull=false)]
+		public string LoweredUserName
+		{
+			get
+			{
+				return this._LoweredUserName;
+			}
+			set
+			{
+				if ((this._LoweredUserName != value))
+				{
+					this.OnLoweredUserNameChanging(value);
+					this.SendPropertyChanging();
+					this._LoweredUserName = value;
+					this.SendPropertyChanged("LoweredUserName");
+					this.OnLoweredUserNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_MobileAlias", DbType="NVarChar(16)")]
+		public string MobileAlias
+		{
+			get
+			{
+				return this._MobileAlias;
+			}
+			set
+			{
+				if ((this._MobileAlias != value))
+				{
+					this.OnMobileAliasChanging(value);
+					this.SendPropertyChanging();
+					this._MobileAlias = value;
+					this.SendPropertyChanged("MobileAlias");
+					this.OnMobileAliasChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_IsAnonymous", DbType="Bit NOT NULL")]
+		public bool IsAnonymous
+		{
+			get
+			{
+				return this._IsAnonymous;
+			}
+			set
+			{
+				if ((this._IsAnonymous != value))
+				{
+					this.OnIsAnonymousChanging(value);
+					this.SendPropertyChanging();
+					this._IsAnonymous = value;
+					this.SendPropertyChanged("IsAnonymous");
+					this.OnIsAnonymousChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_LastActivityDate", DbType="DateTime NOT NULL")]
+		public System.DateTime LastActivityDate
+		{
+			get
+			{
+				return this._LastActivityDate;
+			}
+			set
+			{
+				if ((this._LastActivityDate != value))
+				{
+					this.OnLastActivityDateChanging(value);
+					this.SendPropertyChanging();
+					this._LastActivityDate = value;
+					this.SendPropertyChanged("LastActivityDate");
+					this.OnLastActivityDateChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="aspnet_User_aspnet_Membership", Storage="_aspnet_Membership", ThisKey="UserId", OtherKey="UserId", IsUnique=true, IsForeignKey=false)]
+		public aspnet_Membership aspnet_Membership
+		{
+			get
+			{
+				return this._aspnet_Membership.Entity;
+			}
+			set
+			{
+				aspnet_Membership previousValue = this._aspnet_Membership.Entity;
+				if (((previousValue != value) 
+							|| (this._aspnet_Membership.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._aspnet_Membership.Entity = null;
+						previousValue.aspnet_User = null;
+					}
+					this._aspnet_Membership.Entity = value;
+					if ((value != null))
+					{
+						value.aspnet_User = this;
+					}
+					this.SendPropertyChanged("aspnet_Membership");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="aspnet_User_aspnet_UsersInRole", Storage="_aspnet_UsersInRoles", ThisKey="UserId", OtherKey="UserId")]
+		public EntitySet<aspnet_UsersInRole> aspnet_UsersInRoles
+		{
+			get
+			{
+				return this._aspnet_UsersInRoles;
+			}
+			set
+			{
+				this._aspnet_UsersInRoles.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="aspnet_Application_aspnet_User", Storage="_aspnet_Application", ThisKey="ApplicationId", OtherKey="ApplicationId", IsForeignKey=true)]
+		public aspnet_Application aspnet_Application
+		{
+			get
+			{
+				return this._aspnet_Application.Entity;
+			}
+			set
+			{
+				aspnet_Application previousValue = this._aspnet_Application.Entity;
+				if (((previousValue != value) 
+							|| (this._aspnet_Application.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._aspnet_Application.Entity = null;
+						previousValue.aspnet_Users.Remove(this);
+					}
+					this._aspnet_Application.Entity = value;
+					if ((value != null))
+					{
+						value.aspnet_Users.Add(this);
+						this._ApplicationId = value.ApplicationId;
+					}
+					else
+					{
+						this._ApplicationId = default(System.Guid);
+					}
+					this.SendPropertyChanged("aspnet_Application");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_aspnet_UsersInRoles(aspnet_UsersInRole entity)
+		{
+			this.SendPropertyChanging();
+			entity.aspnet_User = this;
+		}
+		
+		private void detach_aspnet_UsersInRoles(aspnet_UsersInRole entity)
+		{
+			this.SendPropertyChanging();
+			entity.aspnet_User = null;
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.aspnet_UsersInRoles")]
+	public partial class aspnet_UsersInRole : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _UserId;
+		
+		private System.Guid _RoleId;
+		
+		private EntityRef<aspnet_Role> _aspnet_Role;
+		
+		private EntityRef<aspnet_User> _aspnet_User;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnUserIdChanging(System.Guid value);
+    partial void OnUserIdChanged();
+    partial void OnRoleIdChanging(System.Guid value);
+    partial void OnRoleIdChanged();
+    #endregion
+		
+		public aspnet_UsersInRole()
+		{
+			this._aspnet_Role = default(EntityRef<aspnet_Role>);
+			this._aspnet_User = default(EntityRef<aspnet_User>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid UserId
+		{
+			get
+			{
+				return this._UserId;
+			}
+			set
+			{
+				if ((this._UserId != value))
+				{
+					if (this._aspnet_User.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnUserIdChanging(value);
+					this.SendPropertyChanging();
+					this._UserId = value;
+					this.SendPropertyChanged("UserId");
+					this.OnUserIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_RoleId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid RoleId
+		{
+			get
+			{
+				return this._RoleId;
+			}
+			set
+			{
+				if ((this._RoleId != value))
+				{
+					if (this._aspnet_Role.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnRoleIdChanging(value);
+					this.SendPropertyChanging();
+					this._RoleId = value;
+					this.SendPropertyChanged("RoleId");
+					this.OnRoleIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="aspnet_Role_aspnet_UsersInRole", Storage="_aspnet_Role", ThisKey="RoleId", OtherKey="RoleId", IsForeignKey=true)]
+		public aspnet_Role aspnet_Role
+		{
+			get
+			{
+				return this._aspnet_Role.Entity;
+			}
+			set
+			{
+				aspnet_Role previousValue = this._aspnet_Role.Entity;
+				if (((previousValue != value) 
+							|| (this._aspnet_Role.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._aspnet_Role.Entity = null;
+						previousValue.aspnet_UsersInRoles.Remove(this);
+					}
+					this._aspnet_Role.Entity = value;
+					if ((value != null))
+					{
+						value.aspnet_UsersInRoles.Add(this);
+						this._RoleId = value.RoleId;
+					}
+					else
+					{
+						this._RoleId = default(System.Guid);
+					}
+					this.SendPropertyChanged("aspnet_Role");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="aspnet_User_aspnet_UsersInRole", Storage="_aspnet_User", ThisKey="UserId", OtherKey="UserId", IsForeignKey=true)]
+		public aspnet_User aspnet_User
+		{
+			get
+			{
+				return this._aspnet_User.Entity;
+			}
+			set
+			{
+				aspnet_User previousValue = this._aspnet_User.Entity;
+				if (((previousValue != value) 
+							|| (this._aspnet_User.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._aspnet_User.Entity = null;
+						previousValue.aspnet_UsersInRoles.Remove(this);
+					}
+					this._aspnet_User.Entity = value;
+					if ((value != null))
+					{
+						value.aspnet_UsersInRoles.Add(this);
+						this._UserId = value.UserId;
+					}
+					else
+					{
+						this._UserId = default(System.Guid);
+					}
+					this.SendPropertyChanged("aspnet_User");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+}
+#pragma warning restore 1591
Index: branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.dbml
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.dbml	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.dbml	(revision 6815)
@@ -0,0 +1,64 @@
+﻿<?xml version="1.0" encoding="utf-8"?><Database Name="HeuristicLab.ClientManagement" Class="ClientManagementDataContext" xmlns="http://schemas.microsoft.com/linqtosql/dbml/2007">
+  <Connection Mode="AppSettings" ConnectionString="Data Source=.;Initial Catalog=HeuristicLab.ClientManagement;Integrated Security=True" SettingsObjectName="HeuristicLab.Services.Access.DataAccess.Properties.Settings" SettingsPropertyName="HeuristicLab_ClientManagementConnectionString" Provider="System.Data.SqlClient" />
+  <Table Name="dbo.Resource" Member="Resources">
+    <Type Name="Resource" InheritanceCode="Resource">
+      <Column Name="Id" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="Name" Type="System.String" DbType="NVarChar(MAX) NOT NULL" CanBeNull="false" />
+      <Column Name="Description" Type="System.String" DbType="NVarChar(MAX)" CanBeNull="true" />
+      <Column Name="Type" Type="System.String" DbType="NVarChar(MAX) NOT NULL" CanBeNull="false" IsDiscriminator="true" />
+      <Association Name="Resource_ResourceResourceGroup" Member="ResourceResourceGroups" ThisKey="Id" OtherKey="ResourceGroupId" Type="ResourceResourceGroup" />
+      <Association Name="Resource_ResourceResourceGroup1" Member="ResourceResourceGroups1" ThisKey="Id" OtherKey="ResourceId" Type="ResourceResourceGroup" />
+      <Association Name="Resource_ClientLog" Member="ClientLogs" ThisKey="Id" OtherKey="ResourceId" Type="ClientLog" />
+      <Type Name="Client" InheritanceCode="Client">
+        <Column Name="ProcessorType" Type="System.String" DbType="NVarChar(MAX)" CanBeNull="true" />
+        <Column Name="NumberOfCores" Type="System.Int32" DbType="int" CanBeNull="true" />
+        <Column Name="MemorySize" Type="System.Int32" DbType="int" CanBeNull="true" />
+        <Column Name="OperatingSystem" Type="System.String" DbType="NVarChar(MAX)" CanBeNull="true" />
+        <Column Name="IPAddress" Storage="_IPAdresss" Type="System.String" DbType="NVarChar(MAX)" CanBeNull="true" />
+        <Column Name="HeuristicLabVersion" Type="System.String" DbType="NVarChar(MAX)" CanBeNull="true" />
+        <Column Name="Country" Type="System.String" DbType="NVarChar(MAX)" CanBeNull="true" />
+      </Type>
+      <Type Name="Group" InheritanceCode="Group" />
+    </Type>
+  </Table>
+  <Table Name="dbo.ResourceResourceGroup" Member="ResourceResourceGroups">
+    <Type Name="ResourceResourceGroup">
+      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="ResourceGroupId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Association Name="Resource_ResourceResourceGroup" Member="Resource" ThisKey="ResourceGroupId" OtherKey="Id" Type="Resource" IsForeignKey="true" />
+      <Association Name="Resource_ResourceResourceGroup1" Member="Resource1" ThisKey="ResourceId" OtherKey="Id" Type="Resource" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.ClientLog" Member="ClientLogs">
+    <Type Name="ClientLog">
+      <Column Name="Timestamp" Type="System.DateTime" DbType="DateTime NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="Message" Type="System.String" DbType="NVarChar(MAX)" CanBeNull="true" />
+      <Column Name="Exception" Type="System.String" DbType="NVarChar(MAX)" CanBeNull="true" />
+      <Association Name="Resource_ClientLog" Member="Resource" ThisKey="ResourceId" OtherKey="Id" Type="Resource" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.[User]" Member="Users">
+    <Type Name="User">
+      <Column Name="Id" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="FullName" Type="System.String" DbType="NVarChar(MAX)" CanBeNull="true" />
+      <Association Name="User_UserUserGroup" Member="UserUserGroups" ThisKey="Id" OtherKey="UserId" Type="UserUserGroup" />
+    </Type>
+  </Table>
+  <Table Name="dbo.UserGroup" Member="UserGroups">
+    <Type Name="UserGroup">
+      <Column Name="Id" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="Name" Type="System.String" DbType="NVarChar(MAX) NOT NULL" CanBeNull="false" />
+      <Column Name="ParentUserGroup" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+      <Association Name="UserGroup_UserUserGroup" Member="UserUserGroups" ThisKey="Id" OtherKey="UserGroupId" Type="UserUserGroup" />
+    </Type>
+  </Table>
+  <Table Name="dbo.UserUserGroup" Member="UserUserGroups">
+    <Type Name="UserUserGroup">
+      <Column Name="UserId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="UserGroupId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Association Name="User_UserUserGroup" Member="User" ThisKey="UserId" OtherKey="Id" Type="User" IsForeignKey="true" />
+      <Association Name="UserGroup_UserUserGroup" Member="UserGroup" ThisKey="UserGroupId" OtherKey="Id" Type="UserGroup" IsForeignKey="true" />
+    </Type>
+  </Table>
+</Database>
Index: branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.dbml.layout
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.dbml.layout	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.dbml.layout	(revision 6815)
@@ -0,0 +1,101 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<ordesignerObjectsDiagram dslVersion="1.0.0.0" absoluteBounds="0, 0, 11, 8.5" name="ClientManagement">
+  <DataContextMoniker Name="/ClientManagementDataContext" />
+  <nestedChildShapes>
+    <classShape Id="2f689cd2-d0f0-4be8-9fb8-0dce6303f3ac" absoluteBounds="4.375, 0.5, 2, 1.5785953776041666">
+      <DataClassMoniker Name="/ClientManagementDataContext/Resource" />
+      <nestedChildShapes>
+        <elementListCompartment Id="95418045-5d3f-40e2-8e91-826349b9b0d5" absoluteBounds="4.3900000000000006, 0.96, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="9ae9b199-cfb6-4c70-a8d9-3eb72896d957" absoluteBounds="7.125, 0.5, 2, 1.1939925130208335">
+      <DataClassMoniker Name="/ClientManagementDataContext/ResourceResourceGroup" />
+      <nestedChildShapes>
+        <elementListCompartment Id="41c753c1-33ca-4ab4-9798-aac28efb805f" absoluteBounds="7.1400000000000006, 0.96, 1.9700000000000002, 0.63399251302083326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(6.375 : 1.09699625651042); (7.125 : 1.09699625651042)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/ClientManagementDataContext/Resource/Resource_ResourceResourceGroup" />
+      <nodes>
+        <classShapeMoniker Id="2f689cd2-d0f0-4be8-9fb8-0dce6303f3ac" />
+        <classShapeMoniker Id="9ae9b199-cfb6-4c70-a8d9-3eb72896d957" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(6.375 : 0.735998128255208); (7.125 : 0.735998128255208)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/ClientManagementDataContext/Resource/Resource_ResourceResourceGroup1" />
+      <nodes>
+        <classShapeMoniker Id="2f689cd2-d0f0-4be8-9fb8-0dce6303f3ac" />
+        <classShapeMoniker Id="9ae9b199-cfb6-4c70-a8d9-3eb72896d957" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="643168ec-6e6c-43aa-a71d-50420e26ba6b" absoluteBounds="6, 2.875, 2, 0.8093896484375">
+      <DataClassMoniker Name="/ClientManagementDataContext/Group" />
+      <nestedChildShapes>
+        <elementListCompartment Id="c9942a3e-7f75-4d39-8b07-aa73193a1426" absoluteBounds="6, 2.875, 0.125, 0.2493896484375" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="93bcfe43-938e-49f8-90db-b5056196257b" absoluteBounds="2.875, 2.875, 2, 2.1554996744791666">
+      <DataClassMoniker Name="/ClientManagementDataContext/Client" />
+      <nestedChildShapes>
+        <elementListCompartment Id="f89c2c39-17cc-4b0e-b5e0-245107753b38" absoluteBounds="2.89, 3.335, 1.9700000000000002, 1.5954996744791665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <inheritanceConnector edgePoints="[(5.375 : 2.07859537760417); (5.375 : 2.5); (3.875 : 2.5); (3.875 : 2.875)]" fixedFrom="NotFixed" fixedTo="NotFixed" TargetRelationshipDomainClassId="7a7fe09e-e9ef-4b01-9ff3-bde95e827b62">
+      <nodes>
+        <classShapeMoniker Id="2f689cd2-d0f0-4be8-9fb8-0dce6303f3ac" />
+        <classShapeMoniker Id="93bcfe43-938e-49f8-90db-b5056196257b" />
+      </nodes>
+    </inheritanceConnector>
+    <inheritanceConnector edgePoints="[(5.375 : 2.07859537760417); (5.375 : 2.5); (7 : 2.5); (7 : 2.875)]" fixedFrom="NotFixed" fixedTo="NotFixed" TargetRelationshipDomainClassId="7a7fe09e-e9ef-4b01-9ff3-bde95e827b62">
+      <nodes>
+        <classShapeMoniker Id="2f689cd2-d0f0-4be8-9fb8-0dce6303f3ac" />
+        <classShapeMoniker Id="643168ec-6e6c-43aa-a71d-50420e26ba6b" />
+      </nodes>
+    </inheritanceConnector>
+    <classShape Id="256b57f3-6f9a-420b-9a23-fa5fcc0119a5" absoluteBounds="1.375, 0.5, 2, 1.5785953776041666">
+      <DataClassMoniker Name="/ClientManagementDataContext/ClientLog" />
+      <nestedChildShapes>
+        <elementListCompartment Id="1a91e2f0-9306-473c-afcb-453ff4f01350" absoluteBounds="1.3900000000000006, 0.96, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(4.375 : 1.28929768880208); (3.375 : 1.28929768880208)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/ClientManagementDataContext/Resource/Resource_ClientLog" />
+      <nodes>
+        <classShapeMoniker Id="2f689cd2-d0f0-4be8-9fb8-0dce6303f3ac" />
+        <classShapeMoniker Id="256b57f3-6f9a-420b-9a23-fa5fcc0119a5" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="cafc28d1-c77e-4a58-9af1-d15a9f775409" absoluteBounds="5.5, 4.125, 2, 1.1939925130208333">
+      <DataClassMoniker Name="/ClientManagementDataContext/User" />
+      <nestedChildShapes>
+        <elementListCompartment Id="4a4f98f6-5b7e-430a-8609-ac86c7cb04f7" absoluteBounds="5.515, 4.585, 1.9700000000000002, 0.63399251302083326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="d20965a8-4c70-457b-9751-f74f3f57239d" absoluteBounds="8.125, 4.25, 2, 1.3862939453125">
+      <DataClassMoniker Name="/ClientManagementDataContext/UserGroup" />
+      <nestedChildShapes>
+        <elementListCompartment Id="254f12c4-7f06-4d4a-8b53-0ac482305a16" absoluteBounds="8.14, 4.71, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="1e669879-2fb3-47f4-abb9-98e491817d28" absoluteBounds="6.625, 6.125, 2, 1.1939925130208333">
+      <DataClassMoniker Name="/ClientManagementDataContext/UserUserGroup" />
+      <nestedChildShapes>
+        <elementListCompartment Id="6ac0417d-a956-4241-aef8-e372477fba9c" absoluteBounds="6.6400000000000006, 6.585, 1.9700000000000002, 0.63399251302083326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(7.0625 : 5.31899251302083); (7.0625 : 6.125)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/ClientManagementDataContext/User/User_UserUserGroup" />
+      <nodes>
+        <classShapeMoniker Id="cafc28d1-c77e-4a58-9af1-d15a9f775409" />
+        <classShapeMoniker Id="1e669879-2fb3-47f4-abb9-98e491817d28" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8.375 : 5.6362939453125); (8.375 : 6.125)]" fixedFrom="Algorithm" fixedTo="Algorithm">
+      <AssociationMoniker Name="/ClientManagementDataContext/UserGroup/UserGroup_UserUserGroup" />
+      <nodes>
+        <classShapeMoniker Id="d20965a8-4c70-457b-9751-f74f3f57239d" />
+        <classShapeMoniker Id="1e669879-2fb3-47f4-abb9-98e491817d28" />
+      </nodes>
+    </associationConnector>
+  </nestedChildShapes>
+</ordesignerObjectsDiagram>
Index: branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.designer.cs
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.designer.cs	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/ClientManagement.designer.cs	(revision 6815)
@@ -0,0 +1,1314 @@
+﻿#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.237
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Services.Access.DataAccess
+{
+	using System.Data.Linq;
+	using System.Data.Linq.Mapping;
+	using System.Data;
+	using System.Collections.Generic;
+	using System.Reflection;
+	using System.Linq;
+	using System.Linq.Expressions;
+	using System.ComponentModel;
+	using System;
+	
+	
+	[global::System.Data.Linq.Mapping.DatabaseAttribute(Name="HeuristicLab.ClientManagement")]
+	public partial class ClientManagementDataContext : System.Data.Linq.DataContext
+	{
+		
+		private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();
+		
+    #region Extensibility Method Definitions
+    partial void OnCreated();
+    partial void InsertResource(Resource instance);
+    partial void UpdateResource(Resource instance);
+    partial void DeleteResource(Resource instance);
+    partial void InsertResourceResourceGroup(ResourceResourceGroup instance);
+    partial void UpdateResourceResourceGroup(ResourceResourceGroup instance);
+    partial void DeleteResourceResourceGroup(ResourceResourceGroup instance);
+    partial void InsertClientLog(ClientLog instance);
+    partial void UpdateClientLog(ClientLog instance);
+    partial void DeleteClientLog(ClientLog instance);
+    partial void InsertUser(User instance);
+    partial void UpdateUser(User instance);
+    partial void DeleteUser(User instance);
+    partial void InsertUserGroup(UserGroup instance);
+    partial void UpdateUserGroup(UserGroup instance);
+    partial void DeleteUserGroup(UserGroup instance);
+    partial void InsertUserUserGroup(UserUserGroup instance);
+    partial void UpdateUserUserGroup(UserUserGroup instance);
+    partial void DeleteUserUserGroup(UserUserGroup instance);
+    #endregion
+		
+		public ClientManagementDataContext() : 
+				base(global::HeuristicLab.Services.Access.DataAccess.Properties.Settings.Default.HeuristicLab_ClientManagementConnectionString, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public ClientManagementDataContext(string connection) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public ClientManagementDataContext(System.Data.IDbConnection connection) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public ClientManagementDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public ClientManagementDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public System.Data.Linq.Table<Resource> Resources
+		{
+			get
+			{
+				return this.GetTable<Resource>();
+			}
+		}
+		
+		public System.Data.Linq.Table<ResourceResourceGroup> ResourceResourceGroups
+		{
+			get
+			{
+				return this.GetTable<ResourceResourceGroup>();
+			}
+		}
+		
+		public System.Data.Linq.Table<ClientLog> ClientLogs
+		{
+			get
+			{
+				return this.GetTable<ClientLog>();
+			}
+		}
+		
+		public System.Data.Linq.Table<User> Users
+		{
+			get
+			{
+				return this.GetTable<User>();
+			}
+		}
+		
+		public System.Data.Linq.Table<UserGroup> UserGroups
+		{
+			get
+			{
+				return this.GetTable<UserGroup>();
+			}
+		}
+		
+		public System.Data.Linq.Table<UserUserGroup> UserUserGroups
+		{
+			get
+			{
+				return this.GetTable<UserUserGroup>();
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Resource")]
+	[global::System.Data.Linq.Mapping.InheritanceMappingAttribute(Code="Resource", Type=typeof(Resource))]
+	[global::System.Data.Linq.Mapping.InheritanceMappingAttribute(Code="Client", Type=typeof(Client))]
+	[global::System.Data.Linq.Mapping.InheritanceMappingAttribute(Code="Group", Type=typeof(Group))]
+	public partial class Resource : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _Id;
+		
+		private string _Name;
+		
+		private string _Description;
+		
+		private string _Type;
+		
+		private EntitySet<ResourceResourceGroup> _ResourceResourceGroups;
+		
+		private EntitySet<ResourceResourceGroup> _ResourceResourceGroups1;
+		
+		private EntitySet<ClientLog> _ClientLogs;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnIdChanging(System.Guid value);
+    partial void OnIdChanged();
+    partial void OnNameChanging(string value);
+    partial void OnNameChanged();
+    partial void OnDescriptionChanging(string value);
+    partial void OnDescriptionChanged();
+    partial void OnTypeChanging(string value);
+    partial void OnTypeChanged();
+    #endregion
+		
+		public Resource()
+		{
+			this._ResourceResourceGroups = new EntitySet<ResourceResourceGroup>(new Action<ResourceResourceGroup>(this.attach_ResourceResourceGroups), new Action<ResourceResourceGroup>(this.detach_ResourceResourceGroups));
+			this._ResourceResourceGroups1 = new EntitySet<ResourceResourceGroup>(new Action<ResourceResourceGroup>(this.attach_ResourceResourceGroups1), new Action<ResourceResourceGroup>(this.detach_ResourceResourceGroups1));
+			this._ClientLogs = new EntitySet<ClientLog>(new Action<ClientLog>(this.attach_ClientLogs), new Action<ClientLog>(this.detach_ClientLogs));
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid Id
+		{
+			get
+			{
+				return this._Id;
+			}
+			set
+			{
+				if ((this._Id != value))
+				{
+					this.OnIdChanging(value);
+					this.SendPropertyChanging();
+					this._Id = value;
+					this.SendPropertyChanged("Id");
+					this.OnIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="NVarChar(MAX) NOT NULL", CanBeNull=false)]
+		public string Name
+		{
+			get
+			{
+				return this._Name;
+			}
+			set
+			{
+				if ((this._Name != value))
+				{
+					this.OnNameChanging(value);
+					this.SendPropertyChanging();
+					this._Name = value;
+					this.SendPropertyChanged("Name");
+					this.OnNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Description", DbType="NVarChar(MAX)")]
+		public string Description
+		{
+			get
+			{
+				return this._Description;
+			}
+			set
+			{
+				if ((this._Description != value))
+				{
+					this.OnDescriptionChanging(value);
+					this.SendPropertyChanging();
+					this._Description = value;
+					this.SendPropertyChanged("Description");
+					this.OnDescriptionChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Type", DbType="NVarChar(MAX) NOT NULL", CanBeNull=false, IsDiscriminator=true)]
+		public string Type
+		{
+			get
+			{
+				return this._Type;
+			}
+			set
+			{
+				if ((this._Type != value))
+				{
+					this.OnTypeChanging(value);
+					this.SendPropertyChanging();
+					this._Type = value;
+					this.SendPropertyChanged("Type");
+					this.OnTypeChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Resource_ResourceResourceGroup", Storage="_ResourceResourceGroups", ThisKey="Id", OtherKey="ResourceGroupId")]
+		public EntitySet<ResourceResourceGroup> ResourceResourceGroups
+		{
+			get
+			{
+				return this._ResourceResourceGroups;
+			}
+			set
+			{
+				this._ResourceResourceGroups.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Resource_ResourceResourceGroup1", Storage="_ResourceResourceGroups1", ThisKey="Id", OtherKey="ResourceId")]
+		public EntitySet<ResourceResourceGroup> ResourceResourceGroups1
+		{
+			get
+			{
+				return this._ResourceResourceGroups1;
+			}
+			set
+			{
+				this._ResourceResourceGroups1.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Resource_ClientLog", Storage="_ClientLogs", ThisKey="Id", OtherKey="ResourceId")]
+		public EntitySet<ClientLog> ClientLogs
+		{
+			get
+			{
+				return this._ClientLogs;
+			}
+			set
+			{
+				this._ClientLogs.Assign(value);
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_ResourceResourceGroups(ResourceResourceGroup entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = this;
+		}
+		
+		private void detach_ResourceResourceGroups(ResourceResourceGroup entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = null;
+		}
+		
+		private void attach_ResourceResourceGroups1(ResourceResourceGroup entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource1 = this;
+		}
+		
+		private void detach_ResourceResourceGroups1(ResourceResourceGroup entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource1 = null;
+		}
+		
+		private void attach_ClientLogs(ClientLog entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = this;
+		}
+		
+		private void detach_ClientLogs(ClientLog entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = null;
+		}
+	}
+	
+	public partial class Client : Resource
+	{
+		
+		private string _ProcessorType;
+		
+		private System.Nullable<int> _NumberOfCores;
+		
+		private System.Nullable<int> _MemorySize;
+		
+		private string _OperatingSystem;
+		
+		private string _IPAdresss;
+		
+		private string _HeuristicLabVersion;
+		
+		private string _Country;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnProcessorTypeChanging(string value);
+    partial void OnProcessorTypeChanged();
+    partial void OnNumberOfCoresChanging(System.Nullable<int> value);
+    partial void OnNumberOfCoresChanged();
+    partial void OnMemorySizeChanging(System.Nullable<int> value);
+    partial void OnMemorySizeChanged();
+    partial void OnOperatingSystemChanging(string value);
+    partial void OnOperatingSystemChanged();
+    partial void OnIPAddressChanging(string value);
+    partial void OnIPAddressChanged();
+    partial void OnHeuristicLabVersionChanging(string value);
+    partial void OnHeuristicLabVersionChanged();
+    partial void OnCountryChanging(string value);
+    partial void OnCountryChanged();
+    #endregion
+		
+		public Client()
+		{
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ProcessorType", DbType="NVarChar(MAX)")]
+		public string ProcessorType
+		{
+			get
+			{
+				return this._ProcessorType;
+			}
+			set
+			{
+				if ((this._ProcessorType != value))
+				{
+					this.OnProcessorTypeChanging(value);
+					this.SendPropertyChanging();
+					this._ProcessorType = value;
+					this.SendPropertyChanged("ProcessorType");
+					this.OnProcessorTypeChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_NumberOfCores", DbType="int")]
+		public System.Nullable<int> NumberOfCores
+		{
+			get
+			{
+				return this._NumberOfCores;
+			}
+			set
+			{
+				if ((this._NumberOfCores != value))
+				{
+					this.OnNumberOfCoresChanging(value);
+					this.SendPropertyChanging();
+					this._NumberOfCores = value;
+					this.SendPropertyChanged("NumberOfCores");
+					this.OnNumberOfCoresChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_MemorySize", DbType="int")]
+		public System.Nullable<int> MemorySize
+		{
+			get
+			{
+				return this._MemorySize;
+			}
+			set
+			{
+				if ((this._MemorySize != value))
+				{
+					this.OnMemorySizeChanging(value);
+					this.SendPropertyChanging();
+					this._MemorySize = value;
+					this.SendPropertyChanged("MemorySize");
+					this.OnMemorySizeChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_OperatingSystem", DbType="NVarChar(MAX)")]
+		public string OperatingSystem
+		{
+			get
+			{
+				return this._OperatingSystem;
+			}
+			set
+			{
+				if ((this._OperatingSystem != value))
+				{
+					this.OnOperatingSystemChanging(value);
+					this.SendPropertyChanging();
+					this._OperatingSystem = value;
+					this.SendPropertyChanged("OperatingSystem");
+					this.OnOperatingSystemChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_IPAdresss", DbType="NVarChar(MAX)")]
+		public string IPAddress
+		{
+			get
+			{
+				return this._IPAdresss;
+			}
+			set
+			{
+				if ((this._IPAdresss != value))
+				{
+					this.OnIPAddressChanging(value);
+					this.SendPropertyChanging();
+					this._IPAdresss = value;
+					this.SendPropertyChanged("IPAddress");
+					this.OnIPAddressChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_HeuristicLabVersion", DbType="NVarChar(MAX)")]
+		public string HeuristicLabVersion
+		{
+			get
+			{
+				return this._HeuristicLabVersion;
+			}
+			set
+			{
+				if ((this._HeuristicLabVersion != value))
+				{
+					this.OnHeuristicLabVersionChanging(value);
+					this.SendPropertyChanging();
+					this._HeuristicLabVersion = value;
+					this.SendPropertyChanged("HeuristicLabVersion");
+					this.OnHeuristicLabVersionChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Country", DbType="NVarChar(MAX)")]
+		public string Country
+		{
+			get
+			{
+				return this._Country;
+			}
+			set
+			{
+				if ((this._Country != value))
+				{
+					this.OnCountryChanging(value);
+					this.SendPropertyChanging();
+					this._Country = value;
+					this.SendPropertyChanged("Country");
+					this.OnCountryChanged();
+				}
+			}
+		}
+	}
+	
+	public partial class Group : Resource
+	{
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    #endregion
+		
+		public Group()
+		{
+			OnCreated();
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.ResourceResourceGroup")]
+	public partial class ResourceResourceGroup : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _ResourceId;
+		
+		private System.Guid _ResourceGroupId;
+		
+		private EntityRef<Resource> _Resource;
+		
+		private EntityRef<Resource> _Resource1;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnResourceIdChanging(System.Guid value);
+    partial void OnResourceIdChanged();
+    partial void OnResourceGroupIdChanging(System.Guid value);
+    partial void OnResourceGroupIdChanged();
+    #endregion
+		
+		public ResourceResourceGroup()
+		{
+			this._Resource = default(EntityRef<Resource>);
+			this._Resource1 = default(EntityRef<Resource>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResourceId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					if (this._Resource1.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResourceGroupId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid ResourceGroupId
+		{
+			get
+			{
+				return this._ResourceGroupId;
+			}
+			set
+			{
+				if ((this._ResourceGroupId != value))
+				{
+					if (this._Resource.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResourceGroupIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceGroupId = value;
+					this.SendPropertyChanged("ResourceGroupId");
+					this.OnResourceGroupIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Resource_ResourceResourceGroup", Storage="_Resource", ThisKey="ResourceGroupId", OtherKey="Id", IsForeignKey=true)]
+		public Resource Resource
+		{
+			get
+			{
+				return this._Resource.Entity;
+			}
+			set
+			{
+				Resource previousValue = this._Resource.Entity;
+				if (((previousValue != value) 
+							|| (this._Resource.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Resource.Entity = null;
+						previousValue.ResourceResourceGroups.Remove(this);
+					}
+					this._Resource.Entity = value;
+					if ((value != null))
+					{
+						value.ResourceResourceGroups.Add(this);
+						this._ResourceGroupId = value.Id;
+					}
+					else
+					{
+						this._ResourceGroupId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Resource");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Resource_ResourceResourceGroup1", Storage="_Resource1", ThisKey="ResourceId", OtherKey="Id", IsForeignKey=true)]
+		public Resource Resource1
+		{
+			get
+			{
+				return this._Resource1.Entity;
+			}
+			set
+			{
+				Resource previousValue = this._Resource1.Entity;
+				if (((previousValue != value) 
+							|| (this._Resource1.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Resource1.Entity = null;
+						previousValue.ResourceResourceGroups1.Remove(this);
+					}
+					this._Resource1.Entity = value;
+					if ((value != null))
+					{
+						value.ResourceResourceGroups1.Add(this);
+						this._ResourceId = value.Id;
+					}
+					else
+					{
+						this._ResourceId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Resource1");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.ClientLog")]
+	public partial class ClientLog : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.DateTime _Timestamp;
+		
+		private System.Guid _ResourceId;
+		
+		private string _Message;
+		
+		private string _Exception;
+		
+		private EntityRef<Resource> _Resource;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnTimestampChanging(System.DateTime value);
+    partial void OnTimestampChanged();
+    partial void OnResourceIdChanging(System.Guid value);
+    partial void OnResourceIdChanged();
+    partial void OnMessageChanging(string value);
+    partial void OnMessageChanged();
+    partial void OnExceptionChanging(string value);
+    partial void OnExceptionChanged();
+    #endregion
+		
+		public ClientLog()
+		{
+			this._Resource = default(EntityRef<Resource>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Timestamp", DbType="DateTime NOT NULL", IsPrimaryKey=true)]
+		public System.DateTime Timestamp
+		{
+			get
+			{
+				return this._Timestamp;
+			}
+			set
+			{
+				if ((this._Timestamp != value))
+				{
+					this.OnTimestampChanging(value);
+					this.SendPropertyChanging();
+					this._Timestamp = value;
+					this.SendPropertyChanged("Timestamp");
+					this.OnTimestampChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResourceId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					if (this._Resource.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Message", DbType="NVarChar(MAX)")]
+		public string Message
+		{
+			get
+			{
+				return this._Message;
+			}
+			set
+			{
+				if ((this._Message != value))
+				{
+					this.OnMessageChanging(value);
+					this.SendPropertyChanging();
+					this._Message = value;
+					this.SendPropertyChanged("Message");
+					this.OnMessageChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Exception", DbType="NVarChar(MAX)")]
+		public string Exception
+		{
+			get
+			{
+				return this._Exception;
+			}
+			set
+			{
+				if ((this._Exception != value))
+				{
+					this.OnExceptionChanging(value);
+					this.SendPropertyChanging();
+					this._Exception = value;
+					this.SendPropertyChanged("Exception");
+					this.OnExceptionChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Resource_ClientLog", Storage="_Resource", ThisKey="ResourceId", OtherKey="Id", IsForeignKey=true)]
+		public Resource Resource
+		{
+			get
+			{
+				return this._Resource.Entity;
+			}
+			set
+			{
+				Resource previousValue = this._Resource.Entity;
+				if (((previousValue != value) 
+							|| (this._Resource.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Resource.Entity = null;
+						previousValue.ClientLogs.Remove(this);
+					}
+					this._Resource.Entity = value;
+					if ((value != null))
+					{
+						value.ClientLogs.Add(this);
+						this._ResourceId = value.Id;
+					}
+					else
+					{
+						this._ResourceId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Resource");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.[User]")]
+	public partial class User : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _Id;
+		
+		private string _FullName;
+		
+		private EntitySet<UserUserGroup> _UserUserGroups;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnIdChanging(System.Guid value);
+    partial void OnIdChanged();
+    partial void OnFullNameChanging(string value);
+    partial void OnFullNameChanged();
+    #endregion
+		
+		public User()
+		{
+			this._UserUserGroups = new EntitySet<UserUserGroup>(new Action<UserUserGroup>(this.attach_UserUserGroups), new Action<UserUserGroup>(this.detach_UserUserGroups));
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid Id
+		{
+			get
+			{
+				return this._Id;
+			}
+			set
+			{
+				if ((this._Id != value))
+				{
+					this.OnIdChanging(value);
+					this.SendPropertyChanging();
+					this._Id = value;
+					this.SendPropertyChanged("Id");
+					this.OnIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_FullName", DbType="NVarChar(MAX)")]
+		public string FullName
+		{
+			get
+			{
+				return this._FullName;
+			}
+			set
+			{
+				if ((this._FullName != value))
+				{
+					this.OnFullNameChanging(value);
+					this.SendPropertyChanging();
+					this._FullName = value;
+					this.SendPropertyChanged("FullName");
+					this.OnFullNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="User_UserUserGroup", Storage="_UserUserGroups", ThisKey="Id", OtherKey="UserId")]
+		public EntitySet<UserUserGroup> UserUserGroups
+		{
+			get
+			{
+				return this._UserUserGroups;
+			}
+			set
+			{
+				this._UserUserGroups.Assign(value);
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_UserUserGroups(UserUserGroup entity)
+		{
+			this.SendPropertyChanging();
+			entity.User = this;
+		}
+		
+		private void detach_UserUserGroups(UserUserGroup entity)
+		{
+			this.SendPropertyChanging();
+			entity.User = null;
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.UserGroup")]
+	public partial class UserGroup : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _Id;
+		
+		private string _Name;
+		
+		private System.Nullable<System.Guid> _ParentUserGroup;
+		
+		private EntitySet<UserUserGroup> _UserUserGroups;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnIdChanging(System.Guid value);
+    partial void OnIdChanged();
+    partial void OnNameChanging(string value);
+    partial void OnNameChanged();
+    partial void OnParentUserGroupChanging(System.Nullable<System.Guid> value);
+    partial void OnParentUserGroupChanged();
+    #endregion
+		
+		public UserGroup()
+		{
+			this._UserUserGroups = new EntitySet<UserUserGroup>(new Action<UserUserGroup>(this.attach_UserUserGroups), new Action<UserUserGroup>(this.detach_UserUserGroups));
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid Id
+		{
+			get
+			{
+				return this._Id;
+			}
+			set
+			{
+				if ((this._Id != value))
+				{
+					this.OnIdChanging(value);
+					this.SendPropertyChanging();
+					this._Id = value;
+					this.SendPropertyChanged("Id");
+					this.OnIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="NVarChar(MAX) NOT NULL", CanBeNull=false)]
+		public string Name
+		{
+			get
+			{
+				return this._Name;
+			}
+			set
+			{
+				if ((this._Name != value))
+				{
+					this.OnNameChanging(value);
+					this.SendPropertyChanging();
+					this._Name = value;
+					this.SendPropertyChanged("Name");
+					this.OnNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ParentUserGroup", DbType="UniqueIdentifier")]
+		public System.Nullable<System.Guid> ParentUserGroup
+		{
+			get
+			{
+				return this._ParentUserGroup;
+			}
+			set
+			{
+				if ((this._ParentUserGroup != value))
+				{
+					this.OnParentUserGroupChanging(value);
+					this.SendPropertyChanging();
+					this._ParentUserGroup = value;
+					this.SendPropertyChanged("ParentUserGroup");
+					this.OnParentUserGroupChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="UserGroup_UserUserGroup", Storage="_UserUserGroups", ThisKey="Id", OtherKey="UserGroupId")]
+		public EntitySet<UserUserGroup> UserUserGroups
+		{
+			get
+			{
+				return this._UserUserGroups;
+			}
+			set
+			{
+				this._UserUserGroups.Assign(value);
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_UserUserGroups(UserUserGroup entity)
+		{
+			this.SendPropertyChanging();
+			entity.UserGroup = this;
+		}
+		
+		private void detach_UserUserGroups(UserUserGroup entity)
+		{
+			this.SendPropertyChanging();
+			entity.UserGroup = null;
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.UserUserGroup")]
+	public partial class UserUserGroup : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _UserId;
+		
+		private System.Guid _UserGroupId;
+		
+		private EntityRef<User> _User;
+		
+		private EntityRef<UserGroup> _UserGroup;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnUserIdChanging(System.Guid value);
+    partial void OnUserIdChanged();
+    partial void OnUserGroupIdChanging(System.Guid value);
+    partial void OnUserGroupIdChanged();
+    #endregion
+		
+		public UserUserGroup()
+		{
+			this._User = default(EntityRef<User>);
+			this._UserGroup = default(EntityRef<UserGroup>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid UserId
+		{
+			get
+			{
+				return this._UserId;
+			}
+			set
+			{
+				if ((this._UserId != value))
+				{
+					if (this._User.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnUserIdChanging(value);
+					this.SendPropertyChanging();
+					this._UserId = value;
+					this.SendPropertyChanged("UserId");
+					this.OnUserIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserGroupId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid UserGroupId
+		{
+			get
+			{
+				return this._UserGroupId;
+			}
+			set
+			{
+				if ((this._UserGroupId != value))
+				{
+					if (this._UserGroup.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnUserGroupIdChanging(value);
+					this.SendPropertyChanging();
+					this._UserGroupId = value;
+					this.SendPropertyChanged("UserGroupId");
+					this.OnUserGroupIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="User_UserUserGroup", Storage="_User", ThisKey="UserId", OtherKey="Id", IsForeignKey=true)]
+		public User User
+		{
+			get
+			{
+				return this._User.Entity;
+			}
+			set
+			{
+				User previousValue = this._User.Entity;
+				if (((previousValue != value) 
+							|| (this._User.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._User.Entity = null;
+						previousValue.UserUserGroups.Remove(this);
+					}
+					this._User.Entity = value;
+					if ((value != null))
+					{
+						value.UserUserGroups.Add(this);
+						this._UserId = value.Id;
+					}
+					else
+					{
+						this._UserId = default(System.Guid);
+					}
+					this.SendPropertyChanged("User");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="UserGroup_UserUserGroup", Storage="_UserGroup", ThisKey="UserGroupId", OtherKey="Id", IsForeignKey=true)]
+		public UserGroup UserGroup
+		{
+			get
+			{
+				return this._UserGroup.Entity;
+			}
+			set
+			{
+				UserGroup previousValue = this._UserGroup.Entity;
+				if (((previousValue != value) 
+							|| (this._UserGroup.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._UserGroup.Entity = null;
+						previousValue.UserUserGroups.Remove(this);
+					}
+					this._UserGroup.Entity = value;
+					if ((value != null))
+					{
+						value.UserUserGroups.Add(this);
+						this._UserGroupId = value.Id;
+					}
+					else
+					{
+						this._UserGroupId = default(System.Guid);
+					}
+					this.SendPropertyChanged("UserGroup");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+}
+#pragma warning restore 1591
Index: branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess.csproj
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess.csproj	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess.csproj	(revision 6815)
@@ -0,0 +1,118 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{0F652437-998A-4EAB-8BF1-444B5FE8CE97}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Services.Access.DataAccess</RootNamespace>
+    <AssemblyName>HeuristicLab.Services.Access.DataAccess</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Data.Linq" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ASPNETAuthentication.designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>ASPNETAuthentication.dbml</DependentUpon>
+    </Compile>
+    <Compile Include="ClientManagement.designer.cs">
+      <DependentUpon>ClientManagement.dbml</DependentUpon>
+      <DesignTime>True</DesignTime>
+      <AutoGen>True</AutoGen>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+      <DependentUpon>Settings.settings</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config" />
+    <None Include="ASPNETAuthentication.dbml">
+      <Generator>MSLinqToSQLGenerator</Generator>
+      <LastGenOutput>ASPNETAuthentication.designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="ClientManagement.dbml">
+      <Generator>MSLinqToSQLGenerator</Generator>
+      <LastGenOutput>ClientManagement.designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{3259AA49-8AA1-44D3-9025-A0B520596A8C}" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="ASPNETAuthentication.dbml.layout">
+      <DependentUpon>ASPNETAuthentication.dbml</DependentUpon>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="ClientManagement.dbml.layout">
+      <DependentUpon>ClientManagement.dbml</DependentUpon>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="SQL Scripts\Create ClientManagement.sql" />
+    <Content Include="SQL Scripts\Initialize ClientManagement.sql" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/Properties/AssemblyInfo.frame	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/Properties/AssemblyInfo.frame	(revision 6815)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Services.Access.DataAccess")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("7032d7ba-4799-4708-803d-9f6cb3feed35")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.5.0")]
+[assembly: AssemblyFileVersion("3.3.5.$WCREV$")]
Index: branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/Properties/Settings.Designer.cs
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/Properties/Settings.Designer.cs	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/Properties/Settings.Designer.cs	(revision 6815)
@@ -0,0 +1,48 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.237
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Services.Access.DataAccess.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
+        [global::System.Configuration.DefaultSettingValueAttribute("Data Source=.;Initial Catalog=HeuristicLab.Authentication;Integrated Security=Tru" +
+            "e")]
+        public string HeuristicLab_AuthenticationConnectionString {
+            get {
+                return ((string)(this["HeuristicLab_AuthenticationConnectionString"]));
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
+        [global::System.Configuration.DefaultSettingValueAttribute("Data Source=.;Initial Catalog=HeuristicLab.ClientManagement;Integrated Security=T" +
+            "rue")]
+        public string HeuristicLab_ClientManagementConnectionString {
+            get {
+                return ((string)(this["HeuristicLab_ClientManagementConnectionString"]));
+            }
+        }
+    }
+}
Index: branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/Properties/Settings.settings
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/Properties/Settings.settings	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/Properties/Settings.settings	(revision 6815)
@@ -0,0 +1,22 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Services.Access.DataAccess.Properties" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="HeuristicLab_AuthenticationConnectionString" Type="(Connection string)" Scope="Application">
+      <DesignTimeValue Profile="(Default)">&lt;?xml version="1.0" encoding="utf-16"?&gt;
+&lt;SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
+  &lt;ConnectionString&gt;Data Source=.;Initial Catalog=HeuristicLab.Authentication;Integrated Security=True&lt;/ConnectionString&gt;
+  &lt;ProviderName&gt;System.Data.SqlClient&lt;/ProviderName&gt;
+&lt;/SerializableConnectionString&gt;</DesignTimeValue>
+      <Value Profile="(Default)">Data Source=.;Initial Catalog=HeuristicLab.Authentication;Integrated Security=True</Value>
+    </Setting>
+    <Setting Name="HeuristicLab_ClientManagementConnectionString" Type="(Connection string)" Scope="Application">
+      <DesignTimeValue Profile="(Default)">&lt;?xml version="1.0" encoding="utf-16"?&gt;
+&lt;SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
+  &lt;ConnectionString&gt;Data Source=.;Initial Catalog=HeuristicLab.ClientManagement;Integrated Security=True&lt;/ConnectionString&gt;
+  &lt;ProviderName&gt;System.Data.SqlClient&lt;/ProviderName&gt;
+&lt;/SerializableConnectionString&gt;</DesignTimeValue>
+      <Value Profile="(Default)">Data Source=.;Initial Catalog=HeuristicLab.ClientManagement;Integrated Security=True</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>
Index: branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/SQL Scripts/Create ClientManagement.sql
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/SQL Scripts/Create ClientManagement.sql	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/SQL Scripts/Create ClientManagement.sql	(revision 6815)
@@ -0,0 +1,104 @@
+USE [master]
+GO
+
+/****** Object:  Database [HeuristicLab.ClientManagement]    Script Date: 09/19/2011 13:21:28 ******/
+CREATE DATABASE [HeuristicLab.ClientManagement] ON  PRIMARY 
+( NAME = N'HeuristicLab.ClientManagement', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\HeuristicLab.ClientManagement.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
+ LOG ON 
+( NAME = N'HeuristicLab.ClientManagement_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\HeuristicLab.ClientManagement_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET COMPATIBILITY_LEVEL = 100
+GO
+
+IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
+begin
+EXEC [HeuristicLab.ClientManagement].[dbo].[sp_fulltext_database] @action = 'enable'
+end
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET ANSI_NULL_DEFAULT OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET ANSI_NULLS OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET ANSI_PADDING OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET ANSI_WARNINGS OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET ARITHABORT OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET AUTO_CLOSE OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET AUTO_CREATE_STATISTICS ON 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET AUTO_SHRINK OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET AUTO_UPDATE_STATISTICS ON 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET CURSOR_CLOSE_ON_COMMIT OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET CURSOR_DEFAULT  GLOBAL 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET CONCAT_NULL_YIELDS_NULL OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET NUMERIC_ROUNDABORT OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET QUOTED_IDENTIFIER OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET RECURSIVE_TRIGGERS OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET  DISABLE_BROKER 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET DATE_CORRELATION_OPTIMIZATION OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET TRUSTWORTHY OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET ALLOW_SNAPSHOT_ISOLATION OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET PARAMETERIZATION SIMPLE 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET READ_COMMITTED_SNAPSHOT OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET HONOR_BROKER_PRIORITY OFF 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET  READ_WRITE 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET RECOVERY FULL 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET  MULTI_USER 
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET PAGE_VERIFY CHECKSUM  
+GO
+
+ALTER DATABASE [HeuristicLab.ClientManagement] SET DB_CHAINING OFF 
+GO
+
+
Index: branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/SQL Scripts/Initialize ClientManagement.sql
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/SQL Scripts/Initialize ClientManagement.sql	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/SQL Scripts/Initialize ClientManagement.sql	(revision 6815)
@@ -0,0 +1,96 @@
+USE [HeuristicLab.ClientManagement]
+GO
+
+/****** Object:  Table [dbo].[Resource]    Script Date: 09/19/2011 13:24:05 ******/
+SET ANSI_NULLS ON
+GO
+
+SET QUOTED_IDENTIFIER ON
+GO
+
+CREATE TABLE [dbo].[Resource](
+	[Id] [uniqueidentifier] NOT NULL,
+	[Name] [nvarchar](max) NOT NULL,
+	[Description] [nvarchar](max) NULL,
+	[Type] [nvarchar](max) NOT NULL,
+	[ProcessorType] [nvarchar](max) NULL,
+	[NumberOfCores] [int](max) NULL,
+	[IPAddress] [nvarchar](max) NULL,
+	[MemorySize] [int](max) NULL,
+	[OperatingSystem] [nvarchar](max) NULL,
+	[Country] [nvarchar](max) NULL,
+	[HeuristicLabVersion] [nvarchar](max) NULL,
+ CONSTRAINT [PK_Resource] PRIMARY KEY CLUSTERED 
+(
+	[Id] ASC
+)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
+) ON [PRIMARY]
+
+GO
+
+/****** Object:  Table [dbo].[ResourceResourceGroup]    Script Date: 09/19/2011 13:24:08 ******/
+SET ANSI_NULLS ON
+GO
+
+SET QUOTED_IDENTIFIER ON
+GO
+
+CREATE TABLE [dbo].[ResourceResourceGroup](
+	[ResourceId] [uniqueidentifier] NOT NULL,
+	[ResourceGroupId] [uniqueidentifier] NOT NULL,
+ CONSTRAINT [PK_ResourceResourceGroup_Id] PRIMARY KEY CLUSTERED 
+(
+	[ResourceId] ASC,
+	[ResourceGroupId] ASC
+)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
+) ON [PRIMARY]
+
+GO
+
+ALTER TABLE [dbo].[ResourceResourceGroup]  WITH CHECK ADD  CONSTRAINT [FK_ResourceResourceGroup_ResourceGroupId] FOREIGN KEY([ResourceGroupId])
+REFERENCES [dbo].[Resource] ([Id])
+GO
+
+ALTER TABLE [dbo].[ResourceResourceGroup] CHECK CONSTRAINT [FK_ResourceResourceGroup_ResourceGroupId]
+GO
+
+ALTER TABLE [dbo].[ResourceResourceGroup]  WITH CHECK ADD  CONSTRAINT [FK_ResourceResourceGroup_ResourceId] FOREIGN KEY([ResourceId])
+REFERENCES [dbo].[Resource] ([Id])
+GO
+
+ALTER TABLE [dbo].[ResourceResourceGroup] CHECK CONSTRAINT [FK_ResourceResourceGroup_ResourceId]
+GO
+
+/****** Object:  Table [dbo].[ClientLog]    Script Date: 09/19/2011 13:24:11 ******/
+SET ANSI_NULLS ON
+GO
+
+SET QUOTED_IDENTIFIER ON
+GO
+
+CREATE TABLE [dbo].[ClientLog](
+	[Timestamp] [datetime] NOT NULL,
+	[ResourceId] [uniqueidentifier] NOT NULL,
+	[Message] [nvarchar](max) NULL,
+	[Exception] [nvarchar](max) NULL,
+ CONSTRAINT [PK_ClientLog] PRIMARY KEY CLUSTERED 
+(
+	[Timestamp] ASC,
+	[ResourceId] ASC
+)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
+) ON [PRIMARY]
+
+GO
+
+ALTER TABLE [dbo].[ClientLog]  WITH CHECK ADD  CONSTRAINT [FK_ClientLog_Resource] FOREIGN KEY([ResourceId])
+REFERENCES [dbo].[Resource] ([Id])
+GO
+
+ALTER TABLE [dbo].[ClientLog] CHECK CONSTRAINT [FK_ClientLog_Resource]
+GO
+
+
+
+
+
+
Index: branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/app.config
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/app.config	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access.DataAccess/3.3/app.config	(revision 6815)
@@ -0,0 +1,13 @@
+﻿<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <configSections>
+    </configSections>
+    <connectionStrings>
+        <add name="HeuristicLab.Services.Directoy.DataAccess.Properties.Settings.HeuristicLab_AuthenticationConnectionString"
+            connectionString="Data Source=.;Initial Catalog=HeuristicLab.Authentication;Integrated Security=True"
+            providerName="System.Data.SqlClient" />       
+        <add name="HeuristicLab.Services.Access.DataAccess.Properties.Settings.HeuristicLab_ClientManagementConnectionString"
+            connectionString="Data Source=.;Initial Catalog=HeuristicLab.ClientManagement;Integrated Security=True"
+            providerName="System.Data.SqlClient" />
+    </connectionStrings>
+</configuration>
Index: branches/ClientUserManagement/HeuristicLab.Services.Access.sln
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access.sln	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access.sln	(revision 6815)
@@ -0,0 +1,59 @@
+﻿
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{FAC56B1A-B544-430E-931B-68519E07E8AF}"
+	ProjectSection(SolutionItems) = preProject
+		PreBuildEvent.cmd = PreBuildEvent.cmd
+	EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Clients.Access", "HeuristicLab.Clients.UserManagement\3.3\HeuristicLab.Clients.Access.csproj", "{494F87F4-0F25-4D33-A382-10CDB2174D48}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.Access.DataAccess", "HeuristicLab.Services.Access.DataAccess\3.3\HeuristicLab.Services.Access.DataAccess.csproj", "{0F652437-998A-4EAB-8BF1-444B5FE8CE97}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.Access", "HeuristicLab.Services.Access\3.3\HeuristicLab.Services.Access.csproj", "{9FAC0B23-2730-452A-9BA0-D7CA1746C541}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Debug|Mixed Platforms = Debug|Mixed Platforms
+		Debug|x86 = Debug|x86
+		Release|Any CPU = Release|Any CPU
+		Release|Mixed Platforms = Release|Mixed Platforms
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{494F87F4-0F25-4D33-A382-10CDB2174D48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{494F87F4-0F25-4D33-A382-10CDB2174D48}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{494F87F4-0F25-4D33-A382-10CDB2174D48}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{494F87F4-0F25-4D33-A382-10CDB2174D48}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{494F87F4-0F25-4D33-A382-10CDB2174D48}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{494F87F4-0F25-4D33-A382-10CDB2174D48}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{494F87F4-0F25-4D33-A382-10CDB2174D48}.Release|Any CPU.Build.0 = Release|Any CPU
+		{494F87F4-0F25-4D33-A382-10CDB2174D48}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{494F87F4-0F25-4D33-A382-10CDB2174D48}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{494F87F4-0F25-4D33-A382-10CDB2174D48}.Release|x86.ActiveCfg = Release|Any CPU
+		{0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Release|Any CPU.Build.0 = Release|Any CPU
+		{0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{0F652437-998A-4EAB-8BF1-444B5FE8CE97}.Release|x86.ActiveCfg = Release|Any CPU
+		{9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Release|Any CPU.Build.0 = Release|Any CPU
+		{9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{9FAC0B23-2730-452A-9BA0-D7CA1746C541}.Release|x86.ActiveCfg = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
Index: branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/AccessService.cs
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/AccessService.cs	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/AccessService.cs	(revision 6815)
@@ -0,0 +1,159 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.ServiceModel;
+
+namespace HeuristicLab.Services.Access {
+  [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
+  public class AccessService : IAccessService {
+    #region IAccessService Members
+
+    public bool ClientExists(System.Guid id) {
+      throw new System.NotImplementedException();
+    }
+
+    public DataTransfer.Client GetClient(System.Guid id) {
+      throw new System.NotImplementedException();
+    }
+
+    public System.Collections.Generic.IEnumerable<DataTransfer.Client> GetClients() {
+      throw new System.NotImplementedException();
+    }
+
+    public System.Guid AddClient(DataTransfer.Client client) {
+      throw new System.NotImplementedException();
+    }
+
+    public void UpdateClient(DataTransfer.Client client) {
+      throw new System.NotImplementedException();
+    }
+
+    public void DeleteClient(DataTransfer.Client client) {
+      throw new System.NotImplementedException();
+    }
+
+    public DataTransfer.ClientLog GetLastClientLog(System.Guid clientId) {
+      throw new System.NotImplementedException();
+    }
+
+    public System.Collections.Generic.IEnumerable<DataTransfer.ClientLog> GetClientLogs(System.Guid clientId) {
+      throw new System.NotImplementedException();
+    }
+
+    public System.Collections.Generic.IEnumerable<DataTransfer.ClientLog> GetClientLogsSince(System.DateTime startDate) {
+      throw new System.NotImplementedException();
+    }
+
+    public void AddClientLogEntry(DataTransfer.ClientLog log) {
+      throw new System.NotImplementedException();
+    }
+
+    public void DeleteClientLogEntry(DataTransfer.ClientLog log) {
+      throw new System.NotImplementedException();
+    }
+
+    public System.Collections.Generic.IEnumerable<DataTransfer.ClientGroup> GetClientGroups() {
+      throw new System.NotImplementedException();
+    }
+
+    public System.Guid AddClientGroup(DataTransfer.ClientGroup group) {
+      throw new System.NotImplementedException();
+    }
+
+    public void UpdateClientGroup(DataTransfer.ClientGroup group) {
+      throw new System.NotImplementedException();
+    }
+
+    public void DeleteClientGroup(DataTransfer.ClientGroup group) {
+      throw new System.NotImplementedException();
+    }
+
+    public void Login() {
+      throw new System.NotImplementedException();
+    }
+
+    public System.Collections.Generic.IEnumerable<DataTransfer.User> GetUsers() {
+      throw new System.NotImplementedException();
+    }
+
+    public DataTransfer.User AddUser(DataTransfer.User user) {
+      throw new System.NotImplementedException();
+    }
+
+    public void DeleteUser(DataTransfer.User user) {
+      throw new System.NotImplementedException();
+    }
+
+    public void UpdateUser(DataTransfer.User user) {
+      throw new System.NotImplementedException();
+    }
+
+    public void AddUserToRole(DataTransfer.Role role, DataTransfer.User user) {
+      throw new System.NotImplementedException();
+    }
+
+    public void RemoveUserFromRole(DataTransfer.Role role, DataTransfer.User user) {
+      throw new System.NotImplementedException();
+    }
+
+    public void ResetPassword(DataTransfer.User user, string password) {
+      throw new System.NotImplementedException();
+    }
+
+    public System.Collections.Generic.IEnumerable<DataTransfer.Role> GetRoles() {
+      throw new System.NotImplementedException();
+    }
+
+    public DataTransfer.Role AddRole(DataTransfer.Role role) {
+      throw new System.NotImplementedException();
+    }
+
+    public void UpdateRole(DataTransfer.Role role) {
+      throw new System.NotImplementedException();
+    }
+
+    public void DeleteRole(DataTransfer.Role role) {
+      throw new System.NotImplementedException();
+    }
+
+    public System.Collections.Generic.IEnumerable<DataTransfer.Role> GetUserRoles(DataTransfer.User user) {
+      throw new System.NotImplementedException();
+    }
+
+    public System.Collections.Generic.IEnumerable<DataTransfer.UserGroup> GetUserGroups() {
+      throw new System.NotImplementedException();
+    }
+
+    public DataTransfer.UserGroup AddUserGroup(DataTransfer.UserGroup group) {
+      throw new System.NotImplementedException();
+    }
+
+    public void UpdateUserGroup(DataTransfer.UserGroup group) {
+      throw new System.NotImplementedException();
+    }
+
+    public void DeleteUserGroup(DataTransfer.UserGroup group) {
+      throw new System.NotImplementedException();
+    }
+
+    #endregion
+  }
+}
Index: branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/App.config
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/App.config	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/App.config	(revision 6815)
@@ -0,0 +1,89 @@
+<?xml version="1.0"?>
+<configuration>
+  <connectionStrings>
+    <add name="HeuristicLab.Authentication"
+         connectionString="Data Source=.;Initial Catalog=HeuristicLab.Authentication;Integrated Security=True"
+         providerName="System.Data.SqlClient"/>
+  </connectionStrings>
+  <system.web>
+    <membership defaultProvider="AspNetSqlMembershipProvider" userIsOnlineTimeWindow="20">
+      <providers>
+        <clear />
+        <add name="AspNetSqlMemberShipProvider"
+          type="System.Web.Security.SqlMembershipProvider"
+          connectionStringName="HeuristicLab.Authentication"
+          enablePasswordRetrieval="false"
+          enablePasswordReset="true"
+          requiresQuestionAndAnswer="false"
+          passwordFormat="Hashed"
+          applicationName="HeuristicLab.Authentication" />
+      </providers>
+    </membership>
+    <authentication mode="Windows" />
+    <roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider">
+      <providers>
+        <clear />
+        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+             connectionStringName="HeuristicLab.Authentication" applicationName="HeuristicLab.Authentication" />
+      </providers>
+    </roleManager>
+  </system.web>
+
+  <!-- When deploying the service library project, the content of the config file must be added to the host's 
+  app.config file. System.Configuration does not support config files for libraries. -->
+  <system.serviceModel>
+    <bindings>
+      <wsHttpBinding>
+        <binding name="DefaultWsHttpBinding" maxBufferPoolSize="10000000" maxReceivedMessageSize="200000000">
+          <readerQuotas maxDepth="1000" maxStringContentLength="16000" maxArrayLength="200000000" maxBytesPerRead="200000000" maxNameTableCharCount="16000" />
+          <security mode="Message">
+            <message clientCredentialType="UserName" />
+          </security>
+        </binding>
+      </wsHttpBinding>
+      <mexHttpBinding>
+        <binding name="DefaultMexHttpBinding" />
+      </mexHttpBinding>
+    </bindings>
+
+    <diagnostics performanceCounters="Default">
+      <!--<messageLogging logMalformedMessages="false" logMessagesAtTransportLevel="false" />-->
+    </diagnostics>
+
+    <behaviors>
+      <endpointBehaviors>
+        <behavior name="DefaultEndpointBehavior">
+          <dataContractSerializer maxItemsInObjectGraph="1000000" />
+        </behavior>
+      </endpointBehaviors>
+
+      <serviceBehaviors>
+        <behavior name="DefaultServiceBehavior">
+          <serviceMetadata httpGetEnabled="true" />
+          <serviceDebug includeExceptionDetailInFaults="true" />
+          <serviceCredentials>
+            <serviceCertificate findValue="localhost" storeLocation="LocalMachine"
+                                storeName="My" x509FindType="FindBySubjectName" />
+            <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
+                                    membershipProviderName="AspNetSqlMembershipProvider" />
+          </serviceCredentials>
+          <serviceAuthorization principalPermissionMode="UseAspNetRoles"
+                                roleProviderName="AspNetSqlRoleProvider" />
+        </behavior>
+      </serviceBehaviors>
+    </behaviors>
+
+    <services>
+      <service name="HeuristicLab.Services.Access.AccessService" behaviorConfiguration="DefaultServiceBehavior">
+        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="DefaultMexHttpBinding" contract="IMetadataExchange" />
+        <endpoint behaviorConfiguration="DefaultEndpointBehavior" binding="wsHttpBinding" bindingConfiguration="DefaultWsHttpBinding"
+                  contract="HeuristicLab.Services.Access.IAccessService" />
+        <host>
+          <baseAddresses>
+            <add baseAddress="http://localhost/AccessService" />
+          </baseAddresses>
+        </host>
+      </service>
+    </services>
+  </system.serviceModel>
+</configuration>
Index: branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/Convert.cs
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/Convert.cs	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/Convert.cs	(revision 6815)
@@ -0,0 +1,122 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using DA = HeuristicLab.Services.Access.DataAccess;
+using DT = HeuristicLab.Services.Access.DataTransfer;
+
+namespace HeuristicLab.Services.ClientManagement {
+  public static class Convert {
+
+    #region Resource
+    public static DT.Resource ToDto(DA.Resource source) {
+      return new DT.Resource() {
+        Id = source.Id,
+        Description = source.Description,
+        Name = source.Name,
+        Type = source.Type
+      };
+    }
+
+    public static DA.Resource ToEntity(DT.Resource source) {
+      return new DA.Resource() {
+        Id = source.Id,
+        Description = source.Description,
+        Name = source.Name,
+        Type = source.Type
+      };
+    }
+    #endregion
+
+    #region Group
+    public static DT.ClientGroup ToDto(DA.Group source) {
+      return new DT.ClientGroup() {
+        Id = source.Id,
+        Description = source.Description,
+        Name = source.Name,
+        Type = source.Type
+      };
+    }
+
+    public static DA.Group ToEntity(DT.ClientGroup source) {
+      return new DA.Group() {
+        Id = source.Id,
+        Description = source.Description,
+        Name = source.Name,
+        Type = source.Type
+      };
+    }
+    #endregion
+
+    #region Client
+    public static DT.Client ToDto(DA.Client source) {
+      return new DT.Client() {
+        Id = source.Id,
+        Description = source.Description,
+        Name = source.Name,
+        Type = source.Type,
+        Country = source.Country,
+        HeuristicLabVersion = source.HeuristicLabVersion,
+        IPAddress = source.IPAddress,
+        MemorySize = source.MemorySize,
+        NumberOfCores = source.NumberOfCores,
+        OperatingSystem = source.OperatingSystem,
+        ProcessorType = source.ProcessorType
+      };
+    }
+
+    public static DA.Client ToEntity(DT.Client source) {
+      return new DA.Client() {
+        Id = source.Id,
+        Description = source.Description,
+        Name = source.Name,
+        Type = source.Type,
+        Country = source.Country,
+        HeuristicLabVersion = source.HeuristicLabVersion,
+        IPAddress = source.IPAddress,
+        MemorySize = source.MemorySize,
+        NumberOfCores = source.NumberOfCores,
+        OperatingSystem = source.OperatingSystem,
+        ProcessorType = source.ProcessorType
+      };
+    }
+    #endregion
+
+    #region ClientLog
+    public static DT.ClientLog ToDto(DA.ClientLog source) {
+      return new DT.ClientLog() {
+        Timestamp = source.Timestamp,
+        ResourceId = source.ResourceId,
+        Exception = source.Exception,
+        Message = source.Message
+      };
+    }
+
+    public static DA.ClientLog ToEntity(DT.ClientLog source) {
+      return new DA.ClientLog() {
+        Timestamp = source.Timestamp,
+        ResourceId = source.ResourceId,
+        Exception = source.Exception,
+        Message = source.Message
+      };
+    }
+    #endregion
+  }
+}
Index: branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/AccessItem.cs
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/AccessItem.cs	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/AccessItem.cs	(revision 6815)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Access.DataTransfer {
+  [DataContract]
+  public class AccessItem {
+  }
+}
Index: branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/Client.cs
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/Client.cs	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/Client.cs	(revision 6815)
@@ -0,0 +1,42 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Access.DataTransfer {
+  [DataContract]
+  public class Client : Resource {
+    [DataMember]
+    public string ProcessorType { get; set; }
+    [DataMember]
+    public int? NumberOfCores { get; set; }
+    [DataMember]
+    public int? MemorySize { get; set; }
+    [DataMember]
+    public string OperatingSystem { get; set; }
+    [DataMember]
+    public string IPAddress { get; set; }
+    [DataMember]
+    public string HeuristicLabVersion { get; set; }
+    [DataMember]
+    public string Country { get; set; }
+  }
+}
Index: branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/ClientGroup.cs
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/ClientGroup.cs	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/ClientGroup.cs	(revision 6815)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+namespace HeuristicLab.Services.Access.DataTransfer {
+  [DataContract]
+  public class ClientGroup : Resource {
+  }
+}
Index: branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/ClientLog.cs
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/ClientLog.cs	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/ClientLog.cs	(revision 6815)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+namespace HeuristicLab.Services.Access.DataTransfer {
+  [DataContract]
+  public class ClientLog : AccessItem {
+    [DataMember]
+    public DateTime Timestamp { get; set; }
+    [DataMember]
+    public Guid ResourceId { get; set; }
+    [DataMember]
+    public string Message { get; set; }
+    [DataMember]
+    public string Exception { get; set; }
+  }
+}
Index: branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/Resource.cs
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/Resource.cs	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/Resource.cs	(revision 6815)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Access.DataTransfer {
+  [DataContract]
+  public class Resource : AccessItem {
+    [DataMember]
+    public Guid Id { get; set; }
+    [DataMember]
+    public string Name { get; set; }
+    [DataMember]
+    public string Description { get; set; }
+    [DataMember]
+    public string Type { get; set; }
+    [DataMember]
+    public IEnumerable<ClientGroup> ParentGroups { get; set; }
+  }
+}
Index: branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/Role.cs
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/Role.cs	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/Role.cs	(revision 6815)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* HeuristicLab 
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 
+ * 
+ * This file is part of HeuristicLab. 
+ * 
+ * HeuristicLab is free software: you can redistribute it and/or modify 
+ * it under the terms of the GNU General Public License as published by 
+ * the Free Software Foundation, either version 3 of the License, or 
+ * (at your option) any later version. 
+ * 
+ * HeuristicLab is distributed in the hope that it will be useful, 
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of 
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
+ * GNU General Public License for more details. 
+ * 
+ * You should have received a copy of the GNU General Public License 
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 
+ */
+#endregion
+
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Access.DataTransfer {
+
+  [DataContract]
+  public class Role : AccessItem {
+
+    [DataMember]
+    public string RoleName { get; set; }
+  }
+}
Index: branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/User.cs
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/User.cs	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/User.cs	(revision 6815)
@@ -0,0 +1,77 @@
+﻿#region License Information
+/* HeuristicLab 
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 
+ * 
+ * This file is part of HeuristicLab. 
+ * 
+ * HeuristicLab is free software: you can redistribute it and/or modify 
+ * it under the terms of the GNU General Public License as published by 
+ * the Free Software Foundation, either version 3 of the License, or 
+ * (at your option) any later version. 
+ * 
+ * HeuristicLab is distributed in the hope that it will be useful, 
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of 
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
+ * GNU General Public License for more details. 
+ * 
+ * You should have received a copy of the GNU General Public License 
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Access.DataTransfer {
+  [DataContract]
+  public class User : AccessItem {
+    [DataMember]
+    public string UserName { get; set; }
+
+    [DataMember]
+    public string FullName { get; set; }
+
+    [DataMember]
+    public string Comment { get; set; }
+
+    [DataMember]
+    public string Email { get; set; }
+
+    [DataMember]
+    public DateTime CreationDate { get; set; }
+
+    [DataMember]
+    public IEnumerable<UserGroup> UserGroups { get; set; }
+
+    [DataMember]
+    public DateTime LastLoginDate { get; set; }
+
+    [DataMember]
+    public DateTime LastPasswordChangedDate { get; set; }
+
+    [DataMember]
+    public DateTime LastLockoutDate { get; set; }
+
+    [DataMember]
+    public bool IsApproved { get; set; }
+
+    [DataMember]
+    public bool IsLockedOut { get; set; }
+
+    [DataMember]
+    public bool IsOnline { get; set; }
+
+    [DataMember]
+    public DateTime LastActivityDate { get; set; }
+
+    [DataMember]
+    public string PasswordQuestion { get; set; }
+
+    [DataMember]
+    public string ProviderName { get; set; }
+
+    [DataMember]
+    public object ProviderUserKey { get; set; }
+  }
+}
Index: branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/UserGroup.cs
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/UserGroup.cs	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/UserGroup.cs	(revision 6815)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab 
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 
+ * 
+ * This file is part of HeuristicLab. 
+ * 
+ * HeuristicLab is free software: you can redistribute it and/or modify 
+ * it under the terms of the GNU General Public License as published by 
+ * the Free Software Foundation, either version 3 of the License, or 
+ * (at your option) any later version. 
+ * 
+ * HeuristicLab is distributed in the hope that it will be useful, 
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of 
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
+ * GNU General Public License for more details. 
+ * 
+ * You should have received a copy of the GNU General Public License 
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Access.DataTransfer {
+  [DataContract]
+  public class UserGroup : AccessItem {
+    [DataMember]
+    public string Name { get; set; }
+
+    [DataMember]
+    public Guid ParentUserGroup { get; set; }
+  }
+}
Index: branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access.csproj
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access.csproj	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access.csproj	(revision 6815)
@@ -0,0 +1,101 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.50727</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{9FAC0B23-2730-452A-9BA0-D7CA1746C541}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Services.Access</RootNamespace>
+    <AssemblyName>HeuristicLab.Services.Access</AssemblyName>
+    <ProjectTypeGuids>{3D9AD99F-2412-4246-B90B-4EAA41C64699};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <StartArguments>/client:"WcfTestClient.exe"</StartArguments>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Runtime.Serialization" />
+    <Reference Include="System.ServiceModel" />
+    <Reference Include="System.Xml" />
+    <Reference Include="System.Xml.Linq" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Convert.cs" />
+    <Compile Include="DataTransfer\Client.cs" />
+    <Compile Include="DataTransfer\ClientLog.cs" />
+    <Compile Include="DataTransfer\AccessItem.cs" />
+    <Compile Include="DataTransfer\ClientGroup.cs" />
+    <Compile Include="DataTransfer\Resource.cs" />
+    <Compile Include="DataTransfer\Role.cs" />
+    <Compile Include="DataTransfer\User.cs" />
+    <Compile Include="DataTransfer\UserGroup.cs" />
+    <Compile Include="IAccessService.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="AccessService.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Services.Access.DataAccess\3.3\HeuristicLab.Services.Access.DataAccess.csproj">
+      <Project>{0F652437-998A-4EAB-8BF1-444B5FE8CE97}</Project>
+      <Name>HeuristicLab.Services.Access.DataAccess</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <ProjectExtensions>
+    <VisualStudio>
+      <FlavorProperties GUID="{3D9AD99F-2412-4246-B90B-4EAA41C64699}">
+        <WcfProjectProperties>
+          <AutoStart>True</AutoStart>
+        </WcfProjectProperties>
+      </FlavorProperties>
+    </VisualStudio>
+  </ProjectExtensions>
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/IAccessService.cs
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/IAccessService.cs	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/IAccessService.cs	(revision 6815)
@@ -0,0 +1,140 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Net.Security;
+using System.ServiceModel;
+using HeuristicLab.Services.Access.DataTransfer;
+
+namespace HeuristicLab.Services.Access {
+  [ServiceContract(ProtectionLevel = ProtectionLevel.EncryptAndSign)]
+  public interface IAccessService {
+
+    #region Client
+    [OperationContract]
+    bool ClientExists(Guid id);
+
+    [OperationContract]
+    Client GetClient(Guid id);
+
+    [OperationContract]
+    IEnumerable<Client> GetClients();
+
+    [OperationContract]
+    Guid AddClient(Client client);
+
+    [OperationContract]
+    void UpdateClient(Client client);
+
+    [OperationContract]
+    void DeleteClient(Client client);
+    #endregion
+
+    #region ClientLog
+    [OperationContract]
+    ClientLog GetLastClientLog(Guid clientId);
+
+    [OperationContract]
+    IEnumerable<ClientLog> GetClientLogs(Guid clientId);
+
+    [OperationContract]
+    IEnumerable<ClientLog> GetClientLogsSince(DateTime startDate);
+
+    [OperationContract]
+    void AddClientLogEntry(ClientLog log);
+
+    [OperationContract]
+    void DeleteClientLogEntry(ClientLog log);
+    #endregion
+
+    #region Client Group
+    [OperationContract]
+    IEnumerable<ClientGroup> GetClientGroups();
+
+    [OperationContract]
+    Guid AddClientGroup(ClientGroup group);
+
+    [OperationContract]
+    void UpdateClientGroup(ClientGroup group);
+
+    [OperationContract]
+    void DeleteClientGroup(ClientGroup group);
+    #endregion
+
+    #region User
+    [OperationContract]
+    void Login();
+
+    [OperationContract]
+    IEnumerable<User> GetUsers();
+
+    [OperationContract]
+    User AddUser(User user);
+
+    [OperationContract]
+    void DeleteUser(User user);
+
+    [OperationContract]
+    void UpdateUser(User user);
+
+    [OperationContract]
+    void AddUserToRole(Role role, User user);
+
+    [OperationContract]
+    void RemoveUserFromRole(Role role, User user);
+
+    [OperationContract]
+    void ResetPassword(User user, string password);
+    #endregion
+
+    #region Role
+    [OperationContract]
+    IEnumerable<Role> GetRoles();
+
+    [OperationContract]
+    Role AddRole(Role role);
+
+    [OperationContract]
+    void UpdateRole(Role role);
+
+    [OperationContract]
+    void DeleteRole(Role role);
+
+    [OperationContract]
+    IEnumerable<Role> GetUserRoles(User user);
+    #endregion
+
+    #region UserGroup
+    [OperationContract]
+    IEnumerable<UserGroup> GetUserGroups();
+
+    [OperationContract]
+    UserGroup AddUserGroup(UserGroup group);
+
+    [OperationContract]
+    void UpdateUserGroup(UserGroup group);
+
+    [OperationContract]
+    void DeleteUserGroup(UserGroup group);
+    #endregion
+  }
+}
Index: branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/Properties/AssemblyInfo.frame
===================================================================
--- branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/Properties/AssemblyInfo.frame	(revision 6815)
+++ branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/Properties/AssemblyInfo.frame	(revision 6815)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Services.Access")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("7032d7ba-4799-4708-803d-9f6cb3feed35")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.5.0")]
+[assembly: AssemblyFileVersion("3.3.5.$WCREV$")]
