Index: branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/HeuristicLab.Services.Authentication.TestClient.csproj
===================================================================
--- branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/HeuristicLab.Services.Authentication.TestClient.csproj	(revision 4588)
+++ branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/HeuristicLab.Services.Authentication.TestClient.csproj	(revision 4590)
@@ -38,5 +38,7 @@
     <Reference Include="System.Core" />
     <Reference Include="System.Data.Services.Client" />
+    <Reference Include="System.Drawing" />
     <Reference Include="System.ServiceModel" />
+    <Reference Include="System.Windows.Forms" />
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
@@ -46,6 +48,24 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="RoleDetail.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="RoleDetail.Designer.cs">
+      <DependentUpon>RoleDetail.cs</DependentUpon>
+    </Compile>
     <Compile Include="TestClient.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="UserDetail.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="UserDetail.Designer.cs">
+      <DependentUpon>UserDetail.cs</DependentUpon>
+    </Compile>
+    <Compile Include="UserManagement.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="UserManagement.Designer.cs">
+      <DependentUpon>UserManagement.cs</DependentUpon>
+    </Compile>
   </ItemGroup>
   <ItemGroup>
@@ -59,4 +79,19 @@
     </ProjectReference>
   </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="RoleDetail.resx">
+      <DependentUpon>RoleDetail.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="UserDetail.resx">
+      <DependentUpon>UserDetail.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="UserManagement.resx">
+      <DependentUpon>UserManagement.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Properties\DataSources\HeuristicLab.Services.Authentication.DataTransfer.Role.datasource" />
+    <None Include="Properties\DataSources\HeuristicLab.Services.Authentication.DataTransfer.User.datasource" />
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
Index: branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/Properties/DataSources/HeuristicLab.Services.Authentication.DataTransfer.Role.datasource
===================================================================
--- branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/Properties/DataSources/HeuristicLab.Services.Authentication.DataTransfer.Role.datasource	(revision 4590)
+++ branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/Properties/DataSources/HeuristicLab.Services.Authentication.DataTransfer.Role.datasource	(revision 4590)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="Role" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Services.Authentication.DataTransfer.Role, HeuristicLab.Services.Authentication.DataTransfer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
Index: branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/Properties/DataSources/HeuristicLab.Services.Authentication.DataTransfer.User.datasource
===================================================================
--- branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/Properties/DataSources/HeuristicLab.Services.Authentication.DataTransfer.User.datasource	(revision 4590)
+++ branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/Properties/DataSources/HeuristicLab.Services.Authentication.DataTransfer.User.datasource	(revision 4590)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="User" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Services.Authentication.DataTransfer.User, HeuristicLab.Services.Authentication.DataTransfer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
Index: branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/RoleDetail.Designer.cs
===================================================================
--- branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/RoleDetail.Designer.cs	(revision 4590)
+++ branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/RoleDetail.Designer.cs	(revision 4590)
@@ -0,0 +1,185 @@
+﻿namespace HeuristicLab.Services.Authentication.TestClient
+{
+    partial class RoleDetail
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            System.Windows.Forms.Label applicationIdLabel;
+            System.Windows.Forms.Label descriptionLabel;
+            System.Windows.Forms.Label loweredRoleNameLabel;
+            System.Windows.Forms.Label roleIdLabel;
+            System.Windows.Forms.Label roleNameLabel;
+            this.bsRole = new System.Windows.Forms.BindingSource(this.components);
+            this.applicationIdTextBox = new System.Windows.Forms.TextBox();
+            this.descriptionTextBox = new System.Windows.Forms.TextBox();
+            this.loweredRoleNameTextBox = new System.Windows.Forms.TextBox();
+            this.roleIdTextBox = new System.Windows.Forms.TextBox();
+            this.roleNameTextBox = new System.Windows.Forms.TextBox();
+            this.btnSave = new System.Windows.Forms.Button();
+            applicationIdLabel = new System.Windows.Forms.Label();
+            descriptionLabel = new System.Windows.Forms.Label();
+            loweredRoleNameLabel = new System.Windows.Forms.Label();
+            roleIdLabel = new System.Windows.Forms.Label();
+            roleNameLabel = new System.Windows.Forms.Label();
+            ((System.ComponentModel.ISupportInitialize)(this.bsRole)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // bsRole
+            // 
+            this.bsRole.DataSource = typeof(HeuristicLab.Services.Authentication.DataTransfer.Role);
+            // 
+            // applicationIdLabel
+            // 
+            applicationIdLabel.AutoSize = true;
+            applicationIdLabel.Location = new System.Drawing.Point(12, 9);
+            applicationIdLabel.Name = "applicationIdLabel";
+            applicationIdLabel.Size = new System.Drawing.Size(74, 13);
+            applicationIdLabel.TabIndex = 1;
+            applicationIdLabel.Text = "Application Id:";
+            // 
+            // applicationIdTextBox
+            // 
+            this.applicationIdTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.bsRole, "ApplicationId", true));
+            this.applicationIdTextBox.Location = new System.Drawing.Point(125, 6);
+            this.applicationIdTextBox.Name = "applicationIdTextBox";
+            this.applicationIdTextBox.Size = new System.Drawing.Size(100, 20);
+            this.applicationIdTextBox.TabIndex = 2;
+            // 
+            // descriptionLabel
+            // 
+            descriptionLabel.AutoSize = true;
+            descriptionLabel.Location = new System.Drawing.Point(12, 35);
+            descriptionLabel.Name = "descriptionLabel";
+            descriptionLabel.Size = new System.Drawing.Size(63, 13);
+            descriptionLabel.TabIndex = 3;
+            descriptionLabel.Text = "Description:";
+            // 
+            // descriptionTextBox
+            // 
+            this.descriptionTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.bsRole, "Description", true));
+            this.descriptionTextBox.Location = new System.Drawing.Point(125, 32);
+            this.descriptionTextBox.Name = "descriptionTextBox";
+            this.descriptionTextBox.Size = new System.Drawing.Size(100, 20);
+            this.descriptionTextBox.TabIndex = 4;
+            // 
+            // loweredRoleNameLabel
+            // 
+            loweredRoleNameLabel.AutoSize = true;
+            loweredRoleNameLabel.Location = new System.Drawing.Point(12, 61);
+            loweredRoleNameLabel.Name = "loweredRoleNameLabel";
+            loweredRoleNameLabel.Size = new System.Drawing.Size(107, 13);
+            loweredRoleNameLabel.TabIndex = 5;
+            loweredRoleNameLabel.Text = "Lowered Role Name:";
+            // 
+            // loweredRoleNameTextBox
+            // 
+            this.loweredRoleNameTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.bsRole, "LoweredRoleName", true));
+            this.loweredRoleNameTextBox.Location = new System.Drawing.Point(125, 58);
+            this.loweredRoleNameTextBox.Name = "loweredRoleNameTextBox";
+            this.loweredRoleNameTextBox.Size = new System.Drawing.Size(100, 20);
+            this.loweredRoleNameTextBox.TabIndex = 6;
+            // 
+            // roleIdLabel
+            // 
+            roleIdLabel.AutoSize = true;
+            roleIdLabel.Location = new System.Drawing.Point(12, 87);
+            roleIdLabel.Name = "roleIdLabel";
+            roleIdLabel.Size = new System.Drawing.Size(44, 13);
+            roleIdLabel.TabIndex = 7;
+            roleIdLabel.Text = "Role Id:";
+            // 
+            // roleIdTextBox
+            // 
+            this.roleIdTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.bsRole, "RoleId", true));
+            this.roleIdTextBox.Location = new System.Drawing.Point(125, 84);
+            this.roleIdTextBox.Name = "roleIdTextBox";
+            this.roleIdTextBox.Size = new System.Drawing.Size(100, 20);
+            this.roleIdTextBox.TabIndex = 8;
+            // 
+            // roleNameLabel
+            // 
+            roleNameLabel.AutoSize = true;
+            roleNameLabel.Location = new System.Drawing.Point(12, 113);
+            roleNameLabel.Name = "roleNameLabel";
+            roleNameLabel.Size = new System.Drawing.Size(63, 13);
+            roleNameLabel.TabIndex = 9;
+            roleNameLabel.Text = "Role Name:";
+            // 
+            // roleNameTextBox
+            // 
+            this.roleNameTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.bsRole, "RoleName", true));
+            this.roleNameTextBox.Location = new System.Drawing.Point(125, 110);
+            this.roleNameTextBox.Name = "roleNameTextBox";
+            this.roleNameTextBox.Size = new System.Drawing.Size(100, 20);
+            this.roleNameTextBox.TabIndex = 10;
+            // 
+            // btnSave
+            // 
+            this.btnSave.Location = new System.Drawing.Point(15, 141);
+            this.btnSave.Name = "btnSave";
+            this.btnSave.Size = new System.Drawing.Size(75, 23);
+            this.btnSave.TabIndex = 11;
+            this.btnSave.Text = "Save";
+            this.btnSave.UseVisualStyleBackColor = true;
+            this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
+            // 
+            // RoleDetail
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(409, 238);
+            this.Controls.Add(this.btnSave);
+            this.Controls.Add(applicationIdLabel);
+            this.Controls.Add(this.applicationIdTextBox);
+            this.Controls.Add(descriptionLabel);
+            this.Controls.Add(this.descriptionTextBox);
+            this.Controls.Add(loweredRoleNameLabel);
+            this.Controls.Add(this.loweredRoleNameTextBox);
+            this.Controls.Add(roleIdLabel);
+            this.Controls.Add(this.roleIdTextBox);
+            this.Controls.Add(roleNameLabel);
+            this.Controls.Add(this.roleNameTextBox);
+            this.Name = "RoleDetail";
+            this.Text = "RoleDetail";
+            ((System.ComponentModel.ISupportInitialize)(this.bsRole)).EndInit();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.BindingSource bsRole;
+        private System.Windows.Forms.TextBox applicationIdTextBox;
+        private System.Windows.Forms.TextBox descriptionTextBox;
+        private System.Windows.Forms.TextBox loweredRoleNameTextBox;
+        private System.Windows.Forms.TextBox roleIdTextBox;
+        private System.Windows.Forms.TextBox roleNameTextBox;
+        private System.Windows.Forms.Button btnSave;
+    }
+}
Index: branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/RoleDetail.cs
===================================================================
--- branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/RoleDetail.cs	(revision 4590)
+++ branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/RoleDetail.cs	(revision 4590)
@@ -0,0 +1,62 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Services.Authentication.DataTransfer;
+
+namespace HeuristicLab.Services.Authentication.TestClient
+{
+
+    public enum RoleDetailMode
+    {
+        Insert,
+        Update
+    }
+
+    public partial class RoleDetail : Form
+    {
+
+        private RoleDetailMode mode;
+        private AuthenticationService service;
+        private Role role;
+
+        public RoleDetail(RoleDetailMode mode, AuthenticationService service,Role role)
+        {
+            InitializeComponent();
+            
+            this.mode = mode;
+            this.service = service;
+
+            if (role == null)
+            {
+                role = new Role();
+            }
+
+            this.role = role;
+            this.bsRole.DataSource = role;
+        }
+
+
+        private void btnSave_Click(object sender, EventArgs e)
+        {
+            if (mode == RoleDetailMode.Insert)
+            {
+                if (this.service.InsertRole(role))
+                {
+                    this.Close();
+                }
+            }
+            else if (mode == RoleDetailMode.Update)
+            {
+                if(this.service.UpdateRole(role)){
+                    this.Close();
+                }
+            }
+           
+        }
+    }
+}
Index: branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/RoleDetail.resx
===================================================================
--- branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/RoleDetail.resx	(revision 4590)
+++ branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/RoleDetail.resx	(revision 4590)
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="bsRole.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="applicationIdLabel.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </metadata>
+  <metadata name="descriptionLabel.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </metadata>
+  <metadata name="loweredRoleNameLabel.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </metadata>
+  <metadata name="roleIdLabel.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </metadata>
+  <metadata name="roleNameLabel.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </metadata>
+</root>
Index: branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/TestClient.cs
===================================================================
--- branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/TestClient.cs	(revision 4588)
+++ branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/TestClient.cs	(revision 4590)
@@ -1,8 +1,7 @@
 ﻿using System;
