Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access.Administration/3.3/Views/UserGroupView.Designer.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access.Administration/3.3/Views/UserGroupView.Designer.cs	(revision 7638)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access.Administration/3.3/Views/UserGroupView.Designer.cs	(revision 7639)
@@ -28,4 +28,6 @@
       this.groupNameTextBox = new System.Windows.Forms.TextBox();
       this.idTextBox = new System.Windows.Forms.TextBox();
+      this.refreshableLightweightUserView = new HeuristicLab.Clients.Access.Views.RefreshableLightweightUserView();
+      this.storeButton = new System.Windows.Forms.Button();
       this.SuspendLayout();
       // 
@@ -50,9 +52,9 @@
       // groupNameTextBox
       // 
-      this.groupNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
+      this.groupNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
       this.groupNameTextBox.Location = new System.Drawing.Point(79, 3);
       this.groupNameTextBox.Name = "groupNameTextBox";
-      this.groupNameTextBox.Size = new System.Drawing.Size(282, 20);
+      this.groupNameTextBox.Size = new System.Drawing.Size(675, 20);
       this.groupNameTextBox.TabIndex = 2;
       this.groupNameTextBox.TextChanged += new System.EventHandler(this.groupNameTextBox_TextChanged);
@@ -60,11 +62,35 @@
       // idTextBox
       // 
-      this.idTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
+      this.idTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
       this.idTextBox.Enabled = false;
       this.idTextBox.Location = new System.Drawing.Point(79, 29);
       this.idTextBox.Name = "idTextBox";
-      this.idTextBox.Size = new System.Drawing.Size(282, 20);
+      this.idTextBox.Size = new System.Drawing.Size(675, 20);
       this.idTextBox.TabIndex = 3;
+      // 
+      // refreshableLightweightUserView
+      // 
+      this.refreshableLightweightUserView.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.refreshableLightweightUserView.Caption = "RefreshableLightweightUser View";
+      this.refreshableLightweightUserView.Content = null;
+      this.refreshableLightweightUserView.FetchSelectedUsers = null;
+      this.refreshableLightweightUserView.Location = new System.Drawing.Point(0, 55);
+      this.refreshableLightweightUserView.Name = "refreshableLightweightUserView";
+      this.refreshableLightweightUserView.ReadOnly = false;
+      this.refreshableLightweightUserView.Size = new System.Drawing.Size(754, 282);
+      this.refreshableLightweightUserView.TabIndex = 4;
+      // 
+      // storeButton
+      // 
+      this.storeButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.PublishToWeb;
+      this.storeButton.Location = new System.Drawing.Point(31, 58);
+      this.storeButton.Name = "storeButton";
+      this.storeButton.Size = new System.Drawing.Size(24, 24);
+      this.storeButton.TabIndex = 5;
+      this.storeButton.UseVisualStyleBackColor = true;
+      this.storeButton.Click += new System.EventHandler(this.storeButton_Click);
       // 
       // UserGroupView
@@ -72,4 +98,6 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.storeButton);
+      this.Controls.Add(this.refreshableLightweightUserView);
       this.Controls.Add(this.idTextBox);
       this.Controls.Add(this.groupNameTextBox);
@@ -77,5 +105,5 @@
       this.Controls.Add(this.label1);
       this.Name = "UserGroupView";
-      this.Size = new System.Drawing.Size(364, 54);
+      this.Size = new System.Drawing.Size(757, 340);
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -89,4 +117,6 @@
     private System.Windows.Forms.TextBox groupNameTextBox;
     private System.Windows.Forms.TextBox idTextBox;
+    private Views.RefreshableLightweightUserView refreshableLightweightUserView;
+    private System.Windows.Forms.Button storeButton;
   }
 }
Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access.Administration/3.3/Views/UserGroupView.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access.Administration/3.3/Views/UserGroupView.cs	(revision 7638)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access.Administration/3.3/Views/UserGroupView.cs	(revision 7639)
@@ -20,4 +20,6 @@
 #endregion
 
+using System;
+using System.Collections.Generic;
 using HeuristicLab.Core.Views;
 using HeuristicLab.MainForm;
@@ -42,7 +44,13 @@
         groupNameTextBox.Clear();
         idTextBox.Clear();
