Index: trunk/sources/HeuristicLab.Hive.Server.Console/3.2/AddGroup.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Server.Console/3.2/AddGroup.Designer.cs	(revision 1832)
+++ trunk/sources/HeuristicLab.Hive.Server.Console/3.2/AddGroup.Designer.cs	(revision 1937)
@@ -71,6 +71,8 @@
       // AddGroup
       // 
+      this.AcceptButton = this.btnAdd;
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.CancelButton = this.btnClose;
       this.ClientSize = new System.Drawing.Size(337, 70);
       this.Controls.Add(this.tbName);
Index: trunk/sources/HeuristicLab.Hive.Server.Console/3.2/AddJobForm.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Server.Console/3.2/AddJobForm.Designer.cs	(revision 1832)
+++ trunk/sources/HeuristicLab.Hive.Server.Console/3.2/AddJobForm.Designer.cs	(revision 1937)
@@ -45,6 +45,4 @@
     /// </summary>
     private void InitializeComponent() {
-      this.lblParentJob = new System.Windows.Forms.Label();
-      this.cbParJob = new System.Windows.Forms.ComboBox();
       this.btnAdd = new System.Windows.Forms.Button();
       this.btnClose = new System.Windows.Forms.Button();
@@ -52,26 +50,18 @@
       this.tbNumJobs = new System.Windows.Forms.TextBox();
       this.lblError = new System.Windows.Forms.Label();
+      this.lblProject = new System.Windows.Forms.Label();
+      this.cbProject = new System.Windows.Forms.ComboBox();
+      this.cbAllGroups = new System.Windows.Forms.CheckBox();
+      this.gbGroups = new System.Windows.Forms.GroupBox();
+      this.btnRemoveGroup = new System.Windows.Forms.Button();
+      this.btnAddGroup = new System.Windows.Forms.Button();
+      this.lbGroupsIn = new System.Windows.Forms.ListBox();
+      this.lbGroupsOut = new System.Windows.Forms.ListBox();
+      this.gbGroups.SuspendLayout();
       this.SuspendLayout();
       // 
-      // lblParentJob
-      // 
-      this.lblParentJob.AutoSize = true;
-      this.lblParentJob.Location = new System.Drawing.Point(9, 36);
-      this.lblParentJob.Name = "lblParentJob";
-      this.lblParentJob.Size = new System.Drawing.Size(58, 13);
-      this.lblParentJob.TabIndex = 1;
-      this.lblParentJob.Text = "Parent Job";
-      // 
-      // cbParJob
-      // 
-      this.cbParJob.FormattingEnabled = true;
-      this.cbParJob.Location = new System.Drawing.Point(117, 33);
-      this.cbParJob.Name = "cbParJob";
-      this.cbParJob.Size = new System.Drawing.Size(212, 21);
-      this.cbParJob.TabIndex = 2;
-      // 
       // btnAdd
       // 
-      this.btnAdd.Location = new System.Drawing.Point(12, 65);
+      this.btnAdd.Location = new System.Drawing.Point(6, 224);
       this.btnAdd.Name = "btnAdd";
       this.btnAdd.Size = new System.Drawing.Size(75, 23);
@@ -84,5 +74,5 @@
       // 
       this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
-      this.btnClose.Location = new System.Drawing.Point(254, 65);
+      this.btnClose.Location = new System.Drawing.Point(291, 224);
       this.btnClose.Name = "btnClose";
       this.btnClose.Size = new System.Drawing.Size(75, 23);
@@ -105,5 +95,5 @@
       this.tbNumJobs.Location = new System.Drawing.Point(117, 6);
       this.tbNumJobs.Name = "tbNumJobs";
-      this.tbNumJobs.Size = new System.Drawing.Size(212, 20);
+      this.tbNumJobs.Size = new System.Drawing.Size(243, 20);
       this.tbNumJobs.TabIndex = 1;
       this.tbNumJobs.Text = "1";
@@ -112,8 +102,89 @@
       // 
       this.lblError.AutoSize = true;
-      this.lblError.Location = new System.Drawing.Point(94, 74);
+      this.lblError.Location = new System.Drawing.Point(87, 229);
       this.lblError.Name = "lblError";
       this.lblError.Size = new System.Drawing.Size(0, 13);
       this.lblError.TabIndex = 8;
+      // 
+      // lblProject
+      // 
+      this.lblProject.AutoSize = true;
+      this.lblProject.Location = new System.Drawing.Point(12, 39);
+      this.lblProject.Name = "lblProject";
+      this.lblProject.Size = new System.Drawing.Size(59, 13);
+      this.lblProject.TabIndex = 9;
+      this.lblProject.Text = "Job project";
+      // 
+      // cbProject
+      // 
+      this.cbProject.FormattingEnabled = true;
+      this.cbProject.Location = new System.Drawing.Point(117, 31);
+      this.cbProject.Name = "cbProject";
+      this.cbProject.Size = new System.Drawing.Size(245, 21);
+      this.cbProject.TabIndex = 10;
+      // 
+      // cbAllGroups
+      // 
+      this.cbAllGroups.AutoSize = true;
+      this.cbAllGroups.Checked = true;
+      this.cbAllGroups.CheckState = System.Windows.Forms.CheckState.Checked;
+      this.cbAllGroups.Location = new System.Drawing.Point(15, 65);
+      this.cbAllGroups.Name = "cbAllGroups";
+      this.cbAllGroups.Size = new System.Drawing.Size(91, 17);
+      this.cbAllGroups.TabIndex = 15;
+      this.cbAllGroups.Text = "use all groups";
+      this.cbAllGroups.UseVisualStyleBackColor = true;
+      this.cbAllGroups.CheckedChanged += new System.EventHandler(this.cbAllGroups_CheckedChanged);
+      // 
+      // gbGroups
+      // 
+      this.gbGroups.Controls.Add(this.btnRemoveGroup);
+      this.gbGroups.Controls.Add(this.btnAddGroup);
+      this.gbGroups.Controls.Add(this.lbGroupsIn);
+      this.gbGroups.Controls.Add(this.lbGroupsOut);
+      this.gbGroups.Location = new System.Drawing.Point(10, 90);
+      this.gbGroups.Name = "gbGroups";
+      this.gbGroups.Size = new System.Drawing.Size(357, 128);
+      this.gbGroups.TabIndex = 16;
+      this.gbGroups.TabStop = false;
+      this.gbGroups.Text = "choose groups";
+      // 
+      // btnRemoveGroup
+      // 
+      this.btnRemoveGroup.Enabled = false;
+      this.btnRemoveGroup.Location = new System.Drawing.Point(143, 56);
+      this.btnRemoveGroup.Name = "btnRemoveGroup";
+      this.btnRemoveGroup.Size = new System.Drawing.Size(75, 23);
+      this.btnRemoveGroup.TabIndex = 18;
+      this.btnRemoveGroup.Text = "<< Remove";
+      this.btnRemoveGroup.UseVisualStyleBackColor = true;
+      // 
+      // btnAddGroup
+      // 
+      this.btnAddGroup.Enabled = false;
+      this.btnAddGroup.Location = new System.Drawing.Point(143, 26);
+      this.btnAddGroup.Name = "btnAddGroup";
+      this.btnAddGroup.Size = new System.Drawing.Size(75, 23);
+      this.btnAddGroup.TabIndex = 17;
+      this.btnAddGroup.Text = "Add >>";
+      this.btnAddGroup.UseVisualStyleBackColor = true;
+      // 
+      // lbGroupsIn
+      // 
+      this.lbGroupsIn.Enabled = false;
+      this.lbGroupsIn.FormattingEnabled = true;
+      this.lbGroupsIn.Location = new System.Drawing.Point(224, 15);
+      this.lbGroupsIn.Name = "lbGroupsIn";
+      this.lbGroupsIn.Size = new System.Drawing.Size(128, 108);
+      this.lbGroupsIn.TabIndex = 16;
+      // 
+      // lbGroupsOut
+      // 
+      this.lbGroupsOut.Enabled = false;
+      this.lbGroupsOut.FormattingEnabled = true;
+      this.lbGroupsOut.Location = new System.Drawing.Point(6, 15);
+      this.lbGroupsOut.Name = "lbGroupsOut";
+      this.lbGroupsOut.Size = new System.Drawing.Size(130, 108);
+      this.lbGroupsOut.TabIndex = 15;
       // 
       // AddJobForm
@@ -123,5 +194,9 @@
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
       this.CancelButton = this.btnClose;
-      this.ClientSize = new System.Drawing.Size(344, 100);
+      this.ClientSize = new System.Drawing.Size(372, 255);
+      this.Controls.Add(this.gbGroups);
+      this.Controls.Add(this.cbAllGroups);
+      this.Controls.Add(this.cbProject);
+      this.Controls.Add(this.lblProject);
       this.Controls.Add(this.lblError);
       this.Controls.Add(this.tbNumJobs);
@@ -129,8 +204,7 @@
       this.Controls.Add(this.btnClose);
       this.Controls.Add(this.btnAdd);
-      this.Controls.Add(this.cbParJob);
-      this.Controls.Add(this.lblParentJob);
       this.Name = "AddJobForm";
       this.Text = "Add Job";
+      this.gbGroups.ResumeLayout(false);
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -140,6 +214,4 @@
     #endregion
 
-    private System.Windows.Forms.Label lblParentJob;
-    private System.Windows.Forms.ComboBox cbParJob;
     private System.Windows.Forms.Button btnAdd;
     private System.Windows.Forms.Button btnClose;
@@ -147,4 +219,12 @@
     private System.Windows.Forms.TextBox tbNumJobs;
     private System.Windows.Forms.Label lblError;
+    private System.Windows.Forms.Label lblProject;
+    private System.Windows.Forms.ComboBox cbProject;
+    private System.Windows.Forms.CheckBox cbAllGroups;
+    private System.Windows.Forms.GroupBox gbGroups;
+    private System.Windows.Forms.Button btnRemoveGroup;
+    private System.Windows.Forms.Button btnAddGroup;
+    private System.Windows.Forms.ListBox lbGroupsIn;
+    private System.Windows.Forms.ListBox lbGroupsOut;
   }
 }
