Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access.Views/3.3/UserViews/LightweightUserInformationView.Designer.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access.Views/3.3/UserViews/LightweightUserInformationView.Designer.cs	(revision 7981)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access.Views/3.3/UserViews/LightweightUserInformationView.Designer.cs	(revision 7982)
@@ -33,9 +33,11 @@
       this.userNameTextBox = new System.Windows.Forms.TextBox();
       this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.rolesListView = new System.Windows.Forms.ListView();
+      this.columnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.imageList = new System.Windows.Forms.ImageList(this.components);
       this.groupsListView = new System.Windows.Forms.ListView();
-      this.rolesListView = new System.Windows.Forms.ListView();
-      this.imageList = new System.Windows.Forms.ImageList(this.components);
-      this.columnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
       this.groupsColumnHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+      this.label5 = new System.Windows.Forms.Label();
+      this.emailTextBox = new System.Windows.Forms.TextBox();
       ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
       this.splitContainer.Panel1.SuspendLayout();
@@ -47,5 +49,5 @@
       // 
       this.changePasswordButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.changePasswordButton.Location = new System.Drawing.Point(316, 209);
+      this.changePasswordButton.Location = new System.Drawing.Point(316, 231);
       this.changePasswordButton.Name = "changePasswordButton";
       this.changePasswordButton.Size = new System.Drawing.Size(112, 23);
@@ -72,4 +74,5 @@
       this.fullNameTextBox.Size = new System.Drawing.Size(359, 20);
       this.fullNameTextBox.TabIndex = 16;
+      this.fullNameTextBox.TextChanged += new System.EventHandler(this.fullNameTextBox_TextChanged);
       // 
       // label4
@@ -106,4 +109,5 @@
       this.userNameTextBox.Location = new System.Drawing.Point(69, 3);
       this.userNameTextBox.Name = "userNameTextBox";
+      this.userNameTextBox.ReadOnly = true;
       this.userNameTextBox.Size = new System.Drawing.Size(359, 20);
       this.userNameTextBox.TabIndex = 15;
@@ -114,5 +118,5 @@
                   | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
-      this.splitContainer.Location = new System.Drawing.Point(3, 55);
+      this.splitContainer.Location = new System.Drawing.Point(3, 81);
       this.splitContainer.Name = "splitContainer";
       // 
@@ -126,7 +130,34 @@
       this.splitContainer.Panel2.Controls.Add(this.groupsListView);
       this.splitContainer.Panel2.Controls.Add(this.label4);
-      this.splitContainer.Size = new System.Drawing.Size(425, 148);
+      this.splitContainer.Size = new System.Drawing.Size(425, 144);
       this.splitContainer.SplitterDistance = 211;
       this.splitContainer.TabIndex = 20;
+      // 
+      // rolesListView
+      // 
+      this.rolesListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.rolesListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.columnHeader});
+      this.rolesListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
+      this.rolesListView.HideSelection = false;
+      this.rolesListView.Location = new System.Drawing.Point(3, 16);
+      this.rolesListView.Name = "rolesListView";
+      this.rolesListView.Size = new System.Drawing.Size(205, 125);
+      this.rolesListView.SmallImageList = this.imageList;
+      this.rolesListView.TabIndex = 18;
+      this.rolesListView.UseCompatibleStateImageBehavior = false;
+      this.rolesListView.View = System.Windows.Forms.View.Details;
+      // 
+      // columnHeader
+      // 
+      this.columnHeader.Width = 100;
+      // 
+      // imageList
+      // 
+      this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+      this.imageList.ImageSize = new System.Drawing.Size(16, 16);
+      this.imageList.TransparentColor = System.Drawing.Color.Transparent;
       // 
       // groupsListView
@@ -141,5 +172,5 @@
       this.groupsListView.Location = new System.Drawing.Point(3, 16);
       this.groupsListView.Name = "groupsListView";
-      this.groupsListView.Size = new System.Drawing.Size(204, 129);
+      this.groupsListView.Size = new System.Drawing.Size(204, 125);
       this.groupsListView.SmallImageList = this.imageList;
       this.groupsListView.TabIndex = 19;
@@ -147,34 +178,26 @@
       this.groupsListView.View = System.Windows.Forms.View.Details;
       // 
