Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Convert.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Convert.cs	(revision 6725)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Convert.cs	(revision 6743)
@@ -27,8 +27,7 @@
 using DT = HeuristicLab.Services.Hive.DataTransfer;
 
-
 namespace HeuristicLab.Services.Hive.DataTransfer {
   public static class Convert {
-    #region Job
+    #region Task
     public static DT.Task ToDto(DB.Task source) {
       if (source == null) return null;
@@ -47,5 +46,5 @@
         FinishWhenChildJobsFinished = source.FinishWhenChildJobsFinished,
         Command = Convert.ToDto(source.Command),
-        LastJobDataUpdate = (source.JobData == null ? DateTime.MinValue : source.JobData.LastUpdate),
+        LastTaskDataUpdate = (source.JobData == null ? DateTime.MinValue : source.JobData.LastUpdate),
         JobId = source.JobId,
         IsPrivileged = source.IsPrivileged
@@ -150,5 +149,5 @@
     #endregion
 
-    #region HiveExperimentPermission
+    #region JobPermission
     public static DT.JobPermission ToDto(DB.JobPermission source) {
       if (source == null) return null;
@@ -363,5 +362,4 @@
     }
     #endregion
-
 
     #region TaskData
@@ -433,5 +431,4 @@
     #endregion
 
-
     #region Command
     public static DT.Command? ToDto(DB.Command? source) {
@@ -462,5 +459,4 @@
         return null;
     }
-
     #endregion
 
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Heartbeat.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Heartbeat.cs	(revision 6725)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Heartbeat.cs	(revision 6743)
@@ -35,7 +35,7 @@
     public int FreeCores { get; set; }
     [DataMember]
-    public Dictionary<Guid, TimeSpan> JobProgress { get; set; } // TODO: define Type
+    public Dictionary<Guid, TimeSpan> JobProgress { get; set; }
     [DataMember]
-    public bool AssignJob { get; set; } // if false, the server will not assign a new job
+    public bool AssignJob { get; set; } // if false, the server will not assign a new task
     [DataMember]
     public float CpuUtilization { get; set; }
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/LightweightTask.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/LightweightTask.cs	(revision 6725)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/LightweightTask.cs	(revision 6743)
@@ -40,5 +40,5 @@
     public Command? Command { get; set; }
     [DataMember]
-    public DateTime LastJobDataUpdate { get; set; }
+    public DateTime LastTaskDataUpdate { get; set; }
 
     public StateLog CurrentStateLog { get { return StateLog.LastOrDefault(); } }
@@ -50,12 +50,12 @@
     }
 
-    public LightweightTask(Task job) {
-      this.Id = job.Id;
-      this.ExecutionTime = job.ExecutionTime;
-      this.ParentTaskId = job.ParentTaskId;
-      this.StateLog = new List<StateLog>(job.StateLog);
-      this.State = job.State;
-      this.Command = job.Command;
-      this.LastJobDataUpdate = job.LastJobDataUpdate;
+    public LightweightTask(Task task) {
+      this.Id = task.Id;
+      this.ExecutionTime = task.ExecutionTime;
+      this.ParentTaskId = task.ParentTaskId;
+      this.StateLog = new List<StateLog>(task.StateLog);
+      this.State = task.State;
+      this.Command = task.Command;
+      this.LastTaskDataUpdate = task.LastTaskDataUpdate;
     }
   }
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Permission.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Permission.cs	(revision 6725)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Permission.cs	(revision 6743)
@@ -28,10 +28,10 @@
 
     /// <summary>
-    /// User can only download and view experiments
+    /// User can only download and view jobs
     /// </summary>
     Read,
 
     /// <summary>
-    /// User can pause, stop, restart, delete experiment. can also grant other 
+    /// User can pause, stop, restart, delete job. can also grant other 
     /// </summary>
     Full
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/TaskState.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/TaskState.cs	(revision 6725)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/TaskState.cs	(revision 6743)
@@ -26,5 +26,5 @@
   public enum TaskState {
     /// <summary>
-    /// A task is offline as long as he is not yet submitted to the hive
+    /// A task is offline as long as job is not yet submitted to the hive
     /// </summary>
     Offline,
@@ -68,5 +68,5 @@
   public static class TaskStateExtensions {
     /// <summary>
-    /// This job is not yet done
+    /// This task is not yet done
     /// </summary>
     public static bool IsActive(this TaskState taskState) {
@@ -75,5 +75,5 @@
 
     /// <summary>
-    /// This job is Waiting
+    /// This task is Waiting
     /// </summary>
     public static bool IsWaiting(this TaskState taskState) {
@@ -82,5 +82,5 @@
 
     /// <summary>
-    /// This job is Finished || Failed || Aborted
+    /// This task is Finished || Failed || Aborted
     /// </summary>
     public static bool IsDone(this TaskState taskState) {
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj	(revision 6725)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj	(revision 6743)
@@ -74,8 +74,4 @@
     <Reference Include="HeuristicLab.Common-3.3">
       <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Common.Resources-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Common.Resources-3.3.dll</HintPath>
     </Reference>
     <Reference Include="HeuristicLab.Core-3.3">
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HeuristicLabServicesHivePlugin.cs.frame
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HeuristicLabServicesHivePlugin.cs.frame	(revision 6725)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HeuristicLabServicesHivePlugin.cs.frame	(revision 6743)
@@ -29,6 +29,5 @@
   [Plugin("HeuristicLab.Services.Hive", "3.3.5.$WCREV$")]
   [PluginFile("HeuristicLab.Services.Hive-3.3.dll", PluginFileType.Assembly)]
-  [PluginDependency("HeuristicLab.Common", "3.3")]
-  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]  
   [PluginDependency("HeuristicLab.Core", "3.3")]
   [PluginDependency("HeuristicLab.Persistence", "3.3")]  
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HiveDao.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HiveDao.cs	(revision 6725)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HiveDao.cs	(revision 6743)
@@ -36,6 +36,6 @@
     public HiveDao() { }
 
-    #region Job Methods
-    public DT.Task GetJob(Guid id) {
+    #region Task Methods
+    public DT.Task GetTask(Guid id) {
       using (var db = CreateContext()) {
         return DT.Convert.ToDto(db.Tasks.SingleOrDefault(x => x.TaskId == id));
@@ -43,5 +43,5 @@
     }
 
-    public IEnumerable<DT.Task> GetJobs(Expression<Func<Task, bool>> predicate) {
+    public IEnumerable<DT.Task> GetTasks(Expression<Func<Task, bool>> predicate) {
       using (var db = CreateContext()) {
         return db.Tasks.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
@@ -49,5 +49,5 @@
     }
 
-    public Guid AddJob(DT.Task dto) {
+    public Guid AddTask(DT.Task dto) {
       using (var db = CreateContext()) {
         var entity = DT.Convert.ToEntity(dto);
@@ -62,5 +62,5 @@
     }
 
-    public void UpdateJob(DT.Task dto) {
+    public void UpdateTask(DT.Task dto) {
       using (var db = CreateContext()) {
         var entity = db.Tasks.FirstOrDefault(x => x.TaskId == dto.Id);
@@ -76,20 +76,20 @@
     }
 
-    public void DeleteJob(Guid id) {
+    public void DeleteTask(Guid id) {
       using (var db = CreateContext()) {
         var entity = db.Tasks.FirstOrDefault(x => x.TaskId == id);
         if (entity != null) db.Tasks.DeleteOnSubmit(entity);
-        db.SubmitChanges(); // JobData and child jobs are deleted by db-trigger
+        db.SubmitChanges(); // taskData and child tasks are deleted by db-trigger
       }
     }
 
     /// <summary>
-    /// returns all parent jobs which are waiting for their child jobs to finish
+    /// returns all parent tasks which are waiting for their child tasks to finish
     /// </summary>
-    /// <param name="resourceIds">list of resourceids which for which the jobs should be valid</param>
-    /// <param name="count">maximum number of jobs to return</param>
-    /// <param name="finished">if true, all parent jobs which have FinishWhenChildJobsFinished=true are returned, otherwise only FinishWhenChildJobsFinished=false are returned</param>
+    /// <param name="resourceIds">list of resourceids which for which the task should be valid</param>
+    /// <param name="count">maximum number of task to return</param>
+    /// <param name="finished">if true, all parent task which have FinishWhenChildJobsFinished=true are returned, otherwise only FinishWhenChildJobsFinished=false are returned</param>
     /// <returns></returns>
-    public IEnumerable<DT.Task> GetParentJobs(IEnumerable<Guid> resourceIds, int count, bool finished) {
+    public IEnumerable<DT.Task> GetParentTasks(IEnumerable<Guid> resourceIds, int count, bool finished) {
       using (var db = CreateContext()) {
         var query = from ar in db.AssignedResources
@@ -103,5 +103,5 @@
                                || child.State == TaskState.Aborted
                                || child.State == TaskState.Failed).All(x => x)
-                       && (from child in db.Tasks // avoid returning WaitForChildJobs jobs where no child-jobs exist (yet)
+                       && (from child in db.Tasks // avoid returning WaitForChildTasks task where no child-task exist (yet)
                            where child.ParentTaskId == ar.Task.TaskId
                            select child).Count() > 0
@@ -112,8 +112,8 @@
     }
 
-    public IEnumerable<DT.Task> GetWaitingJobs(DT.Slave slave, int count) {
+    public IEnumerable<DT.Task> GetWaitingTasks(DT.Slave slave, int count) {
       using (var db = CreateContext()) {
         var resourceIds = GetParentResources(slave.Id).Select(r => r.Id);
-        var waitingParentJobs = GetParentJobs(resourceIds, count, false);
+        var waitingParentJobs = GetParentTasks(resourceIds, count, false);
         if (count > 0 && waitingParentJobs.Count() >= count) return waitingParentJobs.Take(count).ToArray();
 
@@ -124,18 +124,18 @@
                        && ar.Task.CoresNeeded <= slave.FreeCores
                        && ar.Task.MemoryNeeded <= slave.FreeMemory
-                    orderby ar.Task.Priority descending, db.Random() // take random job to avoid the race condition that occurs when this method is called concurrently (the same job would be returned)
+                    orderby ar.Task.Priority descending, db.Random() // take random task to avoid the race condition that occurs when this method is called concurrently (the same task would be returned)
                     select DT.Convert.ToDto(ar.Task);
-        var waitingJobs = (count == 0 ? query : query.Take(count)).ToArray();
-        return waitingJobs.Union(waitingParentJobs).OrderByDescending(x => x.Priority);
-      }
-    }
-
-    public DT.Task UpdateJobState(Guid jobId, TaskState jobState, Guid? slaveId, Guid? userId, string exception) {
-      using (var db = CreateContext()) {
-        var job = db.Tasks.SingleOrDefault(x => x.TaskId == jobId);
-        job.State = jobState;
+        var waitingTasks = (count == 0 ? query : query.Take(count)).ToArray();
+        return waitingTasks.Union(waitingParentJobs).OrderByDescending(x => x.Priority);
+      }
+    }
+
+    public DT.Task UpdateTaskState(Guid taskId, TaskState taskState, Guid? slaveId, Guid? userId, string exception) {
+      using (var db = CreateContext()) {
+        var job = db.Tasks.SingleOrDefault(x => x.TaskId == taskId);
+        job.State = taskState;
         db.StateLogs.InsertOnSubmit(new StateLog {
-          TaskId = jobId,
-          State = jobState,
+          TaskId = taskId,
+          State = taskState,
           SlaveId = slaveId,
           UserId = userId,
@@ -144,5 +144,5 @@
         });
         db.SubmitChanges();
-        job = db.Tasks.SingleOrDefault(x => x.TaskId == jobId);
+        job = db.Tasks.SingleOrDefault(x => x.TaskId == taskId);
         return DT.Convert.ToDto(job);
       }
@@ -151,5 +151,5 @@
 
     #region TaskData Methods
-    public DT.TaskData GetJobData(Guid id) {
+    public DT.TaskData GetTaskData(Guid id) {
       using (var db = CreateContext(true)) {
         return DT.Convert.ToDto(db.TaskDatas.SingleOrDefault(x => x.TaskId == id));
@@ -157,5 +157,5 @@
     }
 
-    public IEnumerable<DT.TaskData> GetJobDatas(Expression<Func<TaskData, bool>> predicate) {
+    public IEnumerable<DT.TaskData> GetTaskDatas(Expression<Func<TaskData, bool>> predicate) {
       using (var db = CreateContext(true)) {
         return db.TaskDatas.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
@@ -163,5 +163,5 @@
     }
 
-    public Guid AddJobData(DT.TaskData dto) {
+    public Guid AddTaskData(DT.TaskData dto) {
       using (var db = CreateContext(true)) {
         var entity = DT.Convert.ToEntity(dto);
@@ -172,5 +172,5 @@
     }
 
-    public void UpdateJobData(DT.TaskData dto) {
+    public void UpdateTaskData(DT.TaskData dto) {
       using (var db = CreateContext(true)) {
         var entity = db.TaskDatas.FirstOrDefault(x => x.TaskId == dto.TaskId);
@@ -181,5 +181,5 @@
     }
 
-    public void DeleteJobData(Guid id) {
+    public void DeleteTaskData(Guid id) {
       using (var db = CreateContext()) {
         var entity = db.TaskDatas.FirstOrDefault(x => x.TaskId == id); // check if all the byte[] is loaded into memory here. otherwise work around to delete without loading it
@@ -231,5 +231,5 @@
 
     #region Job Methods
-    public DT.Job GetHiveExperiment(Guid id) {
+    public DT.Job GetJob(Guid id) {
       using (var db = CreateContext()) {
         return AddStatsToExperiment(db, DT.Convert.ToDto(db.Jobs.SingleOrDefault(x => x.JobId == id)));
@@ -248,5 +248,5 @@
     }
 
-    public IEnumerable<DT.Job> GetHiveExperiments(Expression<Func<Job, bool>> predicate) {
+    public IEnumerable<DT.Job> GetJobs(Expression<Func<Job, bool>> predicate) {
       using (var db = CreateContext()) {
         return db.Jobs.Where(predicate).Select(x => AddStatsToExperiment(db, DT.Convert.ToDto(x))).ToArray();
@@ -254,5 +254,5 @@
     }
 
-    public Guid AddHiveExperiment(DT.Job dto) {
+    public Guid AddJob(DT.Job dto) {
       using (var db = CreateContext()) {
         var entity = DT.Convert.ToEntity(dto);
@@ -263,5 +263,5 @@
     }
 
-    public void UpdateHiveExperiment(DT.Job dto) {
+    public void UpdateJob(DT.Job dto) {
       using (var db = CreateContext()) {
         var entity = db.Jobs.FirstOrDefault(x => x.JobId == dto.Id);
@@ -272,5 +272,5 @@
     }
 
-    public void DeleteHiveExperiment(Guid id) {
+    public void DeleteJob(Guid id) {
       using (var db = CreateContext()) {
         var entity = db.Jobs.FirstOrDefault(x => x.JobId == id);
@@ -282,11 +282,11 @@
 
     #region JobPermission Methods
-    public DT.JobPermission GetHiveExperimentPermission(Guid hiveExperimentId, Guid grantedUserId) {
-      using (var db = CreateContext()) {
-        return DT.Convert.ToDto(db.JobPermissions.SingleOrDefault(x => x.JobId == hiveExperimentId && x.GrantedUserId == grantedUserId));
-      }
-    }
-
-    public IEnumerable<DT.JobPermission> GetHiveExperimentPermissions(Expression<Func<JobPermission, bool>> predicate) {
+    public DT.JobPermission GetJobPermission(Guid jobId, Guid grantedUserId) {
+      using (var db = CreateContext()) {
+        return DT.Convert.ToDto(db.JobPermissions.SingleOrDefault(x => x.JobId == jobId && x.GrantedUserId == grantedUserId));
+      }
+    }
+
+    public IEnumerable<DT.JobPermission> GetJobPermissions(Expression<Func<JobPermission, bool>> predicate) {
       using (var db = CreateContext()) {
         return db.JobPermissions.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
@@ -294,5 +294,5 @@
     }
 
-    public void AddHiveExperimentPermission(DT.JobPermission dto) {
+    public void AddJobPermission(DT.JobPermission dto) {
       using (var db = CreateContext()) {
         var entity = DT.Convert.ToEntity(dto);
@@ -302,5 +302,5 @@
     }
 
-    public void UpdateHiveExperimentPermission(DT.JobPermission dto) {
+    public void UpdateJobPermission(DT.JobPermission dto) {
       using (var db = CreateContext()) {
         var entity = db.JobPermissions.FirstOrDefault(x => x.JobId == dto.JobId && x.GrantedUserId == dto.GrantedUserId);
@@ -311,7 +311,7 @@
     }
 
-    public void DeleteHiveExperimentPermission(Guid hiveExperimentId, Guid grantedUserId) {
-      using (var db = CreateContext()) {
-        var entity = db.JobPermissions.FirstOrDefault(x => x.JobId == hiveExperimentId && x.GrantedUserId == grantedUserId);
+    public void DeleteJobPermission(Guid jobId, Guid grantedUserId) {
+      using (var db = CreateContext()) {
+        var entity = db.JobPermissions.FirstOrDefault(x => x.JobId == jobId && x.GrantedUserId == grantedUserId);
         if (entity != null) db.JobPermissions.DeleteOnSubmit(entity);
         db.SubmitChanges();
@@ -322,21 +322,21 @@
     /// Sets the permissions for a experiment. makes sure that only one permission per user exists.
     /// </summary>
-    public void SetHiveExperimentPermission(Guid hiveExperimentId, Guid grantedByUserId, Guid grantedUserId, Permission permission) {
-      using (var db = CreateContext()) {
-        JobPermission hiveExperimentPermission = db.JobPermissions.SingleOrDefault(x => x.JobId == hiveExperimentId && x.GrantedUserId == grantedUserId);
-        if (hiveExperimentPermission != null) {
+    public void SetJobPermission(Guid jobId, Guid grantedByUserId, Guid grantedUserId, Permission permission) {
+      using (var db = CreateContext()) {
+        JobPermission jobPermission = db.JobPermissions.SingleOrDefault(x => x.JobId == jobId && x.GrantedUserId == grantedUserId);
+        if (jobPermission != null) {
           if (permission == Permission.NotAllowed) {
             // not allowed, delete
-            db.JobPermissions.DeleteOnSubmit(hiveExperimentPermission);
+            db.JobPermissions.DeleteOnSubmit(jobPermission);
           } else {
             // update
-            hiveExperimentPermission.Permission = permission;
-            hiveExperimentPermission.GrantedByUserId = grantedByUserId; // update grantedByUserId, always the last "granter" is stored
+            jobPermission.Permission = permission;
+            jobPermission.GrantedByUserId = grantedByUserId; // update grantedByUserId, always the last "granter" is stored
           }
         } else {
           // insert
           if (permission != Permission.NotAllowed) {
-            hiveExperimentPermission = new JobPermission() { JobId = hiveExperimentId, GrantedByUserId = grantedByUserId, GrantedUserId = grantedUserId, Permission = permission };
-            db.JobPermissions.InsertOnSubmit(hiveExperimentPermission);
+            jobPermission = new JobPermission() { JobId = jobId, GrantedByUserId = grantedByUserId, GrantedUserId = grantedUserId, Permission = permission };
+            db.JobPermissions.InsertOnSubmit(jobPermission);
           }
         }
@@ -613,23 +613,23 @@
 
     #region Authorization Methods
+    public Permission GetPermissionForTask(Guid taskId, Guid userId) {
+      using (var db = CreateContext()) {
+        return GetPermissionForJob(GetJobForTask(taskId), userId);
+      }
+    }
+
     public Permission GetPermissionForJob(Guid jobId, Guid userId) {
       using (var db = CreateContext()) {
-        return GetPermissionForExperiment(GetExperimentForJob(jobId), userId);
-      }
-    }
-
-    public Permission GetPermissionForExperiment(Guid experimentId, Guid userId) {
-      using (var db = CreateContext()) {
-        Job hiveExperiment = db.Jobs.SingleOrDefault(x => x.JobId == experimentId);
-        if (hiveExperiment == null) return Permission.NotAllowed;
-        if (hiveExperiment.OwnerUserId == userId) return Permission.Full;
-        JobPermission permission = db.JobPermissions.SingleOrDefault(p => p.JobId == experimentId && p.GrantedUserId == userId);
+        Job job = db.Jobs.SingleOrDefault(x => x.JobId == jobId);
+        if (job == null) return Permission.NotAllowed;
+        if (job.OwnerUserId == userId) return Permission.Full;
+        JobPermission permission = db.JobPermissions.SingleOrDefault(p => p.JobId == jobId && p.GrantedUserId == userId);
         return permission != null ? permission.Permission : Permission.NotAllowed;
       }
     }
 
-    public Guid GetExperimentForJob(Guid jobId) {
-      using (var db = CreateContext()) {
-        return db.Tasks.Single(j => j.TaskId == jobId).JobId;
+    public Guid GetJobForTask(Guid taskId) {
+      using (var db = CreateContext()) {
+        return db.Tasks.Single(j => j.TaskId == taskId).JobId;
       }
     }
@@ -765,5 +765,5 @@
         }
 
-        // execution times only of finished jobs - necessary to compute efficieny
+        // execution times only of finished task - necessary to compute efficieny
         var executionTimesFinishedJobs = from job in db.Tasks
                                          where job.State == TaskState.Finished
@@ -778,5 +778,5 @@
         }
 
-        // start to end times only of finished jobs - necessary to compute efficiency
+        // start to end times only of finished task - necessary to compute efficiency
         var startToEndTimesFinishedJobs = from job in db.Tasks
                                           where job.State == TaskState.Finished
@@ -817,10 +817,10 @@
 
     #region Helpers
-    private void CollectChildJobs(HiveDataContext db, Guid parentJobId, List<Task> collection) {
-      var jobs = db.Tasks.Where(j => j.ParentTaskId == parentJobId);
-      foreach (var job in jobs) {
-        collection.Add(job);
-        if (job.IsParentTask)
-          CollectChildJobs(db, job.TaskId, collection);
+    private void CollectChildTasks(HiveDataContext db, Guid parentTaskId, List<Task> collection) {
+      var tasks = db.Tasks.Where(j => j.ParentTaskId == parentTaskId);
+      foreach (var task in tasks) {
+        collection.Add(task);
+        if (task.IsParentTask)
+          CollectChildTasks(db, task.TaskId, collection);
       }
     }
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HiveService.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HiveService.cs	(revision 6725)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HiveService.cs	(revision 6743)
@@ -61,151 +61,151 @@
 
     #region Job Methods
-    public Guid AddJob(Task job, TaskData jobData, IEnumerable<Guid> resourceIds) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
-      return trans.UseTransaction(() => {
-        job.Id = dao.AddJob(job);
-        jobData.TaskId = job.Id;
-        jobData.LastUpdate = DateTime.Now;
+    public Guid AddTask(Task task, TaskData taskData, IEnumerable<Guid> resourceIds) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      return trans.UseTransaction(() => {
+        task.Id = dao.AddTask(task);
+        taskData.TaskId = task.Id;
+        taskData.LastUpdate = DateTime.Now;
         foreach (Guid slaveGroupId in resourceIds) {
-          dao.AssignJobToResource(job.Id, slaveGroupId);
-        }
-        dao.AddJobData(jobData);
-        dao.UpdateJobState(job.Id, DA.TaskState.Waiting, null, userManager.CurrentUserId, null);
-        return jobData.TaskId;
+          dao.AssignJobToResource(task.Id, slaveGroupId);
+        }
+        dao.AddTaskData(taskData);
+        dao.UpdateTaskState(task.Id, DA.TaskState.Waiting, null, userManager.CurrentUserId, null);
+        return taskData.TaskId;
       }, false, true);
     }
 
-    public Guid AddChildJob(Guid parentJobId, Task job, TaskData jobData) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
-      return trans.UseTransaction(() => {
-        job.ParentTaskId = parentJobId;
-        return AddJob(job, jobData, dao.GetAssignedResources(parentJobId).Select(x => x.Id));
+    public Guid AddChildTask(Guid parentTaskId, Task task, TaskData taskData) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      return trans.UseTransaction(() => {
+        task.ParentTaskId = parentTaskId;
+        return AddTask(task, taskData, dao.GetAssignedResources(parentTaskId).Select(x => x.Id));
       }, false, true);
     }
 
-    public Task GetJob(Guid jobId) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+    public Task GetTask(Guid taskId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      author.AuthorizeForTask(taskId, Permission.Read);
+      return dao.GetTask(taskId);
+    }
+
+    public IEnumerable<Task> GetTasks() {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      var tasks = dao.GetTasks(x => true);
+      foreach (var task in tasks)
+        author.AuthorizeForTask(task.Id, Permission.Read);
+      return tasks;
+    }
+
+    public IEnumerable<LightweightTask> GetLightweightTasks(IEnumerable<Guid> taskIds) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      var tasks = dao.GetTasks(x => taskIds.Contains(x.TaskId)).Select(x => new LightweightTask(x)).ToArray();
+      foreach (var task in tasks)
+        author.AuthorizeForTask(task.Id, Permission.Read);
+      return tasks;
+    }
+
+    public IEnumerable<LightweightTask> GetLightweightChildTasks(Guid? parentTaskId, bool recursive, bool includeParent) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      var tasks = GetChildTasks(parentTaskId, recursive, includeParent).Select(x => new LightweightTask(x)).ToArray();
+      foreach (var task in tasks)
+        author.AuthorizeForTask(task.Id, Permission.Read);
+      return tasks;
+    }
+
+    public IEnumerable<LightweightTask> GetLightweightJobTasks(Guid jobId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
       author.AuthorizeForJob(jobId, Permission.Read);
-      return dao.GetJob(jobId);
-    }
-
-    public IEnumerable<Task> GetJobs() {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
-      var jobs = dao.GetJobs(x => true);
-      foreach (var job in jobs)
-        author.AuthorizeForJob(job.Id, Permission.Read);
-      return jobs;
-    }
-
-    public IEnumerable<LightweightTask> GetLightweightJobs(IEnumerable<Guid> jobIds) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
-      var jobs = dao.GetJobs(x => jobIds.Contains(x.TaskId)).Select(x => new LightweightTask(x)).ToArray();
-      foreach (var job in jobs)
-        author.AuthorizeForJob(job.Id, Permission.Read);
-      return jobs;
-    }
-
-    public IEnumerable<LightweightTask> GetLightweightChildJobs(Guid? parentJobId, bool recursive, bool includeParent) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
-      var jobs = GetChildJobs(parentJobId, recursive, includeParent).Select(x => new LightweightTask(x)).ToArray();
-      foreach (var job in jobs)
-        author.AuthorizeForJob(job.Id, Permission.Read);
-      return jobs;
-    }
-
-    public IEnumerable<LightweightTask> GetLightweightExperimentJobs(Guid experimentId) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
-      author.AuthorizeForExperiment(experimentId, Permission.Read);
-      return dao.GetJobs(x => x.JobId == experimentId).Select(x => new LightweightTask(x)).ToArray();
-    }
-
-    public TaskData GetJobData(Guid jobId) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
-      author.AuthorizeForJob(jobId, Permission.Read);
-      return dao.GetJobData(jobId);
-    }
-
-    public void UpdateJob(Task job) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
-      author.AuthorizeForJob(job.Id, Permission.Full);
-      trans.UseTransaction(() => {
-        dao.UpdateJob(job);
-      });
-    }
-
-    public void UpdateJobData(Task job, TaskData jobData) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
-      author.AuthorizeForJob(job.Id, Permission.Full);
-      author.AuthorizeForJob(jobData.TaskId, Permission.Full);
+      return dao.GetTasks(x => x.JobId == jobId).Select(x => new LightweightTask(x)).ToArray();
+    }
+
+    public TaskData GetTaskData(Guid taskId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      author.AuthorizeForTask(taskId, Permission.Read);
+      return dao.GetTaskData(taskId);
+    }
+
+    public void UpdateTask(Task taskDto) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      author.AuthorizeForTask(taskDto.Id, Permission.Full);
+      trans.UseTransaction(() => {
+        dao.UpdateTask(taskDto);
+      });
+    }
+
+    public void UpdateTaskData(Task task, TaskData taskData) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      author.AuthorizeForTask(task.Id, Permission.Full);
+      author.AuthorizeForTask(taskData.TaskId, Permission.Full);
       //trans.UseTransaction(() => { // cneumuel: try without transaction
-      jobData.LastUpdate = DateTime.Now;
-      dao.UpdateJob(job);
-      dao.UpdateJobData(jobData);
+      taskData.LastUpdate = DateTime.Now;
+      dao.UpdateTask(task);
+      dao.UpdateTaskData(taskData);
       //}, false, true);
     }
 
-    public void DeleteJob(Guid jobId) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
-      author.AuthorizeForJob(jobId, Permission.Full);
-      trans.UseTransaction(() => {
-        dao.DeleteJob(jobId);
-      });
-    }
-
-    public void DeleteChildJobs(Guid parentJobId) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
-      author.AuthorizeForJob(parentJobId, Permission.Full);
-      trans.UseTransaction(() => {
-        var jobs = GetChildJobs(parentJobId, true, false);
-        foreach (var job in jobs) {
-          dao.DeleteJob(job.Id);
-          dao.DeleteJobData(job.Id);
+    public void DeleteTask(Guid taskId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      author.AuthorizeForTask(taskId, Permission.Full);
+      trans.UseTransaction(() => {
+        dao.DeleteTask(taskId);
+      });
+    }
+
+    public void DeleteChildTasks(Guid parentTaskId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      author.AuthorizeForTask(parentTaskId, Permission.Full);
+      trans.UseTransaction(() => {
+        var tasks = GetChildTasks(parentTaskId, true, false);
+        foreach (var task in tasks) {
+          dao.DeleteTask(task.Id);
+          dao.DeleteTaskData(task.Id);
         };
       });
     }
 
-    public Task UpdateJobState(Guid jobId, TaskState jobState, Guid? slaveId, Guid? userId, string exception) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
-      author.AuthorizeForJob(jobId, Permission.Full);
-      return trans.UseTransaction(() => {
-        Task job = dao.UpdateJobState(jobId, DataTransfer.Convert.ToEntity(jobState), slaveId, userId, exception);
-
-        if (job.Command.HasValue && job.Command.Value == Command.Pause && job.State == TaskState.Paused) {
-          job.Command = null;
-        } else if (job.Command.HasValue && job.Command.Value == Command.Abort && job.State == TaskState.Aborted) {
-          job.Command = null;
-        } else if (job.Command.HasValue && job.Command.Value == Command.Stop && job.State == TaskState.Aborted) {
-          job.Command = null;
-        } else if (jobState == TaskState.Paused && !job.Command.HasValue) {
-          // slave paused and uploaded the job (no user-command) -> set waiting.
-          job = dao.UpdateJobState(jobId, DataTransfer.Convert.ToEntity(TaskState.Waiting), slaveId, userId, exception);
-        }
-
-        dao.UpdateJob(job);
-        return job;
-      });
-    }
-
-    public IEnumerable<Task> GetJobsByResourceId(Guid resourceId) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
-      var jobs = trans.UseTransaction(() => dao.GetJobsByResourceId(resourceId));
-      foreach (var job in jobs)
-        author.AuthorizeForJob(job.Id, Permission.Read);
-      return jobs;
+    public Task UpdateTaskState(Guid taskId, TaskState taskState, Guid? slaveId, Guid? userId, string exception) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      author.AuthorizeForTask(taskId, Permission.Full);
+      return trans.UseTransaction(() => {
+        Task task = dao.UpdateTaskState(taskId, DataTransfer.Convert.ToEntity(taskState), slaveId, userId, exception);
+
+        if (task.Command.HasValue && task.Command.Value == Command.Pause && task.State == TaskState.Paused) {
+          task.Command = null;
+        } else if (task.Command.HasValue && task.Command.Value == Command.Abort && task.State == TaskState.Aborted) {
+          task.Command = null;
+        } else if (task.Command.HasValue && task.Command.Value == Command.Stop && task.State == TaskState.Aborted) {
+          task.Command = null;
+        } else if (taskState == TaskState.Paused && !task.Command.HasValue) {
+          // slave paused and uploaded the task (no user-command) -> set waiting.
+          task = dao.UpdateTaskState(taskId, DataTransfer.Convert.ToEntity(TaskState.Waiting), slaveId, userId, exception);
+        }
+
+        dao.UpdateTask(task);
+        return task;
+      });
+    }
+
+    public IEnumerable<Task> GetTasksByResourceId(Guid resourceId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
+      var tasks = trans.UseTransaction(() => dao.GetJobsByResourceId(resourceId));
+      foreach (var task in tasks)
+        author.AuthorizeForTask(task.Id, Permission.Read);
+      return tasks;
     }
     #endregion
 
     #region Task Control Methods
-    public void StopJob(Guid jobId) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
-      author.AuthorizeForJob(jobId, Permission.Full);
-      trans.UseTransaction(() => {
-        var job = dao.GetJob(jobId);
-        if (job.State == TaskState.Calculating || job.State == TaskState.Transferring) {
-          job.Command = Command.Stop;
-          dao.UpdateJob(job);
+    public void StopTask(Guid taskId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      author.AuthorizeForTask(taskId, Permission.Full);
+      trans.UseTransaction(() => {
+        var task = dao.GetTask(taskId);
+        if (task.State == TaskState.Calculating || task.State == TaskState.Transferring) {
+          task.Command = Command.Stop;
+          dao.UpdateTask(task);
         } else {
-          if (job.State != TaskState.Aborted && job.State != TaskState.Finished && job.State != TaskState.Failed) {
-            job = UpdateJobState(jobId, TaskState.Aborted, null, null, string.Empty);
+          if (task.State != TaskState.Aborted && task.State != TaskState.Finished && task.State != TaskState.Failed) {
+            task = UpdateTaskState(taskId, TaskState.Aborted, null, null, string.Empty);
           }
         }
@@ -213,25 +213,25 @@
     }
 
-    public void PauseJob(Guid jobId) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
-      author.AuthorizeForJob(jobId, Permission.Full);
-      trans.UseTransaction(() => {
-        var job = dao.GetJob(jobId);
+    public void PauseTask(Guid taskId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      author.AuthorizeForTask(taskId, Permission.Full);
+      trans.UseTransaction(() => {
+        var job = dao.GetTask(taskId);
         if (job.State == TaskState.Calculating || job.State == TaskState.Transferring) {
           job.Command = Command.Pause;
-          dao.UpdateJob(job);
+          dao.UpdateTask(job);
         } else {
-          job = UpdateJobState(jobId, TaskState.Paused, null, null, string.Empty);
-        }
-      });
-    }
-
-    public void RestartJob(Guid jobId) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
-      author.AuthorizeForJob(jobId, Permission.Full);
-      trans.UseTransaction(() => {
-        Task job = dao.UpdateJobState(jobId, DA.TaskState.Waiting, null, userManager.CurrentUserId, string.Empty);
-        job.Command = null;
-        dao.UpdateJob(job);
+          job = UpdateTaskState(taskId, TaskState.Paused, null, null, string.Empty);
+        }
+      });
+    }
+
+    public void RestartTask(Guid taskId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
+      author.AuthorizeForTask(taskId, Permission.Full);
+      trans.UseTransaction(() => {
+        Task task = dao.UpdateTaskState(taskId, DA.TaskState.Waiting, null, userManager.CurrentUserId, string.Empty);
+        task.Command = null;
+        dao.UpdateTask(task);
       });
     }
@@ -239,93 +239,93 @@
 
     #region Job Methods
-    public Job GetHiveExperiment(Guid id) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
-      author.AuthorizeForExperiment(id, Permission.Read);
-      var hiveExperiment = dao.GetHiveExperiments(x =>
+    public Job GetJob(Guid id) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      author.AuthorizeForJob(id, Permission.Read);
+      var job = dao.GetJobs(x =>
             x.JobId == id
             && (x.OwnerUserId == userManager.CurrentUserId || x.JobPermissions.Count(hep => hep.Permission != DA.Permission.NotAllowed && hep.GrantedUserId == userManager.CurrentUserId) > 0)
           ).FirstOrDefault();
-      if (hiveExperiment != null) {
-        hiveExperiment.Permission = DT.Convert.ToDto(dao.GetPermissionForExperiment(hiveExperiment.Id, userManager.CurrentUserId));
-        hiveExperiment.OwnerUsername = userManager.GetUserById(hiveExperiment.OwnerUserId).UserName;
+      if (job != null) {
+        job.Permission = DT.Convert.ToDto(dao.GetPermissionForJob(job.Id, userManager.CurrentUserId));
+        job.OwnerUsername = userManager.GetUserById(job.OwnerUserId).UserName;
       }
-      return hiveExperiment;
-    }
-
-    public IEnumerable<Job> GetHiveExperiments() {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
-      var hiveExperiments = dao.GetHiveExperiments(x => x.OwnerUserId == userManager.CurrentUserId || x.JobPermissions.Count(hep => hep.Permission != DA.Permission.NotAllowed && hep.GrantedUserId == userManager.CurrentUserId) > 0);
-      foreach (var he in hiveExperiments) {
-        author.AuthorizeForExperiment(he.Id, Permission.Read);
-        he.Permission = DT.Convert.ToDto(dao.GetPermissionForExperiment(he.Id, userManager.CurrentUserId));
-        he.OwnerUsername = userManager.GetUserById(he.OwnerUserId).UserName;
+      return job;
+    }
+
+    public IEnumerable<Job> GetJobs() {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      var jobs = dao.GetJobs(x => x.OwnerUserId == userManager.CurrentUserId || x.JobPermissions.Count(hep => hep.Permission != DA.Permission.NotAllowed && hep.GrantedUserId == userManager.CurrentUserId) > 0);
+      foreach (var job in jobs) {
+        author.AuthorizeForJob(job.Id, Permission.Read);
+        job.Permission = DT.Convert.ToDto(dao.GetPermissionForJob(job.Id, userManager.CurrentUserId));
+        job.OwnerUsername = userManager.GetUserById(job.OwnerUserId).UserName;
       }
-      return hiveExperiments;
-    }
-
-    public IEnumerable<Job> GetAllHiveExperiments() {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
-      var hiveExperiments = dao.GetHiveExperiments(x => true);
-      foreach (var he in hiveExperiments) { // no authorization here, since this method is admin-only! (admin is allowed to read all jobs)
-        he.Permission = DT.Convert.ToDto(dao.GetPermissionForExperiment(he.Id, userManager.CurrentUserId));
-        he.OwnerUsername = userManager.GetUserById(he.OwnerUserId).UserName;
+      return jobs;
+    }
+
+    public IEnumerable<Job> GetAllJobs() {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
+      var jobs = dao.GetJobs(x => true);
+      foreach (var job in jobs) { // no authorization here, since this method is admin-only! (admin is allowed to read all task)
+        job.Permission = DT.Convert.ToDto(dao.GetPermissionForJob(job.Id, userManager.CurrentUserId));
+        job.OwnerUsername = userManager.GetUserById(job.OwnerUserId).UserName;
       }
-      return hiveExperiments;
-    }
-
-    public Guid AddHiveExperiment(Job hiveExperimentDto) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
-      return trans.UseTransaction(() => {
-        hiveExperimentDto.OwnerUserId = userManager.CurrentUserId;
-        hiveExperimentDto.DateCreated = DateTime.Now;
-        return dao.AddHiveExperiment(hiveExperimentDto);
-      });
-    }
-
-    public void UpdateHiveExperiment(Job hiveExperimentDto) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
-      author.AuthorizeForExperiment(hiveExperimentDto.Id, Permission.Full);
-      trans.UseTransaction(() => {
-        dao.UpdateHiveExperiment(hiveExperimentDto);
-      });
-    }
-
-    public void DeleteHiveExperiment(Guid hiveExperimentId) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
-      author.AuthorizeForExperiment(hiveExperimentId, Permission.Full);
-      trans.UseTransaction(() => {
-        dao.DeleteHiveExperiment(hiveExperimentId); // child jobs will be deleted by db-trigger
-      });
-    }
-    #endregion
-
-    #region HiveExperimentPermission Methods
-    public void GrantPermission(Guid hiveExperimentId, Guid grantedUserId, Permission permission) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
-      trans.UseTransaction(() => {
-        Job he = dao.GetHiveExperiment(hiveExperimentId);
-        if (he == null) throw new FaultException<FaultReason>(new FaultReason("Could not find hiveExperiment with id " + hiveExperimentId));
-        Permission perm = DT.Convert.ToDto(dao.GetPermissionForExperiment(he.Id, userManager.CurrentUserId));
+      return jobs;
+    }
+
+    public Guid AddJob(Job jobDto) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      return trans.UseTransaction(() => {
+        jobDto.OwnerUserId = userManager.CurrentUserId;
+        jobDto.DateCreated = DateTime.Now;
+        return dao.AddJob(jobDto);
+      });
+    }
+
+    public void UpdateJob(Job jobDto) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      author.AuthorizeForJob(jobDto.Id, Permission.Full);
+      trans.UseTransaction(() => {
+        dao.UpdateJob(jobDto);
+      });
+    }
+
+    public void DeleteJob(Guid jobId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      author.AuthorizeForJob(jobId, Permission.Full);
+      trans.UseTransaction(() => {
+        dao.DeleteJob(jobId); // child task will be deleted by db-trigger
+      });
+    }
+    #endregion
+
+    #region JobPermission Methods
+    public void GrantPermission(Guid jobId, Guid grantedUserId, Permission permission) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      trans.UseTransaction(() => {
+        Job job = dao.GetJob(jobId);
+        if (job == null) throw new FaultException<FaultReason>(new FaultReason("Could not find task with id " + jobId));
+        Permission perm = DT.Convert.ToDto(dao.GetPermissionForJob(job.Id, userManager.CurrentUserId));
         if (perm != Permission.Full) throw new FaultException<FaultReason>(new FaultReason("Not allowed to grant permissions for this experiment"));
-        dao.SetHiveExperimentPermission(hiveExperimentId, userManager.CurrentUserId, grantedUserId, DT.Convert.ToEntity(permission));
-      });
-    }
-
-    public void RevokePermission(Guid hiveExperimentId, Guid grantedUserId) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
-      trans.UseTransaction(() => {
-        Job he = dao.GetHiveExperiment(hiveExperimentId);
-        if (he == null) throw new FaultException<FaultReason>(new FaultReason("Could not find hiveExperiment with id " + hiveExperimentId));
-        DA.Permission perm = dao.GetPermissionForExperiment(he.Id, userManager.CurrentUserId);
+        dao.SetJobPermission(jobId, userManager.CurrentUserId, grantedUserId, DT.Convert.ToEntity(permission));
+      });
+    }
+
+    public void RevokePermission(Guid jobId, Guid grantedUserId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      trans.UseTransaction(() => {
+        Job job = dao.GetJob(jobId);
+        if (job == null) throw new FaultException<FaultReason>(new FaultReason("Could not find task with id " + jobId));
+        DA.Permission perm = dao.GetPermissionForJob(job.Id, userManager.CurrentUserId);
         if (perm != DA.Permission.Full) throw new FaultException<FaultReason>(new FaultReason("Not allowed to grant permissions for this experiment"));
-        dao.SetHiveExperimentPermission(hiveExperimentId, userManager.CurrentUserId, grantedUserId, DA.Permission.NotAllowed);
-      });
-    }
-    public IEnumerable<JobPermission> GetHiveExperimentPermissions(Guid hiveExperimentId) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
-      return trans.UseTransaction(() => {
-        DA.Permission currentUserPermission = dao.GetPermissionForExperiment(hiveExperimentId, userManager.CurrentUserId);
+        dao.SetJobPermission(jobId, userManager.CurrentUserId, grantedUserId, DA.Permission.NotAllowed);
+      });
+    }
+    public IEnumerable<JobPermission> GetJobPermissions(Guid jobId) {
+      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
+      return trans.UseTransaction(() => {
+        DA.Permission currentUserPermission = dao.GetPermissionForJob(jobId, userManager.CurrentUserId);
         if (currentUserPermission != DA.Permission.Full) throw new FaultException<FaultReason>(new FaultReason("Not allowed to list permissions for this experiment"));
-        return dao.GetHiveExperimentPermissions(x => x.JobId == hiveExperimentId);
+        return dao.GetJobPermissions(x => x.JobId == jobId);
       });
     }
@@ -591,17 +591,17 @@
 
     #region Helper Methods
-    private IEnumerable<Task> GetChildJobs(Guid? parentJobId, bool recursive, bool includeParent) {
-      var jobs = new List<Task>(dao.GetJobs(x => parentJobId == null ? !x.ParentTaskId.HasValue : x.ParentTaskId.Value == parentJobId));
+    private IEnumerable<Task> GetChildTasks(Guid? parentTaskId, bool recursive, bool includeParent) {
+      var tasks = new List<Task>(dao.GetTasks(x => parentTaskId == null ? !x.ParentTaskId.HasValue : x.ParentTaskId.Value == parentTaskId));
 
       if (recursive) {
         var childs = new List<Task>();
-        foreach (var job in jobs) {
-          childs.AddRange(GetChildJobs(job.Id, recursive, false));
-        }
-        jobs.AddRange(childs);
+        foreach (var task in tasks) {
+          childs.AddRange(GetChildTasks(task.Id, recursive, false));
+        }
+        tasks.AddRange(childs);
       }
 
-      if (includeParent) jobs.Add(GetJob(parentJobId.Value));
-      return jobs;
+      if (includeParent) tasks.Add(GetTask(parentTaskId.Value));
+      return tasks;
     }
     #endregion
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Interfaces/IAuthorizationManager.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Interfaces/IAuthorizationManager.cs	(revision 6725)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Interfaces/IAuthorizationManager.cs	(revision 6743)
@@ -30,7 +30,7 @@
     void Authorize(Guid userId);
 
+    void AuthorizeForTask(Guid taskId, Permission requiredPermission);
+
     void AuthorizeForJob(Guid jobId, Permission requiredPermission);
-
-    void AuthorizeForExperiment(Guid experimentId, Permission requiredPermission);
   }
 }
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Interfaces/IEventManager.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Interfaces/IEventManager.cs	(revision 6725)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Interfaces/IEventManager.cs	(revision 6743)
@@ -22,5 +22,5 @@
 namespace HeuristicLab.Services.Hive {
   /// <summary>
-  /// The only object in hive which holds a state. Must allow restarts without resetting all jobs
+  /// The only object in hive which holds a state. Must allow restarts without resetting all task
   /// </summary>
   public interface IEventManager {
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Interfaces/IHiveDao.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Interfaces/IHiveDao.cs	(revision 6725)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Interfaces/IHiveDao.cs	(revision 6743)
@@ -29,20 +29,20 @@
   public interface IHiveDao {
     #region Task Methods
-    DT.Task GetJob(Guid id);
-    IEnumerable<DT.Task> GetJobs(Expression<Func<Task, bool>> predicate);
-    Guid AddJob(DT.Task dto);
-    void UpdateJob(DT.Task dto);
-    void DeleteJob(Guid id);
-    IEnumerable<DT.Task> GetWaitingJobs(DT.Slave slave, int count);
-    IEnumerable<DT.Task> GetParentJobs(IEnumerable<Guid> resourceIds, int count, bool finished);
-    DT.Task UpdateJobState(Guid jobId, TaskState jobState, Guid? slaveId, Guid? userId, string exception);
+    DT.Task GetTask(Guid id);
+    IEnumerable<DT.Task> GetTasks(Expression<Func<Task, bool>> predicate);
+    Guid AddTask(DT.Task dto);
+    void UpdateTask(DT.Task dto);
+    void DeleteTask(Guid id);
+    IEnumerable<DT.Task> GetWaitingTasks(DT.Slave slave, int count);
+    IEnumerable<DT.Task> GetParentTasks(IEnumerable<Guid> resourceIds, int count, bool finished);
+    DT.Task UpdateTaskState(Guid taskId, TaskState taskState, Guid? slaveId, Guid? userId, string exception);
     #endregion
 
     #region TaskData Methods
-    DT.TaskData GetJobData(Guid id);
-    IEnumerable<DT.TaskData> GetJobDatas(Expression<Func<TaskData, bool>> predicate);
-    Guid AddJobData(DT.TaskData dto);
-    void UpdateJobData(DT.TaskData dto);
-    void DeleteJobData(Guid id);
+    DT.TaskData GetTaskData(Guid id);
+    IEnumerable<DT.TaskData> GetTaskDatas(Expression<Func<TaskData, bool>> predicate);
+    Guid AddTaskData(DT.TaskData dto);
+    void UpdateTaskData(DT.TaskData dto);
+    void DeleteTaskData(Guid id);
     #endregion
 
@@ -55,19 +55,19 @@
     #endregion
 
-    #region HiveExperiment Methods
-    DT.Job GetHiveExperiment(Guid id);
-    IEnumerable<DT.Job> GetHiveExperiments(Expression<Func<Job, bool>> predicate);
-    Guid AddHiveExperiment(DT.Job dto);
-    void UpdateHiveExperiment(DT.Job dto);
-    void DeleteHiveExperiment(Guid id);
+    #region Job Methods
+    DT.Job GetJob(Guid id);
+    IEnumerable<DT.Job> GetJobs(Expression<Func<Job, bool>> predicate);
+    Guid AddJob(DT.Job dto);
+    void UpdateJob(DT.Job dto);
+    void DeleteJob(Guid id);
     #endregion
 
-    #region HiveExperimentPermission Methods
-    DT.JobPermission GetHiveExperimentPermission(Guid hiveExperimentId, Guid grantedUserId);
-    IEnumerable<DT.JobPermission> GetHiveExperimentPermissions(Expression<Func<JobPermission, bool>> predicate);
-    void AddHiveExperimentPermission(DT.JobPermission dto);
-    void UpdateHiveExperimentPermission(DT.JobPermission dto);
-    void DeleteHiveExperimentPermission(Guid hiveExperimentId, Guid grantedUserId);
-    void SetHiveExperimentPermission(Guid hiveExperimentId, Guid grantedByUserId, Guid grantedUserId, Permission permission);
+    #region JobPermission Methods
+    DT.JobPermission GetJobPermission(Guid jobId, Guid grantedUserId);
+    IEnumerable<DT.JobPermission> GetJobPermissions(Expression<Func<JobPermission, bool>> predicate);
+    void AddJobPermission(DT.JobPermission dto);
+    void UpdateJobPermission(DT.JobPermission dto);
+    void DeleteJobPermission(Guid jobId, Guid grantedUserId);
+    void SetJobPermission(Guid jobId, Guid grantedByUserId, Guid grantedUserId, Permission permission);
     #endregion
 
@@ -86,7 +86,4 @@
     void UpdatePluginData(DT.PluginData dto);
     void DeletePluginData(Guid id);
-    #endregion
-
-    #region Calendar Methods
     #endregion
 
@@ -121,7 +118,7 @@
 
     #region Authorization Methods
+    Permission GetPermissionForTask(Guid taskId, Guid userId);
     Permission GetPermissionForJob(Guid jobId, Guid userId);
-    Permission GetPermissionForExperiment(Guid experimentId, Guid userId);
-    Guid GetExperimentForJob(Guid jobId);
+    Guid GetJobForTask(Guid taskId);
     #endregion
 
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Manager/AuthorizationManager.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Manager/AuthorizationManager.cs	(revision 6725)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Manager/AuthorizationManager.cs	(revision 6743)
@@ -33,16 +33,16 @@
     }
 
+    public void AuthorizeForTask(Guid taskId, DT.Permission requiredPermission) {
+      if (ServiceLocator.Instance.AuthenticationManager.IsInRole(HiveRoles.Slave)) return; // slave-users can access all tasks
+
+      Permission permission = ServiceLocator.Instance.HiveDao.GetPermissionForTask(taskId, ServiceLocator.Instance.UserManager.CurrentUserId);
+      if (permission == Permission.NotAllowed || (permission != DT.Convert.ToEntity(requiredPermission) && DT.Convert.ToEntity(requiredPermission) == Permission.Full))
+        throw new SecurityException("Current user is not authorized to access task");
+    }
+
     public void AuthorizeForJob(Guid jobId, DT.Permission requiredPermission) {
-      if (ServiceLocator.Instance.AuthenticationManager.IsInRole(HiveRoles.Slave)) return; // slave-users can access all jobs
-
       Permission permission = ServiceLocator.Instance.HiveDao.GetPermissionForJob(jobId, ServiceLocator.Instance.UserManager.CurrentUserId);
       if (permission == Permission.NotAllowed || (permission != DT.Convert.ToEntity(requiredPermission) && DT.Convert.ToEntity(requiredPermission) == Permission.Full))
-        throw new SecurityException("Current user is not authorized to access job");
-    }
-
-    public void AuthorizeForExperiment(Guid experimentId, DT.Permission requiredPermission) {
-      Permission permission = ServiceLocator.Instance.HiveDao.GetPermissionForExperiment(experimentId, ServiceLocator.Instance.UserManager.CurrentUserId);
-      if (permission == Permission.NotAllowed || (permission != DT.Convert.ToEntity(requiredPermission) && DT.Convert.ToEntity(requiredPermission) == Permission.Full))
-        throw new SecurityException("Current user is not authorized to access experiment");
+        throw new SecurityException("Current user is not authorized to access task");
     }
   }
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Manager/EventManager.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Manager/EventManager.cs	(revision 6725)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Manager/EventManager.cs	(revision 6743)
@@ -29,5 +29,5 @@
 namespace HeuristicLab.Services.Hive {
   /// <summary>
-  /// This class offers methods for cleaning up offline slaves and jobs
+  /// This class offers methods for cleaning up offline slaves and task
   /// </summary>
   public class EventManager : IEventManager {
@@ -45,6 +45,6 @@
       log.Log("EventManager.Cleanup()");
       SetTimeoutSlavesOffline();
-      SetTimeoutJobsWaiting();
-      FinishParentJobs();
+      SetTimeoutTasksWaiting();
+      FinishParentTasks();
       UpdateStatistics();
     }
@@ -72,5 +72,5 @@
 
     /// <summary>
-    /// Searches for slaves which are timed out, puts them and their jobs offline
+    /// Searches for slaves which are timed out, puts them and their task offline
     /// </summary>
     private void SetTimeoutSlavesOffline() {
@@ -79,5 +79,5 @@
         if (!slave.LastHeartbeat.HasValue || (DateTime.Now - slave.LastHeartbeat.Value) > HeuristicLab.Services.Hive.Properties.Settings.Default.SlaveHeartbeatTimeout) {
           slave.SlaveState = DT.SlaveState.Offline;
-          SetJobsWaiting(slave.Id);
+          SetTasksWaiting(slave.Id);
           dao.UpdateSlave(slave);
         }
@@ -86,32 +86,32 @@
 
     /// <summary>
-    /// Looks for parent jobs which have FinishWhenChildJobsFinished and set their state to finished
+    /// Looks for parent tasks which have FinishWhenChildJobsFinished and set their state to finished
     /// </summary>
-    private void FinishParentJobs() {
-      var parentJobsToFinish = dao.GetParentJobs(dao.GetResources(x => true).Select(x => x.Id), 0, true);
-      foreach (var job in parentJobsToFinish) {
-        dao.UpdateJobState(job.Id, TaskState.Finished, null, null, string.Empty);
+    private void FinishParentTasks() {
+      var parentTasksToFinish = dao.GetParentTasks(dao.GetResources(x => true).Select(x => x.Id), 0, true);
+      foreach (var task in parentTasksToFinish) {
+        dao.UpdateTaskState(task.Id, TaskState.Finished, null, null, string.Empty);
       }
     }
 
-    private void SetJobsWaiting(Guid slaveId) {
-      var jobs = dao.GetJobs(x => x.State == TaskState.Calculating).Where(x => x.StateLog.Last().SlaveId == slaveId);
-      foreach (var j in jobs) {
-        DT.Task job = dao.UpdateJobState(j.Id, TaskState.Waiting, slaveId, null, "Slave timed out.");
-        job.Command = null;
-        dao.UpdateJob(job);
+    private void SetTasksWaiting(Guid slaveId) {
+      var tasks = dao.GetTasks(x => x.State == TaskState.Calculating).Where(x => x.StateLog.Last().SlaveId == slaveId);
+      foreach (var j in tasks) {
+        DT.Task task = dao.UpdateTaskState(j.Id, TaskState.Waiting, slaveId, null, "Slave timed out.");
+        task.Command = null;
+        dao.UpdateTask(task);
       }
     }
 
     /// <summary>
-    /// Looks for jobs which have not sent heartbeats for some time and reschedules them for calculation
+    /// Looks for task which have not sent heartbeats for some time and reschedules them for calculation
     /// </summary>
-    private void SetTimeoutJobsWaiting() {
-      var jobs = dao.GetJobs(x => (x.State == TaskState.Calculating && (DateTime.Now - x.LastHeartbeat) > HeuristicLab.Services.Hive.Properties.Settings.Default.CalculatingJobHeartbeatTimeout)
+    private void SetTimeoutTasksWaiting() {
+      var tasks = dao.GetTasks(x => (x.State == TaskState.Calculating && (DateTime.Now - x.LastHeartbeat) > HeuristicLab.Services.Hive.Properties.Settings.Default.CalculatingJobHeartbeatTimeout)
                                || (x.State == TaskState.Transferring && (DateTime.Now - x.LastHeartbeat) > HeuristicLab.Services.Hive.Properties.Settings.Default.TransferringJobHeartbeatTimeout));
-      foreach (var j in jobs) {
-        DT.Task job = dao.UpdateJobState(j.Id, TaskState.Waiting, null, null, "Slave timed out.");
-        job.Command = null;
-        dao.UpdateJob(job);
+      foreach (var j in tasks) {
+        DT.Task task = dao.UpdateTaskState(j.Id, TaskState.Waiting, null, null, "Slave timed out.");
+        task.Command = null;
+        dao.UpdateTask(task);
       }
     }
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Manager/HeartbeatManager.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Manager/HeartbeatManager.cs	(revision 6725)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Manager/HeartbeatManager.cs	(revision 6743)
@@ -54,10 +54,10 @@
         dao.UpdateSlave(slave);
 
-        // update job data
-        actions.AddRange(UpdateJobs(heartbeat, slave.IsAllowedToCalculate));
+        // update task data
+        actions.AddRange(UpdateTasks(heartbeat, slave.IsAllowedToCalculate));
 
-        // assign new job
+        // assign new task
         if (heartbeat.AssignJob && slave.IsAllowedToCalculate && heartbeat.FreeCores > 0) {
-          var availableJobs = dao.GetWaitingJobs(slave, 1);
+          var availableJobs = dao.GetWaitingTasks(slave, 1);
           if (availableJobs.Count() > 0) {
             var job = availableJobs.First();
@@ -71,21 +71,21 @@
 
     // returns true if assignment was successful
-    private bool AssignJob(Slave slave, Task job) {
-      // load job again and check if it is still available (this is an attempt to reduce the race condition which causes multiple heartbeats to get the same job assigned)
-      if (dao.GetJob(job.Id).State != TaskState.Waiting) return false;
+    private bool AssignJob(Slave slave, Task task) {
+      // load task again and check if it is still available (this is an attempt to reduce the race condition which causes multiple heartbeats to get the same task assigned)
+      if (dao.GetTask(task.Id).State != TaskState.Waiting) return false;
 
-      job = dao.UpdateJobState(job.Id, DataAccess.TaskState.Transferring, slave.Id, null, null);
+      task = dao.UpdateTaskState(task.Id, DataAccess.TaskState.Transferring, slave.Id, null, null);
 
-      // from now on the job has some time to send the next heartbeat (ApplicationConstants.TransferringJobHeartbeatTimeout)
-      job.LastHeartbeat = DateTime.Now;
-      dao.UpdateJob(job);
+      // from now on the task has some time to send the next heartbeat (ApplicationConstants.TransferringJobHeartbeatTimeout)
+      task.LastHeartbeat = DateTime.Now;
+      dao.UpdateTask(task);
       return true;
     }
 
     /// <summary>
-    /// Update the progress of each job
-    /// Checks if all the jobs sent by heartbeat are supposed to be calculated by this slave
+    /// Update the progress of each task
+    /// Checks if all the task sent by heartbeat are supposed to be calculated by this slave
     /// </summary>
-    private IEnumerable<MessageContainer> UpdateJobs(Heartbeat heartbeat, bool IsAllowedToCalculate) {
+    private IEnumerable<MessageContainer> UpdateTasks(Heartbeat heartbeat, bool IsAllowedToCalculate) {
       List<MessageContainer> actions = new List<MessageContainer>();
 
@@ -98,7 +98,7 @@
         // process the jobProgresses
         foreach (var jobProgress in heartbeat.JobProgress) {
-          Task curJob = dao.GetJob(jobProgress.Key);
+          Task curJob = dao.GetTask(jobProgress.Key);
           if (curJob == null) {
-            // job does not exist in db
+            // task does not exist in db
             actions.Add(new MessageContainer(MessageContainer.MessageType.AbortTask, jobProgress.Key));
             DA.LogFactory.GetLogger(this.GetType().Namespace).Log("Job does not exist in DB: " + jobProgress.Key);
@@ -108,9 +108,9 @@
               actions.Add(new MessageContainer(MessageContainer.MessageType.AbortTask, curJob.Id));
               DA.LogFactory.GetLogger(this.GetType().Namespace).Log("The slave " + heartbeat.SlaveId + " is not supposed to calculate Job: " + curJob);
-            } else if (!JobIsAllowedToBeCalculatedBySlave(heartbeat.SlaveId, curJob)) {
-              // assigned resources ids of job do not match with slaveId (and parent resourceGroupIds); this might happen when slave is moved to different group
+            } else if (!TaskIsAllowedToBeCalculatedBySlave(heartbeat.SlaveId, curJob)) {
+              // assigned resources ids of task do not match with slaveId (and parent resourceGroupIds); this might happen when slave is moved to different group
               actions.Add(new MessageContainer(MessageContainer.MessageType.PauseTask, curJob.Id));
             } else {
-              // save job execution time
+              // save task execution time
               curJob.ExecutionTime = jobProgress.Value;
               curJob.LastHeartbeat = DateTime.Now;
@@ -127,5 +127,5 @@
                   break;
               }
-              dao.UpdateJob(curJob);
+              dao.UpdateTask(curJob);
             }
           }
@@ -135,6 +135,6 @@
     }
 
-    private bool JobIsAllowedToBeCalculatedBySlave(Guid slaveId, Task curJob) {
-      var assignedResourceIds = dao.GetAssignedResources(curJob.Id).Select(x => x.Id);
+    private bool TaskIsAllowedToBeCalculatedBySlave(Guid slaveId, Task curTask) {
+      var assignedResourceIds = dao.GetAssignedResources(curTask.Id).Select(x => x.Id);
       var slaveResourceIds = dao.GetParentResources(slaveId).Select(x => x.Id);
       return assignedResourceIds.Any(x => slaveResourceIds.Contains(x));
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/MessageContainer.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/MessageContainer.cs	(revision 6725)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/MessageContainer.cs	(revision 6743)
@@ -37,15 +37,15 @@
     public enum MessageType {
       // *** commands from hive server ***
-      CalculateTask, // slave should calculate a job. the job is already assigned to the slave
-      StopTask,   // slave should stop the job and submit results
+      CalculateTask, // slave should calculate a task. the task is already assigned to the slave
+      StopTask,   // slave should stop the task and submit results
       StopAll,   // stop all and submit results
-      AbortTask,  // slave should shut the job down immediately without submitting results
-      AbortAll,  // slave should abort all jobs immediately
-      PauseTask,  // pause the job and submit the results   
-      PauseAll,  // pause all jobs and submit results
+      AbortTask,  // slave should shut the task down immediately without submitting results
+      AbortAll,  // slave should abort all task immediately
+      PauseTask,  // pause the task and submit the results   
+      PauseAll,  // pause all task and submit results
       Restart,   // restart operation after Sleep
       Sleep,     // disconnect from server, but don't shutdown
       ShutdownSlave,  // slave should shutdown immediately without submitting results
-      SayHello,  // Slave should say hello, because he is unknown to the server
+      SayHello,  // Slave should say hello, because job is unknown to the server
     };
 
Index: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/ServiceContracts/IHiveService.cs
===================================================================
--- branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/ServiceContracts/IHiveService.cs	(revision 6725)
+++ branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/ServiceContracts/IHiveService.cs	(revision 6743)
@@ -33,84 +33,84 @@
     #region Task Methods
     [OperationContract]
-    Guid AddJob(Task job, TaskData jobData, IEnumerable<Guid> resourceIds);
-
-    [OperationContract]
-    Guid AddChildJob(Guid parentJobId, Task job, TaskData jobData);
-
-    [OperationContract]
-    Task GetJob(Guid jobId);
-
-    [OperationContract]
-    IEnumerable<Task> GetJobs();
-
-    [OperationContract]
-    IEnumerable<LightweightTask> GetLightweightJobs(IEnumerable<Guid> jobIds);
-
-    [OperationContract]
-    IEnumerable<LightweightTask> GetLightweightChildJobs(Guid? parentJobId, bool recursive, bool includeParent);
-
-    [OperationContract]
-    IEnumerable<LightweightTask> GetLightweightExperimentJobs(Guid experimentId);
-
-    [OperationContract]
-    TaskData GetJobData(Guid jobId);
-
-    [OperationContract]
-    void UpdateJob(Task jobDto);
-
-    [OperationContract]
-    void UpdateJobData(Task jobDto, TaskData jobDataDto);
-
-    [OperationContract]
-    void DeleteJob(Guid jobId);
-
-    [OperationContract]
-    void DeleteChildJobs(Guid parentJobId);
-
-    [OperationContract]
-    Task UpdateJobState(Guid jobId, TaskState jobState, Guid? slaveId, Guid? userId, string exception);
-    #endregion
-
-    #region Job Control Methods
-    [OperationContract]
-    void StopJob(Guid jobId);
-
-    [OperationContract]
-    void PauseJob(Guid jobId);
-
-    [OperationContract]
-    void RestartJob(Guid jobId);
+    Guid AddTask(Task task, TaskData taskData, IEnumerable<Guid> resourceIds);
+
+    [OperationContract]
+    Guid AddChildTask(Guid parentTaskId, Task task, TaskData taskData);
+
+    [OperationContract]
+    Task GetTask(Guid taskId);
+
+    [OperationContract]
+    IEnumerable<Task> GetTasks();
+
+    [OperationContract]
+    IEnumerable<LightweightTask> GetLightweightTasks(IEnumerable<Guid> taskIds);
+
+    [OperationContract]
+    IEnumerable<LightweightTask> GetLightweightChildTasks(Guid? parentTaskId, bool recursive, bool includeParent);
+
+    [OperationContract]
+    IEnumerable<LightweightTask> GetLightweightJobTasks(Guid jobId);
+
+    [OperationContract]
+    TaskData GetTaskData(Guid taskId);
+
+    [OperationContract]
+    void UpdateTask(Task taskDto);
+
+    [OperationContract]
+    void UpdateTaskData(Task taskDto, TaskData taskDataDto);
+
+    [OperationContract]
+    void DeleteTask(Guid taskId);
+
+    [OperationContract]
+    void DeleteChildTasks(Guid parentTaskId);
+
+    [OperationContract]
+    Task UpdateTaskState(Guid taskId, TaskState taskState, Guid? slaveId, Guid? userId, string exception);
+    #endregion
+
+    #region Task Control Methods
+    [OperationContract]
+    void StopTask(Guid taskId);
+
+    [OperationContract]
+    void PauseTask(Guid taskId);
+
+    [OperationContract]
+    void RestartTask(Guid taskId);
     #endregion
 
     #region Job Methods
     [OperationContract]
-    Job GetHiveExperiment(Guid id);
+    Job GetJob(Guid id);
 
     /// <summary>
-    /// Returns all experiments for the current user
+    /// Returns all task for the current user
     /// </summary>
     [OperationContract]
-    IEnumerable<Job> GetHiveExperiments();
+    IEnumerable<Job> GetJobs();
 
     /// <summary>
-    /// Returns all experiments in the hive (only for admins)
+    /// Returns all task in the hive (only for admins)
     /// </summary>
     /// <returns></returns>
     [OperationContract]
-    IEnumerable<Job> GetAllHiveExperiments();
-
-    [OperationContract]
-    Guid AddHiveExperiment(Job hiveExperimentDto);
-
-    [OperationContract]
-    void UpdateHiveExperiment(Job hiveExperimentDto);
-
-    [OperationContract]
-    void DeleteHiveExperiment(Guid hiveExperimentId);
-    #endregion
-
-    #region HiveExperimentPermission Methods
-    [OperationContract]
-    void GrantPermission(Guid hiveExperimentId, Guid grantedUserId, Permission permission);
+    IEnumerable<Job> GetAllJobs();
+
+    [OperationContract]
+    Guid AddJob(Job jobDto);
+
+    [OperationContract]
+    void UpdateJob(Job jobDto);
+
+    [OperationContract]
+    void DeleteJob(Guid JobId);
+    #endregion
+
+    #region JobPermission Methods
+    [OperationContract]
+    void GrantPermission(Guid jobId, Guid grantedUserId, Permission permission);
 
     [OperationContract]
@@ -118,8 +118,8 @@
 
     [OperationContract]
-    IEnumerable<JobPermission> GetHiveExperimentPermissions(Guid hiveExperimentId);
-
-    [OperationContract]
-    bool IsAllowedPrivileged(); // current user may execute privileged jobs
+    IEnumerable<JobPermission> GetJobPermissions(Guid jobId);
+
+    [OperationContract]
+    bool IsAllowedPrivileged(); // current user may execute privileged task
     #endregion
 
@@ -140,13 +140,18 @@
     [OperationContract]
     Plugin GetPlugin(Guid pluginId);
+
     [OperationContract]
     Plugin GetPluginByHash(byte[] hash);
+
     [OperationContract]
     [FaultContract(typeof(PluginAlreadyExistsFault))]
     Guid AddPlugin(Plugin plugin, List<PluginData> pluginData);
+
     [OperationContract]
     IEnumerable<Plugin> GetPlugins();
+
     [OperationContract]
     IEnumerable<PluginData> GetPluginDatas(List<Guid> pluginIds);
+
     [OperationContract]
     void DeletePlugin(Guid pluginId);
@@ -194,5 +199,5 @@
 
     [OperationContract]
-    IEnumerable<Task> GetJobsByResourceId(Guid resourceId);
+    IEnumerable<Task> GetTasksByResourceId(Guid resourceId);
 
     [OperationContract]