Index: trunk/sources/HeuristicLab.Hive.Server.Console/3.2/AddJobForm.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Server.Console/3.2/AddJobForm.cs	(revision 1832)
+++ trunk/sources/HeuristicLab.Hive.Server.Console/3.2/AddJobForm.cs	(revision 1937)
@@ -42,10 +42,17 @@
     public event addDelegate addJobEvent;
 
-    ResponseList<Job> jobGroups = null;
+    ResponseList<Project> projects = null;
     IJobManager jobManager;
+    IClientManager clientManager; 
+    ResponseList<ClientGroup> clientGroups;
+
+    Dictionary<Guid, string> clients = null;
 
     public AddJobForm() {
       InitializeComponent();
+
+      clients = new Dictionary<Guid, string>();
       AddJob();
+
     }
 
@@ -53,10 +60,29 @@
       jobManager =
         ServiceLocator.GetJobManager();
-      jobGroups = jobManager.GetAllJobs();
-      cbParJob.Items.Add("none");
-      cbParJob.SelectedIndex = 0; 
-      foreach (Job job in jobGroups.List) {
-        cbParJob.Items.Add(job.Id);
+      projects = jobManager.GetAllProjects();
+      cbProject.Items.Add("none");
+      cbProject.SelectedIndex = 0;
+      foreach (Project project in projects.List) {
+        cbProject.Items.Add(project.Name);
       }
+
+
+    }
+
+    private void AddClientGroups() {
+     foreach (ClientGroup cg in clientGroups.List) {
+       clients.Add(cg.Id, cg.Name);
+        AddClientOrGroup(cg);
+      }
+    }
+
+    private void AddClientOrGroup(ClientGroup clientGroup) {
+      foreach (Resource resource in clientGroup.Resources) {
+        if (resource is ClientGroup) {
+          clients.Add(resource.Id, resource.Name);
+          AddClientOrGroup(resource as ClientGroup);
+        }
+      }
+    
     }
 
@@ -67,16 +93,16 @@
         if (numJobs > 0) {
           for (int i = 0; i < numJobs; i++) {
-            if (cbParJob.SelectedIndex != 0) {
-              foreach (Job pjob in jobGroups.List) {
-                if (cbParJob.SelectedItem.ToString().Equals(pjob.Id.ToString())) {
-                  Job job = new Job { ParentJob = pjob, State = State.offline, CoresNeeded = 1 };
-                  job.SerializedJob = PersistenceManager.SaveToGZip(new TestJob());
-                  Response resp = jobManager.AddNewJob(job);
-                }
-              }
-            } else {
-              Job job = new Job { State = State.offline, CoresNeeded = 1 };
-              job.SerializedJob = PersistenceManager.SaveToGZip(new TestJob());
-              Response resp = jobManager.AddNewJob(job);
+            if (cbProject.SelectedIndex != 0) {
+            //  foreach (Job pjob in jobGroups.List) {
+            //    if (cbParJob.SelectedItem.ToString().Equals(pjob.Id.ToString())) {
+            //      Job job = new Job { ParentJob = pjob, State = State.offline, CoresNeeded = 1 };
+            //      job.SerializedJob = PersistenceManager.SaveToGZip(new TestJob());
+            //      Response resp = jobManager.AddNewJob(job);
+            //    }
+            //  }
+            //} else {
+            //  Job job = new Job { State = State.offline, CoresNeeded = 1 };
+            //  job.SerializedJob = PersistenceManager.SaveToGZip(new TestJob());
+            //  Response resp = jobManager.AddNewJob(job);
             }
           }
@@ -99,4 +125,10 @@
     }
 
+    private void cbAllGroups_CheckedChanged(object sender, EventArgs e) {
+      foreach (Control control in gbGroups.Controls) {
+        control.Enabled = !cbAllGroups.Checked;
+      }
+    }
+
 
   }
Index: trunk/sources/HeuristicLab.Hive.Server.Console/3.2/AddProject.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Server.Console/3.2/AddProject.Designer.cs	(revision 1937)
+++ trunk/sources/HeuristicLab.Hive.Server.Console/3.2/AddProject.Designer.cs	(revision 1937)
@@ -0,0 +1,96 @@
+﻿namespace HeuristicLab.Hive.Server.ServerConsole {
+  partial class AddProject {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.tbName = new System.Windows.Forms.TextBox();
+      this.lblName = new System.Windows.Forms.Label();
+      this.btnClose = new System.Windows.Forms.Button();
+      this.btnAdd = new System.Windows.Forms.Button();
+      this.SuspendLayout();
+      // 
+      // tbName
+      // 
+      this.tbName.Location = new System.Drawing.Point(45, 6);
+      this.tbName.Name = "tbName";
+      this.tbName.Size = new System.Drawing.Size(276, 20);
+      this.tbName.TabIndex = 7;
+      this.tbName.TextChanged += new System.EventHandler(this.tbName_TextChanged);
+      // 
+      // lblName
+      // 
+      this.lblName.AutoSize = true;
+      this.lblName.Location = new System.Drawing.Point(4, 9);
+      this.lblName.Name = "lblName";
+      this.lblName.Size = new System.Drawing.Size(35, 13);
+      this.lblName.TabIndex = 10;
+      this.lblName.Text = "Name";
+      // 
+      // btnClose
+      // 
+      this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+      this.btnClose.Location = new System.Drawing.Point(246, 36);
+      this.btnClose.Name = "btnClose";
+      this.btnClose.Size = new System.Drawing.Size(75, 23);
+      this.btnClose.TabIndex = 9;
+      this.btnClose.Text = "Close";
+      this.btnClose.UseVisualStyleBackColor = true;
+      this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
+      // 
+      // btnAdd
+      // 
+      this.btnAdd.Enabled = false;
+      this.btnAdd.Location = new System.Drawing.Point(7, 36);
+      this.btnAdd.Name = "btnAdd";
+      this.btnAdd.Size = new System.Drawing.Size(75, 23);
+      this.btnAdd.TabIndex = 8;
+      this.btnAdd.Text = "Add";
+      this.btnAdd.UseVisualStyleBackColor = true;
+      this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click);
+      // 
+      // AddProject
+      // 
+      this.AcceptButton = this.btnAdd;
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.CancelButton = this.btnClose;
+      this.ClientSize = new System.Drawing.Size(337, 70);
+      this.Controls.Add(this.tbName);
+      this.Controls.Add(this.lblName);
+      this.Controls.Add(this.btnClose);
+      this.Controls.Add(this.btnAdd);
+      this.Name = "AddProject";
+      this.Text = "AddProject";
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox tbName;
+    private System.Windows.Forms.Label lblName;
+    private System.Windows.Forms.Button btnClose;
+    private System.Windows.Forms.Button btnAdd;
+  }
+}
Index: trunk/sources/HeuristicLab.Hive.Server.Console/3.2/AddProject.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Server.Console/3.2/AddProject.cs	(revision 1937)
+++ trunk/sources/HeuristicLab.Hive.Server.Console/3.2/AddProject.cs	(revision 1937)
@@ -0,0 +1,41 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+
+  public delegate void AddProjectDelegate(string name);
+
+  public partial class AddProject : Form {
+
+    public event AddProjectDelegate AddProjectEvent;
+
+    public AddProject() {
+      InitializeComponent();
+    }
+
+    private void btnAdd_Click(object sender, EventArgs e) {
+      if (AddProjectEvent != null) {
+        AddProjectEvent(tbName.Text);
+      }
+      this.Close();
+    }
+
+    private void btnClose_Click(object sender, EventArgs e) {
+      this.Close();
+    }
+
+    private void tbName_TextChanged(object sender, EventArgs e) {
+      if (string.IsNullOrEmpty(tbName.Text)) {
+        btnAdd.Enabled = false;
+      } else {
+        btnAdd.Enabled = true;
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Hive.Server.Console/3.2/AddProject.resx
===================================================================
--- trunk/sources/HeuristicLab.Hive.Server.Console/3.2/AddProject.resx	(revision 1937)
+++ trunk/sources/HeuristicLab.Hive.Server.Console/3.2/AddProject.resx	(revision 1937)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: trunk/sources/HeuristicLab.Hive.Server.Console/3.2/HiveServerManagementConsole.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Server.Console/3.2/HiveServerManagementConsole.Designer.cs	(revision 1832)
+++ trunk/sources/HeuristicLab.Hive.Server.Console/3.2/HiveServerManagementConsole.Designer.cs	(revision 1937)
@@ -32,4 +32,5 @@
       this.addToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
       this.jobToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.groupToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
       this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
       this.largeIconsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -57,11 +58,4 @@
       this.chProgress = new System.Windows.Forms.ColumnHeader();
       this.chSnapshotTime = new System.Windows.Forms.ColumnHeader();
-      this.lblPriorityJob = new System.Windows.Forms.Label();
-      this.lblParentJob = new System.Windows.Forms.Label();
-      this.lblClientCalculating = new System.Windows.Forms.Label();
-      this.lblJobCalculationEnd = new System.Windows.Forms.Label();
-      this.lblJobCalculationBegin = new System.Windows.Forms.Label();
-      this.lblJobCreated = new System.Windows.Forms.Label();
-      this.lblUserCreatedJob = new System.Windows.Forms.Label();
       this.lblProgress = new System.Windows.Forms.Label();
       this.lblStatus = new System.Windows.Forms.Label();
@@ -141,5 +135,6 @@
       // 
       this.refreshToolStripMenuItem.Name = "refreshToolStripMenuItem";
-      this.refreshToolStripMenuItem.Size = new System.Drawing.Size(123, 22);
+      this.refreshToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.R)));
+      this.refreshToolStripMenuItem.Size = new System.Drawing.Size(162, 22);
       this.refreshToolStripMenuItem.Text = "Refresh";
       this.refreshToolStripMenuItem.Click += new System.EventHandler(this.Refresh_Click);
