Index: branches/HiveProjectManagement/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj
===================================================================
--- branches/HiveProjectManagement/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj	(revision 15377)
+++ branches/HiveProjectManagement/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj	(revision 15401)
@@ -159,4 +159,9 @@
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Clients.Access\3.3\HeuristicLab.Clients.Access-3.3.csproj">
+      <Project>{494f87f4-0f25-4d33-a382-10cdb2174d48}</Project>
+      <Name>HeuristicLab.Clients.Access-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Clients.Hive.Views\3.3\HeuristicLab.Clients.Hive.Views-3.3.csproj">
       <Project>{E1D6C801-892A-406A-B606-F158E36DD3C3}</Project>
Index: branches/HiveProjectManagement/HeuristicLab.Clients.Hive.JobManager/3.3/MenuItems/JobManagerMenuItem.cs
===================================================================
--- branches/HiveProjectManagement/HeuristicLab.Clients.Hive.JobManager/3.3/MenuItems/JobManagerMenuItem.cs	(revision 15377)
+++ branches/HiveProjectManagement/HeuristicLab.Clients.Hive.JobManager/3.3/MenuItems/JobManagerMenuItem.cs	(revision 15401)
@@ -20,23 +20,41 @@
 #endregion
 
+using System;
 using System.Collections.Generic;
 using System.Windows.Forms;
+using HeuristicLab.Clients.Access;
 using HeuristicLab.MainForm;
 using HeuristicLab.Optimizer;
 
 namespace HeuristicLab.Clients.Hive.JobManager {
-  public class JobManagerMenuItem : HeuristicLab.MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
+  public class JobManagerMenuItem : MainForm.WindowsForms.MenuItem, IOptimizerUserInterfaceItemProvider {
     public override string Name {
       get { return "&Job Manager"; }
     }
+
     public override IEnumerable<string> Structure {
       get { return new string[] { "&Services", "&Hive" }; }
     }
+
     public override void Execute() {
-      MainFormManager.MainForm.ShowContent(HiveClient.Instance);
+      if (HiveRoles.CheckHiveUserPermissions()) {
+        MainFormManager.MainForm.ShowContent(HiveClient.Instance);
+      } else if (!UserInformation.Instance.UserExists) {
+        MessageBox.Show(
+          "Couldn't fetch user information from the server." + Environment.NewLine +
+          "Please verify that you have an existing user and that your user name and password is correct.",
+          "HeuristicLab Hive Job Manager", MessageBoxButtons.OK, MessageBoxIcon.Error);
+      } else {
+        MessageBox.Show(
+          "You do not seem to have the permissions to use the Hive Job Manager." + Environment.NewLine +
+          "If that's not the case or you have any questions please write an email to support@heuristiclab.com",
+          "HeuristicLab Hive Job Manager", MessageBoxButtons.OK, MessageBoxIcon.Error);
+      }
     }
+
     public override int Position {
       get { return 10000; }
     }
+
     public override Keys ShortCutKeys {
       get { return Keys.Control | Keys.H; }
Index: branches/HiveProjectManagement/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelector.Designer.cs
===================================================================
--- branches/HiveProjectManagement/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelector.Designer.cs	(revision 15377)
+++ branches/HiveProjectManagement/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelector.Designer.cs	(revision 15401)
@@ -21,5 +21,5 @@
 
 namespace HeuristicLab.Clients.Hive.JobManager.Views {
-  partial class HiveResourceSelector {
+  partial class HiveProjectSelector {
     /// <summary> 
     /// Required designer variable.
@@ -46,5 +46,4 @@
     private void InitializeComponent() {
       this.components = new System.ComponentModel.Container();
-      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HiveResourceSelector));
       this.resourcesGroupBox = new System.Windows.Forms.GroupBox();
       this.splitContainer = new System.Windows.Forms.SplitContainer();
@@ -71,5 +70,5 @@
       this.resourcesGroupBox.TabIndex = 0;
       this.resourcesGroupBox.TabStop = false;
-      this.resourcesGroupBox.Text = "Available Resources";
+      this.resourcesGroupBox.Text = "Available Projects";
       // 
       // splitContainer
@@ -95,6 +94,6 @@
       // resourcesTreeView
       // 
-      this.resourcesTreeView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-            | System.Windows.Forms.AnchorStyles.Left)
+      this.resourcesTreeView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
             | System.Windows.Forms.AnchorStyles.Right)));
       this.resourcesTreeView.CheckBoxes = true;
@@ -128,5 +127,5 @@
       // searchTextBox
       // 
-      this.searchTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+      this.searchTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
             | System.Windows.Forms.AnchorStyles.Right)));
       this.searchTextBox.Location = new System.Drawing.Point(29, 3);
