Index: branches/2839_HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectJobsView.cs
===================================================================
--- branches/2839_HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectJobsView.cs	(revision 16064)
+++ branches/2839_HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectJobsView.cs	(revision 16072)
@@ -28,5 +28,4 @@
 using HeuristicLab.MainForm.WindowsForms;
 using HeuristicLab.Core.Views;
-using HeuristicLab.Data.Views;
 using HeuristicLab.Data;
 using HeuristicLab.Clients.Hive.Views;
Index: branches/2839_HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectsView.cs
===================================================================
--- branches/2839_HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectsView.cs	(revision 16064)
+++ branches/2839_HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectsView.cs	(revision 16072)
@@ -102,4 +102,5 @@
         projectResourcesView.Content = null;
         projectJobsView.Content = null;
+        selectedProject = null;
       } else {
         BuildProjectTree(Content);
@@ -109,13 +110,18 @@
     protected override void SetEnabledStateOfControls() {
       base.SetEnabledStateOfControls();
-      bool enabled = Content != null && !Locked && !ReadOnly;
-      refreshButton.Enabled = enabled;
-      //addButton.Enabled = enabled;
-      //removeButton.Enabled = enabled;
-      //saveProjectButton.Enabled = enabled;
-      projectView.Enabled = enabled;
-      projectPermissionsView.Enabled = enabled;
-      projectResourcesView.Enabled = enabled;
-      projectJobsView.Enabled = enabled;
+      bool selectedProjectExists = selectedProject != null && selectedProject.Id != Guid.Empty && Content.Contains(selectedProject);
+      bool locked = Content == null || selectedProject == null || Locked || ReadOnly;
+      bool parentOwner = HiveAdminClient.Instance.CheckOwnershipOfParentProject(selectedProject, UserInformation.Instance.User.Id);
+      bool saveLocked = locked || (!IsAdmin() && selectedProject.OwnerUserId != UserInformation.Instance.User.Id && !parentOwner);
+      bool addLocked = saveLocked || selectedProject.Id == Guid.Empty;
+      bool deleteLocked = locked || (!IsAdmin() && !parentOwner) || Content.Where(x => x.ParentProjectId == selectedProject.Id).Any();
+
+      addButton.Enabled = !addLocked;
+      removeButton.Enabled = !deleteLocked;
+      saveProjectButton.Enabled = !saveLocked;
+      projectView.Enabled = !locked;
+      projectPermissionsView.Enabled = !locked;
+      projectResourcesView.Enabled = !locked;
+      projectJobsView.Enabled = !locked;
     }
     #endregion
@@ -265,5 +271,5 @@
         && HiveAdminClient.Instance.Jobs[selectedProject.Id].Any()) {
         MessageBox.Show(
-          "There are " + HiveAdminClient.Instance.Jobs[selectedProject.Id].Count + " jobs using this project and/or child-projects. It is necessary to delete them before the project.",
+          "There are " + HiveAdminClient.Instance.Jobs[selectedProject.Id].Count + " job(s) using this project and/or child-projects. It is necessary to delete them before the project.",
           "HeuristicLab Hive Administrator",
           MessageBoxButtons.OK,
@@ -286,4 +292,6 @@
             removeButton.Enabled = true;
           });
+      } else {
+        removeButton.Enabled = true;
       }
     }
@@ -297,7 +305,10 @@
       await SecurityExceptionUtil.TryAsyncAndReportSecurityExceptions(
         action: () => {
+          //if (selectedProject != null && selectedProject.Id == Guid.Empty)
+          //  SelectedProject = HiveAdminClient.Instance.GetAvailableProjectAncestors(selectedProject.Id).LastOrDefault();
           var projectsToSave = Content.Where(x => x.Id == Guid.Empty || x.Modified);
           foreach (var project in projectsToSave)
             project.Store();
+          
           UpdateProjects();
         },
@@ -552,5 +563,7 @@
           foreach (var p in projectsToSave)
             p.Store();
-          HiveAdminClient.Delete(project);
+
+          SelectedProject = HiveAdminClient.Instance.GetAvailableProjectAncestors(project.Id).LastOrDefault();
+          HiveAdminClient.Delete(project);          
           UpdateProjects();
         } else {
Index: branches/2839_HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.Designer.cs
===================================================================
--- branches/2839_HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.Designer.cs	(revision 16064)
+++ branches/2839_HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.Designer.cs	(revision 16072)
@@ -106,5 +106,5 @@
       this.btnRefresh.Size = new System.Drawing.Size(24, 24);
       this.btnRefresh.TabIndex = 8;
-      this.toolTip.SetToolTip(this.btnRefresh, "Fetch list from server");
+      this.toolTip.SetToolTip(this.btnRefresh, "Fetch list from server.");
       this.btnRefresh.UseVisualStyleBackColor = true;
       this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click);