@@ -148,5 +143,5 @@
       // 
       this.closeToolStripMenuItem.Name = "closeToolStripMenuItem";
-      this.closeToolStripMenuItem.Size = new System.Drawing.Size(123, 22);
+      this.closeToolStripMenuItem.Size = new System.Drawing.Size(162, 22);
       this.closeToolStripMenuItem.Text = "Close";
       this.closeToolStripMenuItem.Click += new System.EventHandler(this.Close_Click);
@@ -155,5 +150,6 @@
       // 
       this.addToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.jobToolStripMenuItem});
+            this.jobToolStripMenuItem,
+            this.groupToolStripMenuItem});
       this.addToolStripMenuItem.Name = "addToolStripMenuItem";
       this.addToolStripMenuItem.Size = new System.Drawing.Size(38, 20);
@@ -163,7 +159,16 @@
       // 
       this.jobToolStripMenuItem.Name = "jobToolStripMenuItem";
-      this.jobToolStripMenuItem.Size = new System.Drawing.Size(102, 22);
+      this.jobToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.J)));
+      this.jobToolStripMenuItem.Size = new System.Drawing.Size(153, 22);
       this.jobToolStripMenuItem.Text = "Job";
       this.jobToolStripMenuItem.Click += new System.EventHandler(this.AddJob_Click);
+      // 
+      // groupToolStripMenuItem
+      // 
+      this.groupToolStripMenuItem.Name = "groupToolStripMenuItem";
+      this.groupToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.G)));
+      this.groupToolStripMenuItem.Size = new System.Drawing.Size(153, 22);
+      this.groupToolStripMenuItem.Text = "Group";
+      this.groupToolStripMenuItem.Click += new System.EventHandler(this.groupToolStripMenuItem_Click);
       // 
       // viewToolStripMenuItem
@@ -182,5 +187,6 @@
       this.largeIconsToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked;
       this.largeIconsToolStripMenuItem.Name = "largeIconsToolStripMenuItem";
-      this.largeIconsToolStripMenuItem.Size = new System.Drawing.Size(141, 22);
+      this.largeIconsToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D1)));
+      this.largeIconsToolStripMenuItem.Size = new System.Drawing.Size(179, 22);
       this.largeIconsToolStripMenuItem.Text = "Large Icons";
       this.largeIconsToolStripMenuItem.Click += new System.EventHandler(this.largeIconsToolStripMenuItem_Click);
@@ -189,5 +195,6 @@
       // 
       this.smallIconsToolStripMenuItem.Name = "smallIconsToolStripMenuItem";
-      this.smallIconsToolStripMenuItem.Size = new System.Drawing.Size(141, 22);
+      this.smallIconsToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D2)));
+      this.smallIconsToolStripMenuItem.Size = new System.Drawing.Size(179, 22);
       this.smallIconsToolStripMenuItem.Text = "Small Icons";
       this.smallIconsToolStripMenuItem.Click += new System.EventHandler(this.smallIconsToolStripMenuItem_Click);
@@ -196,5 +203,6 @@
       // 
       this.listToolStripMenuItem.Name = "listToolStripMenuItem";
-      this.listToolStripMenuItem.Size = new System.Drawing.Size(141, 22);
+      this.listToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D3)));
+      this.listToolStripMenuItem.Size = new System.Drawing.Size(179, 22);
       this.listToolStripMenuItem.Text = "List";
       this.listToolStripMenuItem.Click += new System.EventHandler(this.listToolStripMenuItem_Click);
@@ -332,11 +340,4 @@
       this.plJobDetails.Controls.Add(this.lvJobDetails);
       this.plJobDetails.Controls.Add(this.lvSnapshots);
-      this.plJobDetails.Controls.Add(this.lblPriorityJob);
-      this.plJobDetails.Controls.Add(this.lblParentJob);
-      this.plJobDetails.Controls.Add(this.lblClientCalculating);
-      this.plJobDetails.Controls.Add(this.lblJobCalculationEnd);
-      this.plJobDetails.Controls.Add(this.lblJobCalculationBegin);
-      this.plJobDetails.Controls.Add(this.lblJobCreated);
-      this.plJobDetails.Controls.Add(this.lblUserCreatedJob);
       this.plJobDetails.Controls.Add(this.lblProgress);
       this.plJobDetails.Controls.Add(this.lblStatus);
@@ -358,5 +359,5 @@
       this.lvJobDetails.FullRowSelect = true;
       this.lvJobDetails.GridLines = true;
-      this.lvJobDetails.Location = new System.Drawing.Point(17, 129);
+      this.lvJobDetails.Location = new System.Drawing.Point(17, 124);
       this.lvJobDetails.Name = "lvJobDetails";
       this.lvJobDetails.Size = new System.Drawing.Size(382, 175);
@@ -405,67 +406,4 @@
       this.chSnapshotTime.Text = "Snapshot request";
       this.chSnapshotTime.Width = 166;
-      // 
-      // lblPriorityJob
-      // 
-      this.lblPriorityJob.AutoSize = true;
-      this.lblPriorityJob.Location = new System.Drawing.Point(17, 193);
-      this.lblPriorityJob.Name = "lblPriorityJob";
-      this.lblPriorityJob.Size = new System.Drawing.Size(65, 13);
-      this.lblPriorityJob.TabIndex = 15;
-      this.lblPriorityJob.Text = "lblPriorityJob";
-      // 
-      // lblParentJob
-      // 
-      this.lblParentJob.AutoSize = true;
-      this.lblParentJob.Location = new System.Drawing.Point(17, 173);
-      this.lblParentJob.Name = "lblParentJob";
-      this.lblParentJob.Size = new System.Drawing.Size(65, 13);
-      this.lblParentJob.TabIndex = 14;
-      this.lblParentJob.Text = "lblParentJob";
-      // 
-      // lblClientCalculating
-      // 
-      this.lblClientCalculating.AutoSize = true;
-      this.lblClientCalculating.Location = new System.Drawing.Point(17, 253);
-      this.lblClientCalculating.Name = "lblClientCalculating";
-      this.lblClientCalculating.Size = new System.Drawing.Size(95, 13);
-      this.lblClientCalculating.TabIndex = 13;
-      this.lblClientCalculating.Text = "lblClientCalculating";
-      // 
-      // lblJobCalculationEnd
-      // 
-      this.lblJobCalculationEnd.AutoSize = true;
-      this.lblJobCalculationEnd.Location = new System.Drawing.Point(17, 233);
-      this.lblJobCalculationEnd.Name = "lblJobCalculationEnd";
-      this.lblJobCalculationEnd.Size = new System.Drawing.Size(105, 13);
-      this.lblJobCalculationEnd.TabIndex = 12;
-      this.lblJobCalculationEnd.Text = "lblJobCalculationEnd";
-      // 
-      // lblJobCalculationBegin
-      // 
-      this.lblJobCalculationBegin.AutoSize = true;
-      this.lblJobCalculationBegin.Location = new System.Drawing.Point(17, 213);
-      this.lblJobCalculationBegin.Name = "lblJobCalculationBegin";
-      this.lblJobCalculationBegin.Size = new System.Drawing.Size(113, 13);
-      this.lblJobCalculationBegin.TabIndex = 11;
-      this.lblJobCalculationBegin.Text = "lblJobCalculationBegin";
-      // 
-      // lblJobCreated
-      // 
-      this.lblJobCreated.AutoSize = true;
-      this.lblJobCreated.Location = new System.Drawing.Point(17, 152);
-      this.lblJobCreated.Name = "lblJobCreated";
-      this.lblJobCreated.Size = new System.Drawing.Size(71, 13);
-      this.lblJobCreated.TabIndex = 10;
-      this.lblJobCreated.Text = "lblJobCreated";
-      // 
-      // lblUserCreatedJob
-      // 
-      this.lblUserCreatedJob.AutoSize = true;
-      this.lblUserCreatedJob.Location = new System.Drawing.Point(17, 132);
-      this.lblUserCreatedJob.Name = "lblUserCreatedJob";
-      this.lblUserCreatedJob.Size = new System.Drawing.Size(93, 13);
-      this.lblUserCreatedJob.TabIndex = 9;
-      this.lblUserCreatedJob.Text = "lblUserCreatedJob";
       // 
       // lblProgress
@@ -730,5 +668,5 @@
       this.lvClientControl.Name = "lvClientControl";
       this.lvClientControl.Size = new System.Drawing.Size(299, 386);
-      this.lvClientControl.SmallImageList = this.ilLargeImgClient;
+      this.lvClientControl.SmallImageList = this.ilSmallImgClient;
       this.lvClientControl.TabIndex = 0;
       this.lvClientControl.UseCompatibleStateImageBehavior = false;
@@ -826,11 +764,4 @@
     private System.Windows.Forms.Label lblStatus;
     private System.Windows.Forms.Label lblProgress;
-    private System.Windows.Forms.Label lblJobCalculationBegin;
-    private System.Windows.Forms.Label lblJobCreated;
-    private System.Windows.Forms.Label lblUserCreatedJob;
-    private System.Windows.Forms.Label lblClientCalculating;
-    private System.Windows.Forms.Label lblJobCalculationEnd;
-    private System.Windows.Forms.Label lblPriorityJob;
-    private System.Windows.Forms.Label lblParentJob;
     private System.Windows.Forms.ListView lvSnapshots;
     private System.Windows.Forms.ColumnHeader chClientCalculated;
@@ -867,4 +798,5 @@
     private System.Windows.Forms.ToolStripMenuItem menuItemAddGroup;
     private System.Windows.Forms.ToolStripMenuItem menuItemDeleteGroup;
+    private System.Windows.Forms.ToolStripMenuItem groupToolStripMenuItem;
   }
 }
Index: trunk/sources/HeuristicLab.Hive.Server.Console/3.2/HiveServerManagementConsole.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Server.Console/3.2/HiveServerManagementConsole.cs	(revision 1832)
+++ trunk/sources/HeuristicLab.Hive.Server.Console/3.2/HiveServerManagementConsole.cs	(revision 1937)
@@ -47,36 +47,26 @@
 
     #region private variables