-      // rolesListView
-      // 
-      this.rolesListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.rolesListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
-            this.columnHeader});
-      this.rolesListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
-      this.rolesListView.HideSelection = false;
-      this.rolesListView.Location = new System.Drawing.Point(3, 16);
-      this.rolesListView.Name = "rolesListView";
-      this.rolesListView.Size = new System.Drawing.Size(205, 129);
-      this.rolesListView.SmallImageList = this.imageList;
-      this.rolesListView.TabIndex = 18;
-      this.rolesListView.UseCompatibleStateImageBehavior = false;
-      this.rolesListView.View = System.Windows.Forms.View.Details;
-      // 
-      // imageList
-      // 
-      this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
-      this.imageList.ImageSize = new System.Drawing.Size(16, 16);
-      this.imageList.TransparentColor = System.Drawing.Color.Transparent;
-      // 
-      // columnHeader
-      // 
-      this.columnHeader.Width = 100;
-      // 
       // groupsColumnHeader
       // 
       this.groupsColumnHeader.Width = 100;
+      // 
+      // label5
+      // 
+      this.label5.AutoSize = true;
+      this.label5.Location = new System.Drawing.Point(0, 58);
+      this.label5.Name = "label5";
+      this.label5.Size = new System.Drawing.Size(39, 13);
+      this.label5.TabIndex = 21;
+      this.label5.Text = "E-Mail:";
+      // 
+      // emailTextBox
+      // 
+      this.emailTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.emailTextBox.Location = new System.Drawing.Point(69, 55);
+      this.emailTextBox.Name = "emailTextBox";
+      this.emailTextBox.Size = new System.Drawing.Size(359, 20);
+      this.emailTextBox.TabIndex = 22;
+      this.emailTextBox.TextChanged += new System.EventHandler(this.emailTextBox_TextChanged);
       // 
       // LightweightUserInformationView
@@ -182,4 +205,6 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.emailTextBox);
+      this.Controls.Add(this.label5);
       this.Controls.Add(this.splitContainer);
       this.Controls.Add(this.changePasswordButton);
@@ -189,5 +214,5 @@
       this.Controls.Add(this.userNameTextBox);
       this.Name = "LightweightUserInformationView";
-      this.Size = new System.Drawing.Size(431, 235);
+      this.Size = new System.Drawing.Size(431, 257);
       this.splitContainer.Panel1.ResumeLayout(false);
       this.splitContainer.Panel1.PerformLayout();
@@ -216,4 +241,6 @@
     private System.Windows.Forms.ColumnHeader columnHeader;
     private System.Windows.Forms.ColumnHeader groupsColumnHeader;
+    private System.Windows.Forms.Label label5;
+    private System.Windows.Forms.TextBox emailTextBox;
   }
 }
Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access.Views/3.3/UserViews/LightweightUserInformationView.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access.Views/3.3/UserViews/LightweightUserInformationView.cs	(revision 7981)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access.Views/3.3/UserViews/LightweightUserInformationView.cs	(revision 7982)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using System.Windows.Forms;
 using HeuristicLab.MainForm;
@@ -47,7 +48,9 @@
         userNameTextBox.Clear();
         fullNameTextBox.Clear();
+        emailTextBox.Clear();
       } else {
         userNameTextBox.Text = Content.UserName;
         fullNameTextBox.Text = Content.FullName;
+        emailTextBox.Text = Content.EMail;
 
         foreach (Role r in Content.Roles)
@@ -89,4 +92,26 @@
       return listViewItem;
     }