@@ -139,6 +138,6 @@
       // descriptionTextBox
       // 
-      this.descriptionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-            | System.Windows.Forms.AnchorStyles.Left)
+      this.descriptionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
             | System.Windows.Forms.AnchorStyles.Right)));
       this.descriptionTextBox.Font = new System.Drawing.Font("Courier New", 8.25F);
@@ -154,5 +153,4 @@
       // HiveResourceSelector
       // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
       this.Controls.Add(this.resourcesGroupBox);
Index: branches/HiveProjectManagement/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelector.cs
===================================================================
--- branches/HiveProjectManagement/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelector.cs	(revision 15377)
+++ branches/HiveProjectManagement/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelector.cs	(revision 15401)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2017 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -24,7 +24,5 @@
 using System.Drawing;
 using System.Linq;
-using System.Text;
 using System.Windows.Forms;
-using HeuristicLab.Clients.Hive.JobManager.ExtensionMethods;
 using HeuristicLab.Core;
 using HeuristicLab.Core.Views;
@@ -33,40 +31,44 @@
 
 namespace HeuristicLab.Clients.Hive.JobManager.Views {
-  [View("Hive Resource Selector View")]
-  [Content(typeof(IItemList<Resource>), true)]
-  public partial class HiveResourceSelector : ItemView, IDisposable {
-    private const int slaveImageIndex = 0;
-    private const int slaveGroupImageIndex = 1;
+  [View("Hive Project Selector View")]
+  [Content(typeof(IItemList<Project>), true)]
+  public partial class HiveProjectSelector : ItemView, IDisposable {
+    private const int greenFlagImageIndex = 0;
+    private const int redFlagImageIndex = 1;
     private string currentSearchString;
     private ISet<TreeNode> mainTreeNodes;
     private ISet<TreeNode> filteredTreeNodes;
     private ISet<TreeNode> nodeStore;
-    
-    private ISet<Resource> selectedResources;
-    public ISet<Resource> SelectedResources {
+
+    private ISet<Project> selectedResources;
+    public ISet<Project> SelectedResources {
       get { return selectedResources; }
       set { selectedResources = value; }
     }
 
-    public new IItemList<Resource> Content {
-      get { return (IItemList<Resource>)base.Content; }
+    public Project SelectedProject {
+      get { return (Project)resourcesTreeView.SelectedNode.Tag; }
+    }
+
+    public new IItemList<Project> Content {
+      get { return (IItemList<Project>)base.Content; }
       set { base.Content = value; }
     }
 
-    public HiveResourceSelector() {
+    public HiveProjectSelector() {
       InitializeComponent();
       mainTreeNodes = new HashSet<TreeNode>();
       filteredTreeNodes = new HashSet<TreeNode>();
       nodeStore = new HashSet<TreeNode>();
-      selectedResources = new HashSet<Resource>();
-      imageList.Images.Add(HeuristicLab.Common.Resources.VSImageLibrary.MonitorLarge);
-      imageList.Images.Add(HeuristicLab.Common.Resources.VSImageLibrary.NetworkCenterLarge);
-    }
-  
+      selectedResources = new HashSet<Project>();
+      imageList.Images.Add(HeuristicLab.Common.Resources.VSImageLibrary.FlagGreen);
+      imageList.Images.Add(HeuristicLab.Common.Resources.VSImageLibrary.FlagRed);
+    }
+
     public void StartProgressView() {
       if (InvokeRequired) {
         Invoke(new Action(StartProgressView));
       } else {
-        var message = "Downloading resources. Please be patient.";
+        var message = "Downloading projects. Please be patient.";
         MainFormManager.GetMainForm<HeuristicLab.MainForm.WindowsForms.MainForm>().AddOperationProgressToView(this, message);
       }
@@ -85,5 +87,5 @@
 
       if (Content != null) {
-        selectedResources = new HashSet<Resource>(Content.Where(x => selectedResources.Any(y => x.Id == y.Id)));
+        selectedResources = new HashSet<Project>(Content.Where(x => selectedResources.Any(y => x.Id == y.Id)));
         UpdateMainTree();
         ExtractStatistics();
@@ -98,19 +100,17 @@
       mainTreeNodes.Clear();
 
-      foreach (Resource g in Content) {
-        if (g.GetType() == typeof(SlaveGroup)) {
-          //root node
-          if (g.ParentResourceId == null) {
-            TreeNode tn = new TreeNode();
-            tn.ImageIndex = slaveGroupImageIndex;
-            tn.SelectedImageIndex = tn.ImageIndex;
-
-            tn.Tag = g;
-            tn.Text = g.Name;
-            tn.Checked = selectedResources.Any(x => x.Id == g.Id);
-
-            BuildMainTree(tn);
-            mainTreeNodes.Add(tn);
-          }
+      foreach (Project g in Content.OrderBy(x => x.Name)) {
+        //root node
+        if (g.ParentProjectId == null) {
+          TreeNode tn = new TreeNode();
+          tn.ImageIndex = greenFlagImageIndex;
+          tn.SelectedImageIndex = tn.ImageIndex;
+
+          tn.Tag = g;
+          tn.Text = g.Name;
+          tn.Checked = selectedResources.Any(x => x.Id == g.Id);
+
+          BuildMainTree(tn);
+          mainTreeNodes.Add(tn);
         }
       }
@@ -119,8 +119,7 @@
 
     private void BuildMainTree(TreeNode tn) {
-      foreach (Resource r in Content.Where(s => s.ParentResourceId != null && s.ParentResourceId == ((Resource)tn.Tag).Id)) {
+      foreach (Project r in Content.Where(s => s.ParentProjectId != null && s.ParentProjectId == ((Project)tn.Tag).Id).OrderBy(x => x.Name)) {
         TreeNode stn = new TreeNode(r.Name);
-        if (r is Slave) stn.ImageIndex = slaveImageIndex;
-        else if (r is SlaveGroup) stn.ImageIndex = slaveGroupImageIndex;
+        stn.ImageIndex = redFlagImageIndex;
         stn.SelectedImageIndex = stn.ImageIndex;
         stn.Tag = r;
@@ -139,5 +138,5 @@
       foreach (TreeNode n in mainTreeNodes) {
         n.BackColor = SystemColors.Window;
-        if (currentSearchString == null || ((Resource)n.Tag).Name.ToLower().Contains(currentSearchString)) {
+        if (currentSearchString == null || ((Project)n.Tag).Name.ToLower().Contains(currentSearchString)) {
           n.BackColor = string.IsNullOrEmpty(currentSearchString) ? SystemColors.Window : Color.LightBlue;
           filteredTreeNodes.Add(n);
@@ -162,5 +161,5 @@
 
       foreach (TreeNode node in filteredTreeNodes) {
-        var clone = nodeStore.SingleOrDefault(x => ((Resource)x.Tag).Id == ((Resource)node.Tag).Id);
+        var clone = nodeStore.SingleOrDefault(x => ((Project)x.Tag).Id == ((Project)node.Tag).Id);
         if (clone == null) {
           clone = (TreeNode)node.Clone();
@@ -169,6 +168,6 @@
         }
         foreach (TreeNode child in node.Nodes)
-          if (filteredTreeNodes.Any(x => ((Resource)x.Tag).Id == ((Resource)child.Tag).Id)) {
-            var childClone = nodeStore.SingleOrDefault(x => ((Resource)x.Tag).Id == ((Resource)child.Tag).Id);
+          if (filteredTreeNodes.Any(x => ((Project)x.Tag).Id == ((Project)child.Tag).Id)) {
+            var childClone = nodeStore.SingleOrDefault(x => ((Project)x.Tag).Id == ((Project)child.Tag).Id);
             if (childClone == null) {
               childClone = (TreeNode)child.Clone();
@@ -179,5 +178,5 @@
           }
       }
-      resourcesTreeView.Nodes.AddRange(nodeStore.Where(x => ((Resource)x.Tag).ParentResourceId == null).ToArray());
+      resourcesTreeView.Nodes.AddRange(nodeStore.Where(x => ((Project)x.Tag).ParentProjectId == null).ToArray());
       if (string.IsNullOrEmpty(currentSearchString)) ExpandSlaveGroupNodes();
       else resourcesTreeView.ExpandAll();
@@ -187,14 +186,14 @@
     #region Events
     private void resourcesTreeView_AfterCheck(object sender, TreeViewEventArgs e) {
-      if (e.Action != TreeViewAction.Unknown) {
-        if (e.Node.Checked) {
-          IncludeChildNodes(mainTreeNodes.SingleOrDefault(x => ((Resource)x.Tag).Id == ((Resource)e.Node.Tag).Id));
-          IncludeParentNodes(mainTreeNodes.SingleOrDefault(x => ((Resource)x.Tag).Id == ((Resource)e.Node.Tag).Id));
-        } else {
-          ExcludeChildNodes(mainTreeNodes.SingleOrDefault(x => ((Resource)x.Tag).Id == ((Resource)e.Node.Tag).Id));
-          ExcludeParentNodes(mainTreeNodes.SingleOrDefault(x => ((Resource)x.Tag).Id == ((Resource)e.Node.Tag).Id));
-        }
-        ExtractStatistics();
-      }
+      //if (e.Action != TreeViewAction.Unknown) {
+      //  if (e.Node.Checked) {
+      //    IncludeChildNodes(mainTreeNodes.SingleOrDefault(x => ((Project)x.Tag).Id == ((Project)e.Node.Tag).Id));
+      //    IncludeParentNodes(mainTreeNodes.SingleOrDefault(x => ((Project)x.Tag).Id == ((Project)e.Node.Tag).Id));
+      //  } else {
+      //    ExcludeChildNodes(mainTreeNodes.SingleOrDefault(x => ((Project)x.Tag).Id == ((Project)e.Node.Tag).Id));
+      //    ExcludeParentNodes(mainTreeNodes.SingleOrDefault(x => ((Project)x.Tag).Id == ((Project)e.Node.Tag).Id));
+      //  }
+      //  ExtractStatistics();
+      //}
     }
 
@@ -212,50 +211,4 @@
 
     #region Helpers
-    private void IncludeChildNodes(TreeNode node) {
-      if (node != null) {
-        node.Checked = true;
-        selectedResources.Add((Resource)node.Tag);
-        AdjustNodeCheckedState(node);
-        foreach (TreeNode n in node.Nodes) IncludeChildNodes(n);
-      }
-    }
-
-    private void IncludeParentNodes(TreeNode node) {
-      if (node != null && node.Parent != null) {
-        TreeNode parent = node.Parent;
-        if (parent.Nodes.OfType<TreeNode>().All(x => x.Checked)) {
-          parent.Checked = true;
-          selectedResources.Add((Resource)parent.Tag);
-          AdjustNodeCheckedState(parent);
-          IncludeParentNodes(parent);
-        }
-      }
-    }
-
-    private void ExcludeChildNodes(TreeNode node) {
-      if (node != null) {
-        node.Checked = false;
-        selectedResources.Remove((Resource)node.Tag);
-        AdjustNodeCheckedState(node);
-        foreach (TreeNode n in node.Nodes) ExcludeChildNodes(n);
-      }
-    }
-
-    private void ExcludeParentNodes(TreeNode node) {
-      if (node != null) {
-        node.Checked = false;
-        selectedResources.Remove((Resource)node.Tag);
-        AdjustNodeCheckedState(node);
-        ExcludeParentNodes(node.Parent);
-      }
-    }
-
-    private void AdjustNodeCheckedState(TreeNode node) {
-      var filterdNode = filteredTreeNodes.SingleOrDefault(x => ((Resource)x.Tag).Id == ((Resource)node.Tag).Id);
-      var storedNode = nodeStore.SingleOrDefault(x => ((Resource)x.Tag).Id == ((Resource)node.Tag).Id);
-      if (filterdNode != null) filterdNode.Checked = node.Checked;
-      if (storedNode != null) storedNode.Checked = node.Checked;
-    }
-
     private void ExpandSlaveGroupNodes() {
       foreach (TreeNode n in nodeStore.Where(x => x.Tag is SlaveGroup)) {
@@ -267,61 +220,61 @@
 
     private void ExtractStatistics(TreeNode treeNode = null) {
-      StringBuilder sb = new StringBuilder();
-      Resource resource = treeNode == null ? null : treeNode.Tag as Resource;
-      ISet<Resource> resources = treeNode == null ? selectedResources : new HashSet<Resource>(treeNode.DescendantNodes().Select(x => x.Tag as Resource)); ;
-      IEnumerable<SlaveGroup> slaveGroups = resources.OfType<SlaveGroup>();
-      IEnumerable<Slave> slaves = resources.OfType<Slave>();
-      int cpuSpeed = 0, cores = 0, freeCores = 0, memory = 0, freeMemory = 0;
-      string contextString = treeNode == null ? "Selected" : "Included";
-
-      if (resources.Any() || resource != null) {
-        foreach (Slave s in slaves) {
-          cpuSpeed += s.CpuSpeed.GetValueOrDefault();
-          cores += s.Cores.GetValueOrDefault();
-          freeCores += s.FreeCores.GetValueOrDefault();
-          memory += s.Memory.GetValueOrDefault();
-          freeMemory += s.FreeMemory.GetValueOrDefault();
-        }
-        if (resource != null) {
-          if (resource is SlaveGroup) sb.Append("Slave group: ");
-          else if (resource is Slave) {
-            sb.Append("Slave: ");
-            if (!resources.Any()) {
-              Slave s = resource as Slave;
-              cpuSpeed = s.CpuSpeed.GetValueOrDefault();
-              cores = s.Cores.GetValueOrDefault();
-              freeCores = s.FreeCores.GetValueOrDefault();
-              memory = s.Memory.GetValueOrDefault();
-              freeMemory = s.FreeMemory.GetValueOrDefault();
-            }
-          }
-          sb.AppendLine(string.Format("{0}", resource.Name));
-        }
-        if (resource == null || resource is SlaveGroup) {
-          if (resources.Any()) {
-            sb.AppendFormat("{0} slave groups ({1}): ", contextString, slaveGroups.Count());
-            foreach (SlaveGroup sg in slaveGroups) sb.AppendFormat("{0}; ", sg.Name);
-            sb.AppendLine();
-            sb.AppendFormat("{0} slaves ({1}): ", contextString, slaves.Count());
-            foreach (Slave s in slaves) sb.AppendFormat("{0}; ", s.Name);
-            sb.AppendLine();
-          } else {
-            sb.Append("The selection does not inlcude any further resources.");
-          }
-        }
-        sb.AppendLine();
-        sb.AppendLine(string.Format("CPU speed: {0} MHz", cpuSpeed));
-        if (resources.Any()) sb.AppendLine(string.Format("Avg. CPU speed: {0:0.00} MHz", (double)cpuSpeed / resources.Count()));
-        sb.AppendLine(string.Format("Cores: {0}", cores));
-        sb.AppendLine(string.Format("Free cores: {0}", freeCores));
-        if (resources.Any()) sb.AppendLine(string.Format("Avg. free cores: {0:0.00}", (double)freeCores / resources.Count()));
-        sb.AppendLine(string.Format("Memory: {0} MB", memory));
-        sb.AppendFormat("Free memory: {0} MB", freeMemory);
-        if (resources.Any()) sb.Append(string.Format("{0}Avg. free memory: {1:0.00} MB", Environment.NewLine, (double)freeMemory / resources.Count()));
-      } else {
-        sb.Append("No resources selected.");
-      }
-
-      descriptionTextBox.Text = sb.ToString();
+      //StringBuilder sb = new StringBuilder();
+      //Resource resource = treeNode == null ? null : treeNode.Tag as Resource;
+      //ISet<Resource> resources = treeNode == null ? selectedResources : new HashSet<Resource>(treeNode.DescendantNodes().Select(x => x.Tag as Resource)); ;
+      //IEnumerable<SlaveGroup> slaveGroups = resources.OfType<SlaveGroup>();
+      //IEnumerable<Slave> slaves = resources.OfType<Slave>();
+      //int cpuSpeed = 0, cores = 0, freeCores = 0, memory = 0, freeMemory = 0;
+      //string contextString = treeNode == null ? "Selected" : "Included";
+
+      //if (resources.Any() || resource != null) {
+      //  foreach (Slave s in slaves) {
+      //    cpuSpeed += s.CpuSpeed.GetValueOrDefault();
+      //    cores += s.Cores.GetValueOrDefault();
+      //    freeCores += s.FreeCores.GetValueOrDefault();
+      //    memory += s.Memory.GetValueOrDefault();
+      //    freeMemory += s.FreeMemory.GetValueOrDefault();
+      //  }
+      //  if (resource != null) {
+      //    if (resource is SlaveGroup) sb.Append("Slave group: ");
+      //    else if (resource is Slave) {
+      //      sb.Append("Slave: ");
+      //      if (!resources.Any()) {
+      //        Slave s = resource as Slave;
+      //        cpuSpeed = s.CpuSpeed.GetValueOrDefault();
+      //        cores = s.Cores.GetValueOrDefault();
+      //        freeCores = s.FreeCores.GetValueOrDefault();
+      //        memory = s.Memory.GetValueOrDefault();
+      //        freeMemory = s.FreeMemory.GetValueOrDefault();
+      //      }
+      //    }
+      //    sb.AppendLine(string.Format("{0}", resource.Name));
+      //  }
+      //  if (resource == null || resource is SlaveGroup) {
+      //    if (resources.Any()) {
+      //      sb.AppendFormat("{0} slave groups ({1}): ", contextString, slaveGroups.Count());
+      //      foreach (SlaveGroup sg in slaveGroups) sb.AppendFormat("{0}; ", sg.Name);
+      //      sb.AppendLine();
+      //      sb.AppendFormat("{0} slaves ({1}): ", contextString, slaves.Count());
+      //      foreach (Slave s in slaves) sb.AppendFormat("{0}; ", s.Name);
+      //      sb.AppendLine();
+      //    } else {
+      //      sb.Append("The selection does not inlcude any further resources.");
+      //    }
+      //  }
+      //  sb.AppendLine();
+      //  sb.AppendLine(string.Format("CPU speed: {0} MHz", cpuSpeed));
+      //  if (resources.Any()) sb.AppendLine(string.Format("Avg. CPU speed: {0:0.00} MHz", (double)cpuSpeed / resources.Count()));
+      //  sb.AppendLine(string.Format("Cores: {0}", cores));
+      //  sb.AppendLine(string.Format("Free cores: {0}", freeCores));
+      //  if (resources.Any()) sb.AppendLine(string.Format("Avg. free cores: {0:0.00}", (double)freeCores / resources.Count()));
+      //  sb.AppendLine(string.Format("Memory: {0} MB", memory));
+      //  sb.AppendFormat("Free memory: {0} MB", freeMemory);
+      //  if (resources.Any()) sb.Append(string.Format("{0}Avg. free memory: {1:0.00} MB", Environment.NewLine, (double)freeMemory / resources.Count()));
+      //} else {
+      //  sb.Append("No resources selected.");
+      //}
+
+      //descriptionTextBox.Text = sb.ToString();
     }
     #endregion
Index: branches/HiveProjectManagement/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelectorDialog.Designer.cs
===================================================================
--- branches/HiveProjectManagement/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelectorDialog.Designer.cs	(revision 15377)
+++ branches/HiveProjectManagement/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelectorDialog.Designer.cs	(revision 15401)
@@ -45,9 +45,8 @@
     /// </summary>
     private void InitializeComponent() {
-      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HiveResourceSelectorDialog));
       this.okButton = new System.Windows.Forms.Button();
       this.cancelButton = new System.Windows.Forms.Button();
       this.refreshButton = new System.Windows.Forms.Button();
-      this.hiveResourceSelector = new HeuristicLab.Clients.Hive.JobManager.Views.HiveResourceSelector();
+      this.hiveResourceSelector = new HeuristicLab.Clients.Hive.JobManager.Views.HiveProjectSelector();
       this.SuspendLayout();
       // 
@@ -87,6 +86,6 @@
       // hiveResourceSelector
       // 
-      this.hiveResourceSelector.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-            | System.Windows.Forms.AnchorStyles.Left)
+      this.hiveResourceSelector.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
             | System.Windows.Forms.AnchorStyles.Right)));
       this.hiveResourceSelector.Caption = "View";
@@ -101,5 +100,4 @@
       // 
       this.AcceptButton = this.okButton;
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
       this.CancelButton = this.cancelButton;
@@ -115,5 +113,5 @@
       this.ShowInTaskbar = false;
       this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
-      this.Text = "Select Resources";
+      this.Text = "Select Project";
       this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.HiveResourceSelectorDialog_FormClosing);
       this.Load += new System.EventHandler(this.HiveResourceSelectorDialog_Load);
@@ -126,5 +124,5 @@
     protected System.Windows.Forms.Button okButton;
     protected System.Windows.Forms.Button cancelButton;
-    protected HiveResourceSelector hiveResourceSelector;
+    protected HiveProjectSelector hiveResourceSelector;
     protected System.Windows.Forms.Button refreshButton;
   }
Index: branches/HiveProjectManagement/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelectorDialog.cs
===================================================================
--- branches/HiveProjectManagement/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelectorDialog.cs	(revision 15377)
+++ branches/HiveProjectManagement/HeuristicLab.Clients.Hive.JobManager/3.3/Views/HiveResourceSelectorDialog.cs	(revision 15401)
@@ -31,5 +31,6 @@
     }
 
-    public ISet<Resource> GetSelectedResources() { return hiveResourceSelector.SelectedResources; }
+    public ISet<Project> GetSelectedResources() { return hiveResourceSelector.SelectedResources; }
+    public Project SelectedProject { get { return hiveResourceSelector.SelectedProject; } }
 
     private void HiveResourceSelectorDialog_Load(object sender, System.EventArgs e) {
@@ -43,5 +44,5 @@
 
     void Instance_Refreshed(object sender, System.EventArgs e) {
-      hiveResourceSelector.Content = HiveAdminClient.Instance.Resources;
+      hiveResourceSelector.Content = HiveAdminClient.Instance.Projects;
     }
 
Index: branches/HiveProjectManagement/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs
===================================================================
--- branches/HiveProjectManagement/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs	(revision 15377)
+++ branches/HiveProjectManagement/HeuristicLab.Clients.Hive.JobManager/3.3/Views/RefreshableHiveJobView.cs	(revision 15401)
@@ -130,5 +130,5 @@
           nameTextBox.Text = Content.Job.Name;
           executionTimeTextBox.Text = Content.ExecutionTime.ToString();
-          resourceNamesTextBox.Text = Content.Job.ResourceNames;
+          //resourceNamesTextBox.Text = Content.Job.ResourceNames;
           refreshAutomaticallyCheckBox.Checked = Content.RefreshAutomatically;
           logView.Content = Content.Log;
@@ -337,11 +337,15 @@
       if (hiveResourceSelectorDialog.ShowDialog(this) == DialogResult.OK) {
         StringBuilder sb = new StringBuilder();
-        foreach (Resource resource in hiveResourceSelectorDialog.GetSelectedResources()) {
-          sb.Append(resource.Name);
-          sb.Append(";");
-        }
-        resourceNamesTextBox.Text = sb.ToString();
-        if (Content.Job.ResourceNames != resourceNamesTextBox.Text)
-          Content.Job.ResourceNames = resourceNamesTextBox.Text;
+        //foreach (Project resource in hiveResourceSelectorDialog.GetSelectedResources()) {
+        //  sb.Append(resource.Name);
+        //  sb.Append(";");
+        //}
+        //resourceNamesTextBox.Text = sb.ToString();
+        //if (Content.Job.ResourceNames != resourceNamesTextBox.Text)
+        //  Content.Job.ResourceNames = resourceNamesTextBox.Text;
+        var selectedProject = hiveResourceSelectorDialog.SelectedProject;
+        resourceNamesTextBox.Text = selectedProject.Name;
+        if (Content.Job.ProjectId != selectedProject.Id)
+          Content.Job.ProjectId = selectedProject.Id;
       }
     }
@@ -404,6 +408,6 @@
 
     private void resourceNamesTextBox_Validated(object sender, EventArgs e) {
-      if (!SuppressEvents && Content.Job != null && Content.Job.ResourceNames != resourceNamesTextBox.Text)
-        Content.Job.ResourceNames = resourceNamesTextBox.Text;
+      //if (!SuppressEvents && Content.Job != null && Content.Job.ResourceNames != resourceNamesTextBox.Text)
+      //  Content.Job.ResourceNames = resourceNamesTextBox.Text;
     }
 