+
 using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Services.Authentication;
-using HeuristicLab.Services.Authentication.DataTransfer;
+using System.Windows.Forms;
+
 
 namespace HeuristicLab.Services.Authentication.TestClient
@@ -12,27 +11,29 @@
         static void Main(string[] args)
         {
+           
+            Application.Run(new UserManagement());
 
-            AuthenticationService auth = new AuthenticationService();
+            //AuthenticationService auth = new AuthenticationService();
 
-            try
-            {
-                IEnumerable<User> list = new List<User>();
-                list = auth.GetUsers();
-                foreach (var item in list)
-                {
-                    Console.WriteLine("Item=" + item.UserName);
-                }
+            //try
+            //{
+            //    IEnumerable<User> list = new List<User>();
+            //    list = auth.GetUsers();
+            //    foreach (var item in list)
+            //    {
+            //        Console.WriteLine("Item=" + item.UserName);
+            //    }
 
-                Console.WriteLine("Try to delete user...");
+            //    Console.WriteLine("Try to delete user...");
 
-                User u = new User() { UserId = new Guid("e4abc6ae-c954-4efd-8108-e536226fd9c7") };
-                auth.DeleteUser(u);
+            //   // User u = new User() { UserId =  };
+            //    auth.DeleteUser(new Guid("e4abc6ae-c954-4efd-8108-e536226fd9c7"));
 
-            }
-            catch (Exception e)
-            {
-                Console.WriteLine(e.Message);
-            }
-            Console.ReadLine();
+            //}
+            //catch (Exception e)
+            //{
+            //    Console.WriteLine(e.Message);
+            //}
+            //Console.ReadLine();
             //ServiceClient client = new ServiceClient();
             //client.ClientCredentials.UserName.UserName = "Alice";
Index: branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/UserDetail.Designer.cs
===================================================================
--- branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/UserDetail.Designer.cs	(revision 4590)
+++ branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/UserDetail.Designer.cs	(revision 4590)
@@ -0,0 +1,232 @@
+﻿namespace HeuristicLab.Services.Authentication.TestClient
+{
+    partial class UserDetail
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            System.Windows.Forms.Label applicationIdLabel;
+            System.Windows.Forms.Label isAnonymousLabel;
+            System.Windows.Forms.Label lastActivityDateLabel;
+            System.Windows.Forms.Label loweredUserNameLabel;
+            System.Windows.Forms.Label mobileAliasLabel;
+            System.Windows.Forms.Label userIdLabel;
+            System.Windows.Forms.Label userNameLabel;
+            this.applicationIdTextBox = new System.Windows.Forms.TextBox();
+            this.isAnonymousCheckBox = new System.Windows.Forms.CheckBox();
+            this.lastActivityDateDateTimePicker = new System.Windows.Forms.DateTimePicker();
+            this.loweredUserNameTextBox = new System.Windows.Forms.TextBox();
+            this.mobileAliasTextBox = new System.Windows.Forms.TextBox();
+            this.userIdTextBox = new System.Windows.Forms.TextBox();
+            this.userNameTextBox = new System.Windows.Forms.TextBox();
+            this.btnSave = new System.Windows.Forms.Button();
+            this.bsUser = new System.Windows.Forms.BindingSource(this.components);
+            applicationIdLabel = new System.Windows.Forms.Label();
+            isAnonymousLabel = new System.Windows.Forms.Label();
+            lastActivityDateLabel = new System.Windows.Forms.Label();
+            loweredUserNameLabel = new System.Windows.Forms.Label();
+            mobileAliasLabel = new System.Windows.Forms.Label();
+            userIdLabel = new System.Windows.Forms.Label();
+            userNameLabel = new System.Windows.Forms.Label();
+            ((System.ComponentModel.ISupportInitialize)(this.bsUser)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // applicationIdLabel
+            // 
+            applicationIdLabel.AutoSize = true;
+            applicationIdLabel.Location = new System.Drawing.Point(12, 18);
+            applicationIdLabel.Name = "applicationIdLabel";
+            applicationIdLabel.Size = new System.Drawing.Size(74, 13);
+            applicationIdLabel.TabIndex = 1;
+            applicationIdLabel.Text = "Application Id:";
+            // 
+            // applicationIdTextBox
+            // 
+            this.applicationIdTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.bsUser, "ApplicationId", true));
+            this.applicationIdTextBox.Location = new System.Drawing.Point(125, 15);
+            this.applicationIdTextBox.Name = "applicationIdTextBox";
+            this.applicationIdTextBox.Size = new System.Drawing.Size(200, 20);
+            this.applicationIdTextBox.TabIndex = 2;
+            // 
+            // isAnonymousLabel
+            // 
+            isAnonymousLabel.AutoSize = true;
+            isAnonymousLabel.Location = new System.Drawing.Point(12, 46);
+            isAnonymousLabel.Name = "isAnonymousLabel";
+            isAnonymousLabel.Size = new System.Drawing.Size(76, 13);
+            isAnonymousLabel.TabIndex = 3;
+            isAnonymousLabel.Text = "Is Anonymous:";
+            // 
+            // isAnonymousCheckBox
+            // 
+            this.isAnonymousCheckBox.DataBindings.Add(new System.Windows.Forms.Binding("CheckState", this.bsUser, "IsAnonymous", true));
+            this.isAnonymousCheckBox.Location = new System.Drawing.Point(125, 41);
+            this.isAnonymousCheckBox.Name = "isAnonymousCheckBox";
+            this.isAnonymousCheckBox.Size = new System.Drawing.Size(200, 24);
+            this.isAnonymousCheckBox.TabIndex = 4;
+            this.isAnonymousCheckBox.UseVisualStyleBackColor = true;
+            // 
+            // lastActivityDateLabel
+            // 
+            lastActivityDateLabel.AutoSize = true;
+            lastActivityDateLabel.Location = new System.Drawing.Point(12, 75);
+            lastActivityDateLabel.Name = "lastActivityDateLabel";
+            lastActivityDateLabel.Size = new System.Drawing.Size(93, 13);
+            lastActivityDateLabel.TabIndex = 5;
+            lastActivityDateLabel.Text = "Last Activity Date:";
+            // 
+            // lastActivityDateDateTimePicker
+            // 
+            this.lastActivityDateDateTimePicker.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.bsUser, "LastActivityDate", true));
+            this.lastActivityDateDateTimePicker.Location = new System.Drawing.Point(125, 71);
+            this.lastActivityDateDateTimePicker.Name = "lastActivityDateDateTimePicker";
+            this.lastActivityDateDateTimePicker.Size = new System.Drawing.Size(200, 20);
+            this.lastActivityDateDateTimePicker.TabIndex = 6;
+            // 
+            // loweredUserNameLabel
+            // 
+            loweredUserNameLabel.AutoSize = true;
+            loweredUserNameLabel.Location = new System.Drawing.Point(12, 100);
+            loweredUserNameLabel.Name = "loweredUserNameLabel";
+            loweredUserNameLabel.Size = new System.Drawing.Size(107, 13);
+            loweredUserNameLabel.TabIndex = 7;
+            loweredUserNameLabel.Text = "Lowered User Name:";
+            // 
+            // loweredUserNameTextBox
+            // 
+            this.loweredUserNameTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.bsUser, "LoweredUserName", true));
+            this.loweredUserNameTextBox.Location = new System.Drawing.Point(125, 97);
+            this.loweredUserNameTextBox.Name = "loweredUserNameTextBox";
+            this.loweredUserNameTextBox.Size = new System.Drawing.Size(200, 20);
+            this.loweredUserNameTextBox.TabIndex = 8;
+            // 
+            // mobileAliasLabel
+            // 
+            mobileAliasLabel.AutoSize = true;
+            mobileAliasLabel.Location = new System.Drawing.Point(12, 126);
+            mobileAliasLabel.Name = "mobileAliasLabel";
+            mobileAliasLabel.Size = new System.Drawing.Size(66, 13);
+            mobileAliasLabel.TabIndex = 9;
+            mobileAliasLabel.Text = "Mobile Alias:";
+            // 
+            // mobileAliasTextBox
+            // 
+            this.mobileAliasTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.bsUser, "MobileAlias", true));
+            this.mobileAliasTextBox.Location = new System.Drawing.Point(125, 123);
+            this.mobileAliasTextBox.Name = "mobileAliasTextBox";
+            this.mobileAliasTextBox.Size = new System.Drawing.Size(200, 20);
+            this.mobileAliasTextBox.TabIndex = 10;
+            // 
+            // userIdLabel
+            // 
+            userIdLabel.AutoSize = true;
+            userIdLabel.Location = new System.Drawing.Point(12, 152);
+            userIdLabel.Name = "userIdLabel";
+            userIdLabel.Size = new System.Drawing.Size(44, 13);
+            userIdLabel.TabIndex = 11;
+            userIdLabel.Text = "User Id:";
+            // 
+            // userIdTextBox
+            // 
+            this.userIdTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.bsUser, "UserId", true));
+            this.userIdTextBox.Location = new System.Drawing.Point(125, 149);
+            this.userIdTextBox.Name = "userIdTextBox";
+            this.userIdTextBox.Size = new System.Drawing.Size(200, 20);
+            this.userIdTextBox.TabIndex = 12;
+            // 
+            // userNameLabel
+            // 
+            userNameLabel.AutoSize = true;
+            userNameLabel.Location = new System.Drawing.Point(12, 178);
+            userNameLabel.Name = "userNameLabel";
+            userNameLabel.Size = new System.Drawing.Size(63, 13);
+            userNameLabel.TabIndex = 13;
+            userNameLabel.Text = "User Name:";
+            // 
+            // userNameTextBox
+            // 
+            this.userNameTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.bsUser, "UserName", true));
+            this.userNameTextBox.Location = new System.Drawing.Point(125, 175);
+            this.userNameTextBox.Name = "userNameTextBox";
+            this.userNameTextBox.Size = new System.Drawing.Size(200, 20);
+            this.userNameTextBox.TabIndex = 14;
+            // 
+            // btnSave
+            // 
+            this.btnSave.Location = new System.Drawing.Point(11, 212);
+            this.btnSave.Name = "btnSave";
+            this.btnSave.Size = new System.Drawing.Size(75, 23);
+            this.btnSave.TabIndex = 15;
+            this.btnSave.Text = "Save";
+            this.btnSave.UseVisualStyleBackColor = true;
+            this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
+            // 
+            // bsUser
+            // 
+            this.bsUser.DataSource = typeof(HeuristicLab.Services.Authentication.DataTransfer.User);
+            // 
+            // UserDetail
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(380, 254);
+            this.Controls.Add(this.btnSave);
+            this.Controls.Add(applicationIdLabel);
+            this.Controls.Add(this.applicationIdTextBox);
+            this.Controls.Add(isAnonymousLabel);
+            this.Controls.Add(this.isAnonymousCheckBox);
+            this.Controls.Add(lastActivityDateLabel);
+            this.Controls.Add(this.lastActivityDateDateTimePicker);
+            this.Controls.Add(loweredUserNameLabel);
+            this.Controls.Add(this.loweredUserNameTextBox);
+            this.Controls.Add(mobileAliasLabel);
+            this.Controls.Add(this.mobileAliasTextBox);
+            this.Controls.Add(userIdLabel);
+            this.Controls.Add(this.userIdTextBox);
+            this.Controls.Add(userNameLabel);
+            this.Controls.Add(this.userNameTextBox);
+            this.Name = "UserDetail";
+            this.Text = "UserDetail";
+            ((System.ComponentModel.ISupportInitialize)(this.bsUser)).EndInit();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.BindingSource bsUser;
+        private System.Windows.Forms.TextBox applicationIdTextBox;
+        private System.Windows.Forms.CheckBox isAnonymousCheckBox;
+        private System.Windows.Forms.DateTimePicker lastActivityDateDateTimePicker;
+        private System.Windows.Forms.TextBox loweredUserNameTextBox;
+        private System.Windows.Forms.TextBox mobileAliasTextBox;
+        private System.Windows.Forms.TextBox userIdTextBox;
+        private System.Windows.Forms.TextBox userNameTextBox;
+        private System.Windows.Forms.Button btnSave;
+    }
+}
Index: branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/UserDetail.cs
===================================================================
--- branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/UserDetail.cs	(revision 4590)
+++ branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/UserDetail.cs	(revision 4590)
@@ -0,0 +1,52 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Services.Authentication.DataTransfer;
+
+namespace HeuristicLab.Services.Authentication.TestClient
+{
+
+    public enum UserDetailMode
+    {
+        Insert,
+        Update
+    }
+
+    public partial class UserDetail : Form
+    {
+        private UserDetailMode mode;
+        private AuthenticationService service;
+        private User user;
+
+        public UserDetail(UserDetailMode mode,AuthenticationService service)
+        {
+            this.mode = mode;
+            this.service = service;
+            InitializeComponent();
+        }
+
+        public void Initialize(User user){
+            if(user != null){
+                this.user = user;
+                this.bsUser.DataSource = user;
+            }
+        }
+
+        private void btnSave_Click(object sender, EventArgs e)
+        {
+            if (mode == UserDetailMode.Insert)
+            {
+                this.service.InsertUser(user);
+            }
+            else if (mode == UserDetailMode.Update)
+            {
+                this.service.UpdateUser(user);              
+            }
+        }
+    }
+}
Index: branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/UserDetail.resx
===================================================================
--- branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/UserDetail.resx	(revision 4590)
+++ branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/UserDetail.resx	(revision 4590)
@@ -0,0 +1,144 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="applicationIdLabel.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </metadata>
+  <metadata name="bsUser.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="isAnonymousLabel.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </metadata>
+  <metadata name="lastActivityDateLabel.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </metadata>
+  <metadata name="loweredUserNameLabel.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </metadata>
+  <metadata name="mobileAliasLabel.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </metadata>
+  <metadata name="userIdLabel.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </metadata>
+  <metadata name="userNameLabel.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </metadata>
+</root>
Index: branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/UserManagement.Designer.cs
===================================================================
--- branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/UserManagement.Designer.cs	(revision 4590)
+++ branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/UserManagement.Designer.cs	(revision 4590)
@@ -0,0 +1,388 @@
+﻿namespace HeuristicLab.Services.Authentication.TestClient
+{
+    partial class UserManagement
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            this.grpUsers = new System.Windows.Forms.GroupBox();
+            this.dgvUsers = new System.Windows.Forms.DataGridView();
+            this.btnUserNew = new System.Windows.Forms.Button();
+            this.btnUserModify = new System.Windows.Forms.Button();
+            this.btnUserDelete = new System.Windows.Forms.Button();
+            this.grpRoles = new System.Windows.Forms.GroupBox();
+            this.dgvRoles = new System.Windows.Forms.DataGridView();
+            this.btnRoleNew = new System.Windows.Forms.Button();
+            this.btnRoleModify = new System.Windows.Forms.Button();
+            this.btnRoleDelete = new System.Windows.Forms.Button();
+            this.scMain = new System.Windows.Forms.SplitContainer();
+            this.panel1 = new System.Windows.Forms.Panel();
+            this.panel2 = new System.Windows.Forms.Panel();
+            this.applicationIdDataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.userIdDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.userNameDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.loweredUserNameDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.mobileAliasDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.isAnonymousDataGridViewCheckBoxColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn();
+            this.lastActivityDateDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.bsUsers = new System.Windows.Forms.BindingSource(this.components);
+            this.bsRoles = new System.Windows.Forms.BindingSource(this.components);
+            this.applicationIdDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.RoleId = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.RoleName = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.LoweredRoleName = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.Description = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.grpUsers.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.dgvUsers)).BeginInit();
+            this.grpRoles.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.dgvRoles)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.scMain)).BeginInit();
+            this.scMain.Panel1.SuspendLayout();
+            this.scMain.Panel2.SuspendLayout();
+            this.scMain.SuspendLayout();
+            this.panel1.SuspendLayout();
+            this.panel2.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.bsUsers)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.bsRoles)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // grpUsers
+            // 
+            this.grpUsers.Controls.Add(this.dgvUsers);
+            this.grpUsers.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.grpUsers.Location = new System.Drawing.Point(0, 0);
+            this.grpUsers.Name = "grpUsers";
+            this.grpUsers.Size = new System.Drawing.Size(1100, 249);
+            this.grpUsers.TabIndex = 0;
+            this.grpUsers.TabStop = false;
+            this.grpUsers.Text = "Users";
+            // 
+            // dgvUsers
+            // 
+            this.dgvUsers.AllowUserToAddRows = false;
+            this.dgvUsers.AllowUserToDeleteRows = false;
+            this.dgvUsers.AllowUserToResizeColumns = false;
+            this.dgvUsers.AllowUserToResizeRows = false;
+            this.dgvUsers.AutoGenerateColumns = false;
+            this.dgvUsers.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+            this.dgvUsers.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
+            this.applicationIdDataGridViewTextBoxColumn1,
+            this.userIdDataGridViewTextBoxColumn,
+            this.userNameDataGridViewTextBoxColumn,
+            this.loweredUserNameDataGridViewTextBoxColumn,
+            this.mobileAliasDataGridViewTextBoxColumn,
+            this.isAnonymousDataGridViewCheckBoxColumn,
+            this.lastActivityDateDataGridViewTextBoxColumn});
+            this.dgvUsers.DataSource = this.bsUsers;
+            this.dgvUsers.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.dgvUsers.Location = new System.Drawing.Point(3, 16);
+            this.dgvUsers.MultiSelect = false;
+            this.dgvUsers.Name = "dgvUsers";
+            this.dgvUsers.ReadOnly = true;
+            this.dgvUsers.ShowCellErrors = false;
+            this.dgvUsers.ShowCellToolTips = false;
+            this.dgvUsers.ShowEditingIcon = false;
+            this.dgvUsers.ShowRowErrors = false;
+            this.dgvUsers.Size = new System.Drawing.Size(1094, 230);
+            this.dgvUsers.TabIndex = 0;
+            // 
+            // btnUserNew
+            // 
+            this.btnUserNew.Location = new System.Drawing.Point(3, 3);
+            this.btnUserNew.Name = "btnUserNew";
+            this.btnUserNew.Size = new System.Drawing.Size(75, 23);
+            this.btnUserNew.TabIndex = 1;
+            this.btnUserNew.Text = "New";
+            this.btnUserNew.UseVisualStyleBackColor = true;
+            this.btnUserNew.Click += new System.EventHandler(this.btnUserNew_Click);
+            // 
+            // btnUserModify
+            // 
+            this.btnUserModify.Location = new System.Drawing.Point(84, 3);
+            this.btnUserModify.Name = "btnUserModify";
+            this.btnUserModify.Size = new System.Drawing.Size(75, 23);
+            this.btnUserModify.TabIndex = 2;
+            this.btnUserModify.Text = "Modify";
+            this.btnUserModify.UseVisualStyleBackColor = true;
+            this.btnUserModify.Click += new System.EventHandler(this.btnUserModify_Click);
+            // 
+            // btnUserDelete
+            // 
+            this.btnUserDelete.Location = new System.Drawing.Point(165, 3);
+            this.btnUserDelete.Name = "btnUserDelete";
+            this.btnUserDelete.Size = new System.Drawing.Size(75, 23);
+            this.btnUserDelete.TabIndex = 3;
+            this.btnUserDelete.Text = "Delete";
+            this.btnUserDelete.UseVisualStyleBackColor = true;
+            this.btnUserDelete.Click += new System.EventHandler(this.btnUserDelete_Click);
+            // 
+            // grpRoles
+            // 
+            this.grpRoles.Controls.Add(this.dgvRoles);
+            this.grpRoles.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.grpRoles.Location = new System.Drawing.Point(0, 0);
+            this.grpRoles.Name = "grpRoles";
+            this.grpRoles.Size = new System.Drawing.Size(1100, 243);
+            this.grpRoles.TabIndex = 5;
+            this.grpRoles.TabStop = false;
+            this.grpRoles.Text = "Roles";
+            // 
+            // dgvRoles
+            // 
+            this.dgvRoles.AllowUserToAddRows = false;
+            this.dgvRoles.AllowUserToDeleteRows = false;
+            this.dgvRoles.AllowUserToResizeColumns = false;
+            this.dgvRoles.AllowUserToResizeRows = false;
+            this.dgvRoles.AutoGenerateColumns = false;
+            this.dgvRoles.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+            this.dgvRoles.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
+            this.applicationIdDataGridViewTextBoxColumn,
+            this.RoleId,
+            this.RoleName,
+            this.LoweredRoleName,
+            this.Description});
+            this.dgvRoles.DataSource = this.bsRoles;
+            this.dgvRoles.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.dgvRoles.Location = new System.Drawing.Point(3, 16);
+            this.dgvRoles.MultiSelect = false;
+            this.dgvRoles.Name = "dgvRoles";
+            this.dgvRoles.ReadOnly = true;
+            this.dgvRoles.Size = new System.Drawing.Size(1094, 224);
+            this.dgvRoles.TabIndex = 1;
+            // 
+            // btnRoleNew
+            // 
+            this.btnRoleNew.Location = new System.Drawing.Point(3, 3);
+            this.btnRoleNew.Name = "btnRoleNew";
+            this.btnRoleNew.Size = new System.Drawing.Size(75, 23);
+            this.btnRoleNew.TabIndex = 6;
+            this.btnRoleNew.Text = "New";
+            this.btnRoleNew.UseVisualStyleBackColor = true;
+            this.btnRoleNew.Click += new System.EventHandler(this.btnRoleNew_Click);
+            // 
+            // btnRoleModify
+            // 
+            this.btnRoleModify.Location = new System.Drawing.Point(84, 3);
+            this.btnRoleModify.Name = "btnRoleModify";
+            this.btnRoleModify.Size = new System.Drawing.Size(75, 23);
+            this.btnRoleModify.TabIndex = 7;
+            this.btnRoleModify.Text = "Modify";
+            this.btnRoleModify.UseVisualStyleBackColor = true;
+            this.btnRoleModify.Click += new System.EventHandler(this.btnRoleModify_Click);
+            // 
+            // btnRoleDelete
+            // 
+            this.btnRoleDelete.Location = new System.Drawing.Point(165, 3);
+            this.btnRoleDelete.Name = "btnRoleDelete";
+            this.btnRoleDelete.Size = new System.Drawing.Size(75, 23);
+            this.btnRoleDelete.TabIndex = 8;
+            this.btnRoleDelete.Text = "Delete";
+            this.btnRoleDelete.UseVisualStyleBackColor = true;
+            this.btnRoleDelete.Click += new System.EventHandler(this.btnRoleDelete_Click);
+            // 
+            // scMain
+            // 
+            this.scMain.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.scMain.Location = new System.Drawing.Point(0, 0);
+            this.scMain.Name = "scMain";
+            this.scMain.Orientation = System.Windows.Forms.Orientation.Horizontal;
+            // 
+            // scMain.Panel1
+            // 
+            this.scMain.Panel1.Controls.Add(this.grpUsers);
+            this.scMain.Panel1.Controls.Add(this.panel1);
+            // 
+            // scMain.Panel2
+            // 
+            this.scMain.Panel2.Controls.Add(this.grpRoles);
+            this.scMain.Panel2.Controls.Add(this.panel2);
+            this.scMain.Size = new System.Drawing.Size(1100, 556);
+            this.scMain.SplitterDistance = 278;
+            this.scMain.TabIndex = 9;
+            // 
+            // panel1
+            // 
+            this.panel1.Controls.Add(this.btnUserNew);
+            this.panel1.Controls.Add(this.btnUserDelete);
+            this.panel1.Controls.Add(this.btnUserModify);
+            this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom;
+            this.panel1.Location = new System.Drawing.Point(0, 249);
+            this.panel1.Name = "panel1";
+            this.panel1.Size = new System.Drawing.Size(1100, 29);
+            this.panel1.TabIndex = 4;
+            // 
+            // panel2
+            // 
+            this.panel2.Controls.Add(this.btnRoleNew);
+            this.panel2.Controls.Add(this.btnRoleModify);
+            this.panel2.Controls.Add(this.btnRoleDelete);
+            this.panel2.Dock = System.Windows.Forms.DockStyle.Bottom;
+            this.panel2.Location = new System.Drawing.Point(0, 243);
+            this.panel2.Name = "panel2";
+            this.panel2.Size = new System.Drawing.Size(1100, 31);
+            this.panel2.TabIndex = 9;
+            // 
+            // applicationIdDataGridViewTextBoxColumn1
+            // 
+            this.applicationIdDataGridViewTextBoxColumn1.DataPropertyName = "ApplicationId";
+            this.applicationIdDataGridViewTextBoxColumn1.HeaderText = "ApplicationId";
+            this.applicationIdDataGridViewTextBoxColumn1.Name = "applicationIdDataGridViewTextBoxColumn1";
+            // 
+            // userIdDataGridViewTextBoxColumn
+            // 
+            this.userIdDataGridViewTextBoxColumn.DataPropertyName = "UserId";
+            this.userIdDataGridViewTextBoxColumn.HeaderText = "UserId";
+            this.userIdDataGridViewTextBoxColumn.Name = "userIdDataGridViewTextBoxColumn";
+            // 
+            // userNameDataGridViewTextBoxColumn
+            // 
+            this.userNameDataGridViewTextBoxColumn.DataPropertyName = "UserName";
+            this.userNameDataGridViewTextBoxColumn.HeaderText = "UserName";
+            this.userNameDataGridViewTextBoxColumn.Name = "userNameDataGridViewTextBoxColumn";
+            // 
+            // loweredUserNameDataGridViewTextBoxColumn
+            // 
+            this.loweredUserNameDataGridViewTextBoxColumn.DataPropertyName = "LoweredUserName";
+            this.loweredUserNameDataGridViewTextBoxColumn.HeaderText = "LoweredUserName";
+            this.loweredUserNameDataGridViewTextBoxColumn.Name = "loweredUserNameDataGridViewTextBoxColumn";
+            // 
+            // mobileAliasDataGridViewTextBoxColumn
+            // 
+            this.mobileAliasDataGridViewTextBoxColumn.DataPropertyName = "MobileAlias";
+            this.mobileAliasDataGridViewTextBoxColumn.HeaderText = "MobileAlias";
+            this.mobileAliasDataGridViewTextBoxColumn.Name = "mobileAliasDataGridViewTextBoxColumn";
+            // 
+            // isAnonymousDataGridViewCheckBoxColumn
+            // 
+            this.isAnonymousDataGridViewCheckBoxColumn.DataPropertyName = "IsAnonymous";
+            this.isAnonymousDataGridViewCheckBoxColumn.HeaderText = "IsAnonymous";
+            this.isAnonymousDataGridViewCheckBoxColumn.Name = "isAnonymousDataGridViewCheckBoxColumn";
+            // 
+            // lastActivityDateDataGridViewTextBoxColumn
+            // 
+            this.lastActivityDateDataGridViewTextBoxColumn.DataPropertyName = "LastActivityDate";
+            this.lastActivityDateDataGridViewTextBoxColumn.HeaderText = "LastActivityDate";
+            this.lastActivityDateDataGridViewTextBoxColumn.Name = "lastActivityDateDataGridViewTextBoxColumn";
+            // 
+            // bsUsers
+            // 
+            this.bsUsers.DataSource = typeof(HeuristicLab.Services.Authentication.DataTransfer.User);
+            // 
+            // bsRoles
+            // 
+            this.bsRoles.DataSource = typeof(HeuristicLab.Services.Authentication.DataTransfer.Role);
+            // 
+            // applicationIdDataGridViewTextBoxColumn
+            // 
+            this.applicationIdDataGridViewTextBoxColumn.DataPropertyName = "ApplicationId";
+            this.applicationIdDataGridViewTextBoxColumn.HeaderText = "ApplicationId";
+            this.applicationIdDataGridViewTextBoxColumn.Name = "applicationIdDataGridViewTextBoxColumn";
+            this.applicationIdDataGridViewTextBoxColumn.ReadOnly = true;
+            // 
+            // RoleId
+            // 
+            this.RoleId.DataPropertyName = "RoleId";
+            this.RoleId.HeaderText = "RoleId";
+            this.RoleId.Name = "RoleId";
+            this.RoleId.ReadOnly = true;
+            // 
+            // RoleName
+            // 
+            this.RoleName.DataPropertyName = "RoleName";
+            this.RoleName.HeaderText = "RoleName";
+            this.RoleName.Name = "RoleName";
+            this.RoleName.ReadOnly = true;
+            // 
+            // LoweredRoleName
+            // 
+            this.LoweredRoleName.DataPropertyName = "LoweredRoleName";
+            this.LoweredRoleName.HeaderText = "LoweredRoleName";
+            this.LoweredRoleName.Name = "LoweredRoleName";
+            this.LoweredRoleName.ReadOnly = true;
+            // 
+            // Description
+            // 
+            this.Description.DataPropertyName = "Description";
+            this.Description.HeaderText = "Description";
+            this.Description.Name = "Description";
+            this.Description.ReadOnly = true;
+            // 
+            // UserManagement
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(1100, 556);
+            this.Controls.Add(this.scMain);
+            this.Name = "UserManagement";
+            this.Text = "UserManagement";
+            this.grpUsers.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.dgvUsers)).EndInit();
+            this.grpRoles.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.dgvRoles)).EndInit();
+            this.scMain.Panel1.ResumeLayout(false);
+            this.scMain.Panel2.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.scMain)).EndInit();
+            this.scMain.ResumeLayout(false);
+            this.panel1.ResumeLayout(false);
+            this.panel2.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.bsUsers)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.bsRoles)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.GroupBox grpUsers;
+        private System.Windows.Forms.DataGridView dgvUsers;
+        private System.Windows.Forms.Button btnUserNew;
+        private System.Windows.Forms.Button btnUserModify;
+        private System.Windows.Forms.Button btnUserDelete;
+        private System.Windows.Forms.GroupBox grpRoles;
+        private System.Windows.Forms.DataGridView dgvRoles;
+        private System.Windows.Forms.Button btnRoleNew;
+        private System.Windows.Forms.Button btnRoleModify;
+        private System.Windows.Forms.Button btnRoleDelete;
+        private System.Windows.Forms.BindingSource bsUsers;
+        private System.Windows.Forms.BindingSource bsRoles;
+        private System.Windows.Forms.DataGridViewTextBoxColumn applicationIdDataGridViewTextBoxColumn1;
+        private System.Windows.Forms.DataGridViewTextBoxColumn userIdDataGridViewTextBoxColumn;
+        private System.Windows.Forms.DataGridViewTextBoxColumn userNameDataGridViewTextBoxColumn;
+        private System.Windows.Forms.DataGridViewTextBoxColumn loweredUserNameDataGridViewTextBoxColumn;
+        private System.Windows.Forms.DataGridViewTextBoxColumn mobileAliasDataGridViewTextBoxColumn;
+        private System.Windows.Forms.DataGridViewCheckBoxColumn isAnonymousDataGridViewCheckBoxColumn;
+        private System.Windows.Forms.DataGridViewTextBoxColumn lastActivityDateDataGridViewTextBoxColumn;
+        private System.Windows.Forms.SplitContainer scMain;
+        private System.Windows.Forms.Panel panel1;
+        private System.Windows.Forms.Panel panel2;
+        private System.Windows.Forms.DataGridViewTextBoxColumn applicationIdDataGridViewTextBoxColumn;
+        private System.Windows.Forms.DataGridViewTextBoxColumn RoleId;
+        private System.Windows.Forms.DataGridViewTextBoxColumn RoleName;
+        private System.Windows.Forms.DataGridViewTextBoxColumn LoweredRoleName;
+        private System.Windows.Forms.DataGridViewTextBoxColumn Description;
+    }
+}
Index: branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/UserManagement.cs
===================================================================
--- branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/UserManagement.cs	(revision 4590)
+++ branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/UserManagement.cs	(revision 4590)
@@ -0,0 +1,106 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Services.Authentication.DataTransfer;
+
+namespace HeuristicLab.Services.Authentication.TestClient
+{
+    public partial class UserManagement : Form
+    {
+
+        AuthenticationService service;
+
+        public UserManagement()
+        {
+            InitializeComponent();
+            Initialize();
+        }
+        private void Initialize()
+        {
+            service = new AuthenticationService();
+            if (service != null)
+            {
+                this.bsRoles.DataSource = service.GetRoles();
+                this.bsUsers.DataSource = service.GetUsers();
+
+            }
+        }
+
+        private void btnUserNew_Click(object sender, EventArgs e)
+        {
+            UserDetail frmUserDetail = new UserDetail(UserDetailMode.Insert, service);
+            frmUserDetail.Show(this);
+        }
+
+
+        private void btnUserModify_Click(object sender, EventArgs e)
+        {
+
+           
+            if (dgvUsers.SelectedRows.Count == 1)
+            {
+                User user = (User)dgvUsers.SelectedRows[0].DataBoundItem; 
+                if (user != null)
+                {
+                   
+                    UserDetail frmUserDetail = new UserDetail(UserDetailMode.Update,service);
+                    frmUserDetail.Show(this);
+                    frmUserDetail.Initialize(user);
+                }
+            }
+        }
+
+        private void btnUserDelete_Click(object sender, EventArgs e)
+        {
+            if (dgvUsers.SelectedRows.Count == 1)
+            {
+                User user = (User)dgvUsers.SelectedRows[0].DataBoundItem;
+                if (user != null)
+                {
+                    service.DeleteUser(user.UserId);
+                }
+            }
+        }
+
+        private void btnRoleNew_Click(object sender, EventArgs e)
+        {
+            RoleDetail frmRoleDetail = new RoleDetail(RoleDetailMode.Insert, service,null);
+            frmRoleDetail.Show(this);
+        }          
+
+        private void btnRoleModify_Click(object sender, EventArgs e)
+        {
+            if (dgvRoles.SelectedRows.Count == 1)
+            {
+                Role role = (Role)dgvRoles.SelectedRows[0].DataBoundItem;
+                if (role != null)
+                {
+
+                    RoleDetail frmRoleDetail = new RoleDetail(RoleDetailMode.Update, service, role);
+                    frmRoleDetail.Show(this);
+                  
+                }
+            }
+        }
+
+        private void btnRoleDelete_Click(object sender, EventArgs e)
+        {
+            if (dgvRoles.SelectedRows.Count == 1)
+            {
+                Role role = (Role)dgvRoles.SelectedRows[0].DataBoundItem;
+                if (role != null)
+                {
+                    service.DeleteRole(role.RoleId);
+                }
+            }
+        }
+
+ 
+
+    }
+}
Index: branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/UserManagement.resx
===================================================================
--- branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/UserManagement.resx	(revision 4590)
+++ branches/UserManagement/HeuristicLab.Services.Authentication.TestClient/UserManagement.resx	(revision 4590)
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="bsUsers.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="RoleId.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="RoleName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="LoweredRoleName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="Description.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="bsRoles.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>154, 17</value>
+  </metadata>
+</root>