+
+    private void fullNameTextBox_TextChanged(object sender, System.EventArgs e) {
+      if (UserInformation.Instance.User.FullName != fullNameTextBox.Text) {
+        UserInformation.Instance.User.FullName = fullNameTextBox.Text;
+        OnUserInformationChanged();
+      }
+    }
+
+    private void emailTextBox_TextChanged(object sender, System.EventArgs e) {
+      if (UserInformation.Instance.User.EMail != emailTextBox.Text) {
+        UserInformation.Instance.User.EMail = emailTextBox.Text;
+        OnUserInformationChanged();
+      }
+    }
+
+    #region Events
+    public event EventHandler UserInformationChanged;
+    private void OnUserInformationChanged() {
+      EventHandler handler = UserInformationChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+    #endregion
   }
 }
Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access.Views/3.3/UserViews/RefreshableLightweightUserInformationView.Designer.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access.Views/3.3/UserViews/RefreshableLightweightUserInformationView.Designer.cs	(revision 7981)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access.Views/3.3/UserViews/RefreshableLightweightUserInformationView.Designer.cs	(revision 7982)
@@ -1,3 +1,4 @@
-﻿namespace HeuristicLab.Clients.Access.Views {
+﻿using System;
+namespace HeuristicLab.Clients.Access.Views {
   partial class RefreshableLightweightUserInformationView {
     /// <summary> 
@@ -12,4 +13,5 @@
     protected override void Dispose(bool disposing) {
       if (disposing && (components != null)) {
+        lightweightUserInformationView.UserInformationChanged -= new EventHandler(lightweightUserInformationView_Changed);
         components.Dispose();
       }
@@ -24,5 +26,7 @@
     /// </summary>
     private void InitializeComponent() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RefreshableLightweightUserInformationView));
       this.lightweightUserInformationView = new HeuristicLab.Clients.Access.Views.LightweightUserInformationView();
+      this.storeButton = new System.Windows.Forms.Button();
       this.SuspendLayout();
       // 
@@ -44,4 +48,15 @@
       this.lightweightUserInformationView.TabIndex = 2;
       // 
+      // storeButton
+      // 
+      this.storeButton.Enabled = false;
+      this.storeButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.PublishToWeb;
+      this.storeButton.Location = new System.Drawing.Point(34, 3);
+      this.storeButton.Name = "storeButton";
+      this.storeButton.Size = new System.Drawing.Size(24, 24);
+      this.storeButton.TabIndex = 3;
+      this.storeButton.UseVisualStyleBackColor = true;
+      this.storeButton.Click += new System.EventHandler(this.storeButton_Click);
+      // 
       // RefreshableLightweightUserInformationView
       // 
@@ -49,6 +64,8 @@
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
       this.Controls.Add(this.lightweightUserInformationView);
+      this.Controls.Add(this.storeButton);
       this.Name = "RefreshableLightweightUserInformationView";
       this.Size = new System.Drawing.Size(384, 281);
+      this.Controls.SetChildIndex(this.storeButton, 0);
       this.Controls.SetChildIndex(this.lightweightUserInformationView, 0);
       this.Controls.SetChildIndex(this.refreshButton, 0);
@@ -60,4 +77,5 @@
 
     private LightweightUserInformationView lightweightUserInformationView;
+    private System.Windows.Forms.Button storeButton;
 
   }
Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access.Views/3.3/UserViews/RefreshableLightweightUserInformationView.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access.Views/3.3/UserViews/RefreshableLightweightUserInformationView.cs	(revision 7981)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access.Views/3.3/UserViews/RefreshableLightweightUserInformationView.cs	(revision 7982)
@@ -32,4 +32,9 @@
     private void RefreshUserData() {
       UserInformation.Instance.Refresh();
+      lightweightUserInformationView.UserInformationChanged += new EventHandler(lightweightUserInformationView_Changed);
+    }
+
+    void lightweightUserInformationView_Changed(object sender, EventArgs e) {
+      if (!storeButton.Enabled) storeButton.Enabled = true;
     }
 
@@ -44,4 +49,5 @@
         base.Content_Refreshing(sender, e);
         lightweightUserInformationView.Enabled = false;
+        storeButton.Enabled = false;
       }
     }
@@ -61,4 +67,10 @@
       }
     }
