Index: trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/HiveAdministratorView.cs
===================================================================
--- trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/HiveAdministratorView.cs	(revision 16443)
+++ trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/HiveAdministratorView.cs	(revision 16446)
@@ -37,19 +37,13 @@
     }
 
-    #region Register Content Events
-    protected override void DeregisterContentEvents() {
-      base.DeregisterContentEvents();
-    }
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-    }
-    #endregion
-
     protected override void OnContentChanged() {
       base.OnContentChanged();
-    }
-
-    protected override void SetEnabledStateOfControls() {
-      base.SetEnabledStateOfControls();
+      if (Content != null) {
+        projectsView.Content = Content.Projects;
+        resourcesView.Content = Content.Resources;
+      } else {
+        projectsView.Content = null;
+        resourcesView.Content = null;
+      }
     }
   }
Index: trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectResourcesView.Designer.cs
===================================================================
--- trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectResourcesView.Designer.cs	(revision 16443)
+++ trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectResourcesView.Designer.cs	(revision 16446)
@@ -171,5 +171,5 @@
       this.Name = "ProjectResourcesView";
       this.Size = new System.Drawing.Size(830, 494);
-      this.Load += new System.EventHandler(this.ProjectResourcesView_Load);
+      this.Disposed += new System.EventHandler(this.ProjectResourcesView_Disposed);
       this.splitContainer.Panel1.ResumeLayout(false);
       this.splitContainer.Panel2.ResumeLayout(false);
Index: trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectResourcesView.cs
===================================================================
--- trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectResourcesView.cs	(revision 16443)
+++ trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectResourcesView.cs	(revision 16446)
@@ -29,6 +29,4 @@
 using HeuristicLab.Core.Views;
 using HeuristicLab.MainForm;
-using System.Collections;
-using HeuristicLab.Common;
 
 namespace HeuristicLab.Clients.Hive.Administrator.Views {
@@ -79,10 +77,4 @@
 
     #region Overrides
-    protected override void OnClosing(FormClosingEventArgs e) {
-      HiveAdminClient.Instance.Refreshed -= HiveAdminClient_Instance_Refreshed;
-      HiveAdminClient.Instance.Refreshing -= HiveAdminClient_Instance_Refreshing;
-      base.OnClosing(e);
-    }
-
     protected override void OnContentChanged() {
       base.OnContentChanged();
@@ -130,6 +122,7 @@
     }
 
-    private void ProjectResourcesView_Load(object sender, EventArgs e) {
-
+    private void ProjectResourcesView_Disposed(object sender, EventArgs e) {
+      HiveAdminClient.Instance.Refreshed -= HiveAdminClient_Instance_Refreshed;
+      HiveAdminClient.Instance.Refreshing -= HiveAdminClient_Instance_Refreshing;
     }
 
@@ -165,5 +158,5 @@
 
       var selectedResource = (Resource)e.Node.Tag;
-      if(HiveAdminClient.Instance.DisabledParentResources.Contains(selectedResource))
+      if (HiveAdminClient.Instance.DisabledParentResources.Contains(selectedResource))
         e.Cancel = true;
     }
@@ -179,17 +172,17 @@
         return;
       }
-        
+
       var checkedResource = (Resource)e.Node.Tag;
       if (checkedResource == null
         || checkedResource.Id == Guid.Empty
-        || HiveAdminClient.Instance.DisabledParentResources.Contains(checkedResource) 
+        || HiveAdminClient.Instance.DisabledParentResources.Contains(checkedResource)
         || newIncludedResources.Contains(checkedResource)) {
         e.Cancel = true;
       } else if (!IsAdmin()) {
-          if (!HiveAdminClient.Instance.CheckOwnershipOfParentProject(Content, UserInformation.Instance.User.Id) 
-            || !HiveAdminClient.Instance.GetAvailableProjectAncestors(Content.Id).Any() 
-            || projectExclusiveResources.Contains(checkedResource)) {
-            e.Cancel = true;
-          }
+        if (!HiveAdminClient.Instance.CheckOwnershipOfParentProject(Content, UserInformation.Instance.User.Id)
+          || !HiveAdminClient.Instance.GetAvailableProjectAncestors(Content.Id).Any()
+          || projectExclusiveResources.Contains(checkedResource)) {
+          e.Cancel = true;
+        }
       }
     }
