Index: branches/HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.cs
===================================================================
--- branches/HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.cs	(revision 15401)
+++ branches/HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.cs	(revision 15412)
@@ -27,4 +27,5 @@
 using HeuristicLab.Clients.Access;
 using HeuristicLab.Clients.Hive.Views;
+using HeuristicLab.Collections;
 using HeuristicLab.Common.Resources;
 using HeuristicLab.Core;
@@ -144,16 +145,25 @@
 
     #region Event Handlers
-    private void Content_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<Collections.IndexedItem<Resource>> e) {
-      OnContentChanged();
-    }
-
-    private void Content_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<Collections.IndexedItem<Resource>> e) {
-      OnContentChanged();
+    private void Content_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<Resource>> e) {
+      if (InvokeRequired) Invoke((Action<object, CollectionItemsChangedEventArgs<IndexedItem<Resource>>>)Content_ItemsAdded, sender, e);
+      else {
+        OnContentChanged();
+      }
+    }
+
+    private void Content_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<Resource>> e) {
+      if (InvokeRequired) Invoke((Action<object, CollectionItemsChangedEventArgs<IndexedItem<Resource>>>)Content_ItemsRemoved, sender, e);
+      else {
+        OnContentChanged();
+      }
     }
 
     private void SlaveViewContent_PropertyChanged(object sender, PropertyChangedEventArgs e) {
-      OnContentChanged();
-      if (e.PropertyName == "HbInterval") {
-        UpdateChildHbIntervall(slaveView.Content);
+      if (InvokeRequired) Invoke((Action<object, PropertyChangedEventArgs>)SlaveViewContent_PropertyChanged, sender, e);
+      else {
+        OnContentChanged();
+        if (e.PropertyName == "HbInterval") {
+          UpdateChildHbIntervall(slaveView.Content);
+        }
       }
     }
@@ -196,12 +206,6 @@
 
     private async void ResourcesView_Load(object sender, EventArgs e) {
-      lock (locker) {
-        if (updatingResources) return;
-        updatingResources = true;
-      }
-
       await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions(
-        action: () => UpdateResources(),
-        finallyCallback: () => updatingResources = false);
+        action: () => UpdateResources());
     }
 
@@ -259,9 +263,23 @@
       slaveView.Content = selectedResource;
 
-      if (selectedResource is SlaveGroup)
-        slaveView.Content.PropertyChanged += SlaveViewContent_PropertyChanged;
-
-      await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions(
-        action: () => UpdateSchedule());
+      if (selectedResource != null && selectedResource is SlaveGroup)
+        selectedResource.PropertyChanged += SlaveViewContent_PropertyChanged;
+
+      if (IsAuthorized(selectedResource)) {
+        if (!tabSlaveGroup.TabPages.Contains(tabSchedule))
+          tabSlaveGroup.TabPages.Add(tabSchedule);
+
+        HiveAdminClient.Instance.DowntimeForResourceId = selectedResource.Id;
+
+        if (tabSlaveGroup.SelectedIndex == 1) {
+          await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions(
+            action: () => UpdateSchedule(),
+            finallyCallback: () => scheduleView.Content = HiveAdminClient.Instance.Downtimes);
+        }
+      } else {
+        if (tabSlaveGroup.TabPages.Contains(tabSchedule))
+          tabSlaveGroup.TabPages.Remove(tabSchedule);
+        HiveAdminClient.Instance.DowntimeForResourceId = Guid.Empty;
+      }
     }
 
@@ -412,11 +430,6 @@
 
     private void UpdateResources() {
-      try {
-        ResetView();
-        HiveAdminClient.Instance.Refresh();
-        Content = HiveAdminClient.Instance.Resources;
-      } catch (AnonymousUserException) {
-        ShowHiveInformationDialog();
-      }
+      HiveAdminClient.Instance.Refresh();
+      Content = HiveAdminClient.Instance.Resources;
     }
 
@@ -452,22 +465,8 @@
 
     private void UpdateSchedule() {
-      var selectedNode = treeSlaveGroup.SelectedNode;
-      var resource = (Resource)selectedNode?.Tag;
-
-      if (IsAuthorized(resource)) {
-        if (!tabSlaveGroup.TabPages.Contains(tabSchedule))
-          tabSlaveGroup.TabPages.Add(tabSchedule);
-
-        if (tabSlaveGroup.SelectedIndex == 1) {
-          HiveAdminClient.Instance.DowntimeForResourceId = resource.Id;
-          HiveAdminClient.Instance.RefreshCalendar();
-          scheduleView.Invoke((Action)(() => {
-            scheduleView.Content = HiveAdminClient.Instance.Downtimes;
-            SetEnabledStateOfControls();
-          }));
-        }
-      } else {
-        if (tabSlaveGroup.TabPages.Contains(tabSchedule))
-          tabSlaveGroup.TabPages.Remove(tabSchedule);
+      try {
+        HiveAdminClient.Instance.RefreshCalendar();
+      } catch (AnonymousUserException) {
+        ShowHiveInformationDialog();
       }
     }
