Index: trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/ClientAdapter.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/ClientAdapter.cs	(revision 964)
+++ trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/ClientAdapter.cs	(revision 965)
@@ -45,4 +45,16 @@
 
         return resAdapter;
+      }
+    }
+
+    private IClientGroupAdapter clientGroupAdapter = null;
+
+    private IClientGroupAdapter ClientGroupAdapter {
+      get {
+        if (clientGroupAdapter == null) {
+          clientGroupAdapter = ServiceLocator.GetClientGroupAdapter();
+        }
+
+        return clientGroupAdapter;
       }
     }
@@ -159,4 +171,18 @@
     }
 
+    public ClientInfo GetClientById(long id) {
+      ClientInfo client = new ClientInfo();
+
+      dsHiveServer.ClientRow row = data.FindByResourceId(id);
+
+      if (row != null) {
+        Convert(row, client);
+
+        return client;
+      } else {
+        return null;
+      }
+    }
+
     public ICollection<ClientInfo> GetAllClients() {
       ICollection<ClientInfo> allClients =
@@ -173,5 +199,5 @@
 
     [MethodImpl(MethodImplOptions.Synchronized)]
-    public bool DeleteClient(ClientInfo client) {
+    public bool DeleteClient(ClientInfo client) {      
       if (client != null) {
         dsHiveServer.ClientRow row = null;
@@ -185,4 +211,12 @@
 
         if (row != null) {
+          ICollection<ClientGroup> clientGroups =
+            ClientGroupAdapter.MemberOf(client);
+
+          foreach (ClientGroup group in clientGroups) {
+            group.Resources.Remove(client);
+            ClientGroupAdapter.UpdateClientGroup(group);
+          }
+
           data.RemoveClientRow(row);
 
Index: trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/ClientGroupAdapter.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/ClientGroupAdapter.cs	(revision 964)
+++ trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/ClientGroupAdapter.cs	(revision 965)
@@ -27,23 +27,291 @@
 using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess;
 using HeuristicLab.Hive.Contracts.BusinessObjects;
+using System.Runtime.CompilerServices;
+using System.Data;
 
 namespace HeuristicLab.Hive.Server.ADODataAccess {
-  class ClientGroupAdapter: IClientGroupAdapter {
+  class ClientGroupAdapter : DataAdapterBase, IClientGroupAdapter {
+    private dsHiveServerTableAdapters.ClientGroupTableAdapter adapter =
+        new dsHiveServerTableAdapters.ClientGroupTableAdapter();
+
+    private dsHiveServer.ClientGroupDataTable data =
+      new dsHiveServer.ClientGroupDataTable();
+
+    private dsHiveServerTableAdapters.ClientGroup_ResourceTableAdapter resourceClientGroupAdapter =
+      new dsHiveServerTableAdapters.ClientGroup_ResourceTableAdapter();
+
+    private dsHiveServer.ClientGroup_ResourceDataTable resourceClientGroupData =
+      new dsHiveServer.ClientGroup_ResourceDataTable();
+
+    private IResourceAdapter resourceAdapter = null;
+
+    private IResourceAdapter ResourceAdapter {
+      get {
+        if (resourceAdapter == null)
+          resourceAdapter = ServiceLocator.GetResourceAdapter();
+
+        return resourceAdapter;
+      }
+    }
+
+    private IClientAdapter clientAdapter = null;
+
+    private IClientAdapter ClientAdapter {
+      get {
+        if (clientAdapter == null)
+          clientAdapter = ServiceLocator.GetClientAdapter();
+
+        return clientAdapter;
+      }
+    }
+
+    public ClientGroupAdapter() {
+      adapter.Fill(data);
+      resourceClientGroupAdapter.Fill(resourceClientGroupData);
+    }
+
+    protected override void Update() {
+      this.adapter.Update(this.data);
+      this.resourceClientGroupAdapter.Update(resourceClientGroupData);
+    }
+
+    private ClientGroup Convert(dsHiveServer.ClientGroupRow row,
+      ClientGroup clientGroup) {
+      if (row != null && clientGroup != null) {
+        /*Parent - Permission Owner*/
+        clientGroup.ResourceId = row.ResourceId;
+        ResourceAdapter.GetResourceById(clientGroup);
+
+        //first check for created references
+        IEnumerable<dsHiveServer.ClientGroup_ResourceRow> clientGroupRows =
+          from resource in
+            resourceClientGroupData.AsEnumerable<dsHiveServer.ClientGroup_ResourceRow>()
+          where resource.ClientGroupResource == clientGroup.ResourceId
+          select resource;
+
+        foreach (dsHiveServer.ClientGroup_ResourceRow resourceClientGroupRow in
+          clientGroupRows) {
+          Resource resource = null;
+
+          IEnumerable<Resource> resources =
+            from p in
+              clientGroup.Resources
+            where p.ResourceId == resourceClientGroupRow.ResourceId
+            select p;
+          if (resources.Count<Resource>() == 1)
+            resource = resources.First<Resource>();
+
+          if (resource == null) {
+            Resource res =
+              ClientAdapter.GetClientById(resourceClientGroupRow.ResourceId);
+
+            if (res == null) {
+              //is a client group
+              res =
+                GetClientGroupById(resourceClientGroupRow.ResourceId);
+            }
+
+            if (res != null)
+              clientGroup.Resources.Add(res);
+          }
+        }
+
+        //secondly check for deleted references
+        ICollection<Resource> deleted =
+          new List<Resource>();
+
+        foreach (Resource resource in clientGroup.Resources) {
+          dsHiveServer.ClientGroup_ResourceRow permOwnerUserGroupRow =
+            resourceClientGroupData.FindByClientGroupResourceResourceId(
+              clientGroup.ResourceId,
+              resource.ResourceId);
+
+          if (permOwnerUserGroupRow == null) {
+            deleted.Add(resource);
+          }
+        }
+
+        foreach (Resource resource in deleted) {
+          clientGroup.Resources.Remove(resource);
+        }
+
+        return clientGroup;
+      } else
+        return null;
+    }
+
+    private dsHiveServer.ClientGroupRow Convert(ClientGroup clientGroup,
+      dsHiveServer.ClientGroupRow row) {
+      if (clientGroup != null && row != null) {
+        row.ResourceId = clientGroup.ResourceId;
+
+        //update references
+        foreach (Resource resource in clientGroup.Resources) {
+          //first update the member to make sure it exists in the DB
+          if (resource is ClientInfo) {
+            ClientAdapter.UpdateClient(resource as ClientInfo);
+          } else if (resource is ClientGroup) {
+            UpdateClientGroup(resource as ClientGroup);
+          }
+
+          //secondly check for created references
+          dsHiveServer.ClientGroup_ResourceRow resourceClientGroupRow =
+            resourceClientGroupData.FindByClientGroupResourceResourceId(
+                            clientGroup.ResourceId,
+                            resource.ResourceId);
+
+          if (resourceClientGroupRow == null) {
+            resourceClientGroupRow =
+              resourceClientGroupData.NewClientGroup_ResourceRow();
+
+            resourceClientGroupRow.ResourceId =
+              resource.ResourceId;
+            resourceClientGroupRow.ClientGroupResource =
+              clientGroup.ResourceId;
+
+            resourceClientGroupData.AddClientGroup_ResourceRow(
+              resourceClientGroupRow);
+          }
+        }
+
+        //thirdly check for deleted references
+        IEnumerable<dsHiveServer.ClientGroup_ResourceRow> clientGroupRows =
+          from permOwner in
+            resourceClientGroupData.AsEnumerable<dsHiveServer.ClientGroup_ResourceRow>()
+          where permOwner.ClientGroupResource == clientGroup.ResourceId
+          select permOwner;
+
+        ICollection<dsHiveServer.ClientGroup_ResourceRow> deleted =
+          new List<dsHiveServer.ClientGroup_ResourceRow>();
+
+        foreach (dsHiveServer.ClientGroup_ResourceRow resourceClientGroupRow in
+          clientGroupRows) {
+          Resource resource = null;
+
+          IEnumerable<Resource> resources =
+            from r in
+              clientGroup.Resources
+            where r.ResourceId == resourceClientGroupRow.ResourceId
+            select r;
+
+          if (resources.Count<Resource>() == 1)
+            resource = resources.First<Resource>();
+
+          if (resource == null) {
+            deleted.Add(resourceClientGroupRow);
+          }
+        }
+
+        foreach (dsHiveServer.ClientGroup_ResourceRow resoruceClientGroupRow in
+          deleted) {
+          resourceClientGroupData.RemoveClientGroup_ResourceRow(
+            resoruceClientGroupRow);
+        }
+
+      }
+
+      return row;
+    }
+
     #region IClientGroupAdapter Members
-
+    [MethodImpl(MethodImplOptions.Synchronized)]
     public void UpdateClientGroup(ClientGroup group) {
-      throw new NotImplementedException();
+      if (group != null) {
+        ResourceAdapter.UpdateResource(group);
+
+        dsHiveServer.ClientGroupRow row =
+          data.FindByResourceId(group.ResourceId);
+
+        if (row == null) {
+          row = data.NewClientGroupRow();
+          row.ResourceId = group.ResourceId;
+          data.AddClientGroupRow(row);
+        }
+
+        Convert(group, row);
+      }
     }
 
     public ClientGroup GetClientGroupById(long clientGroupId) {
-      throw new NotImplementedException();
+      ClientGroup clientGroup = new ClientGroup();
+
+      dsHiveServer.ClientGroupRow row =
+        data.FindByResourceId(clientGroupId);
+
+      if (row != null) {
+        Convert(row, clientGroup);
+
+        return clientGroup;
+      } else {
+        return null;
+      }
     }
 
     public ICollection<ClientGroup> GetAllClientGroups() {
-      throw new NotImplementedException();
-    }
-
+      ICollection<ClientGroup> allClientGroups =
+        new List<ClientGroup>();
+
+      foreach (dsHiveServer.ClientGroupRow row in data) {
+        ClientGroup clientGroup = new ClientGroup();
+
+        Convert(row, clientGroup);
+        allClientGroups.Add(clientGroup);
+      }
+
+      return allClientGroups;
+    }
+
+    public ICollection<ClientGroup> MemberOf(Resource resource) {
+      ICollection<ClientGroup> clientGroups =
+        new List<ClientGroup>();
+
+      if (resource != null) {
+        IEnumerable<dsHiveServer.ClientGroup_ResourceRow> clientGroupRows =
+         from clientGroup in
+           resourceClientGroupData.AsEnumerable<dsHiveServer.ClientGroup_ResourceRow>()
+         where clientGroup.ResourceId == resource.ResourceId
+         select clientGroup;
+
+        foreach (dsHiveServer.ClientGroup_ResourceRow clientGroupRow in
+          clientGroupRows) {
+          ClientGroup clientGroup =
+            GetClientGroupById(clientGroupRow.ClientGroupResource);
+          clientGroups.Add(clientGroup);
+        }
+      }
+
+      return clientGroups;
+    }
+
+    [MethodImpl(MethodImplOptions.Synchronized)]
     public bool DeleteClientGroup(ClientGroup group) {
-      throw new NotImplementedException();
+      if (group != null) {
+        dsHiveServer.ClientGroupRow row =
+          data.FindByResourceId(group.ResourceId);
+
+        if (row != null) {
+          ICollection<dsHiveServer.ClientGroup_ResourceRow> deleted =
+            new List<dsHiveServer.ClientGroup_ResourceRow>();
+
+          foreach (dsHiveServer.ClientGroup_ResourceRow resourceClientGroupRow in
+            resourceClientGroupData) {
+            if (resourceClientGroupRow.ClientGroupResource == group.ResourceId ||
+              resourceClientGroupRow.ResourceId == group.ResourceId) {
+              deleted.Add(resourceClientGroupRow);
+            }
+          }
+
+          foreach (dsHiveServer.ClientGroup_ResourceRow resourceClientGroupRow in
+            deleted) {
+            resourceClientGroupData.RemoveClientGroup_ResourceRow(
+              resourceClientGroupRow);
+          }
+
+          data.RemoveClientGroupRow(row);
+          return ResourceAdapter.DeleteResource(group);
+        }
+      }
+
+      return false;
     }
 
Index: trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/UserGroupAdapter.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/UserGroupAdapter.cs	(revision 964)
+++ trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/UserGroupAdapter.cs	(revision 965)
@@ -112,5 +112,6 @@
             }
 
-            userGroup.Members.Add(permissionOwner);
+            if(permissionOwner != null)
+              userGroup.Members.Add(permissionOwner);
           }
         }
Index: trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.Designer.cs	(revision 964)
+++ trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.Designer.cs	(revision 965)
@@ -38,4 +38,8 @@
         private PermissionOwner_UserGroupDataTable tablePermissionOwner_UserGroup;
         
+        private ClientGroupDataTable tableClientGroup;
+        
+        private ClientGroup_ResourceDataTable tableClientGroup_Resource;
+        
         private global::System.Data.DataRelation relationClient_is_a_Resource;
         
@@ -47,4 +51,10 @@
         
         private global::System.Data.DataRelation relationR_57;
+        
+        private global::System.Data.DataRelation relationClientGroup_is_a_Resource;
+        
+        private global::System.Data.DataRelation relationR_52;
+        
+        private global::System.Data.DataRelation relationR_59;
         
         private global::System.Data.SchemaSerializationMode _schemaSerializationMode = global::System.Data.SchemaSerializationMode.IncludeSchema;
@@ -92,4 +102,10 @@
                     base.Tables.Add(new PermissionOwner_UserGroupDataTable(ds.Tables["PermissionOwner_UserGroup"]));
                 }
+                if ((ds.Tables["ClientGroup"] != null)) {
+                    base.Tables.Add(new ClientGroupDataTable(ds.Tables["ClientGroup"]));
+                }
+                if ((ds.Tables["ClientGroup_Resource"] != null)) {
+                    base.Tables.Add(new ClientGroup_ResourceDataTable(ds.Tables["ClientGroup_Resource"]));
+                }
                 this.DataSetName = ds.DataSetName;
                 this.Prefix = ds.Prefix;
@@ -165,4 +181,22 @@
         
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Browsable(false)]
+        [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)]
+        public ClientGroupDataTable ClientGroup {
+            get {
+                return this.tableClientGroup;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Browsable(false)]
+        [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)]
+        public ClientGroup_ResourceDataTable ClientGroup_Resource {
+            get {
+                return this.tableClientGroup_Resource;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
         [global::System.ComponentModel.BrowsableAttribute(true)]
         [global::System.ComponentModel.DesignerSerializationVisibilityAttribute(global::System.ComponentModel.DesignerSerializationVisibility.Visible)]
@@ -240,4 +274,10 @@
                 if ((ds.Tables["PermissionOwner_UserGroup"] != null)) {
                     base.Tables.Add(new PermissionOwner_UserGroupDataTable(ds.Tables["PermissionOwner_UserGroup"]));
+                }
+                if ((ds.Tables["ClientGroup"] != null)) {
+                    base.Tables.Add(new ClientGroupDataTable(ds.Tables["ClientGroup"]));
+                }
+                if ((ds.Tables["ClientGroup_Resource"] != null)) {
+                    base.Tables.Add(new ClientGroup_ResourceDataTable(ds.Tables["ClientGroup_Resource"]));
                 }
                 this.DataSetName = ds.DataSetName;
@@ -307,4 +347,16 @@
                 }
             }
+            this.tableClientGroup = ((ClientGroupDataTable)(base.Tables["ClientGroup"]));
+            if ((initTable == true)) {
+                if ((this.tableClientGroup != null)) {
+                    this.tableClientGroup.InitVars();
+                }
+            }
+            this.tableClientGroup_Resource = ((ClientGroup_ResourceDataTable)(base.Tables["ClientGroup_Resource"]));
+            if ((initTable == true)) {
+                if ((this.tableClientGroup_Resource != null)) {
+                    this.tableClientGroup_Resource.InitVars();
+                }
+            }
             this.relationClient_is_a_Resource = this.Relations["Client_is_a_Resource"];
             this.relationUser_is_a_PermissionOwner = this.Relations["User_is_a_PermissionOwner"];
@@ -312,4 +364,7 @@
             this.relationR_44 = this.Relations["R_44"];
             this.relationR_57 = this.Relations["R_57"];
+            this.relationClientGroup_is_a_Resource = this.Relations["ClientGroup_is_a_Resource"];
+            this.relationR_52 = this.Relations["R_52"];
+            this.relationR_59 = this.Relations["R_59"];
         }
         