@@ -117,5 +117,5 @@
       this.btnSave.Size = new System.Drawing.Size(24, 24);
       this.btnSave.TabIndex = 5;
-      this.toolTip.SetToolTip(this.btnSave, "Store slave and group configuration on the server");
+      this.toolTip.SetToolTip(this.btnSave, "Store slave and group configuration on the server.");
       this.btnSave.UseVisualStyleBackColor = true;
       this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
@@ -128,5 +128,5 @@
       this.btnRemoveGroup.Size = new System.Drawing.Size(24, 24);
       this.btnRemoveGroup.TabIndex = 2;
-      this.toolTip.SetToolTip(this.btnRemoveGroup, "Remove a slave or a group");
+      this.toolTip.SetToolTip(this.btnRemoveGroup, "Remove a slave or a group.");
       this.btnRemoveGroup.UseVisualStyleBackColor = true;
       this.btnRemoveGroup.Click += new System.EventHandler(this.btnRemoveGroup_Click);
@@ -139,5 +139,5 @@
       this.btnAddGroup.Size = new System.Drawing.Size(24, 24);
       this.btnAddGroup.TabIndex = 1;
-      this.toolTip.SetToolTip(this.btnAddGroup, "Add a new group");
+      this.toolTip.SetToolTip(this.btnAddGroup, "Add a new group.");
       this.btnAddGroup.UseVisualStyleBackColor = true;
       this.btnAddGroup.Click += new System.EventHandler(this.btnAddGroup_Click);
Index: branches/2839_HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.cs
===================================================================
--- branches/2839_HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.cs	(revision 16064)
+++ branches/2839_HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ResourcesView.cs	(revision 16072)
@@ -117,17 +117,13 @@
       base.SetEnabledStateOfControls();
 
-      bool locked = Content == null || Locked || ReadOnly || !IsAdmin();
-      bool scheduleLocked = locked || (selectedResource != null && selectedResource.Id == Guid.Empty);
-      bool addLocked = locked || (selectedResource != null && selectedResource.Id == Guid.Empty) || selectedResource is Slave;
+      bool locked = Content == null || selectedResource == null || Locked || ReadOnly;
+      bool adminLocked = locked || !IsAdmin();
+      bool addLocked = adminLocked || selectedResource.Id == Guid.Empty || selectedResource is Slave;
+      bool deleteLocked = adminLocked || HiveAdminClient.Instance.ResourceDescendants[selectedResource.Id].Any();
 
       btnAddGroup.Enabled = !addLocked;
-      btnRemoveGroup.Enabled = !locked;
+      btnRemoveGroup.Enabled = !deleteLocked;
       btnSave.Enabled = !locked;
-      viewHost.Enabled = true;
-      //viewHost.Locked = locked;
-      viewHost.Locked = false;
-      viewHost.ReadOnly = false;
-      scheduleView.Locked = locked;
-      //scheduleView.SetEnabledStateOfSchedule(!scheduleLocked);
+      scheduleView.Locked = adminLocked;
     }
     #endregion
@@ -228,5 +224,15 @@
       }
 
-      if (selectedResource != null && selectedResource is SlaveGroup) parentResourceId = selectedResource.Id;
+      if (selectedResource != null && selectedResource is SlaveGroup) {
+        parentResourceId = selectedResource.Id;
+      } else {
+        MessageBox.Show(
+          "You cannot add a resource group to a slave.",
+          "HeuristicLab Hive Administrator",
+          MessageBoxButtons.OK,
+          MessageBoxIcon.Information);
+        return;
+      }
+
       var group = new SlaveGroup {
         Name = "New Group",
@@ -250,5 +256,5 @@
       if (!IsAdmin()) {
         MessageBox.Show(
-          "You have no permission to delete resources.",
+          "You have no permission to delete resource groups.",
           "HeuristicLab Hive Administrator",
           MessageBoxButtons.OK,
@@ -259,5 +265,5 @@
       if (Content.Any(x => x.ParentResourceId == selectedResource.Id)) {
         MessageBox.Show(
-          "Only empty resources can be deleted.",
+          "Only empty resource groups can be deleted.",
           "HeuristicLab Hive Administrator",
           MessageBoxButtons.OK,
@@ -279,4 +285,6 @@
             btnRemoveGroup.Enabled = true;
           });
+      } else {
+        btnRemoveGroup.Enabled = true;
       }
     }
@@ -559,4 +567,6 @@
           foreach (var r in resourcesToSave)
             r.Store();
+
+          SelectedResource = HiveAdminClient.Instance.GetAvailableResourceAncestors(resource.Id).LastOrDefault();
           HiveAdminClient.Delete(resource);
           UpdateResources();