+
+        refreshableLightweightUserView.Content = null;
+        refreshableLightweightUserView.FetchSelectedUsers = null;
       } else {
         groupNameTextBox.Text = Content.Name;
         idTextBox.Text = Content.Id.ToString();
+
+        refreshableLightweightUserView.Content = Access.AccessClient.Instance;
+        refreshableLightweightUserView.FetchSelectedUsers = new Func<List<Guid>>(delegate { return AccessAdministrationClient.CallAccessService<List<Guid>>(s => s.GetUserGroupIdsOfGroup(Content.Id)); });
       }
     }
@@ -52,4 +60,21 @@
         Content.Name = this.groupNameTextBox.Text;
     }
+
+    private void storeButton_Click(object sender, EventArgs e) {
+      Action storeAction = new Action(delegate {
+        foreach (var ug in refreshableLightweightUserView.GetCheckedUsers()) {
+          AccessAdministrationClient.CallAccessService(s => s.AddUserGroupBaseToGroup(ug, Content));
+        }
+      });
+
+      Action deleteAction = new Action(delegate {
+        foreach (var ug in refreshableLightweightUserView.GetDeletedUsers()) {
+          AccessAdministrationClient.CallAccessService(s => s.RemoveUserGroupBaseFromGroup(ug, Content));
+        }
+      });
+
+      AccessAdministrationClient.Instance.ExecuteActionAsync(storeAction, PluginInfrastructure.ErrorHandling.ShowErrorDialog);
+      AccessAdministrationClient.Instance.ExecuteActionAsync(deleteAction, PluginInfrastructure.ErrorHandling.ShowErrorDialog);
+    }
   }
 }
Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access.Views/3.3/UserViews/RefreshableLightweightUserView.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access.Views/3.3/UserViews/RefreshableLightweightUserView.cs	(revision 7638)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access.Views/3.3/UserViews/RefreshableLightweightUserView.cs	(revision 7639)
@@ -38,6 +38,22 @@
 
     //set an action like a webservice call to retrieve the users which should be marked as checked           
-    public Func<List<Guid>> FetchSelectedUsers { get; set; }
+    private Func<List<Guid>> fetchSelectedUsers;
+    public Func<List<Guid>> FetchSelectedUsers {
+      get { return fetchSelectedUsers; }
+      set {
+        fetchSelectedUsers = value;
+        selectedUsers = null;
+        lightweightUserView.Content = null;
+      }
+    }
+
     private List<Guid> selectedUsers;
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+
+      selectedUsers = null;
+      lightweightUserView.Content = null;
+    }
 
     protected override void RefreshData() {
@@ -66,6 +82,16 @@
     }
 
+    public IItemList<UserGroupBase> GetDeletedUsers() {
+      if (lightweightUserView.Content == null) {
+        return null;
+      } else {
+        var deletedIds = selectedUsers.Where(x => lightweightUserView.Content.Count(y => y.Id == x) == 0);
+        List<UserGroupBase> deletedUGs = Content.UsersAndGroups.Where(x => deletedIds.Contains(x.Id)).ToList();
+        return new ItemList<UserGroupBase>(deletedUGs);
+      }
+    }
+
     public IItemList<UserGroupBase> GetCheckedUsers() {
-      return (lightweightUserView.Content == null) ? null : lightweightUserView.Content;
+      return (lightweightUserView.Content == null) ? null : new ItemList<UserGroupBase>(lightweightUserView.Content.Where(x => !selectedUsers.Contains(x.Id)));
     }
 
Index: /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ServiceClients/AccessServiceClient.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ServiceClients/AccessServiceClient.cs	(revision 7638)
+++ /branches/ClientUserManagement/HeuristicLab.Clients.Access/3.3/ServiceClients/AccessServiceClient.cs	(revision 7639)
@@ -2,5 +2,5 @@
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.261
+//     Runtime Version:4.0.30319.530
 //
 //     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.LightweightUser))]
   [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.UserGroup))]
   [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.User))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.LightweightUser))]
   public partial class AccessItem : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
 
@@ -46,6 +46,4 @@
 
     public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
-
-
   }
 
@@ -665,7 +663,7 @@
       "")]
   [System.SerializableAttribute()]