@@ -333,4 +388,8 @@
             this.tablePermissionOwner_UserGroup = new PermissionOwner_UserGroupDataTable();
             base.Tables.Add(this.tablePermissionOwner_UserGroup);
+            this.tableClientGroup = new ClientGroupDataTable();
+            base.Tables.Add(this.tableClientGroup);
+            this.tableClientGroup_Resource = new ClientGroup_ResourceDataTable();
+            base.Tables.Add(this.tableClientGroup_Resource);
             this.relationClient_is_a_Resource = new global::System.Data.DataRelation("Client_is_a_Resource", new global::System.Data.DataColumn[] {
                         this.tableResource.ResourceIdColumn}, new global::System.Data.DataColumn[] {
@@ -353,4 +412,16 @@
                         this.tablePermissionOwner_UserGroup.UserGroupIdColumn}, false);
             this.Relations.Add(this.relationR_57);
+            this.relationClientGroup_is_a_Resource = new global::System.Data.DataRelation("ClientGroup_is_a_Resource", new global::System.Data.DataColumn[] {
+                        this.tableResource.ResourceIdColumn}, new global::System.Data.DataColumn[] {
+                        this.tableClientGroup.ResourceIdColumn}, false);
+            this.Relations.Add(this.relationClientGroup_is_a_Resource);
+            this.relationR_52 = new global::System.Data.DataRelation("R_52", new global::System.Data.DataColumn[] {
+                        this.tableClientGroup.ResourceIdColumn}, new global::System.Data.DataColumn[] {
+                        this.tableClientGroup_Resource.ClientGroupResourceColumn}, false);
+            this.Relations.Add(this.relationR_52);
+            this.relationR_59 = new global::System.Data.DataRelation("R_59", new global::System.Data.DataColumn[] {
+                        this.tableResource.ResourceIdColumn}, new global::System.Data.DataColumn[] {
+                        this.tableClientGroup_Resource.ResourceIdColumn}, false);
+            this.Relations.Add(this.relationR_59);
         }
         