-    private ResponseList<ClientGroup> clientGroups = null;
-    private ResponseList<ClientInfo> clients = null;
     private ResponseList<Job> jobs = null;
 
-    //TODO delete
-    private Dictionary<Guid, ListViewGroup> clientObjects;
-    private Dictionary<Guid, ListViewItem> clientInfoObjects;
-    private Dictionary<Guid, ListViewItem> jobObjects;
+    List<ListViewGroup> jobGroup;
+    private Dictionary<Guid, List<ListViewItem>> clientList = new Dictionary<Guid, List<ListViewItem>>();
+    private List<Changes> changes = new List<Changes>();
 
     private Job currentJob = null;
     private ClientInfo currentClient = null;
 
-    TreeNode currentNode = null;
-
-    //TODO delete
-    private string nameCurrentJob = "";
-    private string nameCurrentClient = "";
-    private bool flagJob = false;
-
-    private List<Changes> changes = new List<Changes>();
-
+    private TreeNode currentNode = null;
+    Guid parentgroup = Guid.Empty;
     private ToolTip tt = new ToolTip();
 
     private const string NOGROUP = "No group";
-    //private List<ListViewItem> clientList = new List<ListViewItem>();
-    private Dictionary<Guid, List<ListViewItem>> clientList = new Dictionary<Guid, List<ListViewItem>>();
-
+
+    #endregion
+
+    #region Properties
     private IClientManager ClientManager {
       get {
         return ServiceLocator.GetClientManager();
       }
-
     }
     #endregion
@@ -90,4 +80,41 @@
     }
 
+    private void Init() {
+
+      //adding context menu items for jobs
+      menuItemAbortJob.Click += (s, e) => {
+        IJobManager jobManager = ServiceLocator.GetJobManager();
+        if (lvJobControl.SelectedItems.Count == 1) {
+          jobManager.AbortJob(((Job)(lvJobControl.SelectedItems[0].Tag)).Id);
+        }
+      };
+
+      //adding context menu items for jobs
+      menuItemGetSnapshot.Click += (s, e) => {
+        IJobManager jobManager = ServiceLocator.GetJobManager();
+        if (lvJobControl.SelectedItems.Count == 1) {
+          jobManager.RequestSnapshot(((Job)(lvJobControl.SelectedItems[0].Tag)).Id);
+        }
+      };
+
+      //adding group
+      menuItemAddGroup.Click += (s, e) => {
+        AddGroup addgroup = new AddGroup();
+        parentgroup = Guid.Empty;
+        if ((tvClientControl.SelectedNode != null) && (((ClientGroup)tvClientControl.SelectedNode.Tag).Id != Guid.Empty)) {
+          parentgroup = ((ClientGroup)tvClientControl.SelectedNode.Tag).Id;
+        }
+        addgroup.addGroupEvent += new AddGroupDelegate(addgroup_addGroupEvent);
+        addgroup.Show();
+      };
+
+      //adding group
+      menuItemDeleteGroup.Click += (s, e) => {
+        IClientManager clientManager = ServiceLocator.GetClientManager();
+        if (tvClientControl.SelectedNode != null) {
+          //  Delete Group
+        }
+      };
+    }
 
     #region Backgroundworker
@@ -104,85 +131,115 @@
 
     private void updaterWoker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
-      Refresh();
-    }
-
+      RefreshForm();
+    }
+
+    private void updaterWoker_DoWork(object sender, DoWorkEventArgs e) {
+
+      changes.Clear();
+
+      //#region ClientInfo
+      //ResponseList<ClientInfo> clientInfoOld = clientInfo;
+      //clientInfo = ClientManager.GetAllClients();
+
+      //IDictionary<int, ClientInfo> clientInfoOldHelp;
+
+      //CloneList(clientInfoOld, out clientInfoOldHelp);
+
+      //GetDelta(clientInfoOld.List, clientInfoOldHelp);
+      //#endregion
+
+      #region Clients
+      //ResponseList<ClientGroup> clientsOld = clients;
+
+      // newClients = ClientManager.GetAllClientGroups();
+
+      //IDictionary<Guid, ClientGroup> clientsOldHelp;
+
+      //CloneList(clientsOld, out clientsOldHelp);
+
+      //GetDelta(clientsOld.List, clientsOldHelp);
+      //DetermineDelta();
+      #endregion
+
+      #region Job
+      ResponseList<Job> jobsOld = jobs;
+      IJobManager jobManager =
+          ServiceLocator.GetJobManager();
+
+      jobs = jobManager.GetAllJobs();
+
+      IDictionary<int, Job> jobsOldHelp;
+      CloneList(jobsOld, out jobsOldHelp);
+
+      GetDelta(jobsOld.List, jobsOldHelp);
+
+      #endregion
+
+      foreach (Changes change in changes) {
+        System.Diagnostics.Debug.WriteLine(change.ID + " " + change.ChangeType);
+      }
+
+    }
+    
     #endregion
 