+  [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))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Access.LightweightUser))]
   public partial class UserGroupBase : HeuristicLab.Clients.Access.AccessItem {
 
@@ -689,4 +687,76 @@
   [System.Diagnostics.DebuggerStepThroughAttribute()]
   [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "LightweightUser", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
+      "")]
+  [System.SerializableAttribute()]
+  public partial class LightweightUser : HeuristicLab.Clients.Access.UserGroupBase {
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private string FullNameField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private 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 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 {
+        return this.GroupsField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.GroupsField, value) != true)) {
+          this.GroupsField = value;
+          this.RaisePropertyChanged("Groups");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Collections.Generic.List<HeuristicLab.Clients.Access.Role> Roles {
+      get {
+        return this.RolesField;
+      }
+      set {
+        if ((object.ReferenceEquals(this.RolesField, value) != true)) {
+          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" +
       "")]
@@ -845,76 +915,4 @@
           this.LastPasswordChangedDateField = value;
           this.RaisePropertyChanged("LastPasswordChangedDate");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public string UserName {
-      get {
-        return this.UserNameField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.UserNameField, value) != true)) {
-          this.UserNameField = value;
-          this.RaisePropertyChanged("UserName");
-        }
-      }
-    }
-  }
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "LightweightUser", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Access.DataTransfer" +
-      "")]
-  [System.SerializableAttribute()]
-  public partial class LightweightUser : HeuristicLab.Clients.Access.UserGroupBase {
-
-    [System.Runtime.Serialization.OptionalFieldAttribute()]
-    private string FullNameField;
-
-    [System.Runtime.Serialization.OptionalFieldAttribute()]
-    private 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 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 {
-        return this.GroupsField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.GroupsField, value) != true)) {
-          this.GroupsField = value;
-          this.RaisePropertyChanged("Groups");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public System.Collections.Generic.List<HeuristicLab.Clients.Access.Role> Roles {
-      get {
-        return this.RolesField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.RolesField, value) != true)) {
-          this.RolesField = value;
-          this.RaisePropertyChanged("Roles");
         }
       }
@@ -1076,4 +1074,7 @@
     System.Collections.Generic.List<HeuristicLab.Clients.Access.UserGroupMapping> GetUserGroupMapping();
 
+    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAccessService/GetUserGroupIdsOfGroup", ReplyAction = "http://tempuri.org/IAccessService/GetUserGroupIdsOfGroupResponse")]
+    System.Collections.Generic.List<System.Guid> GetUserGroupIdsOfGroup(System.Guid groupId);
+
     [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAccessService/GetRoles", ReplyAction = "http://tempuri.org/IAccessService/GetRolesResponse")]
     System.Collections.Generic.List<HeuristicLab.Clients.Access.Role> GetRoles();
@@ -1280,4 +1281,8 @@
     }
 
+    public System.Collections.Generic.List<System.Guid> GetUserGroupIdsOfGroup(System.Guid groupId) {
+      return base.Channel.GetUserGroupIdsOfGroup(groupId);
+    }
+
     public System.Collections.Generic.List<HeuristicLab.Clients.Access.Role> GetRoles() {
       return base.Channel.GetRoles();
Index: /branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/AccessService.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/AccessService.cs	(revision 7638)
+++ /branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/AccessService.cs	(revision 7639)
@@ -716,4 +716,13 @@
       }
     }
+
+    public IEnumerable<Guid> GetUserGroupIdsOfGroup(Guid groupId) {
+      using (DA.AccessServiceDataContext context = new DA.AccessServiceDataContext()) {
+        var query = from u in context.UserGroupUserGroups
+                    where u.UserGroupUserGroupId == groupId
+                    select u.UserGroupId;
+        return query.ToList();
+      }
+    }
     #endregion
 
Index: /branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/IAccessService.cs
===================================================================
--- /branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/IAccessService.cs	(revision 7638)
+++ /branches/ClientUserManagement/HeuristicLab.Services.Access/3.3/IAccessService.cs	(revision 7639)
@@ -187,4 +187,7 @@
     [OperationContract]
     IEnumerable<UserGroupMapping> GetUserGroupMapping();
+
+    [OperationContract]
+    IEnumerable<Guid> GetUserGroupIdsOfGroup(Guid groupId);
     #endregion
 