@@ -382,4 +453,14 @@
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
         private bool ShouldSerializePermissionOwner_UserGroup() {
+            return false;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private bool ShouldSerializeClientGroup() {
+            return false;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private bool ShouldSerializeClientGroup_Resource() {
             return false;
         }
@@ -449,4 +530,8 @@
         
         public delegate void PermissionOwner_UserGroupRowChangeEventHandler(object sender, PermissionOwner_UserGroupRowChangeEvent e);
+        
+        public delegate void ClientGroupRowChangeEventHandler(object sender, ClientGroupRowChangeEvent e);
+        
+        public delegate void ClientGroup_ResourceRowChangeEventHandler(object sender, ClientGroup_ResourceRowChangeEvent e);
         
         /// <summary>
@@ -2021,4 +2106,494 @@
         
         /// <summary>
+        ///Represents the strongly named DataTable class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        [global::System.Serializable()]
+        [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedTableSchema")]
+        public partial class ClientGroupDataTable : global::System.Data.TypedTableBase<ClientGroupRow> {
+            
+            private global::System.Data.DataColumn columnResourceId;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroupDataTable() {
+                this.TableName = "ClientGroup";
+                this.BeginInit();
+                this.InitClass();
+                this.EndInit();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal ClientGroupDataTable(global::System.Data.DataTable table) {
+                this.TableName = table.TableName;
+                if ((table.CaseSensitive != table.DataSet.CaseSensitive)) {
+                    this.CaseSensitive = table.CaseSensitive;
+                }
+                if ((table.Locale.ToString() != table.DataSet.Locale.ToString())) {
+                    this.Locale = table.Locale;
+                }
+                if ((table.Namespace != table.DataSet.Namespace)) {
+                    this.Namespace = table.Namespace;
+                }
+                this.Prefix = table.Prefix;
+                this.MinimumCapacity = table.MinimumCapacity;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected ClientGroupDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : 
+                    base(info, context) {
+                this.InitVars();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn ResourceIdColumn {
+                get {
+                    return this.columnResourceId;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            [global::System.ComponentModel.Browsable(false)]
+            public int Count {
+                get {
+                    return this.Rows.Count;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroupRow this[int index] {
+                get {
+                    return ((ClientGroupRow)(this.Rows[index]));
+                }
+            }
+            
+            public event ClientGroupRowChangeEventHandler ClientGroupRowChanging;
+            
+            public event ClientGroupRowChangeEventHandler ClientGroupRowChanged;
+            
+            public event ClientGroupRowChangeEventHandler ClientGroupRowDeleting;
+            
+            public event ClientGroupRowChangeEventHandler ClientGroupRowDeleted;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void AddClientGroupRow(ClientGroupRow row) {
+                this.Rows.Add(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroupRow AddClientGroupRow(ResourceRow parentResourceRowByClientGroup_is_a_Resource) {
+                ClientGroupRow rowClientGroupRow = ((ClientGroupRow)(this.NewRow()));
+                object[] columnValuesArray = new object[] {
+                        null};
+                if ((parentResourceRowByClientGroup_is_a_Resource != null)) {
+                    columnValuesArray[0] = parentResourceRowByClientGroup_is_a_Resource[0];
+                }
+                rowClientGroupRow.ItemArray = columnValuesArray;
+                this.Rows.Add(rowClientGroupRow);
+                return rowClientGroupRow;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroupRow FindByResourceId(long ResourceId) {
+                return ((ClientGroupRow)(this.Rows.Find(new object[] {
+                            ResourceId})));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public override global::System.Data.DataTable Clone() {
+                ClientGroupDataTable cln = ((ClientGroupDataTable)(base.Clone()));
+                cln.InitVars();
+                return cln;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataTable CreateInstance() {
+                return new ClientGroupDataTable();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal void InitVars() {
+                this.columnResourceId = base.Columns["ResourceId"];
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            private void InitClass() {
+                this.columnResourceId = new global::System.Data.DataColumn("ResourceId", typeof(long), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnResourceId);
+                this.Constraints.Add(new global::System.Data.UniqueConstraint("Constraint1", new global::System.Data.DataColumn[] {
+                                this.columnResourceId}, true));
+                this.columnResourceId.AllowDBNull = false;
+                this.columnResourceId.Unique = true;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroupRow NewClientGroupRow() {
+                return ((ClientGroupRow)(this.NewRow()));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) {
+                return new ClientGroupRow(builder);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Type GetRowType() {
+                return typeof(ClientGroupRow);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanged(e);
+                if ((this.ClientGroupRowChanged != null)) {
+                    this.ClientGroupRowChanged(this, new ClientGroupRowChangeEvent(((ClientGroupRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanging(e);
+                if ((this.ClientGroupRowChanging != null)) {
+                    this.ClientGroupRowChanging(this, new ClientGroupRowChangeEvent(((ClientGroupRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleted(e);
+                if ((this.ClientGroupRowDeleted != null)) {
+                    this.ClientGroupRowDeleted(this, new ClientGroupRowChangeEvent(((ClientGroupRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleting(e);
+                if ((this.ClientGroupRowDeleting != null)) {
+                    this.ClientGroupRowDeleting(this, new ClientGroupRowChangeEvent(((ClientGroupRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void RemoveClientGroupRow(ClientGroupRow row) {
+                this.Rows.Remove(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) {
+                global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType();
+                global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence();
+                dsHiveServer ds = new dsHiveServer();
+                global::System.Xml.Schema.XmlSchemaAny any1 = new global::System.Xml.Schema.XmlSchemaAny();
+                any1.Namespace = "http://www.w3.org/2001/XMLSchema";
+                any1.MinOccurs = new decimal(0);
+                any1.MaxOccurs = decimal.MaxValue;
+                any1.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any1);
+                global::System.Xml.Schema.XmlSchemaAny any2 = new global::System.Xml.Schema.XmlSchemaAny();
+                any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1";
+                any2.MinOccurs = new decimal(1);
+                any2.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any2);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute1 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute1.Name = "namespace";
+                attribute1.FixedValue = ds.Namespace;
+                type.Attributes.Add(attribute1);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute2 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute2.Name = "tableTypeName";
+                attribute2.FixedValue = "ClientGroupDataTable";
+                type.Attributes.Add(attribute2);
+                type.Particle = sequence;
+                global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable();
+                if (xs.Contains(dsSchema.TargetNamespace)) {
+                    global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream();
+                    global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream();
+                    try {
+                        global::System.Xml.Schema.XmlSchema schema = null;
+                        dsSchema.Write(s1);
+                        for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) {
+                            schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current));
+                            s2.SetLength(0);
+                            schema.Write(s2);
+                            if ((s1.Length == s2.Length)) {
+                                s1.Position = 0;
+                                s2.Position = 0;
+                                for (; ((s1.Position != s1.Length) 
+                                            && (s1.ReadByte() == s2.ReadByte())); ) {
+                                    ;
+                                }
+                                if ((s1.Position == s1.Length)) {
+                                    return type;
+                                }
+                            }
+                        }
+                    }
+                    finally {
+                        if ((s1 != null)) {
+                            s1.Close();
+                        }
+                        if ((s2 != null)) {
+                            s2.Close();
+                        }
+                    }
+                }
+                xs.Add(dsSchema);
+                return type;
+            }
+        }
+        
+        /// <summary>
+        ///Represents the strongly named DataTable class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        [global::System.Serializable()]
+        [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedTableSchema")]
+        public partial class ClientGroup_ResourceDataTable : global::System.Data.TypedTableBase<ClientGroup_ResourceRow> {
+            
+            private global::System.Data.DataColumn columnClientGroupResource;
+            
+            private global::System.Data.DataColumn columnResourceId;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroup_ResourceDataTable() {
+                this.TableName = "ClientGroup_Resource";
+                this.BeginInit();
+                this.InitClass();
+                this.EndInit();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal ClientGroup_ResourceDataTable(global::System.Data.DataTable table) {
+                this.TableName = table.TableName;
+                if ((table.CaseSensitive != table.DataSet.CaseSensitive)) {
+                    this.CaseSensitive = table.CaseSensitive;
+                }
+                if ((table.Locale.ToString() != table.DataSet.Locale.ToString())) {
+                    this.Locale = table.Locale;
+                }
+                if ((table.Namespace != table.DataSet.Namespace)) {
+                    this.Namespace = table.Namespace;
+                }
+                this.Prefix = table.Prefix;
+                this.MinimumCapacity = table.MinimumCapacity;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected ClientGroup_ResourceDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : 
+                    base(info, context) {
+                this.InitVars();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn ClientGroupResourceColumn {
+                get {
+                    return this.columnClientGroupResource;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn ResourceIdColumn {
+                get {
+                    return this.columnResourceId;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            [global::System.ComponentModel.Browsable(false)]
+            public int Count {
+                get {
+                    return this.Rows.Count;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroup_ResourceRow this[int index] {
+                get {
+                    return ((ClientGroup_ResourceRow)(this.Rows[index]));
+                }
+            }
+            
+            public event ClientGroup_ResourceRowChangeEventHandler ClientGroup_ResourceRowChanging;
+            
+            public event ClientGroup_ResourceRowChangeEventHandler ClientGroup_ResourceRowChanged;
+            
+            public event ClientGroup_ResourceRowChangeEventHandler ClientGroup_ResourceRowDeleting;
+            
+            public event ClientGroup_ResourceRowChangeEventHandler ClientGroup_ResourceRowDeleted;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void AddClientGroup_ResourceRow(ClientGroup_ResourceRow row) {
+                this.Rows.Add(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroup_ResourceRow AddClientGroup_ResourceRow(ClientGroupRow parentClientGroupRowByR_52, ResourceRow parentResourceRowByR_59) {
+                ClientGroup_ResourceRow rowClientGroup_ResourceRow = ((ClientGroup_ResourceRow)(this.NewRow()));
+                object[] columnValuesArray = new object[] {
+                        null,
+                        null};
+                if ((parentClientGroupRowByR_52 != null)) {
+                    columnValuesArray[0] = parentClientGroupRowByR_52[0];
+                }
+                if ((parentResourceRowByR_59 != null)) {
+                    columnValuesArray[1] = parentResourceRowByR_59[0];
+                }
+                rowClientGroup_ResourceRow.ItemArray = columnValuesArray;
+                this.Rows.Add(rowClientGroup_ResourceRow);
+                return rowClientGroup_ResourceRow;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroup_ResourceRow FindByClientGroupResourceResourceId(long ClientGroupResource, long ResourceId) {
+                return ((ClientGroup_ResourceRow)(this.Rows.Find(new object[] {
+                            ClientGroupResource,
+                            ResourceId})));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public override global::System.Data.DataTable Clone() {
+                ClientGroup_ResourceDataTable cln = ((ClientGroup_ResourceDataTable)(base.Clone()));
+                cln.InitVars();
+                return cln;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataTable CreateInstance() {
+                return new ClientGroup_ResourceDataTable();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal void InitVars() {
+                this.columnClientGroupResource = base.Columns["ClientGroupResource"];
+                this.columnResourceId = base.Columns["ResourceId"];
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            private void InitClass() {
+                this.columnClientGroupResource = new global::System.Data.DataColumn("ClientGroupResource", typeof(long), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnClientGroupResource);
+                this.columnResourceId = new global::System.Data.DataColumn("ResourceId", typeof(long), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnResourceId);
+                this.Constraints.Add(new global::System.Data.UniqueConstraint("Constraint1", new global::System.Data.DataColumn[] {
+                                this.columnClientGroupResource,
+                                this.columnResourceId}, true));
+                this.columnClientGroupResource.AllowDBNull = false;
+                this.columnResourceId.AllowDBNull = false;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroup_ResourceRow NewClientGroup_ResourceRow() {
+                return ((ClientGroup_ResourceRow)(this.NewRow()));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) {
+                return new ClientGroup_ResourceRow(builder);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Type GetRowType() {
+                return typeof(ClientGroup_ResourceRow);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanged(e);
+                if ((this.ClientGroup_ResourceRowChanged != null)) {
+                    this.ClientGroup_ResourceRowChanged(this, new ClientGroup_ResourceRowChangeEvent(((ClientGroup_ResourceRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanging(e);
+                if ((this.ClientGroup_ResourceRowChanging != null)) {
+                    this.ClientGroup_ResourceRowChanging(this, new ClientGroup_ResourceRowChangeEvent(((ClientGroup_ResourceRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleted(e);
+                if ((this.ClientGroup_ResourceRowDeleted != null)) {
+                    this.ClientGroup_ResourceRowDeleted(this, new ClientGroup_ResourceRowChangeEvent(((ClientGroup_ResourceRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleting(e);
+                if ((this.ClientGroup_ResourceRowDeleting != null)) {
+                    this.ClientGroup_ResourceRowDeleting(this, new ClientGroup_ResourceRowChangeEvent(((ClientGroup_ResourceRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void RemoveClientGroup_ResourceRow(ClientGroup_ResourceRow row) {
+                this.Rows.Remove(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) {
+                global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType();
+                global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence();
+                dsHiveServer ds = new dsHiveServer();
+                global::System.Xml.Schema.XmlSchemaAny any1 = new global::System.Xml.Schema.XmlSchemaAny();
+                any1.Namespace = "http://www.w3.org/2001/XMLSchema";
+                any1.MinOccurs = new decimal(0);
+                any1.MaxOccurs = decimal.MaxValue;
+                any1.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any1);
+                global::System.Xml.Schema.XmlSchemaAny any2 = new global::System.Xml.Schema.XmlSchemaAny();
+                any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1";
+                any2.MinOccurs = new decimal(1);
+                any2.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any2);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute1 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute1.Name = "namespace";
+                attribute1.FixedValue = ds.Namespace;
+                type.Attributes.Add(attribute1);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute2 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute2.Name = "tableTypeName";
+                attribute2.FixedValue = "ClientGroup_ResourceDataTable";
+                type.Attributes.Add(attribute2);
+                type.Particle = sequence;
+                global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable();
+                if (xs.Contains(dsSchema.TargetNamespace)) {
+                    global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream();
+                    global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream();
+                    try {
+                        global::System.Xml.Schema.XmlSchema schema = null;
+                        dsSchema.Write(s1);
+                        for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) {
+                            schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current));
+                            s2.SetLength(0);
+                            schema.Write(s2);
+                            if ((s1.Length == s2.Length)) {
+                                s1.Position = 0;
+                                s2.Position = 0;
+                                for (; ((s1.Position != s1.Length) 
+                                            && (s1.ReadByte() == s2.ReadByte())); ) {
+                                    ;
+                                }
+                                if ((s1.Position == s1.Length)) {
+                                    return type;
+                                }
+                            }
+                        }
+                    }
+                    finally {
+                        if ((s1 != null)) {
+                            s1.Close();
+                        }
+                        if ((s2 != null)) {
+                            s2.Close();
+                        }
+                    }
+                }
+                xs.Add(dsSchema);
+                return type;
+            }
+        }
+        
+        /// <summary>
         ///Represents strongly named DataRow class.
         ///</summary>
@@ -2078,4 +2653,24 @@
                 }
             }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroupRow[] GetClientGroupRows() {
+                if ((this.Table.ChildRelations["ClientGroup_is_a_Resource"] == null)) {
+                    return new ClientGroupRow[0];
+                }
+                else {
+                    return ((ClientGroupRow[])(base.GetChildRows(this.Table.ChildRelations["ClientGroup_is_a_Resource"])));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroup_ResourceRow[] GetClientGroup_ResourceRows() {
+                if ((this.Table.ChildRelations["R_59"] == null)) {
+                    return new ClientGroup_ResourceRow[0];
+                }
+                else {
+                    return ((ClientGroup_ResourceRow[])(base.GetChildRows(this.Table.ChildRelations["R_59"])));
+                }
+            }
         }
         
@@ -2531,4 +3126,104 @@
         
         /// <summary>
+        ///Represents strongly named DataRow class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public partial class ClientGroupRow : global::System.Data.DataRow {
+            
+            private ClientGroupDataTable tableClientGroup;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal ClientGroupRow(global::System.Data.DataRowBuilder rb) : 
+                    base(rb) {
+                this.tableClientGroup = ((ClientGroupDataTable)(this.Table));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public long ResourceId {
+                get {
+                    return ((long)(this[this.tableClientGroup.ResourceIdColumn]));
+                }
+                set {
+                    this[this.tableClientGroup.ResourceIdColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ResourceRow ResourceRow {
+                get {
+                    return ((ResourceRow)(this.GetParentRow(this.Table.ParentRelations["ClientGroup_is_a_Resource"])));
+                }
+                set {
+                    this.SetParentRow(value, this.Table.ParentRelations["ClientGroup_is_a_Resource"]);
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroup_ResourceRow[] GetClientGroup_ResourceRows() {
+                if ((this.Table.ChildRelations["R_52"] == null)) {
+                    return new ClientGroup_ResourceRow[0];
+                }
+                else {
+                    return ((ClientGroup_ResourceRow[])(base.GetChildRows(this.Table.ChildRelations["R_52"])));
+                }
+            }
+        }
+        
+        /// <summary>
+        ///Represents strongly named DataRow class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public partial class ClientGroup_ResourceRow : global::System.Data.DataRow {
+            
+            private ClientGroup_ResourceDataTable tableClientGroup_Resource;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal ClientGroup_ResourceRow(global::System.Data.DataRowBuilder rb) : 
+                    base(rb) {
+                this.tableClientGroup_Resource = ((ClientGroup_ResourceDataTable)(this.Table));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public long ClientGroupResource {
+                get {
+                    return ((long)(this[this.tableClientGroup_Resource.ClientGroupResourceColumn]));
+                }
+                set {
+                    this[this.tableClientGroup_Resource.ClientGroupResourceColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public long ResourceId {
+                get {
+                    return ((long)(this[this.tableClientGroup_Resource.ResourceIdColumn]));
+                }
+                set {
+                    this[this.tableClientGroup_Resource.ResourceIdColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroupRow ClientGroupRow {
+                get {
+                    return ((ClientGroupRow)(this.GetParentRow(this.Table.ParentRelations["R_52"])));
+                }
+                set {
+                    this.SetParentRow(value, this.Table.ParentRelations["R_52"]);
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ResourceRow ResourceRow {
+                get {
+                    return ((ResourceRow)(this.GetParentRow(this.Table.ParentRelations["R_59"])));
+                }
+                set {
+                    this.SetParentRow(value, this.Table.ParentRelations["R_59"]);
+                }
+            }
+        }
+        
+        /// <summary>
         ///Row event argument class
         ///</summary>
@@ -2703,4 +3398,66 @@
             [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
             public PermissionOwner_UserGroupRow Row {
+                get {
+                    return this.eventRow;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataRowAction Action {
+                get {
+                    return this.eventAction;
+                }
+            }
+        }
+        
+        /// <summary>
+        ///Row event argument class
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public class ClientGroupRowChangeEvent : global::System.EventArgs {
+            
+            private ClientGroupRow eventRow;
+            
+            private global::System.Data.DataRowAction eventAction;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroupRowChangeEvent(ClientGroupRow row, global::System.Data.DataRowAction action) {
+                this.eventRow = row;
+                this.eventAction = action;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroupRow Row {
+                get {
+                    return this.eventRow;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataRowAction Action {
+                get {
+                    return this.eventAction;
+                }
+            }
+        }
+        
+        /// <summary>
+        ///Row event argument class
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public class ClientGroup_ResourceRowChangeEvent : global::System.EventArgs {
+            
+            private ClientGroup_ResourceRow eventRow;
+            
+            private global::System.Data.DataRowAction eventAction;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroup_ResourceRowChangeEvent(ClientGroup_ResourceRow row, global::System.Data.DataRowAction action) {
+                this.eventRow = row;
+                this.eventAction = action;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroup_ResourceRow Row {
                 get {
                     return this.eventRow;
@@ -4926,4 +5683,557 @@
     
     /// <summary>
+    ///Represents the connection and commands used to retrieve and save data.
+    ///</summary>
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+    [global::System.ComponentModel.DesignerCategoryAttribute("code")]
+    [global::System.ComponentModel.ToolboxItem(true)]
+    [global::System.ComponentModel.DataObjectAttribute(true)]
+    [global::System.ComponentModel.DesignerAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterDesigner, Microsoft.VSDesigner" +
+        ", Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+    [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+    public partial class ClientGroupTableAdapter : global::System.ComponentModel.Component {
+        
+        private global::System.Data.SqlClient.SqlDataAdapter _adapter;
+        
+        private global::System.Data.SqlClient.SqlConnection _connection;
+        
+        private global::System.Data.SqlClient.SqlTransaction _transaction;
+        
+        private global::System.Data.SqlClient.SqlCommand[] _commandCollection;
+        
+        private bool _clearBeforeFill;
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public ClientGroupTableAdapter() {
+            this.ClearBeforeFill = true;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected internal global::System.Data.SqlClient.SqlDataAdapter Adapter {
+            get {
+                if ((this._adapter == null)) {
+                    this.InitAdapter();
+                }
+                return this._adapter;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlConnection Connection {
+            get {
+                if ((this._connection == null)) {
+                    this.InitConnection();
+                }
+                return this._connection;
+            }
+            set {
+                this._connection = value;
+                if ((this.Adapter.InsertCommand != null)) {
+                    this.Adapter.InsertCommand.Connection = value;
+                }
+                if ((this.Adapter.DeleteCommand != null)) {
+                    this.Adapter.DeleteCommand.Connection = value;
+                }
+                if ((this.Adapter.UpdateCommand != null)) {
+                    this.Adapter.UpdateCommand.Connection = value;
+                }
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    if ((this.CommandCollection[i] != null)) {
+                        ((global::System.Data.SqlClient.SqlCommand)(this.CommandCollection[i])).Connection = value;
+                    }
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlTransaction Transaction {
+            get {
+                return this._transaction;
+            }
+            set {
+                this._transaction = value;
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    this.CommandCollection[i].Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.DeleteCommand != null))) {
+                    this.Adapter.DeleteCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.InsertCommand != null))) {
+                    this.Adapter.InsertCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.UpdateCommand != null))) {
+                    this.Adapter.UpdateCommand.Transaction = this._transaction;
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected global::System.Data.SqlClient.SqlCommand[] CommandCollection {
+            get {
+                if ((this._commandCollection == null)) {
+                    this.InitCommandCollection();
+                }
+                return this._commandCollection;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public bool ClearBeforeFill {
+            get {
+                return this._clearBeforeFill;
+            }
+            set {
+                this._clearBeforeFill = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitAdapter() {
+            this._adapter = new global::System.Data.SqlClient.SqlDataAdapter();
+            global::System.Data.Common.DataTableMapping tableMapping = new global::System.Data.Common.DataTableMapping();
+            tableMapping.SourceTable = "Table";
+            tableMapping.DataSetTable = "ClientGroup";
+            tableMapping.ColumnMappings.Add("ResourceId", "ResourceId");
+            this._adapter.TableMappings.Add(tableMapping);
+            this._adapter.DeleteCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.DeleteCommand.Connection = this.Connection;
+            this._adapter.DeleteCommand.CommandText = "DELETE FROM [dbo].[ClientGroup] WHERE (([ResourceId] = @Original_ResourceId))";
+            this._adapter.DeleteCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.InsertCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.InsertCommand.Connection = this.Connection;
+            this._adapter.InsertCommand.CommandText = "INSERT INTO [dbo].[ClientGroup] ([ResourceId]) VALUES (@ResourceId);\r\nSELECT Reso" +
+                "urceId FROM ClientGroup WHERE (ResourceId = @ResourceId)";
+            this._adapter.InsertCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.UpdateCommand.Connection = this.Connection;
+            this._adapter.UpdateCommand.CommandText = "UPDATE [dbo].[ClientGroup] SET [ResourceId] = @ResourceId WHERE (([ResourceId] = " +
+                "@Original_ResourceId));\r\nSELECT ResourceId FROM ClientGroup WHERE (ResourceId = " +
+                "@ResourceId)";
+            this._adapter.UpdateCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitConnection() {
+            this._connection = new global::System.Data.SqlClient.SqlConnection();
+            this._connection.ConnectionString = global::HeuristicLab.Hive.Server.ADODataAccess.Properties.Settings.Default.HiveServerConnectionString;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitCommandCollection() {
+            this._commandCollection = new global::System.Data.SqlClient.SqlCommand[1];
+            this._commandCollection[0] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[0].Connection = this.Connection;
+            this._commandCollection[0].CommandText = "SELECT ResourceId FROM dbo.ClientGroup";
+            this._commandCollection[0].CommandType = global::System.Data.CommandType.Text;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, true)]
+        public virtual int Fill(dsHiveServer.ClientGroupDataTable dataTable) {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, true)]
+        public virtual dsHiveServer.ClientGroupDataTable GetData() {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            dsHiveServer.ClientGroupDataTable dataTable = new dsHiveServer.ClientGroupDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer.ClientGroupDataTable dataTable) {
+            return this.Adapter.Update(dataTable);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer dataSet) {
+            return this.Adapter.Update(dataSet, "ClientGroup");
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow dataRow) {
+            return this.Adapter.Update(new global::System.Data.DataRow[] {
+                        dataRow});
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow[] dataRows) {
+            return this.Adapter.Update(dataRows);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Delete, true)]
+        public virtual int Delete(long Original_ResourceId) {
+            this.Adapter.DeleteCommand.Parameters[0].Value = ((long)(Original_ResourceId));
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.DeleteCommand.Connection.State;
+            if (((this.Adapter.DeleteCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.DeleteCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.DeleteCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.DeleteCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Insert, true)]
+        public virtual int Insert(long ResourceId) {
+            this.Adapter.InsertCommand.Parameters[0].Value = ((long)(ResourceId));
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.InsertCommand.Connection.State;
+            if (((this.Adapter.InsertCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.InsertCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.InsertCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.InsertCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(long ResourceId, long Original_ResourceId) {
+            this.Adapter.UpdateCommand.Parameters[0].Value = ((long)(ResourceId));
+            this.Adapter.UpdateCommand.Parameters[1].Value = ((long)(Original_ResourceId));
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.UpdateCommand.Connection.State;
+            if (((this.Adapter.UpdateCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.UpdateCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.UpdateCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.UpdateCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(long Original_ResourceId) {
+            return this.Update(Original_ResourceId, Original_ResourceId);
+        }
+    }
+    
+    /// <summary>
+    ///Represents the connection and commands used to retrieve and save data.
+    ///</summary>
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+    [global::System.ComponentModel.DesignerCategoryAttribute("code")]
+    [global::System.ComponentModel.ToolboxItem(true)]
+    [global::System.ComponentModel.DataObjectAttribute(true)]
+    [global::System.ComponentModel.DesignerAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterDesigner, Microsoft.VSDesigner" +
+        ", Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+    [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+    public partial class ClientGroup_ResourceTableAdapter : global::System.ComponentModel.Component {
+        
+        private global::System.Data.SqlClient.SqlDataAdapter _adapter;
+        
+        private global::System.Data.SqlClient.SqlConnection _connection;
+        
+        private global::System.Data.SqlClient.SqlTransaction _transaction;
+        
+        private global::System.Data.SqlClient.SqlCommand[] _commandCollection;
+        
+        private bool _clearBeforeFill;
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public ClientGroup_ResourceTableAdapter() {
+            this.ClearBeforeFill = true;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected internal global::System.Data.SqlClient.SqlDataAdapter Adapter {
+            get {
+                if ((this._adapter == null)) {
+                    this.InitAdapter();
+                }
+                return this._adapter;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlConnection Connection {
+            get {
+                if ((this._connection == null)) {
+                    this.InitConnection();
+                }
+                return this._connection;
+            }
+            set {
+                this._connection = value;
+                if ((this.Adapter.InsertCommand != null)) {
+                    this.Adapter.InsertCommand.Connection = value;
+                }
+                if ((this.Adapter.DeleteCommand != null)) {
+                    this.Adapter.DeleteCommand.Connection = value;
+                }
+                if ((this.Adapter.UpdateCommand != null)) {
+                    this.Adapter.UpdateCommand.Connection = value;
+                }
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    if ((this.CommandCollection[i] != null)) {
+                        ((global::System.Data.SqlClient.SqlCommand)(this.CommandCollection[i])).Connection = value;
+                    }
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlTransaction Transaction {
+            get {
+                return this._transaction;
+            }
+            set {
+                this._transaction = value;
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    this.CommandCollection[i].Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.DeleteCommand != null))) {
+                    this.Adapter.DeleteCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.InsertCommand != null))) {
+                    this.Adapter.InsertCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.UpdateCommand != null))) {
+                    this.Adapter.UpdateCommand.Transaction = this._transaction;
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected global::System.Data.SqlClient.SqlCommand[] CommandCollection {
+            get {
+                if ((this._commandCollection == null)) {
+                    this.InitCommandCollection();
+                }
+                return this._commandCollection;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public bool ClearBeforeFill {
+            get {
+                return this._clearBeforeFill;
+            }
+            set {
+                this._clearBeforeFill = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitAdapter() {
+            this._adapter = new global::System.Data.SqlClient.SqlDataAdapter();
+            global::System.Data.Common.DataTableMapping tableMapping = new global::System.Data.Common.DataTableMapping();
+            tableMapping.SourceTable = "Table";
+            tableMapping.DataSetTable = "ClientGroup_Resource";
+            tableMapping.ColumnMappings.Add("ClientGroupResource", "ClientGroupResource");
+            tableMapping.ColumnMappings.Add("ResourceId", "ResourceId");
+            this._adapter.TableMappings.Add(tableMapping);
+            this._adapter.DeleteCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.DeleteCommand.Connection = this.Connection;
+            this._adapter.DeleteCommand.CommandText = "DELETE FROM [dbo].[ClientGroup_Resource] WHERE (([ClientGroupResource] = @Origina" +
+                "l_ClientGroupResource) AND ([ResourceId] = @Original_ResourceId))";
+            this._adapter.DeleteCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ClientGroupResource", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ClientGroupResource", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.InsertCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.InsertCommand.Connection = this.Connection;
+            this._adapter.InsertCommand.CommandText = @"INSERT INTO [dbo].[ClientGroup_Resource] ([ClientGroupResource], [ResourceId]) VALUES (@ClientGroupResource, @ResourceId);
+SELECT ClientGroupResource, ResourceId FROM ClientGroup_Resource WHERE (ClientGroupResource = @ClientGroupResource) AND (ResourceId = @ResourceId)";
+            this._adapter.InsertCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ClientGroupResource", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ClientGroupResource", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.UpdateCommand.Connection = this.Connection;
+            this._adapter.UpdateCommand.CommandText = @"UPDATE [dbo].[ClientGroup_Resource] SET [ClientGroupResource] = @ClientGroupResource, [ResourceId] = @ResourceId WHERE (([ClientGroupResource] = @Original_ClientGroupResource) AND ([ResourceId] = @Original_ResourceId));
+SELECT ClientGroupResource, ResourceId FROM ClientGroup_Resource WHERE (ClientGroupResource = @ClientGroupResource) AND (ResourceId = @ResourceId)";
+            this._adapter.UpdateCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ClientGroupResource", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ClientGroupResource", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ClientGroupResource", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ClientGroupResource", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitConnection() {
+            this._connection = new global::System.Data.SqlClient.SqlConnection();
+            this._connection.ConnectionString = global::HeuristicLab.Hive.Server.ADODataAccess.Properties.Settings.Default.HiveServerConnectionString;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitCommandCollection() {
+            this._commandCollection = new global::System.Data.SqlClient.SqlCommand[1];
+            this._commandCollection[0] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[0].Connection = this.Connection;
+            this._commandCollection[0].CommandText = "SELECT ClientGroupResource, ResourceId FROM dbo.ClientGroup_Resource";
+            this._commandCollection[0].CommandType = global::System.Data.CommandType.Text;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, true)]
+        public virtual int Fill(dsHiveServer.ClientGroup_ResourceDataTable dataTable) {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, true)]
+        public virtual dsHiveServer.ClientGroup_ResourceDataTable GetData() {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            dsHiveServer.ClientGroup_ResourceDataTable dataTable = new dsHiveServer.ClientGroup_ResourceDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer.ClientGroup_ResourceDataTable dataTable) {
+            return this.Adapter.Update(dataTable);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer dataSet) {
+            return this.Adapter.Update(dataSet, "ClientGroup_Resource");
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow dataRow) {
+            return this.Adapter.Update(new global::System.Data.DataRow[] {
+                        dataRow});
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow[] dataRows) {
+            return this.Adapter.Update(dataRows);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Delete, true)]
+        public virtual int Delete(long Original_ClientGroupResource, long Original_ResourceId) {
+            this.Adapter.DeleteCommand.Parameters[0].Value = ((long)(Original_ClientGroupResource));
+            this.Adapter.DeleteCommand.Parameters[1].Value = ((long)(Original_ResourceId));
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.DeleteCommand.Connection.State;
+            if (((this.Adapter.DeleteCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.DeleteCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.DeleteCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.DeleteCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Insert, true)]
+        public virtual int Insert(long ClientGroupResource, long ResourceId) {
+            this.Adapter.InsertCommand.Parameters[0].Value = ((long)(ClientGroupResource));
+            this.Adapter.InsertCommand.Parameters[1].Value = ((long)(ResourceId));
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.InsertCommand.Connection.State;
+            if (((this.Adapter.InsertCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.InsertCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.InsertCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.InsertCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(long ClientGroupResource, long ResourceId, long Original_ClientGroupResource, long Original_ResourceId) {
+            this.Adapter.UpdateCommand.Parameters[0].Value = ((long)(ClientGroupResource));
+            this.Adapter.UpdateCommand.Parameters[1].Value = ((long)(ResourceId));
+            this.Adapter.UpdateCommand.Parameters[2].Value = ((long)(Original_ClientGroupResource));
+            this.Adapter.UpdateCommand.Parameters[3].Value = ((long)(Original_ResourceId));
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.UpdateCommand.Connection.State;
+            if (((this.Adapter.UpdateCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.UpdateCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.UpdateCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.UpdateCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(long Original_ClientGroupResource, long Original_ResourceId) {
+            return this.Update(Original_ClientGroupResource, Original_ResourceId, Original_ClientGroupResource, Original_ResourceId);
+        }
+    }
+    
+    /// <summary>
     ///TableAdapterManager is used to coordinate TableAdapters in the dataset to enable Hierarchical Update scenarios
     ///</summary>
@@ -4950,4 +6260,8 @@
         private PermissionOwner_UserGroupTableAdapter _permissionOwner_UserGroupTableAdapter;
         
+        private ClientGroupTableAdapter _clientGroupTableAdapter;
+        
+        private ClientGroup_ResourceTableAdapter _clientGroup_ResourceTableAdapter;
+        
         private bool _backupDataSetBeforeUpdate;
         
@@ -5043,4 +6357,30 @@
         
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.EditorAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterManagerPropertyEditor, Microso" +
+            "ft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" +
+            "", "System.Drawing.Design.UITypeEditor")]
+        public ClientGroupTableAdapter ClientGroupTableAdapter {
+            get {
+                return this._clientGroupTableAdapter;
+            }
+            set {
+                this._clientGroupTableAdapter = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.EditorAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterManagerPropertyEditor, Microso" +
+            "ft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" +
+            "", "System.Drawing.Design.UITypeEditor")]
+        public ClientGroup_ResourceTableAdapter ClientGroup_ResourceTableAdapter {
+            get {
+                return this._clientGroup_ResourceTableAdapter;
+            }
+            set {
+                this._clientGroup_ResourceTableAdapter = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
         public bool BackupDataSetBeforeUpdate {
             get {
@@ -5082,4 +6422,12 @@
                             && (this._permissionOwner_UserGroupTableAdapter.Connection != null))) {
                     return this._permissionOwner_UserGroupTableAdapter.Connection;
+                }
+                if (((this._clientGroupTableAdapter != null) 
+                            && (this._clientGroupTableAdapter.Connection != null))) {
+                    return this._clientGroupTableAdapter.Connection;
+                }
+                if (((this._clientGroup_ResourceTableAdapter != null) 
+                            && (this._clientGroup_ResourceTableAdapter.Connection != null))) {
+                    return this._clientGroup_ResourceTableAdapter.Connection;
                 }
                 return null;
@@ -5111,4 +6459,10 @@
                 }
                 if ((this._permissionOwner_UserGroupTableAdapter != null)) {
+                    count = (count + 1);
+                }
+                if ((this._clientGroupTableAdapter != null)) {
+                    count = (count + 1);
+                }
+                if ((this._clientGroup_ResourceTableAdapter != null)) {
                     count = (count + 1);
                 }
@@ -5132,4 +6486,22 @@
                 }
             }
+            if ((this._resourceTableAdapter != null)) {
+                global::System.Data.DataRow[] updatedRows = dataSet.Resource.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
+                updatedRows = this.GetRealUpdatedRows(updatedRows, allAddedRows);
+                if (((updatedRows != null) 
+                            && (0 < updatedRows.Length))) {
+                    result = (result + this._resourceTableAdapter.Update(updatedRows));
+                    allChangedRows.AddRange(updatedRows);
+                }
+            }
+            if ((this._clientGroupTableAdapter != null)) {
+                global::System.Data.DataRow[] updatedRows = dataSet.ClientGroup.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
+                updatedRows = this.GetRealUpdatedRows(updatedRows, allAddedRows);
+                if (((updatedRows != null) 
+                            && (0 < updatedRows.Length))) {
+                    result = (result + this._clientGroupTableAdapter.Update(updatedRows));
+                    allChangedRows.AddRange(updatedRows);
+                }
+            }
             if ((this._userGroupTableAdapter != null)) {
                 global::System.Data.DataRow[] updatedRows = dataSet.UserGroup.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
@@ -5141,10 +6513,10 @@
                 }
             }
-            if ((this._resourceTableAdapter != null)) {
-                global::System.Data.DataRow[] updatedRows = dataSet.Resource.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
+            if ((this._clientGroup_ResourceTableAdapter != null)) {
+                global::System.Data.DataRow[] updatedRows = dataSet.ClientGroup_Resource.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
                 updatedRows = this.GetRealUpdatedRows(updatedRows, allAddedRows);
                 if (((updatedRows != null) 
                             && (0 < updatedRows.Length))) {
-                    result = (result + this._resourceTableAdapter.Update(updatedRows));
+                    result = (result + this._clientGroup_ResourceTableAdapter.Update(updatedRows));
                     allChangedRows.AddRange(updatedRows);
                 }
@@ -5159,4 +6531,13 @@
                 }
             }
+            if ((this._hiveUserTableAdapter != null)) {
+                global::System.Data.DataRow[] updatedRows = dataSet.HiveUser.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
+                updatedRows = this.GetRealUpdatedRows(updatedRows, allAddedRows);
+                if (((updatedRows != null) 
+                            && (0 < updatedRows.Length))) {
+                    result = (result + this._hiveUserTableAdapter.Update(updatedRows));
+                    allChangedRows.AddRange(updatedRows);
+                }
+            }
             if ((this._clientTableAdapter != null)) {
                 global::System.Data.DataRow[] updatedRows = dataSet.Client.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
@@ -5165,13 +6546,4 @@
                             && (0 < updatedRows.Length))) {
                     result = (result + this._clientTableAdapter.Update(updatedRows));
-                    allChangedRows.AddRange(updatedRows);
-                }
-            }
-            if ((this._hiveUserTableAdapter != null)) {
-                global::System.Data.DataRow[] updatedRows = dataSet.HiveUser.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
-                updatedRows = this.GetRealUpdatedRows(updatedRows, allAddedRows);
-                if (((updatedRows != null) 
-                            && (0 < updatedRows.Length))) {
-                    result = (result + this._hiveUserTableAdapter.Update(updatedRows));
                     allChangedRows.AddRange(updatedRows);
                 }
@@ -5194,4 +6566,20 @@
                 }
             }
+            if ((this._resourceTableAdapter != null)) {
+                global::System.Data.DataRow[] addedRows = dataSet.Resource.Select(null, null, global::System.Data.DataViewRowState.Added);
+                if (((addedRows != null) 
+                            && (0 < addedRows.Length))) {
+                    result = (result + this._resourceTableAdapter.Update(addedRows));
+                    allAddedRows.AddRange(addedRows);
+                }
+            }
+            if ((this._clientGroupTableAdapter != null)) {
+                global::System.Data.DataRow[] addedRows = dataSet.ClientGroup.Select(null, null, global::System.Data.DataViewRowState.Added);
+                if (((addedRows != null) 
+                            && (0 < addedRows.Length))) {
+                    result = (result + this._clientGroupTableAdapter.Update(addedRows));
+                    allAddedRows.AddRange(addedRows);
+                }
+            }
             if ((this._userGroupTableAdapter != null)) {
                 global::System.Data.DataRow[] addedRows = dataSet.UserGroup.Select(null, null, global::System.Data.DataViewRowState.Added);
@@ -5202,9 +6590,9 @@
                 }
             }
-            if ((this._resourceTableAdapter != null)) {
-                global::System.Data.DataRow[] addedRows = dataSet.Resource.Select(null, null, global::System.Data.DataViewRowState.Added);
+            if ((this._clientGroup_ResourceTableAdapter != null)) {
+                global::System.Data.DataRow[] addedRows = dataSet.ClientGroup_Resource.Select(null, null, global::System.Data.DataViewRowState.Added);
                 if (((addedRows != null) 
                             && (0 < addedRows.Length))) {
-                    result = (result + this._resourceTableAdapter.Update(addedRows));
+                    result = (result + this._clientGroup_ResourceTableAdapter.Update(addedRows));
                     allAddedRows.AddRange(addedRows);
                 }
@@ -5218,4 +6606,12 @@
                 }
             }
+            if ((this._hiveUserTableAdapter != null)) {
+                global::System.Data.DataRow[] addedRows = dataSet.HiveUser.Select(null, null, global::System.Data.DataViewRowState.Added);
+                if (((addedRows != null) 
+                            && (0 < addedRows.Length))) {
+                    result = (result + this._hiveUserTableAdapter.Update(addedRows));
+                    allAddedRows.AddRange(addedRows);
+                }
+            }
             if ((this._clientTableAdapter != null)) {
                 global::System.Data.DataRow[] addedRows = dataSet.Client.Select(null, null, global::System.Data.DataViewRowState.Added);
@@ -5226,12 +6622,4 @@
                 }
             }
-            if ((this._hiveUserTableAdapter != null)) {
-                global::System.Data.DataRow[] addedRows = dataSet.HiveUser.Select(null, null, global::System.Data.DataViewRowState.Added);
-                if (((addedRows != null) 
-                            && (0 < addedRows.Length))) {
-                    result = (result + this._hiveUserTableAdapter.Update(addedRows));
-                    allAddedRows.AddRange(addedRows);
-                }
-            }
             return result;
         }
@@ -5243,4 +6631,12 @@
         private int UpdateDeletedRows(dsHiveServer dataSet, global::System.Collections.Generic.List<global::System.Data.DataRow> allChangedRows) {
             int result = 0;
+            if ((this._clientTableAdapter != null)) {
+                global::System.Data.DataRow[] deletedRows = dataSet.Client.Select(null, null, global::System.Data.DataViewRowState.Deleted);
+                if (((deletedRows != null) 
+                            && (0 < deletedRows.Length))) {
+                    result = (result + this._clientTableAdapter.Update(deletedRows));
+                    allChangedRows.AddRange(deletedRows);
+                }
+            }
             if ((this._hiveUserTableAdapter != null)) {
                 global::System.Data.DataRow[] deletedRows = dataSet.HiveUser.Select(null, null, global::System.Data.DataViewRowState.Deleted);
@@ -5251,12 +6647,4 @@
                 }
             }
-            if ((this._clientTableAdapter != null)) {
-                global::System.Data.DataRow[] deletedRows = dataSet.Client.Select(null, null, global::System.Data.DataViewRowState.Deleted);
-                if (((deletedRows != null) 
-                            && (0 < deletedRows.Length))) {
-                    result = (result + this._clientTableAdapter.Update(deletedRows));
-                    allChangedRows.AddRange(deletedRows);
-                }
-            }
             if ((this._permissionOwner_UserGroupTableAdapter != null)) {
                 global::System.Data.DataRow[] deletedRows = dataSet.PermissionOwner_UserGroup.Select(null, null, global::System.Data.DataViewRowState.Deleted);
@@ -5267,4 +6655,28 @@
                 }
             }
+            if ((this._clientGroup_ResourceTableAdapter != null)) {
+                global::System.Data.DataRow[] deletedRows = dataSet.ClientGroup_Resource.Select(null, null, global::System.Data.DataViewRowState.Deleted);
+                if (((deletedRows != null) 
+                            && (0 < deletedRows.Length))) {
+                    result = (result + this._clientGroup_ResourceTableAdapter.Update(deletedRows));
+                    allChangedRows.AddRange(deletedRows);
+                }
+            }
+            if ((this._userGroupTableAdapter != null)) {
+                global::System.Data.DataRow[] deletedRows = dataSet.UserGroup.Select(null, null, global::System.Data.DataViewRowState.Deleted);
+                if (((deletedRows != null) 
+                            && (0 < deletedRows.Length))) {
+                    result = (result + this._userGroupTableAdapter.Update(deletedRows));
+                    allChangedRows.AddRange(deletedRows);
+                }
+            }
+            if ((this._clientGroupTableAdapter != null)) {
+                global::System.Data.DataRow[] deletedRows = dataSet.ClientGroup.Select(null, null, global::System.Data.DataViewRowState.Deleted);
+                if (((deletedRows != null) 
+                            && (0 < deletedRows.Length))) {
+                    result = (result + this._clientGroupTableAdapter.Update(deletedRows));
+                    allChangedRows.AddRange(deletedRows);
+                }
+            }
             if ((this._resourceTableAdapter != null)) {
                 global::System.Data.DataRow[] deletedRows = dataSet.Resource.Select(null, null, global::System.Data.DataViewRowState.Deleted);
@@ -5275,12 +6687,4 @@
                 }
             }
-            if ((this._userGroupTableAdapter != null)) {
-                global::System.Data.DataRow[] deletedRows = dataSet.UserGroup.Select(null, null, global::System.Data.DataViewRowState.Deleted);
-                if (((deletedRows != null) 
-                            && (0 < deletedRows.Length))) {
-                    result = (result + this._userGroupTableAdapter.Update(deletedRows));
-                    allChangedRows.AddRange(deletedRows);
-                }
-            }
             if ((this._permissionOwnerTableAdapter != null)) {
                 global::System.Data.DataRow[] deletedRows = dataSet.PermissionOwner.Select(null, null, global::System.Data.DataViewRowState.Deleted);
@@ -5355,4 +6759,14 @@
             if (((this._permissionOwner_UserGroupTableAdapter != null) 
                         && (this.MatchTableAdapterConnection(this._permissionOwner_UserGroupTableAdapter.Connection) == false))) {
+                throw new global::System.ArgumentException("All TableAdapters managed by a TableAdapterManager must use the same connection s" +
+                        "tring.");
+            }
+            if (((this._clientGroupTableAdapter != null) 
+                        && (this.MatchTableAdapterConnection(this._clientGroupTableAdapter.Connection) == false))) {
+                throw new global::System.ArgumentException("All TableAdapters managed by a TableAdapterManager must use the same connection s" +
+                        "tring.");
+            }
+            if (((this._clientGroup_ResourceTableAdapter != null) 
+                        && (this.MatchTableAdapterConnection(this._clientGroup_ResourceTableAdapter.Connection) == false))) {
                 throw new global::System.ArgumentException("All TableAdapters managed by a TableAdapterManager must use the same connection s" +
                         "tring.");
@@ -5442,4 +6856,22 @@
                         this._permissionOwner_UserGroupTableAdapter.Adapter.AcceptChangesDuringUpdate = false;
                         adaptersWithAcceptChangesDuringUpdate.Add(this._permissionOwner_UserGroupTableAdapter.Adapter);
+                    }
+                }
+                if ((this._clientGroupTableAdapter != null)) {
+                    revertConnections.Add(this._clientGroupTableAdapter, this._clientGroupTableAdapter.Connection);
+                    this._clientGroupTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(workConnection));
+                    this._clientGroupTableAdapter.Transaction = ((global::System.Data.SqlClient.SqlTransaction)(workTransaction));
+                    if (this._clientGroupTableAdapter.Adapter.AcceptChangesDuringUpdate) {
+                        this._clientGroupTableAdapter.Adapter.AcceptChangesDuringUpdate = false;
+                        adaptersWithAcceptChangesDuringUpdate.Add(this._clientGroupTableAdapter.Adapter);
+                    }
+                }
+                if ((this._clientGroup_ResourceTableAdapter != null)) {
+                    revertConnections.Add(this._clientGroup_ResourceTableAdapter, this._clientGroup_ResourceTableAdapter.Connection);
+                    this._clientGroup_ResourceTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(workConnection));
+                    this._clientGroup_ResourceTableAdapter.Transaction = ((global::System.Data.SqlClient.SqlTransaction)(workTransaction));
+                    if (this._clientGroup_ResourceTableAdapter.Adapter.AcceptChangesDuringUpdate) {
+                        this._clientGroup_ResourceTableAdapter.Adapter.AcceptChangesDuringUpdate = false;
+                        adaptersWithAcceptChangesDuringUpdate.Add(this._clientGroup_ResourceTableAdapter.Adapter);
                     }
                 }
@@ -5526,4 +6958,12 @@
                     this._permissionOwner_UserGroupTableAdapter.Transaction = null;
                 }
+                if ((this._clientGroupTableAdapter != null)) {
+                    this._clientGroupTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(revertConnections[this._clientGroupTableAdapter]));
+                    this._clientGroupTableAdapter.Transaction = null;
+                }
+                if ((this._clientGroup_ResourceTableAdapter != null)) {
+                    this._clientGroup_ResourceTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(revertConnections[this._clientGroup_ResourceTableAdapter]));
+                    this._clientGroup_ResourceTableAdapter.Transaction = null;
+                }
                 if ((0 < adaptersWithAcceptChangesDuringUpdate.Count)) {
                     global::System.Data.Common.DataAdapter[] adapters = new System.Data.Common.DataAdapter[adaptersWithAcceptChangesDuringUpdate.Count];
Index: trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.xsd
===================================================================
--- trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.xsd	(revision 964)
+++ trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.xsd	(revision 965)
@@ -407,4 +407,95 @@
             </Sources>
           </TableAdapter>
+          <TableAdapter BaseClass="System.ComponentModel.Component" DataAccessorModifier="AutoLayout, AnsiClass, Class, Public" DataAccessorName="ClientGroupTableAdapter" GeneratorDataComponentClassName="ClientGroupTableAdapter" Name="ClientGroup" UserDataComponentName="ClientGroupTableAdapter">
+            <MainSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.ClientGroup" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="Fill" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetData" GeneratorSourceName="Fill" GetMethodModifier="Public" GetMethodName="GetData" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetData" UserSourceName="Fill">
+                <DeleteCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>DELETE FROM [dbo].[ClientGroup] WHERE (([ResourceId] = @Original_ResourceId))</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                    </Parameters>
+                  </DbCommand>
+                </DeleteCommand>
+                <InsertCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>INSERT INTO [dbo].[ClientGroup] ([ResourceId]) VALUES (@ResourceId);
+SELECT ResourceId FROM ClientGroup WHERE (ResourceId = @ResourceId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </InsertCommand>
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>SELECT ResourceId FROM dbo.ClientGroup</CommandText>
+                    <Parameters />
+                  </DbCommand>
+                </SelectCommand>
+                <UpdateCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>UPDATE [dbo].[ClientGroup] SET [ResourceId] = @ResourceId WHERE (([ResourceId] = @Original_ResourceId));
+SELECT ResourceId FROM ClientGroup WHERE (ResourceId = @ResourceId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                    </Parameters>
+                  </DbCommand>
+                </UpdateCommand>
+              </DbSource>
+            </MainSource>
+            <Mappings>
+              <Mapping SourceColumn="ResourceId" DataSetColumn="ResourceId" />
+            </Mappings>
+            <Sources />
+          </TableAdapter>
+          <TableAdapter BaseClass="System.ComponentModel.Component" DataAccessorModifier="AutoLayout, AnsiClass, Class, Public" DataAccessorName="ClientGroup_ResourceTableAdapter" GeneratorDataComponentClassName="ClientGroup_ResourceTableAdapter" Name="ClientGroup_Resource" UserDataComponentName="ClientGroup_ResourceTableAdapter">
+            <MainSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.ClientGroup_Resource" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="Fill" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetData" GeneratorSourceName="Fill" GetMethodModifier="Public" GetMethodName="GetData" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetData" UserSourceName="Fill">
+                <DeleteCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>DELETE FROM [dbo].[ClientGroup_Resource] WHERE (([ClientGroupResource] = @Original_ClientGroupResource) AND ([ResourceId] = @Original_ResourceId))</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ClientGroupResource" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ClientGroupResource" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                    </Parameters>
+                  </DbCommand>
+                </DeleteCommand>
+                <InsertCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>INSERT INTO [dbo].[ClientGroup_Resource] ([ClientGroupResource], [ResourceId]) VALUES (@ClientGroupResource, @ResourceId);
+SELECT ClientGroupResource, ResourceId FROM ClientGroup_Resource WHERE (ClientGroupResource = @ClientGroupResource) AND (ResourceId = @ResourceId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@ClientGroupResource" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ClientGroupResource" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </InsertCommand>
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>SELECT ClientGroupResource, ResourceId FROM dbo.ClientGroup_Resource</CommandText>
+                    <Parameters />
+                  </DbCommand>
+                </SelectCommand>
+                <UpdateCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>UPDATE [dbo].[ClientGroup_Resource] SET [ClientGroupResource] = @ClientGroupResource, [ResourceId] = @ResourceId WHERE (([ClientGroupResource] = @Original_ClientGroupResource) AND ([ResourceId] = @Original_ResourceId));
+SELECT ClientGroupResource, ResourceId FROM ClientGroup_Resource WHERE (ClientGroupResource = @ClientGroupResource) AND (ResourceId = @ResourceId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@ClientGroupResource" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ClientGroupResource" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ClientGroupResource" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ClientGroupResource" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                    </Parameters>
+                  </DbCommand>
+                </UpdateCommand>
+              </DbSource>
+            </MainSource>
+            <Mappings>
+              <Mapping SourceColumn="ClientGroupResource" DataSetColumn="ClientGroupResource" />
+              <Mapping SourceColumn="ResourceId" DataSetColumn="ResourceId" />
+            </Mappings>
+            <Sources />
+          </TableAdapter>
         </Tables>
         <Sources />
@@ -418,5 +509,53 @@
           <xs:complexType>
             <xs:sequence>
-              <xs:element name="ResourceId" msdata:ReadOnly="true" msdata:AutoIncrement="true" msdata:AutoIncrementSeed="-1" msdata:AutoIncrementStep="-1" msprop:Generator_UserColumnName="ResourceId" msprop:Generator_ColumnVarNameInTable="columnResourceId" msprop:Generator_ColumnPropNameInRow="ResourceId" msprop:Generator_ColumnPropNameInTable="ResourceIdColumn" type="xs:long" />
+              <xs:element name="ResourceId" msdata:ReadOnly="true" msdata:AutoIncrement="true" msdata:AutoIncrementSeed="-1" msdata:AutoIncrementStep="-1" msprop:Generator_UserColumnName="ResourceId" msprop:Generator_ColumnPropNameInRow="ResourceId" msprop:Generator_ColumnVarNameInTable="columnResourceId" msprop:Generator_ColumnPropNameInTable="ResourceIdColumn" type="xs:long" />
+              <xs:element name="Name" msprop:Generator_UserColumnName="Name" msprop:Generator_ColumnPropNameInRow="Name" msprop:Generator_ColumnVarNameInTable="columnName" msprop:Generator_ColumnPropNameInTable="NameColumn" minOccurs="0">
+                <xs:simpleType>
+                  <xs:restriction base="xs:string">
+                    <xs:maxLength value="18" />
+                  </xs:restriction>
+                </xs:simpleType>
+              </xs:element>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element name="Client" msprop:Generator_UserTableName="Client" msprop:Generator_RowDeletedName="ClientRowDeleted" msprop:Generator_RowChangedName="ClientRowChanged" msprop:Generator_RowClassName="ClientRow" msprop:Generator_RowChangingName="ClientRowChanging" msprop:Generator_RowEvArgName="ClientRowChangeEvent" msprop:Generator_RowEvHandlerName="ClientRowChangeEventHandler" msprop:Generator_TableClassName="ClientDataTable" msprop:Generator_TableVarName="tableClient" msprop:Generator_RowDeletingName="ClientRowDeleting" msprop:Generator_TablePropName="Client">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name="ResourceId" msprop:Generator_UserColumnName="ResourceId" msprop:Generator_ColumnVarNameInTable="columnResourceId" msprop:Generator_ColumnPropNameInRow="ResourceId" msprop:Generator_ColumnPropNameInTable="ResourceIdColumn" type="xs:long" />
+              <xs:element name="GUID" msdata:DataType="System.Guid, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" msprop:Generator_UserColumnName="GUID" msprop:Generator_ColumnVarNameInTable="columnGUID" msprop:Generator_ColumnPropNameInRow="GUID" msprop:Generator_ColumnPropNameInTable="GUIDColumn" type="xs:string" minOccurs="0" />
+              <xs:element name="CPUSpeed" msprop:Generator_UserColumnName="CPUSpeed" msprop:Generator_ColumnVarNameInTable="columnCPUSpeed" msprop:Generator_ColumnPropNameInRow="CPUSpeed" msprop:Generator_ColumnPropNameInTable="CPUSpeedColumn" type="xs:int" minOccurs="0" />
+              <xs:element name="Memory" msprop:Generator_UserColumnName="Memory" msprop:Generator_ColumnVarNameInTable="columnMemory" msprop:Generator_ColumnPropNameInRow="Memory" msprop:Generator_ColumnPropNameInTable="MemoryColumn" type="xs:int" minOccurs="0" />
+              <xs:element name="Login" msprop:Generator_UserColumnName="Login" msprop:Generator_ColumnVarNameInTable="columnLogin" msprop:Generator_ColumnPropNameInRow="Login" msprop:Generator_ColumnPropNameInTable="LoginColumn" type="xs:dateTime" minOccurs="0" />
+              <xs:element name="Status" msprop:Generator_UserColumnName="Status" msprop:Generator_ColumnVarNameInTable="columnStatus" msprop:Generator_ColumnPropNameInRow="Status" msprop:Generator_ColumnPropNameInTable="StatusColumn" minOccurs="0">
+                <xs:simpleType>
+                  <xs:restriction base="xs:string">
+                    <xs:maxLength value="18" />
+                  </xs:restriction>
+                </xs:simpleType>
+              </xs:element>
+              <xs:element name="ClientConfigId" msprop:Generator_UserColumnName="ClientConfigId" msprop:Generator_ColumnVarNameInTable="columnClientConfigId" msprop:Generator_ColumnPropNameInRow="ClientConfigId" msprop:Generator_ColumnPropNameInTable="ClientConfigIdColumn" type="xs:long" minOccurs="0" />
+              <xs:element name="NumberOfCores" msprop:Generator_UserColumnName="NumberOfCores" msprop:Generator_ColumnVarNameInTable="columnNumberOfCores" msprop:Generator_ColumnPropNameInRow="NumberOfCores" msprop:Generator_ColumnPropNameInTable="NumberOfCoresColumn" type="xs:int" minOccurs="0" />
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element name="HiveUser" msprop:Generator_UserTableName="HiveUser" msprop:Generator_RowDeletedName="HiveUserRowDeleted" msprop:Generator_RowChangedName="HiveUserRowChanged" msprop:Generator_RowClassName="HiveUserRow" msprop:Generator_RowChangingName="HiveUserRowChanging" msprop:Generator_RowEvArgName="HiveUserRowChangeEvent" msprop:Generator_RowEvHandlerName="HiveUserRowChangeEventHandler" msprop:Generator_TableClassName="HiveUserDataTable" msprop:Generator_TableVarName="tableHiveUser" msprop:Generator_RowDeletingName="HiveUserRowDeleting" msprop:Generator_TablePropName="HiveUser">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name="PermissionOwnerId" msprop:Generator_UserColumnName="PermissionOwnerId" msprop:Generator_ColumnVarNameInTable="columnPermissionOwnerId" msprop:Generator_ColumnPropNameInRow="PermissionOwnerId" msprop:Generator_ColumnPropNameInTable="PermissionOwnerIdColumn" type="xs:long" />
+              <xs:element name="Password" msprop:Generator_UserColumnName="Password" msprop:Generator_ColumnVarNameInTable="columnPassword" msprop:Generator_ColumnPropNameInRow="Password" msprop:Generator_ColumnPropNameInTable="PasswordColumn" minOccurs="0">
+                <xs:simpleType>
+                  <xs:restriction base="xs:string">
+                    <xs:maxLength value="18" />
+                  </xs:restriction>
+                </xs:simpleType>
+              </xs:element>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element name="PermissionOwner" msprop:Generator_UserTableName="PermissionOwner" msprop:Generator_RowDeletedName="PermissionOwnerRowDeleted" msprop:Generator_RowChangedName="PermissionOwnerRowChanged" msprop:Generator_RowClassName="PermissionOwnerRow" msprop:Generator_RowChangingName="PermissionOwnerRowChanging" msprop:Generator_RowEvArgName="PermissionOwnerRowChangeEvent" msprop:Generator_RowEvHandlerName="PermissionOwnerRowChangeEventHandler" msprop:Generator_TableClassName="PermissionOwnerDataTable" msprop:Generator_TableVarName="tablePermissionOwner" msprop:Generator_RowDeletingName="PermissionOwnerRowDeleting" msprop:Generator_TablePropName="PermissionOwner">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name="PermissionOwnerId" msdata:ReadOnly="true" msdata:AutoIncrement="true" msdata:AutoIncrementSeed="-1" msdata:AutoIncrementStep="-1" msprop:Generator_UserColumnName="PermissionOwnerId" msprop:Generator_ColumnVarNameInTable="columnPermissionOwnerId" msprop:Generator_ColumnPropNameInRow="PermissionOwnerId" msprop:Generator_ColumnPropNameInTable="PermissionOwnerIdColumn" type="xs:long" />
               <xs:element name="Name" msprop:Generator_UserColumnName="Name" msprop:Generator_ColumnVarNameInTable="columnName" msprop:Generator_ColumnPropNameInRow="Name" msprop:Generator_ColumnPropNameInTable="NameColumn" minOccurs="0">
                 <xs:simpleType>
@@ -429,64 +568,31 @@
           </xs:complexType>
         </xs:element>
-        <xs:element name="Client" msprop:Generator_UserTableName="Client" msprop:Generator_RowDeletedName="ClientRowDeleted" msprop:Generator_RowChangedName="ClientRowChanged" msprop:Generator_RowClassName="ClientRow" msprop:Generator_RowChangingName="ClientRowChanging" msprop:Generator_RowEvArgName="ClientRowChangeEvent" msprop:Generator_RowEvHandlerName="ClientRowChangeEventHandler" msprop:Generator_TableClassName="ClientDataTable" msprop:Generator_TableVarName="tableClient" msprop:Generator_RowDeletingName="ClientRowDeleting" msprop:Generator_TablePropName="Client">
+        <xs:element name="UserGroup" msprop:Generator_UserTableName="UserGroup" msprop:Generator_RowDeletedName="UserGroupRowDeleted" msprop:Generator_RowChangedName="UserGroupRowChanged" msprop:Generator_RowClassName="UserGroupRow" msprop:Generator_RowChangingName="UserGroupRowChanging" msprop:Generator_RowEvArgName="UserGroupRowChangeEvent" msprop:Generator_RowEvHandlerName="UserGroupRowChangeEventHandler" msprop:Generator_TableClassName="UserGroupDataTable" msprop:Generator_TableVarName="tableUserGroup" msprop:Generator_RowDeletingName="UserGroupRowDeleting" msprop:Generator_TablePropName="UserGroup">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name="PermissionOwnerId" msprop:Generator_UserColumnName="PermissionOwnerId" msprop:Generator_ColumnVarNameInTable="columnPermissionOwnerId" msprop:Generator_ColumnPropNameInRow="PermissionOwnerId" msprop:Generator_ColumnPropNameInTable="PermissionOwnerIdColumn" type="xs:long" />
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element name="PermissionOwner_UserGroup" msprop:Generator_UserTableName="PermissionOwner_UserGroup" msprop:Generator_RowDeletedName="PermissionOwner_UserGroupRowDeleted" msprop:Generator_RowChangedName="PermissionOwner_UserGroupRowChanged" msprop:Generator_RowClassName="PermissionOwner_UserGroupRow" msprop:Generator_RowChangingName="PermissionOwner_UserGroupRowChanging" msprop:Generator_RowEvArgName="PermissionOwner_UserGroupRowChangeEvent" msprop:Generator_RowEvHandlerName="PermissionOwner_UserGroupRowChangeEventHandler" msprop:Generator_TableClassName="PermissionOwner_UserGroupDataTable" msprop:Generator_TableVarName="tablePermissionOwner_UserGroup" msprop:Generator_RowDeletingName="PermissionOwner_UserGroupRowDeleting" msprop:Generator_TablePropName="PermissionOwner_UserGroup">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name="PermissionOwnerId" msprop:Generator_UserColumnName="PermissionOwnerId" msprop:Generator_ColumnVarNameInTable="columnPermissionOwnerId" msprop:Generator_ColumnPropNameInRow="PermissionOwnerId" msprop:Generator_ColumnPropNameInTable="PermissionOwnerIdColumn" type="xs:long" />
+              <xs:element name="UserGroupId" msprop:Generator_UserColumnName="UserGroupId" msprop:Generator_ColumnVarNameInTable="columnUserGroupId" msprop:Generator_ColumnPropNameInRow="UserGroupId" msprop:Generator_ColumnPropNameInTable="UserGroupIdColumn" type="xs:long" />
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element name="ClientGroup" msprop:Generator_UserTableName="ClientGroup" msprop:Generator_RowDeletedName="ClientGroupRowDeleted" msprop:Generator_TableClassName="ClientGroupDataTable" msprop:Generator_RowChangedName="ClientGroupRowChanged" msprop:Generator_RowClassName="ClientGroupRow" msprop:Generator_RowChangingName="ClientGroupRowChanging" msprop:Generator_RowEvArgName="ClientGroupRowChangeEvent" msprop:Generator_RowEvHandlerName="ClientGroupRowChangeEventHandler" msprop:Generator_TablePropName="ClientGroup" msprop:Generator_TableVarName="tableClientGroup" msprop:Generator_RowDeletingName="ClientGroupRowDeleting">
           <xs:complexType>
             <xs:sequence>
               <xs:element name="ResourceId" msprop:Generator_UserColumnName="ResourceId" msprop:Generator_ColumnPropNameInRow="ResourceId" msprop:Generator_ColumnVarNameInTable="columnResourceId" msprop:Generator_ColumnPropNameInTable="ResourceIdColumn" type="xs:long" />
-              <xs:element name="GUID" msdata:DataType="System.Guid, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" msprop:Generator_UserColumnName="GUID" msprop:Generator_ColumnPropNameInRow="GUID" msprop:Generator_ColumnVarNameInTable="columnGUID" msprop:Generator_ColumnPropNameInTable="GUIDColumn" type="xs:string" minOccurs="0" />
-              <xs:element name="CPUSpeed" msprop:Generator_UserColumnName="CPUSpeed" msprop:Generator_ColumnPropNameInRow="CPUSpeed" msprop:Generator_ColumnVarNameInTable="columnCPUSpeed" msprop:Generator_ColumnPropNameInTable="CPUSpeedColumn" type="xs:int" minOccurs="0" />
-              <xs:element name="Memory" msprop:Generator_UserColumnName="Memory" msprop:Generator_ColumnPropNameInRow="Memory" msprop:Generator_ColumnVarNameInTable="columnMemory" msprop:Generator_ColumnPropNameInTable="MemoryColumn" type="xs:int" minOccurs="0" />
-              <xs:element name="Login" msprop:Generator_UserColumnName="Login" msprop:Generator_ColumnPropNameInRow="Login" msprop:Generator_ColumnVarNameInTable="columnLogin" msprop:Generator_ColumnPropNameInTable="LoginColumn" type="xs:dateTime" minOccurs="0" />
-              <xs:element name="Status" msprop:Generator_UserColumnName="Status" msprop:Generator_ColumnPropNameInRow="Status" msprop:Generator_ColumnVarNameInTable="columnStatus" msprop:Generator_ColumnPropNameInTable="StatusColumn" minOccurs="0">
-                <xs:simpleType>
-                  <xs:restriction base="xs:string">
-                    <xs:maxLength value="18" />
-                  </xs:restriction>
-                </xs:simpleType>
-              </xs:element>
-              <xs:element name="ClientConfigId" msprop:Generator_UserColumnName="ClientConfigId" msprop:Generator_ColumnPropNameInRow="ClientConfigId" msprop:Generator_ColumnVarNameInTable="columnClientConfigId" msprop:Generator_ColumnPropNameInTable="ClientConfigIdColumn" type="xs:long" minOccurs="0" />
-              <xs:element name="NumberOfCores" msprop:Generator_UserColumnName="NumberOfCores" msprop:Generator_ColumnPropNameInRow="NumberOfCores" msprop:Generator_ColumnVarNameInTable="columnNumberOfCores" msprop:Generator_ColumnPropNameInTable="NumberOfCoresColumn" type="xs:int" minOccurs="0" />
-            </xs:sequence>
-          </xs:complexType>
-        </xs:element>
-        <xs:element name="HiveUser" msprop:Generator_UserTableName="HiveUser" msprop:Generator_RowDeletedName="HiveUserRowDeleted" msprop:Generator_RowChangedName="HiveUserRowChanged" msprop:Generator_RowClassName="HiveUserRow" msprop:Generator_RowChangingName="HiveUserRowChanging" msprop:Generator_RowEvArgName="HiveUserRowChangeEvent" msprop:Generator_RowEvHandlerName="HiveUserRowChangeEventHandler" msprop:Generator_TableClassName="HiveUserDataTable" msprop:Generator_TableVarName="tableHiveUser" msprop:Generator_RowDeletingName="HiveUserRowDeleting" msprop:Generator_TablePropName="HiveUser">
-          <xs:complexType>
-            <xs:sequence>
-              <xs:element name="PermissionOwnerId" msprop:Generator_UserColumnName="PermissionOwnerId" msprop:Generator_ColumnPropNameInRow="PermissionOwnerId" msprop:Generator_ColumnVarNameInTable="columnPermissionOwnerId" msprop:Generator_ColumnPropNameInTable="PermissionOwnerIdColumn" type="xs:long" />
-              <xs:element name="Password" msprop:Generator_UserColumnName="Password" msprop:Generator_ColumnPropNameInRow="Password" msprop:Generator_ColumnVarNameInTable="columnPassword" msprop:Generator_ColumnPropNameInTable="PasswordColumn" minOccurs="0">
-                <xs:simpleType>
-                  <xs:restriction base="xs:string">
-                    <xs:maxLength value="18" />
-                  </xs:restriction>
-                </xs:simpleType>
-              </xs:element>
-            </xs:sequence>
-          </xs:complexType>
-        </xs:element>
-        <xs:element name="PermissionOwner" msprop:Generator_UserTableName="PermissionOwner" msprop:Generator_RowDeletedName="PermissionOwnerRowDeleted" msprop:Generator_RowChangedName="PermissionOwnerRowChanged" msprop:Generator_RowClassName="PermissionOwnerRow" msprop:Generator_RowChangingName="PermissionOwnerRowChanging" msprop:Generator_RowEvArgName="PermissionOwnerRowChangeEvent" msprop:Generator_RowEvHandlerName="PermissionOwnerRowChangeEventHandler" msprop:Generator_TableClassName="PermissionOwnerDataTable" msprop:Generator_TableVarName="tablePermissionOwner" msprop:Generator_RowDeletingName="PermissionOwnerRowDeleting" msprop:Generator_TablePropName="PermissionOwner">
-          <xs:complexType>
-            <xs:sequence>
-              <xs:element name="PermissionOwnerId" msdata:ReadOnly="true" msdata:AutoIncrement="true" msdata:AutoIncrementSeed="-1" msdata:AutoIncrementStep="-1" msprop:Generator_UserColumnName="PermissionOwnerId" msprop:Generator_ColumnPropNameInRow="PermissionOwnerId" msprop:Generator_ColumnVarNameInTable="columnPermissionOwnerId" msprop:Generator_ColumnPropNameInTable="PermissionOwnerIdColumn" type="xs:long" />
-              <xs:element name="Name" msprop:Generator_UserColumnName="Name" msprop:Generator_ColumnPropNameInRow="Name" msprop:Generator_ColumnVarNameInTable="columnName" msprop:Generator_ColumnPropNameInTable="NameColumn" minOccurs="0">
-                <xs:simpleType>
-                  <xs:restriction base="xs:string">
-                    <xs:maxLength value="18" />
-                  </xs:restriction>
-                </xs:simpleType>
-              </xs:element>
-            </xs:sequence>
-          </xs:complexType>
-        </xs:element>
-        <xs:element name="UserGroup" msprop:Generator_UserTableName="UserGroup" msprop:Generator_RowDeletedName="UserGroupRowDeleted" msprop:Generator_TableClassName="UserGroupDataTable" msprop:Generator_RowChangedName="UserGroupRowChanged" msprop:Generator_RowClassName="UserGroupRow" msprop:Generator_RowChangingName="UserGroupRowChanging" msprop:Generator_RowEvArgName="UserGroupRowChangeEvent" msprop:Generator_RowEvHandlerName="UserGroupRowChangeEventHandler" msprop:Generator_TablePropName="UserGroup" msprop:Generator_TableVarName="tableUserGroup" msprop:Generator_RowDeletingName="UserGroupRowDeleting">
-          <xs:complexType>
-            <xs:sequence>
-              <xs:element name="PermissionOwnerId" msprop:Generator_UserColumnName="PermissionOwnerId" msprop:Generator_ColumnPropNameInRow="PermissionOwnerId" msprop:Generator_ColumnVarNameInTable="columnPermissionOwnerId" msprop:Generator_ColumnPropNameInTable="PermissionOwnerIdColumn" type="xs:long" />
-            </xs:sequence>
-          </xs:complexType>
-        </xs:element>
-        <xs:element name="PermissionOwner_UserGroup" msprop:Generator_UserTableName="PermissionOwner_UserGroup" msprop:Generator_RowDeletedName="PermissionOwner_UserGroupRowDeleted" msprop:Generator_TableClassName="PermissionOwner_UserGroupDataTable" msprop:Generator_RowChangedName="PermissionOwner_UserGroupRowChanged" msprop:Generator_RowClassName="PermissionOwner_UserGroupRow" msprop:Generator_RowChangingName="PermissionOwner_UserGroupRowChanging" msprop:Generator_RowEvArgName="PermissionOwner_UserGroupRowChangeEvent" msprop:Generator_RowEvHandlerName="PermissionOwner_UserGroupRowChangeEventHandler" msprop:Generator_TablePropName="PermissionOwner_UserGroup" msprop:Generator_TableVarName="tablePermissionOwner_UserGroup" msprop:Generator_RowDeletingName="PermissionOwner_UserGroupRowDeleting">
-          <xs:complexType>
-            <xs:sequence>
-              <xs:element name="PermissionOwnerId" msprop:Generator_UserColumnName="PermissionOwnerId" msprop:Generator_ColumnPropNameInRow="PermissionOwnerId" msprop:Generator_ColumnVarNameInTable="columnPermissionOwnerId" msprop:Generator_ColumnPropNameInTable="PermissionOwnerIdColumn" type="xs:long" />
-              <xs:element name="UserGroupId" msprop:Generator_UserColumnName="UserGroupId" msprop:Generator_ColumnPropNameInRow="UserGroupId" msprop:Generator_ColumnVarNameInTable="columnUserGroupId" msprop:Generator_ColumnPropNameInTable="UserGroupIdColumn" type="xs:long" />
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element name="ClientGroup_Resource" msprop:Generator_UserTableName="ClientGroup_Resource" msprop:Generator_RowDeletedName="ClientGroup_ResourceRowDeleted" msprop:Generator_TableClassName="ClientGroup_ResourceDataTable" msprop:Generator_RowChangedName="ClientGroup_ResourceRowChanged" msprop:Generator_RowClassName="ClientGroup_ResourceRow" msprop:Generator_RowChangingName="ClientGroup_ResourceRowChanging" msprop:Generator_RowEvArgName="ClientGroup_ResourceRowChangeEvent" msprop:Generator_RowEvHandlerName="ClientGroup_ResourceRowChangeEventHandler" msprop:Generator_TablePropName="ClientGroup_Resource" msprop:Generator_TableVarName="tableClientGroup_Resource" msprop:Generator_RowDeletingName="ClientGroup_ResourceRowDeleting">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name="ClientGroupResource" msprop:Generator_UserColumnName="ClientGroupResource" msprop:Generator_ColumnPropNameInRow="ClientGroupResource" msprop:Generator_ColumnVarNameInTable="columnClientGroupResource" msprop:Generator_ColumnPropNameInTable="ClientGroupResourceColumn" type="xs:long" />
+              <xs:element name="ResourceId" msprop:Generator_UserColumnName="ResourceId" msprop:Generator_ColumnPropNameInRow="ResourceId" msprop:Generator_ColumnVarNameInTable="columnResourceId" msprop:Generator_ColumnPropNameInTable="ResourceIdColumn" type="xs:long" />
             </xs:sequence>
           </xs:complexType>
@@ -518,4 +624,13 @@
       <xs:field xpath="mstns:PermissionOwnerId" />
       <xs:field xpath="mstns:UserGroupId" />
+    </xs:unique>
+    <xs:unique name="ClientGroup_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true">
+      <xs:selector xpath=".//mstns:ClientGroup" />
+      <xs:field xpath="mstns:ResourceId" />
+    </xs:unique>
+    <xs:unique name="ClientGroup_Resource_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true">
+      <xs:selector xpath=".//mstns:ClientGroup_Resource" />
+      <xs:field xpath="mstns:ClientGroupResource" />
+      <xs:field xpath="mstns:ResourceId" />
     </xs:unique>
   </xs:element>
@@ -527,4 +642,7 @@
       <msdata:Relationship name="R_44" msdata:parent="PermissionOwner" msdata:child="PermissionOwner_UserGroup" msdata:parentkey="PermissionOwnerId" msdata:childkey="PermissionOwnerId" msprop:Generator_UserRelationName="R_44" msprop:Generator_RelationVarName="relationR_44" msprop:Generator_UserChildTable="PermissionOwner_UserGroup" msprop:Generator_UserParentTable="PermissionOwner" msprop:Generator_ParentPropName="PermissionOwnerRow" msprop:Generator_ChildPropName="GetPermissionOwner_UserGroupRows" />
       <msdata:Relationship name="R_57" msdata:parent="UserGroup" msdata:child="PermissionOwner_UserGroup" msdata:parentkey="PermissionOwnerId" msdata:childkey="UserGroupId" msprop:Generator_UserRelationName="R_57" msprop:Generator_RelationVarName="relationR_57" msprop:Generator_UserChildTable="PermissionOwner_UserGroup" msprop:Generator_UserParentTable="UserGroup" msprop:Generator_ParentPropName="UserGroupRow" msprop:Generator_ChildPropName="GetPermissionOwner_UserGroupRows" />
+      <msdata:Relationship name="ClientGroup_is_a_Resource" msdata:parent="Resource" msdata:child="ClientGroup" msdata:parentkey="ResourceId" msdata:childkey="ResourceId" msprop:Generator_UserRelationName="ClientGroup_is_a_Resource" msprop:Generator_RelationVarName="relationClientGroup_is_a_Resource" msprop:Generator_UserChildTable="ClientGroup" msprop:Generator_UserParentTable="Resource" msprop:Generator_ParentPropName="ResourceRow" msprop:Generator_ChildPropName="GetClientGroupRows" />
+      <msdata:Relationship name="R_52" msdata:parent="ClientGroup" msdata:child="ClientGroup_Resource" msdata:parentkey="ResourceId" msdata:childkey="ClientGroupResource" msprop:Generator_UserRelationName="R_52" msprop:Generator_RelationVarName="relationR_52" msprop:Generator_UserChildTable="ClientGroup_Resource" msprop:Generator_UserParentTable="ClientGroup" msprop:Generator_ParentPropName="ClientGroupRow" msprop:Generator_ChildPropName="GetClientGroup_ResourceRows" />
+      <msdata:Relationship name="R_59" msdata:parent="Resource" msdata:child="ClientGroup_Resource" msdata:parentkey="ResourceId" msdata:childkey="ResourceId" msprop:Generator_UserRelationName="R_59" msprop:Generator_RelationVarName="relationR_59" msprop:Generator_UserChildTable="ClientGroup_Resource" msprop:Generator_UserParentTable="Resource" msprop:Generator_ParentPropName="ResourceRow" msprop:Generator_ChildPropName="GetClientGroup_ResourceRows" />
     </xs:appinfo>
   </xs:annotation>
Index: trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.xss
===================================================================
--- trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.xss	(revision 964)
+++ trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.xss	(revision 965)
@@ -5,15 +5,17 @@
      the code is regenerated.
 </autogenerated>-->
-<DiagramLayout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ex:showrelationlabel="False" ViewPortX="5" ViewPortY="-47" xmlns:ex="urn:schemas-microsoft-com:xml-msdatasource-layout-extended" xmlns="urn:schemas-microsoft-com:xml-msdatasource-layout">
+<DiagramLayout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ex:showrelationlabel="False" ViewPortX="-40" ViewPortY="-47" xmlns:ex="urn:schemas-microsoft-com:xml-msdatasource-layout-extended" xmlns="urn:schemas-microsoft-com:xml-msdatasource-layout">
   <Shapes>
-    <Shape ID="DesignTable:Resource" ZOrder="9" X="31" Y="-16" Height="122" Width="194" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="58" />
-    <Shape ID="DesignTable:Client" ZOrder="8" X="-89" Y="148" Height="224" Width="176" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="160" />
-    <Shape ID="DesignTable:HiveUser" ZOrder="5" X="492" Y="150" Height="139" Width="226" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="58" />
-    <Shape ID="DesignTable:PermissionOwner" ZOrder="7" X="298" Y="-16" Height="122" Width="242" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="58" />
-    <Shape ID="DesignTable:UserGroup" ZOrder="6" X="252" Y="405" Height="88" Width="202" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="42" />
-    <Shape ID="DesignTable:PermissionOwner_UserGroup" ZOrder="4" X="112" Y="182" Height="122" Width="300" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="58" />
+    <Shape ID="DesignTable:Resource" ZOrder="15" X="31" Y="-16" Height="122" Width="194" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="58" />
+    <Shape ID="DesignTable:Client" ZOrder="14" X="-89" Y="148" Height="224" Width="176" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="160" />
+    <Shape ID="DesignTable:HiveUser" ZOrder="11" X="885" Y="224" Height="139" Width="226" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="58" />
+    <Shape ID="DesignTable:PermissionOwner" ZOrder="10" X="572" Y="-7" Height="122" Width="242" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="58" />
+    <Shape ID="DesignTable:UserGroup" ZOrder="9" X="566" Y="409" Height="88" Width="202" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="42" />
+    <Shape ID="DesignTable:PermissionOwner_UserGroup" ZOrder="3" X="456" Y="215" Height="122" Width="300" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="58" />
+    <Shape ID="DesignTable:ClientGroup" ZOrder="7" X="78" Y="417" Height="88" Width="176" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="42" />
+    <Shape ID="DesignTable:ClientGroup_Resource" ZOrder="6" X="150" Y="227" Height="105" Width="269" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="58" />
   </Shapes>
   <Connectors>
-    <Connector ID="DesignRelation:Client_is_a_Resource" ZOrder="11" LineWidth="11">
+    <Connector ID="DesignRelation:Client_is_a_Resource" ZOrder="16" LineWidth="11">
       <RoutePoints>
         <Point>
@@ -27,49 +29,93 @@
       </RoutePoints>
     </Connector>
-    <Connector ID="DesignRelation:User_is_a_PermissionOwner" ZOrder="10" LineWidth="11">
+    <Connector ID="DesignRelation:User_is_a_PermissionOwner" ZOrder="1" LineWidth="11">
       <RoutePoints>
         <Point>
-          <X>516</X>
+          <X>797</X>
+          <Y>115</Y>
+        </Point>
+        <Point>
+          <X>797</X>
+          <Y>241</Y>
+        </Point>
+        <Point>
+          <X>885</X>
+          <Y>241</Y>
+        </Point>
+      </RoutePoints>
+    </Connector>
+    <Connector ID="DesignRelation:UserGroup_is_a_PermissionOwner" ZOrder="12" LineWidth="11">
+      <RoutePoints>
+        <Point>
+          <X>779</X>
+          <Y>115</Y>
+        </Point>
+        <Point>
+          <X>779</X>
+          <Y>426</Y>
+        </Point>
+        <Point>
+          <X>768</X>
+          <Y>426</Y>
+        </Point>
+      </RoutePoints>
+    </Connector>
+    <Connector ID="DesignRelation:R_44" ZOrder="2" LineWidth="11">
+      <RoutePoints>
+        <Point>
+          <X>754</X>
+          <Y>115</Y>
+        </Point>
+        <Point>
+          <X>754</X>
+          <Y>215</Y>
+        </Point>
+      </RoutePoints>
+    </Connector>
+    <Connector ID="DesignRelation:R_57" ZOrder="13" LineWidth="11">
+      <RoutePoints>
+        <Point>
+          <X>652</X>
+          <Y>409</Y>
+        </Point>
+        <Point>
+          <X>652</X>
+          <Y>337</Y>
+        </Point>
+      </RoutePoints>
+    </Connector>
+    <Connector ID="DesignRelation:ClientGroup_is_a_Resource" ZOrder="8" LineWidth="11">
+      <RoutePoints>
+        <Point>
+          <X>122</X>
           <Y>106</Y>
         </Point>
         <Point>
-          <X>516</X>
-          <Y>150</Y>
+          <X>122</X>
+          <Y>417</Y>
         </Point>
       </RoutePoints>
     </Connector>
-    <Connector ID="DesignRelation:UserGroup_is_a_PermissionOwner" ZOrder="1" LineWidth="11">
+    <Connector ID="DesignRelation:R_52" ZOrder="5" LineWidth="11">
       <RoutePoints>
         <Point>
-          <X>432</X>
+          <X>161</X>
+          <Y>417</Y>
+        </Point>
+        <Point>
+          <X>161</X>
+          <Y>332</Y>
+        </Point>
+      </RoutePoints>
+    </Connector>
+    <Connector ID="DesignRelation:R_59" ZOrder="4" LineWidth="11">
+      <RoutePoints>
+        <Point>
+          <X>159</X>
           <Y>106</Y>
         </Point>
         <Point>
-          <X>432</X>
-          <Y>405</Y>
-        </Point>
-      </RoutePoints>
-    </Connector>
-    <Connector ID="DesignRelation:R_44" ZOrder="3" LineWidth="11">
-      <RoutePoints>
-        <Point>
-          <X>346</X>
-          <Y>106</Y>
-        </Point>
-        <Point>
-          <X>346</X>
-          <Y>182</Y>
-        </Point>
-      </RoutePoints>
-    </Connector>
-    <Connector ID="DesignRelation:R_57" ZOrder="2" LineWidth="11">
-      <RoutePoints>
-        <Point>
-          <X>346</X>
-          <Y>405</Y>
-        </Point>
-        <Point>
-          <X>346</X>
-          <Y>304</Y>
+          <X>159</X>
+          <Y>227</Y>
         </Point>
       </RoutePoints>
Index: trunk/sources/HeuristicLab.Hive.Server.Core/DbTestApp.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Server.Core/DbTestApp.cs	(revision 964)
+++ trunk/sources/HeuristicLab.Hive.Server.Core/DbTestApp.cs	(revision 965)
@@ -162,8 +162,72 @@
     }
 
+    private void TestClientGroupAdapter() {
+      IClientGroupAdapter clientGroupAdapter =
+       ServiceLocator.GetClientGroupAdapter();
+
+      ClientInfo client =
+        new ClientInfo();
+      client.Name = "Stefan";
+      client.ClientId = Guid.NewGuid();
+
+      ClientInfo client2 =
+        new ClientInfo();
+      client2.Name = "Martin";
+      client2.ClientId = Guid.NewGuid();
+
+      ClientInfo client3 =
+        new ClientInfo();
+      client3.Name = "Heinz";
+      client3.ClientId = Guid.NewGuid();
+
+      ClientGroup group =
+        new ClientGroup();
+
+      ClientGroup subGroup =
+        new ClientGroup();
+      subGroup.Resources.Add(client);
+
+      group.Resources.Add(client3);
+      group.Resources.Add(client2);
+      group.Resources.Add(subGroup);
+
+      clientGroupAdapter.UpdateClientGroup(group);
+
+      ClientGroup read =
+        clientGroupAdapter.GetClientGroupById(group.ResourceId);
+
+      ICollection<ClientGroup> clientGroups =
+        clientGroupAdapter.GetAllClientGroups();
+
+      IClientAdapter clientAdapter =
+        ServiceLocator.GetClientAdapter();
+
+      clientAdapter.DeleteClient(client3);
+
+      read =
+         clientGroupAdapter.GetClientGroupById(group.ResourceId);
+
+      clientGroupAdapter.DeleteClientGroup(subGroup);
+
+      read =
+         clientGroupAdapter.GetClientGroupById(group.ResourceId);
+
+      clientGroups =
+        clientGroupAdapter.GetAllClientGroups();
+
+      clientGroupAdapter.DeleteClientGroup(group);
+
+      clientGroups =
+        clientGroupAdapter.GetAllClientGroups();
+
+      clientAdapter.DeleteClient(client);
+      clientAdapter.DeleteClient(client2);
+    }
+
     public override void Run() {
       TestClientAdapter();
       TestUserAdapter();
       TestUserGroupAdapter();
+      TestClientGroupAdapter();
 
       ITransactionManager transactionManager =
Index: trunk/sources/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IClientAdapter.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IClientAdapter.cs	(revision 964)
+++ trunk/sources/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IClientAdapter.cs	(revision 965)
@@ -45,4 +45,11 @@
 
     /// <summary>
+    /// Get the client with the specified ID
+    /// </summary>
+    /// <param name="clientId"></param>
+    /// <returns></returns>
+    ClientInfo GetClientById(long id);
+
+    /// <summary>
     /// Get all clients
     /// </summary>
Index: trunk/sources/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IClientGroupAdapter.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IClientGroupAdapter.cs	(revision 964)
+++ trunk/sources/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IClientGroupAdapter.cs	(revision 965)
@@ -51,4 +51,11 @@
 
     /// <summary>
+    /// Gets all client groups where the resource is member of
+    /// </summary>
+    /// <param name="permOwner"></param>
+    /// <returns></returns>
+    ICollection<ClientGroup> MemberOf(Resource resource);
+
+    /// <summary>
     /// Deletes the client group
     /// </summary>
