Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/Changes.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/Changes.cs	(revision 1273)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/Changes.cs	(revision 1273)
@@ -0,0 +1,17 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+  public enum Change { Create, Update, Delete };
+  public enum Type { Client, ClientGroup, Job, User, UserGroup };
+  public class Changes {
+
+    public Type Types { get; set; }
+
+    public long ID { get; set; }
+
+    public Change ChangeType { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HeuristicLab.Hive.Server.Console.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HeuristicLab.Hive.Server.Console.csproj	(revision 1272)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HeuristicLab.Hive.Server.Console.csproj	(revision 1273)
@@ -85,4 +85,5 @@
       <DependentUpon>AddJobForm.cs</DependentUpon>
     </Compile>
+    <Compile Include="Changes.cs" />
     <Compile Include="HiveServerConsole.cs">
       <SubType>Form</SubType>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerManagementConsole.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerManagementConsole.cs	(revision 1272)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerManagementConsole.cs	(revision 1273)
@@ -108,5 +108,7 @@
             count = (count + 1) % 3;
           }
+          lvClientControl.BeginUpdate();
           lvClientControl.Groups.Add(lvg);
+          lvClientControl.EndUpdate();
           clientObjects.Add(cg.Id, lvg);
         } // Groups
@@ -119,5 +121,7 @@
           count = (count + 1) % 3;
         }
+        lvClientControl.BeginUpdate();
         lvClientControl.Groups.Add(lvunsorted);
+        lvClientControl.EndUpdate();
         if (flagClient) {
           ClientClicked();
@@ -154,5 +158,7 @@
             jobObjects.Add(job.Id, lvi);
             tvJobControl.Nodes[0].Nodes.Add(job.Id.ToString());
-            lvJobControl.Items.Add(lvi);
+
+            //lvJobControl.Items.Add(lvi);
+            
             lvi.ToolTipText = (job.Percentage * 100) + "% of job calculated";
           } else if (job.State == State.finished) {
@@ -160,15 +166,20 @@
             jobObjects.Add(job.Id, lvi);
             tvJobControl.Nodes[1].Nodes.Add(job.Id.ToString());
-            lvJobControl.Items.Add(lvi);
+            //lvJobControl.Items.Add(lvi);
           } else if (job.State == State.offline) {
             ListViewItem lvi = new ListViewItem(job.Id.ToString(), 0, lvJobPending);
             jobObjects.Add(job.Id, lvi);
             tvJobControl.Nodes[2].Nodes.Add(job.Id.ToString());
-            lvJobControl.Items.Add(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();
@@ -219,5 +230,7 @@
           lvUserControl.Items.Add(new ListViewItem(u.Name, 0, lvunsorted));
         }
+        lvUserControl.BeginUpdate();
         lvUserControl.Groups.Add(lvunsorted);
+        lvUserControl.EndUpdate();
         if (flagUser) {
           UserClicked();
@@ -468,14 +481,116 @@
 
     private void updaterWoker_DoWork(object sender, DoWorkEventArgs e) {
+      #region ClientInfo
+      List<Changes> changes = new List<Changes>();
       ResponseList<ClientInfo> clientInfoOld = clientInfo;
       IClientManager clientManager =
           ServiceLocator.GetClientManager();
+      bool found = false;
       clientInfo = clientManager.GetAllClients();
+
+      ResponseList<ClientInfo> clientInfoOldHelp = clientInfoOld;
+
       foreach (ClientInfo ci in clientInfo.List) {
-        foreach (ClientInfo cio in clientInfoOld.List) {
-          ci.Id.Equals(cio.Id);
-        }
-      }
-      
+        for (int i = 0; i < clientInfoOld.List.Count; i ++) {
+          ClientInfo cio = clientInfoOld.List[i];
+          if (ci.Id.Equals(cio.Id)) {
+            found = true;
+            if (ci.State != cio.State) {
+              changes.Add(new Changes { Types = Type.Client, ID = ci.Id, ChangeType = Change.Update });
+            }
+              for (int j = 0; j < clientInfoOldHelp.List.Count; j++) {
+                if (cio.Id.Equals(clientInfoOldHelp.List[i])) {
+                  clientInfoOldHelp.List.RemoveAt(i);
+                  break;
+                }
+              } 
+            break;
+          }
+        }
+        if (found == false) {
+          changes.Add(new Changes { Types = Type.Client, ID = ci.Id, ChangeType = Change.Create });
+        }
+      }
+      foreach (ClientInfo ci in clientInfoOldHelp.List) {
+        changes.Add(new Changes { Types = Type.Client, ID = ci.Id, ChangeType = Change.Delete });
+      }
+      #endregion
+
+      #region Clients
+      ResponseList<ClientGroup> clientsOld = clients;
+      found = false;
+      clients = clientManager.GetAllClientGroups();
+
+      ResponseList<ClientGroup> clientsOldHelp = clientsOld;
+
+      foreach (ClientGroup cg in clients.List) {
+        for (int i = 0; i < clientInfoOld.List.Count; i++) {
+          ClientGroup cgo = clientsOld.List[i];
+          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 });
+                  }
+                }
+              }
+            }
+            for (int j = 0; j < clientInfoOldHelp.List.Count; j++) {
+              if (cgo.Id.Equals(clientInfoOldHelp.List[i])) {
+                clientInfoOldHelp.List.RemoveAt(i);
+                break;
+              }
+            }
+            break;
+          }
+        }
+        if (found == false) {
+          changes.Add(new Changes { Types = Type.ClientGroup, ID = cg.Id, ChangeType = Change.Create });
+        }
+      }
+      foreach (ClientGroup cg in clientsOldHelp.List) {
+        changes.Add(new Changes { Types = Type.ClientGroup, ID = cg.Id, ChangeType = Change.Delete });
+      }
+      #endregion
+
+      #region job
+      ResponseList<Job> jobsOld = jobs;
+      IJobManager jobManager =
+          ServiceLocator.GetJobManager();
+      found = false;
+      jobs = jobManager.GetAllJobs();
+
+      ResponseList<Job> jobsOldHelp = jobsOld;
+
+      foreach (Job job in jobs.List) {
+        for (int i = 0; i < jobsOld.List.Count; i++) {
+          Job jobold = jobsOld.List[i];
+          if (job.Id.Equals(jobold.Id)) {
+            found = true;
+            if (job.Client != jobold.Client) {
+              changes.Add(new Changes { Types = Type.Job, ID = job.Id, ChangeType = Change.Update });
+            } else if (job.DateCalculated != jobold.DateCalculated) {
+              changes.Add(new Changes { Types = Type.Job, ID = job.Id, ChangeType = Change.Update });
+            }
+            //for (int j = 0; j < clientInfoOldHelp.List.Count; j++) {
+            //  if (job.Id.Equals(clientInfoOldHelp.List[i])) {
+            //    clientInfoOldHelp.List.RemoveAt(i);
+            //    break;
+            //  }
+            //}
+            break;
+          }
+        }
+        if (found == false) {
+          changes.Add(new Changes { Types = Type.Job, ID = job.Id, ChangeType = Change.Create });
+        }
+      }
+      foreach (Job job in jobsOldHelp.List) {
+        changes.Add(new Changes { Types = Type.Job, ID = job.Id, ChangeType = Change.Delete });
+      }
+      #endregion
+
     }
     #endregion