-    private Guid ConvertStringToGuid(string stringGuid) {
-      return new Guid(stringGuid);
-    }
-
-
-    private void Init() {
-
-      //adding context menu items for jobs
-      menuItemAbortJob.Click += (s, e) => {
-        IJobManager jobManager = ServiceLocator.GetJobManager();
-        if (lvJobControl.SelectedItems.Count == 1) {
-          jobManager.AbortJob(((Job)(lvJobControl.SelectedItems[0].Tag)).Id);
-        }
-      };
-
-      //adding context menu items for jobs
-      menuItemGetSnapshot.Click += (s, e) => {
-        IJobManager jobManager = ServiceLocator.GetJobManager();
-        if (lvJobControl.SelectedItems.Count == 1) {
-          jobManager.RequestSnapshot(((Job)(lvJobControl.SelectedItems[0].Tag)).Id);
-        }
-      };
-
-      //adding group
-      menuItemAddGroup.Click += (s, e) => {
-        AddGroup addgroup = new AddGroup();
-        parentgroup = Guid.Empty;
-        if ((tvClientControl.SelectedNode != null) && (((ClientGroup)tvClientControl.SelectedNode.Tag).Id != Guid.Empty)) {
-          parentgroup = ((ClientGroup)tvClientControl.SelectedNode.Tag).Id;
-        }
-        addgroup.addGroupEvent += new AddGroupDelegate(addgroup_addGroupEvent);
-        addgroup.Show();
-      };
-
-      //adding group
-      menuItemDeleteGroup.Click += (s, e) => {
-        IClientManager clientManager = ServiceLocator.GetClientManager();
-        if (tvClientControl.SelectedNode != null) {
-          //  Delete Group
-        }
-      };
-    }
-
-    Guid parentgroup = Guid.Empty;
-
-    void addgroup_addGroupEvent(string name) {
-      IClientManager clientManager = ServiceLocator.GetClientManager();
-
-      if (parentgroup != Guid.Empty) {
-        ClientGroup cg = new ClientGroup() { Name = name };
-        ResponseObject<ClientGroup> respcg = clientManager.AddClientGroup(cg);
-        Response res = clientManager.AddResourceToGroup(parentgroup, respcg.Obj);
-        if (res != null && !res.Success) {
-          MessageBox.Show(res.StatusMessage, "Error adding Group", MessageBoxButtons.OK, MessageBoxIcon.Error);
-        }
-      } else {
-        ClientGroup cg = new ClientGroup() { Name = name };
-        clientManager.AddClientGroup(cg);
-      }
-
-    }
-
-    private void lvJobControl_MouseUp(object sender, MouseEventArgs e) {
-      // If the right mouse button was clicked and released,
-      // display the shortcut menu assigned to the ListView. 
-      lvJobControl.ContextMenuStrip.Items.Clear();
-      ListViewHitTestInfo hitTestInfo = lvJobControl.HitTest(e.Location);
-      if (e.Button == MouseButtons.Right && hitTestInfo.Item != null && lvJobControl.SelectedItems.Count == 1) {
-        Job selectedJob = (Job)lvJobControl.SelectedItems[0].Tag;
-
-        if (selectedJob != null && selectedJob.State == State.calculating) {
-          lvJobControl.ContextMenuStrip.Items.Add(menuItemAbortJob);
-          lvJobControl.ContextMenuStrip.Items.Add(menuItemGetSnapshot);
-        }
-      }
-      lvJobControl.ContextMenuStrip.Show(new Point(e.X, e.Y));
+
+    /// <summary>
+    /// Adds jobs to ListView and TreeView
+    /// </summary>
+    private void AddJobs() {
+      try {
+        List<ListViewItem> jobObjects = new List<ListViewItem>();
+        IJobManager jobManager =
+          ServiceLocator.GetJobManager();
+        jobs = jobManager.GetAllJobs();
+
+        lvJobControl.Items.Clear();
+
+        ListViewGroup lvJobCalculating = new ListViewGroup("calculating", HorizontalAlignment.Left);
+        ListViewGroup lvJobFinished = new ListViewGroup("finished", HorizontalAlignment.Left);
+        ListViewGroup lvJobPending = new ListViewGroup("pending", HorizontalAlignment.Left);
+
+        jobGroup = new List<ListViewGroup>();
+        jobGroup.Add(lvJobCalculating);
+        jobGroup.Add(lvJobFinished);
+        jobGroup.Add(lvJobPending);
+
+        foreach (Job job in jobs.List) {
+          if (job.State == State.calculating) {
+            ListViewItem lvi = new ListViewItem(job.Id.ToString(), 1, lvJobCalculating);
+            lvi.Tag = job;
+            jobObjects.Add(lvi);
+
+            lvi.ToolTipText = (job.Percentage * 100) + "% of job calculated";
+          } else if (job.State == State.finished) {
+            ListViewItem lvi = new ListViewItem(job.Id.ToString(), 0, lvJobFinished);
+            lvi.Tag = job;
+            jobObjects.Add(lvi);
+            //lvJobControl.Items.Add(lvi);
+          } else if (job.State == State.offline) {
+            ListViewItem lvi = new ListViewItem(job.Id.ToString(), 2, lvJobPending);
+            lvi.Tag = job;
+            jobObjects.Add(lvi);
+          }
+        } // Jobs
+        lvJobControl.BeginUpdate();
+        foreach (ListViewItem lvi in jobObjects) {
+          lvJobControl.Items.Add(lvi);
+        }
+        // actualization
+        lvJobControl.Groups.Add(lvJobCalculating);
+        lvJobControl.Groups.Add(lvJobFinished);
+        lvJobControl.Groups.Add(lvJobPending);
+        lvJobControl.EndUpdate();
+
+        if (currentJob != null) {
+          JobClicked();
+        }
+      }
+      catch (Exception ex) {
+        closeFormEvent(true, true);
+        this.Close();
+      }
     }
 
@@ -191,5 +248,5 @@
       tvClientControl.Nodes.Clear();
 
-      clientGroups = ClientManager.GetAllClientGroups();
+      ResponseList<ClientGroup> clientGroups = ClientManager.GetAllClientGroups();
 
       foreach (ClientGroup cg in clientGroups.List) {
@@ -204,5 +261,4 @@
       tvClientControl.ExpandAll();
     }
-
 
     private void AddClientOrGroup(ClientGroup clientGroup, TreeNode currentNode) {
@@ -256,63 +312,99 @@
     }
 
-
-    List<ListViewGroup> jobGroup;
+    private void AddGroupsToListView(TreeNode node) {
+      if (node != null) {
+        ListViewGroup lvg = new ListViewGroup(node.Text, HorizontalAlignment.Left);
+        lvClientControl.Groups.Add(lvg);
+        foreach (ListViewItem item in clientList[((ClientGroup)node.Tag).Id]) {
+          item.Group = lvg;
+          lvClientControl.Items.Add(item);
+        }
+
+        if (node.Nodes != null) {
+          foreach (TreeNode curNode in node.Nodes) {
+            AddGroupsToListView(curNode);
+          }
+        }
+      }
+    }
+
     /// <summary>
-    /// Adds jobs to ListView and TreeView
+    /// if one job is clicked, the details for the clicked job are shown
+    /// in the second panel
     /// </summary>
-    private void AddJobs() {
-      try {
-        jobObjects = new Dictionary<Guid, ListViewItem>();
-        IJobManager jobManager =
-          ServiceLocator.GetJobManager();
-        jobs = jobManager.GetAllJobs();
-
-        lvJobControl.Items.Clear();
-
-        ListViewGroup lvJobCalculating = new ListViewGroup("calculating", HorizontalAlignment.Left);
-        ListViewGroup lvJobFinished = new ListViewGroup("finished", HorizontalAlignment.Left);
-        ListViewGroup lvJobPending = new ListViewGroup("pending", HorizontalAlignment.Left);
-
-        jobGroup = new List<ListViewGroup>();
-        jobGroup.Add(lvJobCalculating);
-        jobGroup.Add(lvJobFinished);
-        jobGroup.Add(lvJobPending);
-
-        foreach (Job job in jobs.List) {
-          if (job.State == State.calculating) {
-            ListViewItem lvi = new ListViewItem(job.Id.ToString(), 1, lvJobCalculating);
-            lvi.Tag = job;
-            jobObjects.Add(job.Id, lvi);
-
-            //lvJobControl.Items.Add(lvi);
-
-            lvi.ToolTipText = (job.Percentage * 100) + "% of job calculated";
-          } else if (job.State == State.finished) {
-            ListViewItem lvi = new ListViewItem(job.Id.ToString(), 0, lvJobFinished);
-            lvi.Tag = job;
-            jobObjects.Add(job.Id, lvi);
-            //lvJobControl.Items.Add(lvi);
-          } else if (job.State == State.offline) {
-            ListViewItem lvi = new ListViewItem(job.Id.ToString(), 2, lvJobPending);
-            lvi.Tag = job;
-            jobObjects.Add(job.Id, lvi);
-            //lvJobControl.Items.Add(lvi);
-          }
-        } // Jobs
-        lvJobControl.BeginUpdate();
-        foreach (ListViewItem lvi in jobObjects.Values) {
-          lvJobControl.Items.Add(lvi);
-        }
-        lvJobControl.Groups.Add(lvJobCalculating);
-        lvJobControl.Groups.Add(lvJobFinished);
-        lvJobControl.Groups.Add(lvJobPending);
-        lvJobControl.EndUpdate();
-        if (flagJob) {
-          JobClicked();
-        }
-      }
-      catch (Exception ex) {
-        closeFormEvent(true, true);
-        this.Close();
+    private void JobClicked() {
+      plJobDetails.Visible = true;
+      lvJobDetails.Items.Clear();
+
+      lvSnapshots.Enabled = true;
+
+      if (currentJob.State == State.offline) {
+        pbJobControl.Image = ilLargeImgJob.Images[2];
+      } else if (currentJob.State == State.calculating) {
+        pbJobControl.Image = ilLargeImgJob.Images[1];
+      } else if (currentJob.State == State.finished) {
+        pbJobControl.Image = ilLargeImgJob.Images[0];
+      }
+
+      lblJobName.Text = currentJob.Id.ToString();
+      progressJob.Value = (int)(currentJob.Percentage * 100);
+      lblProgress.Text = (int)(currentJob.Percentage * 100) + "% calculated";
+
+      ListViewItem lvi = new ListViewItem();
+      lvi.Text = "User:";
+      lvi.SubItems.Add(currentJob.UserId.ToString());
+      lvJobDetails.Items.Add(lvi);
+
+      lvi = null;
+      lvi = new ListViewItem();
+      lvi.Text = "created at:";
+      lvi.SubItems.Add(currentJob.DateCreated.ToString());
+      lvJobDetails.Items.Add(lvi);
+
+      if (currentJob.ParentJob != null) {
+        lvi = null;
+        lvi = new ListViewItem();
+        lvi.Text = "Parent job:";
+        lvi.SubItems.Add(currentJob.ParentJob.ToString());
+        lvJobDetails.Items.Add(lvi);
+      }
+
+      lvi = null;
+      lvi = new ListViewItem();
+      lvi.Text = "Priority:";
+      lvi.SubItems.Add(currentJob.Priority.ToString());
+      lvJobDetails.Items.Add(lvi);
+
+      if (currentJob.Client != null) {
+        lvi = null;
+        lvi = new ListViewItem();
+        lvi.Text = "Calculation begin:";
+        lvi.SubItems.Add(currentJob.DateCalculated.ToString());
+        lvJobDetails.Items.Add(lvi);
+
+
+        lvi = null;
+        lvi = new ListViewItem();
+        lvi.Text = "Client calculated:";
+        lvi.SubItems.Add(currentJob.Client.Name.ToString());
+        lvJobDetails.Items.Add(lvi);
+
+        if (currentJob.State == State.finished) {
+          IJobManager jobManager =
+            ServiceLocator.GetJobManager();
+          ResponseObject<JobResult> jobRes = jobManager.GetLastJobResultOf(currentJob.Id, false);
+
+          lvi = null;
+          lvi = new ListViewItem();
+          lvi.Text = "Calculation ended:";
+          lvi.SubItems.Add(jobRes.Obj.DateFinished.ToString());
+          lvJobDetails.Items.Add(lvi);
+        }
+      }
+      if (currentJob.State != State.offline) {
+        lvSnapshots.Items.Clear();
+        GetSnapshotList();
+      } else {
+        lvSnapshots.Visible = false;
       }
     }
@@ -324,11 +416,5 @@
     private void ClientClicked() {
       plClientDetails.Visible = true;
-      //int i = 0;
-      //while (clientInfo.List[i].Id.ToString() != nameCurrentClient) {
-      //  i++;
-      //}
-      if (lvClientControl.SelectedItems != null && lvClientControl.SelectedItems.Count > 0) {
-        currentClient = (ClientInfo)lvClientControl.SelectedItems[0].Tag;
-      }
+
       if (currentClient != null) {
         int percentageUsage = CapacityRam(currentClient.NrOfCores, currentClient.NrOfFreeCores);
@@ -349,114 +435,10 @@
       }
     }
-
-    /// <summary>
-    /// if one job is clicked, the details for the clicked job are shown
-    /// in the second panel
-    /// </summary>
-    private void JobClicked() {
-      plJobDetails.Visible = true;
-      lvJobDetails.Items.Clear();
-      int i = 0;
-      while (jobs.List[i].Id.ToString() != nameCurrentJob) {
-        i++;
-      }
-      lvSnapshots.Enabled = true;
-      currentJob = jobs.List[i];
-      if (currentJob.State == State.offline) {
-        pbJobControl.Image = ilLargeImgJob.Images[2];
-      } else if (currentJob.State == State.calculating) {
-        pbJobControl.Image = ilLargeImgJob.Images[1];
-      } else if (currentJob.State == State.finished) {
-        pbJobControl.Image = ilLargeImgJob.Images[0];
-      }
-
-
-
-      lblJobName.Text = currentJob.Id.ToString();
-      progressJob.Value = (int)(currentJob.Percentage * 100);
-      lblProgress.Text = (int)(currentJob.Percentage * 100) + "% calculated";
-      lblUserCreatedJob.Text = currentJob.UserId.ToString() + /* currentJob.User.Name + */ " created Job";
-      //lblJobCreated.Text = "Created at " + currentJob.DateCreated;
-      ListViewItem lvi = new ListViewItem();
-      lvi.Text = "User:";
-      lvi.SubItems.Add(currentJob.UserId.ToString());
-      lvJobDetails.Items.Add(lvi);
-
-      lvi = null;
-      lvi = new ListViewItem();
-      lvi.Text = "created at:";
-      lvi.SubItems.Add(currentJob.DateCreated.ToString());
-      lvJobDetails.Items.Add(lvi);
-
-      if (currentJob.ParentJob != null) {
-        lvi = null;
-        lvi = new ListViewItem();
-        lvi.Text = "Parent job:";
-        lvi.SubItems.Add(currentJob.ParentJob.ToString());
-        lvJobDetails.Items.Add(lvi);
-        // lblParentJob.Text = currentJob.ParentJob.Id + " is parent job";
-      }// else {
-      //  lblParentJob.Text = "";
-      //}
-
-      lvi = null;
-      lvi = new ListViewItem();
-      lvi.Text = "Priority:";
-      lvi.SubItems.Add(currentJob.Priority.ToString());
-      lvJobDetails.Items.Add(lvi);
-
-      // lblPriorityJob.Text = "Priority of job is " + currentJob.Priority;
-      if (currentJob.Client != null) {
-        lvi = null;
-        lvi = new ListViewItem();
-        lvi.Text = "Calculation begin:";
-        lvi.SubItems.Add(currentJob.DateCalculated.ToString());
-        lvJobDetails.Items.Add(lvi);
-
-
-        lvi = null;
-        lvi = new ListViewItem();
-        lvi.Text = "Client calculated:";
-        lvi.SubItems.Add(currentJob.Client.Name.ToString());
-        lvJobDetails.Items.Add(lvi);
-
-        //lblClientCalculating.Text = currentJob.Client.Name + " calculated Job";
-        //lblJobCalculationBegin.Text = "Startet calculation at " + currentJob.DateCalculated;
-
-        if (currentJob.State == State.finished) {
-          IJobManager jobManager =
-            ServiceLocator.GetJobManager();
-          ResponseObject<JobResult> jobRes = jobManager.GetLastJobResultOf(currentJob.Id, false);
-
-          lvi = null;
-          lvi = new ListViewItem();
-          lvi.Text = "Calculation ended:";
-          lvi.SubItems.Add(jobRes.Obj.DateFinished.ToString());
-          lvJobDetails.Items.Add(lvi);
-          // lblJobCalculationEnd.Text = "Calculation ended at " + jobRes.Obj.DateFinished;
-        }
-      } else {
-        // lblClientCalculating.Text = "";
-        // lblJobCalculationBegin.Text = "";
-        // lblJobCalculationEnd.Text = "";
-      }
-      if (currentJob.State != State.offline) {
-        lvSnapshots.Items.Clear();
-        //if (currentJob.State == State.finished)
-        GetSnapshotList();
-        //lvSnapshots.Visible = true;
-      } else {
-        lvSnapshots.Visible = false;
-      }
-    }
-
-    private void Refresh() {
+   
+
+    private void RefreshForm() {
       foreach (Changes change in changes) {
         if (change.Types == Type.Job) {
           RefreshJob(change);
-        } else if (change.Types == Type.Client) {
-          //RefreshClient(change);
-        } else if (change.Types == Type.ClientGroup) {
-          //RefreshClientGroup(change);
         }
       }
@@ -467,10 +449,11 @@
         for (int i = 0; i < lvJobControl.Items.Count; i++) {
           if (lvJobControl.Items[i].Text == change.ID.ToString()) {
-            if (nameCurrentJob == change.ID.ToString()) {
-              JobClicked();
-            }
             foreach (Job job in jobs.List) {
               if (job.Id == change.ID) {
                 lvJobControl.Items[i].Tag = job;
+                if (currentJob.Id == change.ID) {
+                  currentJob = job;
+                  JobClicked();
+                }
                 break;
               }
@@ -496,11 +479,16 @@
         }
       } else if (change.ChangeType == Change.Create) {
+
         ListViewItem lvi = new ListViewItem(
           change.ID.ToString(), 2, jobGroup[2]);
-        jobObjects.Add(change.ID, lvi);
+        foreach (Job job in jobs.List) {
+          if (job.Id == change.ID) {
+            lvi.Tag = job;
+            break;
+          }
+        }
         lvJobControl.Items.Add(lvi);
 
       } else if (change.ChangeType == Change.Delete) {
-        jobObjects.Remove(change.ID);
         for (int i = 0; i < lvJobControl.Items.Count; i++) {
           if (change.ID.ToString() == lvJobControl.Items[i].Text.ToString()) {
@@ -512,57 +500,4 @@
     }
 
-    private void RefreshClient(Changes change) {
-      if (change.ChangeType == Change.Update) {
-        for (int i = 0; i < lvClientControl.Items.Count; i++) {
-          if (lvClientControl.Items[i].Tag.ToString() == change.ID.ToString()) {
-            if (nameCurrentClient == change.ID.ToString()) {
-              ClientClicked();
-            }
-            State state = clients.List[change.Position].State;
-            System.Diagnostics.Debug.WriteLine(lvClientControl.Items[i].Text.ToString());
-
-            ClientInfo ci = null;
-
-            foreach (ClientInfo c in clients.List) {
-              if (c.Id == change.ID) {
-                ci = c;
-              }
-            }
-
-            int percentageUsage = CapacityRam(ci.NrOfCores, ci.NrOfFreeCores);
-            if ((state == State.offline) || (state == State.nullState)) {
-              lvClientControl.Items[i].ImageIndex = 3;
-            } else {
-              if ((percentageUsage >= 0) && (percentageUsage <= 25)) {
-                lvClientControl.Items[i].ImageIndex = 0;
-              } else if ((percentageUsage > 25) && (percentageUsage <= 75)) {
-                lvClientControl.Items[i].ImageIndex = 1;
-              } else if ((percentageUsage > 75) && (percentageUsage <= 100)) {
-                lvClientControl.Items[i].ImageIndex = 2;
-              }
-
-            }
-            lvClientControl.Refresh();
-          }
-        }
-
-
-      } else if (change.ChangeType == Change.Create) {
-
-      } else if (change.ChangeType == Change.Delete) {
-        clientInfoObjects.Remove(change.ID);
-        for (int i = 0; i < lvClientControl.Items.Count; i++) {
-          if (change.ID.ToString() == lvClientControl.Items[i].Text.ToString()) {
-            lvClientControl.Items[i].Remove();
-            break;
-          }
-        }
-
-      }
-    }
-
-    private void RefreshClientGroup(Changes change) {
-
-    }
 
     #region Eventhandlers
@@ -596,12 +531,6 @@
     }
 
-    private void OnLVClientClicked(object sender, EventArgs e) {
-      nameCurrentClient = lvClientControl.SelectedItems[0].Tag.ToString();
-      ClientClicked();
-    }
-
     private void OnLVJobControlClicked(object sender, EventArgs e) {
-      nameCurrentJob = lvJobControl.SelectedItems[0].Text;
-      flagJob = true;
+      currentJob = (Job)lvJobControl.SelectedItems[0].Tag;
       JobClicked();
     }
@@ -614,50 +543,126 @@
     }
 
-    private void updaterWoker_DoWork(object sender, DoWorkEventArgs e) {
-
-      changes.Clear();
-
-      //#region ClientInfo
-      //ResponseList<ClientInfo> clientInfoOld = clientInfo;
-      //clientInfo = ClientManager.GetAllClients();
-
-      //IDictionary<int, ClientInfo> clientInfoOldHelp;
-
-      //CloneList(clientInfoOld, out clientInfoOldHelp);
-
-      //GetDelta(clientInfoOld.List, clientInfoOldHelp);
-      //#endregion
-
-      #region Clients
-      //ResponseList<ClientGroup> clientsOld = clients;
-
-      // newClients = ClientManager.GetAllClientGroups();
-
-      //IDictionary<Guid, ClientGroup> clientsOldHelp;
-
-      //CloneList(clientsOld, out clientsOldHelp);
-
-      //GetDelta(clientsOld.List, clientsOldHelp);
-      //DetermineDelta();
-      #endregion
-
-      #region Job
-      ResponseList<Job> jobsOld = jobs;
-      IJobManager jobManager =
-          ServiceLocator.GetJobManager();
-
-      jobs = jobManager.GetAllJobs();
-
-      IDictionary<int, Job> jobsOldHelp;
-      CloneList(jobsOld, out jobsOldHelp);
-
-      GetDelta(jobsOld.List, jobsOldHelp);
-
-      #endregion
-
-      foreach (Changes change in changes) {
-        System.Diagnostics.Debug.WriteLine(change.ID + " " + change.ChangeType);
-      }
-
+    private void lvJobControl_MouseUp(object sender, MouseEventArgs e) {
+      // If the right mouse button was clicked and released,
+      // display the shortcut menu assigned to the ListView. 
+      lvJobControl.ContextMenuStrip.Items.Clear();
+      ListViewHitTestInfo hitTestInfo = lvJobControl.HitTest(e.Location);
+      if (e.Button == MouseButtons.Right && hitTestInfo.Item != null && lvJobControl.SelectedItems.Count == 1) {
+        Job selectedJob = (Job)lvJobControl.SelectedItems[0].Tag;
+
+        if (selectedJob != null && selectedJob.State == State.calculating) {
+          lvJobControl.ContextMenuStrip.Items.Add(menuItemAbortJob);
+          lvJobControl.ContextMenuStrip.Items.Add(menuItemGetSnapshot);
+        }
+      }
+      lvJobControl.ContextMenuStrip.Show(new Point(e.X, e.Y));
+    }
+
+    private void tvClientControl_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) {
+      lvClientControl.Items.Clear();
+      lvClientControl.Groups.Clear();
+      currentNode = e.Node;
+      AddGroupsToListView(e.Node);
+    }
+
+    private void groupToolStripMenuItem_Click(object sender, EventArgs e) {
+      AddGroup addgroup = new AddGroup();
+      parentgroup = Guid.Empty;
+      if ((tvClientControl.SelectedNode != null) && (((ClientGroup)tvClientControl.SelectedNode.Tag).Id != Guid.Empty)) {
+        parentgroup = ((ClientGroup)tvClientControl.SelectedNode.Tag).Id;
+      }
+      addgroup.addGroupEvent += new AddGroupDelegate(addgroup_addGroupEvent);
+      addgroup.Show();
+    }
+
+    private void OnLVClientClicked(object sender, EventArgs e) {
+      currentClient = (ClientInfo)lvClientControl.SelectedItems[0].Tag;
+      ClientClicked();
+    }
+
+    private void tvClientControl_MouseUp(object sender, MouseEventArgs e) {
+      // If the right mouse button was clicked and released,
+      // display the shortcut menu assigned to the ListView. 
+      contextMenuGroup.Items.Clear();
+      TreeViewHitTestInfo hitTestInfo = tvClientControl.HitTest(e.Location);
+      tvClientControl.SelectedNode = hitTestInfo.Node;
+      if (e.Button != MouseButtons.Right) return;
+        if (hitTestInfo.Node != null) {
+          Resource selectedGroup = (Resource)tvClientControl.SelectedNode.Tag;
+
+          if (selectedGroup != null) {
+            contextMenuGroup.Items.Add(menuItemAddGroup);
+            contextMenuGroup.Items.Add(menuItemDeleteGroup);
+          }
+        } else {
+          contextMenuGroup.Items.Add(menuItemAddGroup);
+        }
+        tvClientControl.ContextMenuStrip.Show(tvClientControl, new Point(e.X, e.Y));
+    }
+
+    private void addgroup_addGroupEvent(string name) {
+      IClientManager clientManager = ServiceLocator.GetClientManager();
+
+      if (parentgroup != Guid.Empty) {
+        ClientGroup cg = new ClientGroup() { Name = name };
+        ResponseObject<ClientGroup> respcg = clientManager.AddClientGroup(cg);
+        Response res = clientManager.AddResourceToGroup(parentgroup, respcg.Obj);
+        if (res != null && !res.Success) {
+          MessageBox.Show(res.StatusMessage, "Error adding Group", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        }
+      } else {
+        ClientGroup cg = new ClientGroup() { Name = name };
+        clientManager.AddClientGroup(cg);
+        AddClients();
+      }              
+    }
+
+    private void Refresh_Click(object sender, EventArgs e) {
+      Form overlayingForm = new Form();
+
+      overlayingForm.Show();
+      overlayingForm.FormBorderStyle = FormBorderStyle.None;
+      overlayingForm.BackColor = Color.Gray;
+      overlayingForm.Opacity = 0.4;
+      overlayingForm.Size = this.Size;
+      overlayingForm.Location = this.Location;
+
+      //Label lbl = new Label();
+      //overlayingForm.Controls.Add(lbl);
+      //lbl.AutoSize = true;
+      //lbl.Text = "Loading";
+      //lbl.Name = "lblName";
+      //lbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 20F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      //lbl.ForeColor = Color.Black;
+      //lbl.BackColor = Color.Transparent;
+      //lbl.Location = new Point(overlayingForm.Width / 2, overlayingForm.Height / 2);
+
+      AddClients();
+
+      overlayingForm.Close();
+    }
+
+    private void largeIconsToolStripMenuItem_Click(object sender, EventArgs e) {
+      lvClientControl.View = View.LargeIcon;
+      lvJobControl.View = View.LargeIcon;
+      largeIconsToolStripMenuItem.CheckState = CheckState.Checked;
+      smallIconsToolStripMenuItem.CheckState = CheckState.Unchecked;
+      listToolStripMenuItem.CheckState = CheckState.Unchecked;
+    }
+
+    private void smallIconsToolStripMenuItem_Click(object sender, EventArgs e) {
+      lvClientControl.View = View.SmallIcon;
+      lvJobControl.View = View.SmallIcon;
+      largeIconsToolStripMenuItem.CheckState = CheckState.Unchecked;
+      smallIconsToolStripMenuItem.CheckState = CheckState.Checked;
+      listToolStripMenuItem.CheckState = CheckState.Unchecked;
+    }
+
+    private void listToolStripMenuItem_Click(object sender, EventArgs e) {
+      lvClientControl.View = View.List;
+      lvJobControl.View = View.List;
+      largeIconsToolStripMenuItem.CheckState = CheckState.Unchecked;
+      smallIconsToolStripMenuItem.CheckState = CheckState.Unchecked;
+      listToolStripMenuItem.CheckState = CheckState.Checked;
     }
     #endregion
@@ -669,18 +674,4 @@
       for (int i = 0; i < oldList.List.Count; i++) {
         newList.Add(i, oldList.List[i]);
-      }
-    }
-
-    //private void CloneList(ResponseList<ClientInfo> oldList, out IDictionary<int, ClientInfo> newList) {
-    //  newList = new Dictionary<int, ClientInfo>();
-    //  for (int i = 0; i < oldList.List.Count; i++) {
-    //    newList.Add(i, oldList.List[i]);
-    //  }
-    //}
-
-    private void CloneList(ResponseList<ClientGroup> oldList, out IDictionary<Guid, ClientGroup> newList) {
-      newList = new Dictionary<Guid, ClientGroup>();
-      foreach (ClientGroup clientGroup in oldList.List) {
-        newList.Add(clientGroup.Id, clientGroup);
       }
     }
@@ -703,81 +694,4 @@
       return 100;
     }
-
-    //private void GetDelta(IList<ClientInfo> oldClient, IDictionary<int, ClientInfo> helpClients) {
-    //  bool found = false;
-
-    //  for (int i = 0; i < clientInfo.List.Count; i++) {
-    //    ClientInfo ci = clientInfo.List[i];
-    //    for (int j = 0; j < oldClient.Count; j++) {
-    //      ClientInfo cio = oldClient[j];
-    //      if (ci.Id.Equals(cio.Id)) {
-    //        found = true;
-    //        if ((ci.State != cio.State) || (ci.NrOfFreeCores != cio.NrOfFreeCores)) {
-    //          changes.Add(new Changes { Types = Type.Client, ID = ci.Id, ChangeType = Change.Update, Position = i });
-    //        }
-    //        int removeAt = -1;
-    //        foreach (KeyValuePair<int, ClientInfo> kvp in helpClients) {
-    //          if (cio.Id.Equals(kvp.Value.Id)) {
-    //            removeAt = kvp.Key;
-    //            break;
-    //          }
-    //        }
-    //        if (removeAt >= 0) {
-    //          helpClients.Remove(removeAt);
-    //        }
-    //        break;
-    //      }
-    //    }
-    //    if (found == false) {
-    //      changes.Add(new Changes { Types = Type.Client, ID = ci.Id, ChangeType = Change.Create });
-    //    }
-    //    found = false;
-    //  }
-    //  foreach (KeyValuePair<int, ClientInfo> kvp in helpClients) {
-    //    changes.Add(new Changes { Types = Type.Client, ID = kvp.Value.Id, ChangeType = Change.Delete, Position = kvp.Key });
-    //  }
-
-    //}
-
-    private void DetermineDelta() {
-
-    }
-
-    //private void GetDelta(IList<ClientGroup> oldClient, IDictionary<Guid, ClientGroup> helpClients) {
-
-    //  bool found = false;
-    //  for (int i = 0; i < clients.List.Count; i++) {
-    //    ClientGroup cg = clientGroups.List[i];
-    //    for (int j = 0; j < oldClient.Count; i++) {
-    //      ClientGroup cgo = oldClient[j];
-    //      if (cg.Id.Equals(cgo.Id)) {
-    //        found = true;
-    //        foreach (Resource resource in cg.Resources) {
-    //          foreach (Resource resourceold in cgo.Resources) {
-    //            if (resource.Id.Equals(resourceold.Id)) {
-    //              if (resourceold.Name != resource.Name) {
-    //                changes.Add(new Changes { Types = Type.Client, ID = cg.Id, ChangeType = Change.Update, Position = i });
-    //              }
-    //            }
-    //          }
-    //        }
-    //        for (int k = 0; k < helpClients.Count; k++) {
-    //          if (cgo.Id.Equals(helpClients[k].Id)) {
-    //            helpClients.Remove(k);
-    //            break;
-    //          }
-    //        }
-    //        break;
-    //      }
-    //    }
-    //    if (found == false) {
-    //      changes.Add(new Changes { Types = Type.ClientGroup, ID = cg.Id, ChangeType = Change.Create });
-    //    }
-    //    found = false;
-    //  }
-    //  foreach (KeyValuePair<int, ClientGroup> kvp in helpClients) {
-    //    changes.Add(new Changes { Types = Type.ClientGroup, ID = kvp.Value.Id, ChangeType = Change.Delete, Position = kvp.Key });
-    //  }
-    //}
 
     private void GetDelta(IList<Job> oldJobs, IDictionary<int, Job> helpJobs) {
@@ -861,96 +775,5 @@
     #endregion
 
-    private void largeIconsToolStripMenuItem_Click(object sender, EventArgs e) {
-      lvClientControl.View = View.LargeIcon;
-      lvJobControl.View = View.LargeIcon;
-      largeIconsToolStripMenuItem.CheckState = CheckState.Checked;
-      smallIconsToolStripMenuItem.CheckState = CheckState.Unchecked;
-      listToolStripMenuItem.CheckState = CheckState.Unchecked;
-    }
-
-    private void smallIconsToolStripMenuItem_Click(object sender, EventArgs e) {
-      lvClientControl.View = View.SmallIcon;
-      lvJobControl.View = View.SmallIcon;
-      largeIconsToolStripMenuItem.CheckState = CheckState.Unchecked;
-      smallIconsToolStripMenuItem.CheckState = CheckState.Checked;
-      listToolStripMenuItem.CheckState = CheckState.Unchecked;
-    }
-
-    private void listToolStripMenuItem_Click(object sender, EventArgs e) {
-      lvClientControl.View = View.List;
-      lvJobControl.View = View.List;
-      largeIconsToolStripMenuItem.CheckState = CheckState.Unchecked;
-      smallIconsToolStripMenuItem.CheckState = CheckState.Unchecked;
-      listToolStripMenuItem.CheckState = CheckState.Checked;
-    }
-
-    private void tvClientControl_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) {
-      lvClientControl.Items.Clear();
-      lvClientControl.Groups.Clear();
-      currentNode = e.Node;
-      AddGroupsToListView(e.Node);
-    }
-
-    private void AddGroupsToListView(TreeNode node) {
-      if (node != null) {
-        ListViewGroup lvg = new ListViewGroup(node.Text, HorizontalAlignment.Left);
-        lvClientControl.Groups.Add(lvg);
-        foreach (ListViewItem item in clientList[((ClientGroup)node.Tag).Id]) {
-          item.Group = lvg;
-          lvClientControl.Items.Add(item);
-        }
-
-        if (node.Nodes != null) {
-          foreach (TreeNode curNode in node.Nodes) {
-            AddGroupsToListView(curNode);
-          }
-        }
-      }
-    }
-
-    private void Refresh_Click(object sender, EventArgs e) {
-      Form overlayingForm = new Form();
-
-      overlayingForm.Show();
-      overlayingForm.FormBorderStyle = FormBorderStyle.None;
-      overlayingForm.BackColor = Color.Gray;
-      overlayingForm.Opacity = 0.4;
-      overlayingForm.Size = this.Size;
-      overlayingForm.Location = this.Location;
-
-      //Label lbl = new Label();
-      //overlayingForm.Controls.Add(lbl);
-      //lbl.AutoSize = true;
-      //lbl.Text = "Loading";
-      //lbl.Name = "lblName";
-      //lbl.Font = new System.Drawing.Font("Microsoft Sans Serif", 20F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-      //lbl.ForeColor = Color.Black;
-      //lbl.BackColor = Color.Transparent;
-      //lbl.Location = new Point(overlayingForm.Width / 2, overlayingForm.Height / 2);
-
-      AddClients();
-
-      overlayingForm.Close();
-    }
-
-    private void tvClientControl_MouseUp(object sender, MouseEventArgs e) {
-      // If the right mouse button was clicked and released,
-      // display the shortcut menu assigned to the ListView. 
-      contextMenuGroup.Items.Clear();
-      TreeViewHitTestInfo hitTestInfo = tvClientControl.HitTest(e.Location);
-      tvClientControl.SelectedNode = hitTestInfo.Node;
-      if (e.Button != MouseButtons.Right) return;
-        if (hitTestInfo.Node != null) {
-          Resource selectedGroup = (Resource)tvClientControl.SelectedNode.Tag;
-
-          if (selectedGroup != null) {
-            contextMenuGroup.Items.Add(menuItemAddGroup);
-            contextMenuGroup.Items.Add(menuItemDeleteGroup);
-          }
-        } else {
-          contextMenuGroup.Items.Add(menuItemAddGroup);
-        }
-        tvClientControl.ContextMenuStrip.Show(new Point(e.X, e.Y));
-    }
+
   }
 }
Index: trunk/sources/HeuristicLab.Hive.Server.Console/3.2/HiveServerManagementConsole.resx
===================================================================
--- trunk/sources/HeuristicLab.Hive.Server.Console/3.2/HiveServerManagementConsole.resx	(revision 1832)
+++ trunk/sources/HeuristicLab.Hive.Server.Console/3.2/HiveServerManagementConsole.resx	(revision 1937)
@@ -308,29 +308,6 @@
     <value>462, 9</value>
   </metadata>
-  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-  <data name="btnRefresh.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAABcQwAA
-        XEMBOS4mtwAAA5dJREFUSEullslPU1EUxtVVSyeGoOgWYWViomGB0YUbE7fGxODGuPEfMHFjgpowaDQy
-        KlAHlKlMKoNQKQomFUShDEKhtLSlkcgkiAMz9POcR1/7HlBotMmX3td77/m9c86953QvgD3ST2qrMo6e
-        E0iHSftkk8EfvDQ1Quq8fnrRIVvGAFZKiyKGVEsCK/29AvfMypDEa8V9Phsxol3R+EGamEhtVcDQr4N5
-        LBqW6QPono4JSbyW9/BetsG2SAeF6Pjevj6NJprdUWj7Fo2m0UjUO8NR51O9MwKvXRFocAdkpLFxdEMm
-        TyRax6LQPh4NE9lgWwSoFwA0iGf3DANa1I6Eo2hAjef9ahQPaFBi1aB0UIMykmFIiwqbFpXDG6omvbDr
-        8NKhwytSzYgOtfRCJk8Eyvq1YsjiGZDEbvGGwi9qPCPjDPgfiNEdLoYqiQHJGW1KPOlTC9oNUm7TkQes
-        gCefxi+h2XNc5klmu5K9SGbAzdxPSjzuVe0IMbnPYHLejDXvPNa9S5hdtKBn6hrsP3Ip1MA7zylZuPQW
-        FQNuCIAcAuh7VEEhH8auCEZ2+rz1nJTl5FF3WACQ3aFEQbdqW0idIxG/lp3ombyFJtcZ1DqOonPiKrxY
-        lfGaCSBNvN4iAWQRIN8HeCQJ1VNKeoPzNJ2mKCHpRb6TZf1+f4szDKiSnKwCOUAhAIJBpCerxXMec8tD
-        +Lk8LOjXigO/V5x4M5ogJF6EyACZHQrkEVGElAzEUkhuo3fyDn2nk9LQO5VGITor84TvCIvvSLnkjjCk
-        oEsSosyPCjwggAiptp3YEoLphS4K1X7/HeFwVdgOCYDtIPmbAbn0gwjZDOCE1tgTwTnhcNXYj8E2o4f5
-        62X/bd8MkQEyyAMGiJCqocQtHqx7lzGz2IeF1Qlhzj1XLSRdTPxmT2SA++0K5HRuAFiVPsCPJRsm/nTI
-        YF6swTqdg2Jr5I4lJY/siRct+a5ZgazPSj+kYjARjtlKunjRQuIN1iMwuS5Qks/BMBgbUknJkJSKpBQq
-        drmdAUhet07w5KEk8cEu4vbFUQ22yYXUX67zCJBNXkg9+RdIiVUNvcXf4eL9DYdLdml/GAr7+DQFwhUq
-        pJj6SMWQGuVWlViqNxqOr6P5W+ZjqoI1wxoYXRoqE1q/Gmnc6JLLSM+sJrcGdXYNnlC+tm2ZwZr+XWr6
-        rN2a/65NX/wH4APFUXIucrPgUh6ieC3viZPa4vFfU36gB1Ssto8AAAAASUVORK5CYII=
-</value>
-  </data>
-  <metadata name="contextMenuGroup.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>504, 38</value>
+  <metadata name="updaterWoker.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>388, 41</value>
   </metadata>
   <metadata name="contextMenuJob.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
@@ -388,7 +365,4 @@
 </value>
   </data>
-  <metadata name="updaterWoker.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>388, 41</value>
-  </metadata>
   <metadata name="ilSmallImgClient.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 50</value>
@@ -455,3 +429,29 @@
 </value>
   </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="btnRefresh.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAABcQwAA
+        XEMBOS4mtwAAA5dJREFUSEullslPU1EUxtVVSyeGoOgWYWViomGB0YUbE7fGxODGuPEfMHFjgpowaDQy
+        KlAHlKlMKoNQKQomFUShDEKhtLSlkcgkiAMz9POcR1/7HlBotMmX3td77/m9c86953QvgD3ST2qrMo6e
+        E0iHSftkk8EfvDQ1Quq8fnrRIVvGAFZKiyKGVEsCK/29AvfMypDEa8V9Phsxol3R+EGamEhtVcDQr4N5
+        LBqW6QPono4JSbyW9/BetsG2SAeF6Pjevj6NJprdUWj7Fo2m0UjUO8NR51O9MwKvXRFocAdkpLFxdEMm
+        TyRax6LQPh4NE9lgWwSoFwA0iGf3DANa1I6Eo2hAjef9ahQPaFBi1aB0UIMykmFIiwqbFpXDG6omvbDr
+        8NKhwytSzYgOtfRCJk8Eyvq1YsjiGZDEbvGGwi9qPCPjDPgfiNEdLoYqiQHJGW1KPOlTC9oNUm7TkQes
+        gCefxi+h2XNc5klmu5K9SGbAzdxPSjzuVe0IMbnPYHLejDXvPNa9S5hdtKBn6hrsP3Ip1MA7zylZuPQW
+        FQNuCIAcAuh7VEEhH8auCEZ2+rz1nJTl5FF3WACQ3aFEQbdqW0idIxG/lp3ombyFJtcZ1DqOonPiKrxY
+        lfGaCSBNvN4iAWQRIN8HeCQJ1VNKeoPzNJ2mKCHpRb6TZf1+f4szDKiSnKwCOUAhAIJBpCerxXMec8tD
+        +Lk8LOjXigO/V5x4M5ogJF6EyACZHQrkEVGElAzEUkhuo3fyDn2nk9LQO5VGITor84TvCIvvSLnkjjCk
+        oEsSosyPCjwggAiptp3YEoLphS4K1X7/HeFwVdgOCYDtIPmbAbn0gwjZDOCE1tgTwTnhcNXYj8E2o4f5
+        62X/bd8MkQEyyAMGiJCqocQtHqx7lzGz2IeF1Qlhzj1XLSRdTPxmT2SA++0K5HRuAFiVPsCPJRsm/nTI
+        YF6swTqdg2Jr5I4lJY/siRct+a5ZgazPSj+kYjARjtlKunjRQuIN1iMwuS5Qks/BMBgbUknJkJSKpBQq
+        drmdAUhet07w5KEk8cEu4vbFUQ22yYXUX67zCJBNXkg9+RdIiVUNvcXf4eL9DYdLdml/GAr7+DQFwhUq
+        pJj6SMWQGuVWlViqNxqOr6P5W+ZjqoI1wxoYXRoqE1q/Gmnc6JLLSM+sJrcGdXYNnlC+tm2ZwZr+XWr6
+        rN2a/65NX/wH4APFUXIucrPgUh6ieC3viZPa4vFfU36gB1Ssto8AAAAASUVORK5CYII=
+</value>
+  </data>
+  <metadata name="contextMenuGroup.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>504, 38</value>
+  </metadata>
 </root>