@@ -232,5 +225,5 @@
 
       // get project specific assigned resources
-      var projectResources = resources.Where(x => 
+      var projectResources = resources.Where(x =>
         HiveAdminClient.Instance.ProjectResourceAssignments
           .Where(a => a.ProjectId == projectId)
@@ -242,5 +235,5 @@
       HiveAdminClient.Instance.GetAvailableProjectAncestors(projectId).ToList().ForEach(x => projectIds.Add(x.Id));
 
-      var ancestorProjectResources = resources.Where(x => 
+      var ancestorProjectResources = resources.Where(x =>
         HiveAdminClient.Instance.ProjectResourceAssignments
           .Where(a => projectIds.Contains(a.ProjectId))
@@ -251,5 +244,5 @@
       HashSet<Resource> availableResources = new HashSet<Resource>(ancestorProjectResources);
       foreach (var r in ancestorProjectResources) {
-        foreach(var d in HiveAdminClient.Instance.GetAvailableResourceDescendants(r.Id)) {
+        foreach (var d in HiveAdminClient.Instance.GetAvailableResourceDescendants(r.Id)) {
           availableResources.Add(d);
         }
@@ -267,5 +260,5 @@
           foreach (var d in HiveAdminClient.Instance.GetAvailableResourceDescendants(r.Id)) {
             projectExclusiveResources.Add(d);
-          }  
+          }
         }
       }
@@ -286,11 +279,11 @@
       if (projectId == null || resourceIds == null) return;
       HiveServiceLocator.Instance.CallHiveService(s => {
-       s.SaveProjectResourceAssignments(projectId, resourceIds.ToList(), reassign, cascading, reassignCascading);
+        s.SaveProjectResourceAssignments(projectId, resourceIds.ToList(), reassign, cascading, reassignCascading);
       });
     }
 
     private void UpdateNewAssignedResources() {
-      for(int i = newAssignedResources.Count -1; i >= 0; i--) {
-        if(newAssignedResources.Intersect(HiveAdminClient.Instance.GetAvailableResourceAncestors(newAssignedResources.ElementAt(i).Id)).Any()) {
+      for (int i = newAssignedResources.Count - 1; i >= 0; i--) {
+        if (newAssignedResources.Intersect(HiveAdminClient.Instance.GetAvailableResourceAncestors(newAssignedResources.ElementAt(i).Id)).Any()) {
           newAssignedResources.Remove(newAssignedResources.ElementAt(i));
         }
@@ -345,5 +338,5 @@
 
       var stack = new Stack<Resource>(mainResources.OrderByDescending(x => x.Name));
-      
+
       Resource top = null;
       //bool nodeSelected = false;
@@ -352,5 +345,5 @@
         top = resources.Where(x => x.Id == resourceId).FirstOrDefault();
       }
-      
+
 
       TreeNode currentNode = null;
@@ -366,5 +359,5 @@
         var newNode = new TreeNode(newResource.Name) { Tag = newResource };
 
-        if(top == null && !disabledParentResources.Contains(newResource)) {
+        if (top == null && !disabledParentResources.Contains(newResource)) {
           top = newResource;
         }
@@ -395,7 +388,7 @@
         } else if (newAssignedResources.Contains(newResource)) {
           newNode.Checked = true;
-          if(!HiveRoles.CheckAdminUserPermissions()) {
-            if (!HiveAdminClient.Instance.CheckOwnershipOfParentProject(Content, UserInformation.Instance.User.Id) 
-              || !HiveAdminClient.Instance.GetAvailableProjectAncestors(Content.Id).Any() 
+          if (!HiveRoles.CheckAdminUserPermissions()) {
+            if (!HiveAdminClient.Instance.CheckOwnershipOfParentProject(Content, UserInformation.Instance.User.Id)
+              || !HiveAdminClient.Instance.GetAvailableProjectAncestors(Content.Id).Any()
               || projectExclusiveResources.Contains(newResource)) {
               newNode.ForeColor = SystemColors.GrayText;
@@ -452,5 +445,5 @@
       bool expandUngroupedGroupNode = false;
       var ungroupedSlaves = subResources.OfType<Slave>().OrderBy(x => x.Name);
-      if(ungroupedSlaves.Any()) {
+      if (ungroupedSlaves.Any()) {
         ungroupedGroupNode = new TreeNode(UNGROUPED_GROUP_NAME) {
           ForeColor = SystemColors.GrayText,
@@ -486,5 +479,5 @@
         }
 
-        if(expandUngroupedGroupNode) ungroupedGroupNode.Expand();
+        if (expandUngroupedGroupNode) ungroupedGroupNode.Expand();
         treeView.Nodes.Add(ungroupedGroupNode);
       } else if (ungroupedGroupNode != null) {
@@ -493,5 +486,5 @@
 
       treeView.BeforeCheck += treeView_BeforeCheck;
-      treeView.AfterCheck += treeView_AfterCheck;          
+      treeView.AfterCheck += treeView_AfterCheck;
 
       return top;
Index: trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.Designer.cs
===================================================================
--- trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.Designer.cs	(revision 16443)
+++ trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.Designer.cs	(revision 16446)
@@ -213,4 +213,5 @@
       this.Size = new System.Drawing.Size(539, 271);
       this.Load += new System.EventHandler(this.ProjectView_Load);
+      this.Disposed += new System.EventHandler(this.ProjectView_Disposed);
       this.ResumeLayout(false);
       this.PerformLayout();
Index: trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.cs
===================================================================
--- trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.cs	(revision 16443)
+++ trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.cs	(revision 16446)
@@ -35,9 +35,7 @@
     private readonly object locker = new object();
 
-    private Guid persistedOwnerUserId;
-
     public new Project Content {
       get { return (Project)base.Content; }
-      set { base.Content = value; persistedOwnerUserId = Content != null ? Content.OwnerUserId : Guid.Empty; }
+      set { base.Content = value; }
     }
 
@@ -50,10 +48,4 @@
 
     #region Overrides
-    protected override void OnClosing(FormClosingEventArgs e) {
-      AccessClient.Instance.Refreshed -= AccessClient_Instance_Refreshed;
-      AccessClient.Instance.Refreshing -= AccessClient_Instance_Refreshing;
-      base.OnClosing(e);
-    }
-
     protected override void RegisterContentEvents() {
       base.RegisterContentEvents();
@@ -106,6 +98,7 @@
         var users = AccessClient.Instance.UsersAndGroups.OfType<LightweightUser>();
         if (!Content.ParentProjectId.HasValue) users = users.Where(x => x.Roles.Select(y => y.Name).Contains(HiveRoles.Administrator));
-        ownerComboBox.DataSource = users.ToList();
-        ownerComboBox.SelectedItem = users.FirstOrDefault(x => x.Id == Content.OwnerUserId);
+        var projectOwnerId = Content.OwnerUserId;
+        ownerComboBox.DataSource = users.OrderBy(x => x.UserName).ToList();
+        ownerComboBox.SelectedItem = users.FirstOrDefault(x => x.Id == projectOwnerId);
         ownerComboBox.SelectedIndexChanged += ownerComboBox_SelectedIndexChanged;
 
@@ -180,7 +173,12 @@
           var users = AccessClient.Instance.UsersAndGroups.OfType<LightweightUser>();
           if (Content != null && !Content.ParentProjectId.HasValue) users = users.Where(x => x.Roles.Select(y => y.Name).Contains(HiveRoles.Administrator));
-          ownerComboBox.DataSource = users.ToList();
+          ownerComboBox.DataSource = users.OrderBy(x => x.UserName).ToList();
           ownerComboBox.SelectedIndexChanged += ownerComboBox_SelectedIndexChanged;
         });
+    }
+
+    private void ProjectView_Disposed(object sender, EventArgs e) {
+      AccessClient.Instance.Refreshed -= AccessClient_Instance_Refreshed;
+      AccessClient.Instance.Refreshing -= AccessClient_Instance_Refreshing;
     }
 
Index: trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectsView.Designer.cs
===================================================================
--- trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectsView.Designer.cs	(revision 16443)
+++ trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectsView.Designer.cs	(revision 16446)
@@ -260,4 +260,5 @@
       this.Size = new System.Drawing.Size(853, 553);
       this.Load += new System.EventHandler(this.ProjectsView_Load);
+      this.Disposed += new System.EventHandler(this.ProjectsView_Disposed);
       this.splitContainer.Panel1.ResumeLayout(false);
       this.splitContainer.Panel2.ResumeLayout(false);
Index: trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectsView.cs
===================================================================
--- trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectsView.cs	(revision 16443)
+++ trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectsView.cs	(revision 16446)
@@ -56,4 +56,6 @@
 
     private readonly object locker = new object();
+    private bool refreshingInternal = false;
+    private bool refreshingExternal = false;
 
     public new IItemList<Project> Content {
@@ -70,17 +72,7 @@
       HiveAdminClient.Instance.Refreshing += HiveAdminClient_Instance_Refreshing;
       HiveAdminClient.Instance.Refreshed += HiveAdminClient_Instance_Refreshed;
-      AccessClient.Instance.Refreshing += AccessClient_Instance_Refreshing;
-      AccessClient.Instance.Refreshed += AccessClient_Instance_Refreshed;
     }
 
     #region Overrides
-    protected override void OnClosing(FormClosingEventArgs e) {
-      AccessClient.Instance.Refreshed -= AccessClient_Instance_Refreshed;
-      AccessClient.Instance.Refreshing -= AccessClient_Instance_Refreshing;
-      HiveAdminClient.Instance.Refreshed -= HiveAdminClient_Instance_Refreshed;
-      HiveAdminClient.Instance.Refreshing -= HiveAdminClient_Instance_Refreshing;
-      base.OnClosing(e);
-    }
-
     protected override void RegisterContentEvents() {
       base.RegisterContentEvents();
@@ -183,4 +175,9 @@
       if (InvokeRequired) Invoke((Action<object, EventArgs>)HiveAdminClient_Instance_Refreshing, sender, e);
       else {
+        lock (locker) {
+          if (refreshingExternal) return;
+          if (!refreshingInternal) refreshingExternal = true;
+        }
+
         Progress.Show(this, "Refreshing ...", ProgressMode.Indeterminate);
         SetEnabledStateOfControls();
@@ -191,20 +188,7 @@
       if (InvokeRequired) Invoke((Action<object, EventArgs>)HiveAdminClient_Instance_Refreshed, sender, e);
       else {
-        Progress.Hide(this);
-        SetEnabledStateOfControls();
-      }
-    }
-
-    private void AccessClient_Instance_Refreshing(object sender, EventArgs e) {
-      if (InvokeRequired) Invoke((Action<object, EventArgs>)AccessClient_Instance_Refreshing, sender, e);
-      else {
-        Progress.Show(this, "Refreshing ...", ProgressMode.Indeterminate);
-        SetEnabledStateOfControls();
-      }
-    }
-
-    private void AccessClient_Instance_Refreshed(object sender, EventArgs e) {
-      if (InvokeRequired) Invoke((Action<object, EventArgs>)AccessClient_Instance_Refreshed, sender, e);
-      else {
+        if (refreshingExternal) refreshingExternal = false;
+        Content = HiveAdminClient.Instance.Projects;
+
         Progress.Hide(this);
         SetEnabledStateOfControls();
@@ -215,4 +199,9 @@
       await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions(
         action: () => UpdateProjects());
+    }
+
+    private void ProjectsView_Disposed(object sender, EventArgs e) {
+      HiveAdminClient.Instance.Refreshed -= HiveAdminClient_Instance_Refreshed;
+      HiveAdminClient.Instance.Refreshing -= HiveAdminClient_Instance_Refreshing;
     }
 
@@ -515,9 +504,15 @@
 
     private void UpdateProjects() {
+      lock (locker) {
+        if (refreshingInternal || refreshingExternal) return;
+        refreshingInternal = true;
+      }
+
       try {
         HiveAdminClient.Instance.Refresh();
-        Content = HiveAdminClient.Instance.Projects;
       } catch (AnonymousUserException) {
         ShowHiveInformationDialog();
+      } finally {
+        refreshingInternal = false;
       }
     }
Index: trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.Designer.cs
===================================================================
--- trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.Designer.cs	(revision 16443)
+++ trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.Designer.cs	(revision 16446)
@@ -239,4 +239,5 @@
       this.Size = new System.Drawing.Size(853, 553);
       this.Load += new System.EventHandler(this.ResourcesView_Load);
+      this.Disposed += new System.EventHandler(this.ResourcesView_Disposed);
       this.splitSlaves.Panel1.ResumeLayout(false);
       this.splitSlaves.Panel2.ResumeLayout(false);
Index: trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.cs
===================================================================
--- trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.cs	(revision 16443)
+++ trunk/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.cs	(revision 16446)
@@ -54,5 +54,4 @@
 
 
-
     private TreeNode ungroupedGroupNode;
 
@@ -64,4 +63,6 @@
 
     private readonly object locker = new object();
+    private bool refreshingInternal = false;
+    private bool refreshingExternal = false;
 
     public new IItemList<Resource> Content {
@@ -78,17 +79,7 @@
       HiveAdminClient.Instance.Refreshing += HiveAdminClient_Instance_Refreshing;
       HiveAdminClient.Instance.Refreshed += HiveAdminClient_Instance_Refreshed;
-      AccessClient.Instance.Refreshing += AccessClient_Instance_Refreshing;
-      AccessClient.Instance.Refreshed += AccessClient_Instance_Refreshed;
     }
 
     #region Overrides
-    protected override void OnClosing(FormClosingEventArgs e) {
-      AccessClient.Instance.Refreshed -= AccessClient_Instance_Refreshed;
-      AccessClient.Instance.Refreshing -= AccessClient_Instance_Refreshing;
-      HiveAdminClient.Instance.Refreshed -= HiveAdminClient_Instance_Refreshed;
-      HiveAdminClient.Instance.Refreshing -= HiveAdminClient_Instance_Refreshing;
-      base.OnClosing(e);
-    }
-
     protected override void RegisterContentEvents() {
       base.RegisterContentEvents();
@@ -185,4 +176,9 @@
       if (InvokeRequired) Invoke((Action<object, EventArgs>)HiveAdminClient_Instance_Refreshing, sender, e);
       else {
+        lock (locker) {
+          if (refreshingExternal) return;
+          if (!refreshingInternal) refreshingExternal = true;
+        }
+
         Progress.Show(this, "Refreshing ...", ProgressMode.Indeterminate);
         SetEnabledStateOfControls();
@@ -193,4 +189,7 @@
       if (InvokeRequired) Invoke((Action<object, EventArgs>)HiveAdminClient_Instance_Refreshed, sender, e);
       else {
+        if (refreshingExternal) refreshingExternal = false;
+        Content = HiveAdminClient.Instance.Resources;
+
         Progress.Hide(this);
         SetEnabledStateOfControls();
@@ -198,23 +197,11 @@
     }
 
-    private void AccessClient_Instance_Refreshing(object sender, EventArgs e) {
-      if (InvokeRequired) Invoke((Action<object, EventArgs>)AccessClient_Instance_Refreshing, sender, e);
-      else {
-        Progress.Show(this, "Refreshing ...", ProgressMode.Indeterminate);
-        SetEnabledStateOfControls();
-      }
-    }
-
-    private void AccessClient_Instance_Refreshed(object sender, EventArgs e) {
-      if (InvokeRequired) Invoke((Action<object, EventArgs>)AccessClient_Instance_Refreshed, sender, e);
-      else {
-        Progress.Hide(this);
-        SetEnabledStateOfControls();
-      }
-    }
-
     private async void ResourcesView_Load(object sender, EventArgs e) {
-      await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions(
-        action: () => UpdateResources());
+      await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions(() => UpdateResources());
+    }
+
+    private void ResourcesView_Disposed(object sender, EventArgs e) {
+      HiveAdminClient.Instance.Refreshed -= HiveAdminClient_Instance_Refreshed;
+      HiveAdminClient.Instance.Refreshing -= HiveAdminClient_Instance_Refreshing;
     }
 
@@ -550,9 +537,15 @@
 
     private void UpdateResources() {
+      lock (locker) {
+        if (refreshingInternal || refreshingExternal) return;
+        refreshingInternal = true;
+      }
+
       try {
         HiveAdminClient.Instance.Refresh();
-        Content = HiveAdminClient.Instance.Resources;
       } catch (AnonymousUserException) {
         ShowHiveInformationDialog();
+      } finally {
+        refreshingInternal = false;
       }
     }