+
+    private void storeButton_Click(object sender, EventArgs e) {
+      AccessClient.Instance.ExecuteActionAsync(new Action(delegate {
+        AccessClient.CallAccessService(x => x.UpdateLightweightUser(UserInformation.Instance.User));
+      }), HeuristicLab.PluginInfrastructure.ErrorHandling.ShowErrorDialog);
+    }
   }
 }
Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientInformation.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientInformation.cs	(revision 7981)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ClientInformation.cs	(revision 7982)
@@ -78,8 +78,6 @@
         if (clientInfo != null) {
           clientExists = true;
-          if (clientInfo.HeuristicLabVersion != ClientInformationUtils.GetHLVersion()) {
-            clientInfo.HeuristicLabVersion = ClientInformationUtils.GetHLVersion();
-            AccessClient.CallAccessService(x => x.UpdateClient(clientInfo));
-          }
+          clientInfo.HeuristicLabVersion = ClientInformationUtils.GetHLVersion();
+          AccessClient.CallAccessService(x => x.UpdateClient(clientInfo));
         }
         errorOccured = false;
Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ServiceClients/AccessServiceClient.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ServiceClients/AccessServiceClient.cs	(revision 7981)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ServiceClients/AccessServiceClient.cs	(revision 7982)
@@ -2,5 +2,5 @@
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.530
+//     Runtime Version:4.0.30319.544
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
@@ -28,7 +28,7 @@
   [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.ClientLog))]
   [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.UserGroupBase))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.User))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.UserGroup))]
   [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.LightweightUser))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.UserGroup))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.User))]
   public partial class AccessItem : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
 
@@ -663,7 +663,7 @@
       "")]
   [System.SerializableAttribute()]
+  [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.LightweightUser))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.UserGroup))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.User))]
   public partial class UserGroupBase : HeuristicLab.Clients.Access.AccessItem {
 
@@ -687,8 +687,17 @@
   [System.Diagnostics.DebuggerStepThroughAttribute()]
   [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "LightweightUser", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
-      "")]
-  [System.SerializableAttribute()]
-  public partial class LightweightUser : HeuristicLab.Clients.Access.UserGroupBase {
+  [System.Runtime.Serialization.DataContractAttribute(Name = "User", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+      "")]
+  [System.SerializableAttribute()]
+  public partial class User : HeuristicLab.Clients.Access.UserGroupBase {
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private string CommentField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.DateTime CreationDateField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private string EmailField;
 
     [System.Runtime.Serialization.OptionalFieldAttribute()]
@@ -696,11 +705,56 @@
 
     [System.Runtime.Serialization.OptionalFieldAttribute()]
-    private System.Collections.Generic.List<HeuristicLab.Clients.Access.UserGroup> GroupsField;
-
-    [System.Runtime.Serialization.OptionalFieldAttribute()]
-    private System.Collections.Generic.List<HeuristicLab.Clients.Access.Role> RolesField;
+    private bool IsApprovedField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.DateTime LastActivityDateField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.DateTime LastLoginDateField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.DateTime LastPasswordChangedDateField;
 
     [System.Runtime.Serialization.OptionalFieldAttribute()]
     private string UserNameField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string Comment {
+      get {
+        return this.CommentField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.CommentField, value) != true)) {
+          this.CommentField = value;
+          this.RaisePropertyChanged("Comment");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.DateTime CreationDate {
+      get {
+        return this.CreationDateField;
+      }
+      set {
+        if ((this.CreationDateField.Equals(value) != true)) {
+          this.CreationDateField = value;
+          this.RaisePropertyChanged("CreationDate");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string Email {
+      get {
+        return this.EmailField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.EmailField, value) != true)) {
+          this.EmailField = value;
+          this.RaisePropertyChanged("Email");
+        }
+      }
+    }
 
     [System.Runtime.Serialization.DataMemberAttribute()]
@@ -718,4 +772,142 @@
 
     [System.Runtime.Serialization.DataMemberAttribute()]
+    public bool IsApproved {
+      get {
+        return this.IsApprovedField;
+      }
+      set {
+        if ((this.IsApprovedField.Equals(value) != true)) {
+          this.IsApprovedField = value;
+          this.RaisePropertyChanged("IsApproved");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.DateTime LastActivityDate {
+      get {
+        return this.LastActivityDateField;
+      }
+      set {
+        if ((this.LastActivityDateField.Equals(value) != true)) {
+          this.LastActivityDateField = value;
+          this.RaisePropertyChanged("LastActivityDate");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.DateTime LastLoginDate {
+      get {
+        return this.LastLoginDateField;
+      }
+      set {
+        if ((this.LastLoginDateField.Equals(value) != true)) {
+          this.LastLoginDateField = value;
+          this.RaisePropertyChanged("LastLoginDate");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.DateTime LastPasswordChangedDate {
+      get {
+        return this.LastPasswordChangedDateField;
+      }
+      set {
+        if ((this.LastPasswordChangedDateField.Equals(value) != true)) {
+          this.LastPasswordChangedDateField = value;
+          this.RaisePropertyChanged("LastPasswordChangedDate");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string UserName {
+      get {
+        return this.UserNameField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.UserNameField, value) != true)) {
+          this.UserNameField = value;
+          this.RaisePropertyChanged("UserName");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "UserGroup", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+      "")]
+  [System.SerializableAttribute()]
+  public partial class UserGroup : HeuristicLab.Clients.Access.UserGroupBase {
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private string NameField;
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public string Name {
+      get {
+        return this.NameField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.NameField, value) != true)) {
+          this.NameField = value;
+          this.RaisePropertyChanged("Name");
+        }
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "LightweightUser", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+      "")]
+  [System.SerializableAttribute()]
+  public partial class LightweightUser : HeuristicLab.Clients.Access.UserGroupBase {
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private string EMailField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private string FullNameField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Collections.Generic.List<HeuristicLab.Clients.Access.UserGroup> GroupsField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Collections.Generic.List<HeuristicLab.Clients.Access.Role> RolesField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private string UserNameField;
+
+    [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 System.Collections.Generic.List<HeuristicLab.Clients.Access.UserGroup> Groups {
       get {
@@ -739,180 +931,4 @@
           this.RolesField = value;
           this.RaisePropertyChanged("Roles");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public string UserName {
-      get {
-        return this.UserNameField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.UserNameField, value) != true)) {
-          this.UserNameField = value;
-          this.RaisePropertyChanged("UserName");
-        }
-      }
-    }
-  }
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "UserGroup", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
-      "")]
-  [System.SerializableAttribute()]
-  public partial class UserGroup : HeuristicLab.Clients.Access.UserGroupBase {
-
-    [System.Runtime.Serialization.OptionalFieldAttribute()]
-    private string NameField;
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public string Name {
-      get {
-        return this.NameField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.NameField, value) != true)) {
-          this.NameField = value;
-          this.RaisePropertyChanged("Name");
-        }
-      }
-    }
-  }
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "User", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
-      "")]
-  [System.SerializableAttribute()]
-  public partial class User : HeuristicLab.Clients.Access.UserGroupBase {
-
-    [System.Runtime.Serialization.OptionalFieldAttribute()]
-    private string CommentField;
-
-    [System.Runtime.Serialization.OptionalFieldAttribute()]
-    private System.DateTime CreationDateField;
-
-    [System.Runtime.Serialization.OptionalFieldAttribute()]
-    private string EmailField;
-
-    [System.Runtime.Serialization.OptionalFieldAttribute()]
-    private string FullNameField;
-
-    [System.Runtime.Serialization.OptionalFieldAttribute()]
-    private bool IsApprovedField;
-
-    [System.Runtime.Serialization.OptionalFieldAttribute()]
-    private System.DateTime LastActivityDateField;
-
-    [System.Runtime.Serialization.OptionalFieldAttribute()]
-    private System.DateTime LastLoginDateField;
-
-    [System.Runtime.Serialization.OptionalFieldAttribute()]
-    private System.DateTime LastPasswordChangedDateField;
-
-    [System.Runtime.Serialization.OptionalFieldAttribute()]
-    private string UserNameField;
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public string Comment {
-      get {
-        return this.CommentField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.CommentField, value) != true)) {
-          this.CommentField = value;
-          this.RaisePropertyChanged("Comment");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public System.DateTime CreationDate {
-      get {
-        return this.CreationDateField;
-      }
-      set {
-        if ((this.CreationDateField.Equals(value) != true)) {
-          this.CreationDateField = value;
-          this.RaisePropertyChanged("CreationDate");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public string Email {
-      get {
-        return this.EmailField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.EmailField, value) != true)) {
-          this.EmailField = value;
-          this.RaisePropertyChanged("Email");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public string FullName {
-      get {
-        return this.FullNameField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.FullNameField, value) != true)) {
-          this.FullNameField = value;
-          this.RaisePropertyChanged("FullName");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public bool IsApproved {
-      get {
-        return this.IsApprovedField;
-      }
-      set {
-        if ((this.IsApprovedField.Equals(value) != true)) {
-          this.IsApprovedField = value;
-          this.RaisePropertyChanged("IsApproved");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public System.DateTime LastActivityDate {
-      get {
-        return this.LastActivityDateField;
-      }
-      set {
-        if ((this.LastActivityDateField.Equals(value) != true)) {
-          this.LastActivityDateField = value;
-          this.RaisePropertyChanged("LastActivityDate");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public System.DateTime LastLoginDate {
-      get {
-        return this.LastLoginDateField;
-      }
-      set {
-        if ((this.LastLoginDateField.Equals(value) != true)) {
-          this.LastLoginDateField = value;
-          this.RaisePropertyChanged("LastLoginDate");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public System.DateTime LastPasswordChangedDate {
-      get {
-        return this.LastPasswordChangedDateField;
-      }
-      set {
-        if ((this.LastPasswordChangedDateField.Equals(value) != true)) {
-          this.LastPasswordChangedDateField = value;
-          this.RaisePropertyChanged("LastPasswordChangedDate");
         }
       }
@@ -1059,4 +1075,7 @@
   public interface IAccessService {
 
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAccessService/AddUserGroupBaseToGroup", ReplyAction = "http://tempuri.org/IAccessService/AddUserGroupBaseToGroupResponse")]
+    void AddUserGroupBaseToGroup(HeuristicLab.Clients.Access.UserGroupBase resource, HeuristicLab.Clients.Access.UserGroup group);
+
     [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAccessService/RemoveUserGroupBaseFromGroup", ReplyAction = "http://tempuri.org/IAccessService/RemoveUserGroupBaseFromGroupResponse")]
     void RemoveUserGroupBaseFromGroup(HeuristicLab.Clients.Access.UserGroupBase resource, HeuristicLab.Clients.Access.UserGroup group);
@@ -1185,4 +1204,7 @@
     System.Collections.Generic.List<HeuristicLab.Clients.Access.LightweightUser> GetLightweightUsers(System.Collections.Generic.List<System.Guid> ids);
 
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAccessService/UpdateLightweightUser", ReplyAction = "http://tempuri.org/IAccessService/UpdateLightweightUserResponse")]
+    void UpdateLightweightUser(HeuristicLab.Clients.Access.LightweightUser user);
+
     [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAccessService/GetAllUsers", ReplyAction = "http://tempuri.org/IAccessService/GetAllUsersResponse")]
     System.Collections.Generic.List<HeuristicLab.Clients.Access.User> GetAllUsers();
@@ -1229,7 +1251,4 @@
     [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAccessService/DeleteUserGroup", ReplyAction = "http://tempuri.org/IAccessService/DeleteUserGroupResponse")]
     void DeleteUserGroup(HeuristicLab.Clients.Access.UserGroup group);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAccessService/AddUserGroupBaseToGroup", ReplyAction = "http://tempuri.org/IAccessService/AddUserGroupBaseToGroupResponse")]
-    void AddUserGroupBaseToGroup(HeuristicLab.Clients.Access.UserGroupBase resource, HeuristicLab.Clients.Access.UserGroup group);
   }
 
@@ -1261,4 +1280,8 @@
     }
 
+    public void AddUserGroupBaseToGroup(HeuristicLab.Clients.Access.UserGroupBase resource, HeuristicLab.Clients.Access.UserGroup group) {
+      base.Channel.AddUserGroupBaseToGroup(resource, group);
+    }
+
     public void RemoveUserGroupBaseFromGroup(HeuristicLab.Clients.Access.UserGroupBase resource, HeuristicLab.Clients.Access.UserGroup group) {
       base.Channel.RemoveUserGroupBaseFromGroup(resource, group);
@@ -1429,4 +1452,8 @@
     }
 
+    public void UpdateLightweightUser(HeuristicLab.Clients.Access.LightweightUser user) {
+      base.Channel.UpdateLightweightUser(user);
+    }
+
     public System.Collections.Generic.List<HeuristicLab.Clients.Access.User> GetAllUsers() {
       return base.Channel.GetAllUsers();
@@ -1488,8 +1515,4 @@
       base.Channel.DeleteUserGroup(group);
     }
-
-    public void AddUserGroupBaseToGroup(HeuristicLab.Clients.Access.UserGroupBase resource, HeuristicLab.Clients.Access.UserGroup group) {
-      base.Channel.AddUserGroupBaseToGroup(resource, group);
-    }
   }
 }
Index: /branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/AccessService.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/AccessService.cs	(revision 7981)
+++ /branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/AccessService.cs	(revision 7982)
@@ -398,4 +398,5 @@
     private DT.LightweightUser BuildLightweightUserDto(Guid userId) {
       DA.aspnet_User aspUser = null;
+      DA.aspnet_Membership aspMembership = null;
       DA.User accessUser = null;
       List<DA.aspnet_Role> roles = new List<DA.aspnet_Role>();
@@ -407,4 +408,12 @@
                         where u.UserId == userId
                         select u;
+
+        var memQuery = from u in context.aspnet_Memberships
+                       where u.UserId == userId
+                       select u;
+        if (memQuery.Count() == 1) {
+          aspMembership = memQuery.First();
+        }
+
         if (userQuery.Count() == 1) {
           aspUser = userQuery.First();
@@ -416,5 +425,5 @@
       }
 
-      if (aspUser != null) {
+      if (aspUser != null || aspMembership != null) {
         using (DA.AccessServiceDataContext context = new DA.AccessServiceDataContext()) {
           var query = from u in context.UserGroupBases.OfType<DA.User>()
@@ -439,8 +448,8 @@
       }
 
-      if (aspUser == null || accessUser == null) {
+      if (aspUser == null || accessUser == null || aspMembership == null) {
         throw new Exception("User with id " + userId + " not found.");
       } else {
-        return Convert.ToDto(accessUser, aspUser, roles, groups);
+        return Convert.ToDto(accessUser, aspUser, aspMembership, roles, groups);
       }
     }
@@ -449,4 +458,13 @@
       Guid userId = UserManager.CurrentUserId;
       return BuildLightweightUserDto(userId);
+    }
+
+    public void UpdateLightweightUser(DT.LightweightUser user) {
+      DT.User u = BuildUserDto(user.Id);
+
+      u.Email = user.EMail;
+      u.FullName = user.FullName;
+
+      UpdateUser(u);
     }
 
@@ -611,5 +629,7 @@
 
     public void UpdateUser(DT.User user) {
-      RoleVerifier.AuthenticateForAllRoles(AccessServiceRoles.Administrator);
+      if (user.Id != UserManager.CurrentUserId) {
+        RoleVerifier.AuthenticateForAllRoles(AccessServiceRoles.Administrator);
+      }
 
       MembershipUser membershipUser = Membership.GetUser((object)user.Id);
Index: /branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/Convert.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/Convert.cs	(revision 7981)
+++ /branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/Convert.cs	(revision 7982)
@@ -291,9 +291,10 @@
     #region User
 
-    public static DT.LightweightUser ToDto(DA.User source, DA.aspnet_User aspUserSource, List<DA.aspnet_Role> roles, List<DA.UserGroup> groups) {
+    public static DT.LightweightUser ToDto(DA.User source, DA.aspnet_User aspUserSource, DA.aspnet_Membership aspMembershipSource, List<DA.aspnet_Role> roles, List<DA.UserGroup> groups) {
       return new DT.LightweightUser() {
         Id = source.Id,
         FullName = source.FullName,
         UserName = aspUserSource.UserName,
+        EMail = aspMembershipSource.Email,
         //TODO: check if the roles and groups are include in source
         Roles = roles.Select(x => Convert.ToDto(x)).ToArray(),
Index: /branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/LightweightUser.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/LightweightUser.cs	(revision 7981)
+++ /branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/DataTransfer/LightweightUser.cs	(revision 7982)
@@ -31,4 +31,6 @@
     public string FullName { get; set; }
     [DataMember]
+    public string EMail { get; set; }
+    [DataMember]
     public IEnumerable<DataTransfer.Role> Roles { get; set; }
     [DataMember]
Index: /branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/IAccessService.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/IAccessService.cs	(revision 7981)
+++ /branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/IAccessService.cs	(revision 7982)
@@ -120,4 +120,7 @@
 
     [OperationContract]
+    void UpdateLightweightUser(LightweightUser user);
+
+    [OperationContract]
     IEnumerable<User> GetAllUsers();
 
