Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Administrator/3.3/Views/Common/UpdateControl.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Administrator/3.3/Views/Common/UpdateControl.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Administrator/3.3/Views/Common/UpdateControl.cs	(revision 6721)
@@ -1,5 +1,26 @@
-﻿using System;
-using System.Threading.Tasks;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
 using System.Windows.Forms;
+using TS = System.Threading.Tasks;
 
 namespace HeuristicLab.Clients.Hive.Administrator.Views.Common {
@@ -20,5 +41,5 @@
         imgBoxProgress.Visible = true;
         Action action = new Action(PrivUpdateAction);
-        Task task = new Task(action);
+        TS.Task task = new TS.Task(action);
         task.Start();
       }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Core.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Core.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Core.cs	(revision 6721)
@@ -29,4 +29,5 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
+using TS = System.Threading.Tasks;
 
 
@@ -148,5 +149,5 @@
     /// <param name="container">The container, containing the message</param>
     private void DetermineAction(MessageContainer container) {
-      clientCom.LogMessage(string.Format("Message: {0} for job: {1} ", container.Message.ToString(), container.JobId));
+      clientCom.LogMessage(string.Format("Message: {0} for job: {1} ", container.Message.ToString(), container.TaskId));
 
       if (container is ExecutorMessageContainer<Guid>) {
@@ -156,14 +157,14 @@
         switch (container.Message) {
           case MessageContainer.MessageType.CalculateJob:
-            CalculateJobAsync(container.JobId);
+            CalculateJobAsync(container.TaskId);
             break;
           case MessageContainer.MessageType.AbortJob:
-            AbortJobAsync(container.JobId);
+            AbortJobAsync(container.TaskId);
             break;
           case MessageContainer.MessageType.StopJob:
-            StopJobAsync(container.JobId);
+            StopJobAsync(container.TaskId);
             break;
           case MessageContainer.MessageType.PauseJob:
-            PauseJobAsync(container.JobId);
+            PauseJobAsync(container.TaskId);
             break;
           case MessageContainer.MessageType.StopAll:
@@ -195,5 +196,5 @@
 
     private void CalculateJobAsync(Guid jobId) {
-      Task.Factory.StartNew(HandleCalculateJob, jobId)
+      TS.Task.Factory.StartNew(HandleCalculateJob, jobId)
       .ContinueWith((t) => {
         SlaveStatusInfo.IncrementExceptionOccured();
@@ -203,5 +204,5 @@
 
     private void StopJobAsync(Guid jobId) {
-      Task.Factory.StartNew(HandleStopJob, jobId)
+      TS.Task.Factory.StartNew(HandleStopJob, jobId)
        .ContinueWith((t) => {
          SlaveStatusInfo.IncrementExceptionOccured();
@@ -211,5 +212,5 @@
 
     private void PauseJobAsync(Guid jobId) {
-      Task.Factory.StartNew(HandlePauseJob, jobId)
+      TS.Task.Factory.StartNew(HandlePauseJob, jobId)
        .ContinueWith((t) => {
          SlaveStatusInfo.IncrementExceptionOccured();
@@ -219,5 +220,5 @@
 
     private void AbortJobAsync(Guid jobId) {
-      Task.Factory.StartNew(HandleAbortJob, jobId)
+      TS.Task.Factory.StartNew(HandleAbortJob, jobId)
        .ContinueWith((t) => {
          SlaveStatusInfo.IncrementExceptionOccured();
@@ -228,5 +229,5 @@
     private void HandleCalculateJob(object jobIdObj) {
       Guid jobId = (Guid)jobIdObj;
-      Job job = null;
+      Task job = null;
       int usedCores = 0;
       try {
@@ -236,7 +237,7 @@
         if (ConfigManager.GetFreeMemory() < job.MemoryNeeded) throw new OutOfMemoryException();
         SlaveStatusInfo.IncrementUsedCores(job.CoresNeeded); usedCores = job.CoresNeeded;
-        JobData jobData = wcfService.GetJobData(jobId);
+        TaskData jobData = wcfService.GetJobData(jobId);
         if (jobData == null) throw new JobDataNotFoundException(jobId);
-        job = wcfService.UpdateJobState(jobId, JobState.Calculating, null);
+        job = wcfService.UpdateJobState(jobId, TaskState.Calculating, null);
         if (job == null) throw new JobNotFoundException(jobId);
         jobManager.StartJobAsync(job, jobData);
@@ -255,14 +256,14 @@
       }
       catch (OutOfCoresException) {
-        wcfService.UpdateJobState(jobId, JobState.Waiting, "No more cores available");
+        wcfService.UpdateJobState(jobId, TaskState.Waiting, "No more cores available");
         throw;
       }
       catch (OutOfMemoryException) {
-        wcfService.UpdateJobState(jobId, JobState.Waiting, "No more memory available");
+        wcfService.UpdateJobState(jobId, TaskState.Waiting, "No more memory available");
         throw;
       }
       catch (Exception e) {
         SlaveStatusInfo.DecrementUsedCores(usedCores);
-        wcfService.UpdateJobState(jobId, JobState.Waiting, e.ToString()); // unknown internal error - report and set waiting again
+        wcfService.UpdateJobState(jobId, TaskState.Waiting, e.ToString()); // unknown internal error - report and set waiting again
         throw;
       }
@@ -272,5 +273,5 @@
       Guid jobId = (Guid)jobIdObj;
       try {
-        Job job = wcfService.GetJob(jobId);
+        Task job = wcfService.GetJob(jobId);
         if (job == null) throw new JobNotFoundException(jobId);
         jobManager.StopJobAsync(jobId);
@@ -290,5 +291,5 @@
       Guid jobId = (Guid)jobIdObj;
       try {
-        Job job = wcfService.GetJob(jobId);
+        Task job = wcfService.GetJob(jobId);
         if (job == null) throw new JobNotFoundException(jobId);
         jobManager.PauseJobAsync(jobId);
@@ -318,7 +319,7 @@
     private void RegisterJobManagerEvents() {
       this.jobManager.JobStarted += new EventHandler<EventArgs<SlaveJob>>(jobManager_JobStarted);
-      this.jobManager.JobPaused += new EventHandler<EventArgs<SlaveJob, JobData>>(jobManager_JobPaused);
-      this.jobManager.JobStopped += new EventHandler<EventArgs<SlaveJob, JobData>>(jobManager_JobStopped);
-      this.jobManager.JobFailed += new EventHandler<EventArgs<Tuple<SlaveJob, JobData, Exception>>>(jobManager_JobFailed);
+      this.jobManager.JobPaused += new EventHandler<EventArgs<SlaveJob, TaskData>>(jobManager_JobPaused);
+      this.jobManager.JobStopped += new EventHandler<EventArgs<SlaveJob, TaskData>>(jobManager_JobStopped);
+      this.jobManager.JobFailed += new EventHandler<EventArgs<Tuple<SlaveJob, TaskData, Exception>>>(jobManager_JobFailed);
       this.jobManager.ExceptionOccured += new EventHandler<EventArgs<SlaveJob, Exception>>(jobManager_ExceptionOccured);
       this.jobManager.JobAborted += new EventHandler<EventArgs<SlaveJob>>(jobManager_JobAborted);
@@ -329,13 +330,13 @@
     }
 
-    private void jobManager_JobPaused(object sender, EventArgs<SlaveJob, JobData> e) {
+    private void jobManager_JobPaused(object sender, EventArgs<SlaveJob, TaskData> e) {
       try {
         SlaveStatusInfo.DecrementUsedCores(e.Value.CoresNeeded);
         heartbeatManager.AwakeHeartBeatThread();
-        Job job = wcfService.GetJob(e.Value.JobId);
+        Task job = wcfService.GetJob(e.Value.JobId);
         if (job == null) throw new JobNotFoundException(e.Value.JobId);
         job.ExecutionTime = e.Value.ExecutionTime;
-        JobData jobData = e.Value.GetJobData();
-        wcfService.UpdateJobData(job, jobData, configManager.GetClientInfo().Id, JobState.Paused);
+        TaskData jobData = e.Value.GetJobData();
+        wcfService.UpdateJobData(job, jobData, configManager.GetClientInfo().Id, TaskState.Paused);
       }
       catch (JobNotFoundException ex) {
@@ -347,13 +348,13 @@
     }
 
-    private void jobManager_JobStopped(object sender, EventArgs<SlaveJob, JobData> e) {
+    private void jobManager_JobStopped(object sender, EventArgs<SlaveJob, TaskData> e) {
       try {
         SlaveStatusInfo.DecrementUsedCores(e.Value.CoresNeeded);
         heartbeatManager.AwakeHeartBeatThread();
-        Job job = wcfService.GetJob(e.Value.JobId);
+        Task job = wcfService.GetJob(e.Value.JobId);
         if (job == null) throw new JobNotFoundException(e.Value.JobId);
         job.ExecutionTime = e.Value.ExecutionTime;
-        JobData jobData = e.Value.GetJobData();
-        wcfService.UpdateJobData(job, jobData, configManager.GetClientInfo().Id, JobState.Finished);
+        TaskData jobData = e.Value.GetJobData();
+        wcfService.UpdateJobData(job, jobData, configManager.GetClientInfo().Id, TaskState.Finished);
       }
       catch (JobNotFoundException ex) {
@@ -365,19 +366,19 @@
     }
 
-    private void jobManager_JobFailed(object sender, EventArgs<Tuple<SlaveJob, JobData, Exception>> e) {
+    private void jobManager_JobFailed(object sender, EventArgs<Tuple<SlaveJob, TaskData, Exception>> e) {
       try {
         SlaveStatusInfo.DecrementUsedCores(e.Value.Item1.CoresNeeded);
         heartbeatManager.AwakeHeartBeatThread();
         SlaveJob slaveJob = e.Value.Item1;
-        JobData jobData = e.Value.Item2;
+        TaskData jobData = e.Value.Item2;
         Exception exception = e.Value.Item3;
 
-        Job job = wcfService.GetJob(slaveJob.JobId);
+        Task job = wcfService.GetJob(slaveJob.JobId);
         if (job == null) throw new JobNotFoundException(slaveJob.JobId);
         job.ExecutionTime = slaveJob.ExecutionTime;
         if (jobData != null) {
-          wcfService.UpdateJobData(job, jobData, configManager.GetClientInfo().Id, JobState.Failed, exception.ToString());
+          wcfService.UpdateJobData(job, jobData, configManager.GetClientInfo().Id, TaskState.Failed, exception.ToString());
         } else {
-          wcfService.UpdateJobState(job.Id, JobState.Failed, exception.ToString());
+          wcfService.UpdateJobState(job.Id, TaskState.Failed, exception.ToString());
         }
         clientCom.LogMessage(exception.Message);
@@ -398,5 +399,5 @@
       heartbeatManager.AwakeHeartBeatThread();
       clientCom.LogMessage(string.Format("Exception occured for job {0}: {1}", e.Value.JobId, e.Value2.ToString()));
-      wcfService.UpdateJobState(e.Value.JobId, JobState.Waiting, e.Value2.ToString());
+      wcfService.UpdateJobState(e.Value.JobId, TaskState.Waiting, e.Value2.ToString());
     }
 
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/JobAlreadyRunningException.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/JobAlreadyRunningException.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/JobAlreadyRunningException.cs	(revision 6721)
@@ -24,5 +24,5 @@
 namespace HeuristicLab.Clients.Hive.SlaveCore {
   public class JobAlreadyRunningException : Exception {
-    public JobAlreadyRunningException(Guid jobId) : base(string.Format("Job with Id {0} is already running.", jobId)) { }
+    public JobAlreadyRunningException(Guid jobId) : base(string.Format("Task with Id {0} is already running.", jobId)) { }
   }
 }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/JobFailedException.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/JobFailedException.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/JobFailedException.cs	(revision 6721)
@@ -24,5 +24,5 @@
 namespace HeuristicLab.Clients.Hive.SlaveCore {
   public class JobFailedException : Exception {
-    public JobFailedException(string reason) : base(string.Format("Job failed with reason: {0}", reason)) { }
+    public JobFailedException(string reason) : base(string.Format("Task failed with reason: {0}", reason)) { }
   }
 }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/JobNotDataFoundException.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/JobNotDataFoundException.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/JobNotDataFoundException.cs	(revision 6721)
@@ -24,5 +24,5 @@
 namespace HeuristicLab.Clients.Hive.SlaveCore {
   public class JobDataNotFoundException : Exception {
-    public JobDataNotFoundException(Guid jobId) : base(string.Format("JobData with JobId {0} was not found on server.", jobId)) { }
+    public JobDataNotFoundException(Guid jobId) : base(string.Format("TaskData with TaskId {0} was not found on server.", jobId)) { }
   }
 }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/JobNotFoundException.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/JobNotFoundException.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/JobNotFoundException.cs	(revision 6721)
@@ -24,5 +24,5 @@
 namespace HeuristicLab.Clients.Hive.SlaveCore {
   public class JobNotFoundException : Exception {
-    public JobNotFoundException(Guid jobId) : base (string.Format("Job with Id {0} was not found on server.", jobId)) { }
+    public JobNotFoundException(Guid jobId) : base (string.Format("Task with Id {0} was not found on server.", jobId)) { }
   }
 }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/JobNotRunningException.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/JobNotRunningException.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Exceptions/JobNotRunningException.cs	(revision 6721)
@@ -24,5 +24,5 @@
 namespace HeuristicLab.Clients.Hive.SlaveCore {
   public class JobNotRunningException : Exception {
-    public JobNotRunningException(Guid jobId) : base(string.Format("Job with Id {0} is not running.", jobId)) { }
+    public JobNotRunningException(Guid jobId) : base(string.Format("Task with Id {0} is not running.", jobId)) { }
   }
 }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Executor.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Executor.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Executor.cs	(revision 6721)
@@ -100,8 +100,8 @@
     public void Pause() {
       IsPausing = true;
-      // wait until job is started. if this does not happen, the Job is null an we give up
+      // wait until job is started. if this does not happen, the Task is null an we give up
       jobStartedSem.WaitOne(Settings.Default.ExecutorSemTimeouts);
       if (job == null) {
-        CurrentException = new Exception("Pausing job " + this.JobId + ": Job is null");
+        CurrentException = new Exception("Pausing job " + this.JobId + ": Task is null");
         executorQueue.AddMessage(ExecutorMessageType.ExceptionOccured);
         return;
@@ -123,8 +123,8 @@
     public void Stop() {
       IsStopping = true;
-      // wait until job is started. if this does not happen, the Job is null an we give up
+      // wait until job is started. if this does not happen, the Task is null an we give up
       jobStartedSem.WaitOne(Settings.Default.ExecutorSemTimeouts);
       if (job == null) {
-        CurrentException = new Exception("Stopping job " + this.JobId + ": Job is null");
+        CurrentException = new Exception("Stopping job " + this.JobId + ": Task is null");
         executorQueue.AddMessage(ExecutorMessageType.ExceptionOccured);
       }
@@ -157,5 +157,5 @@
     }
 
-    #region Job Events
+    #region Task Events
     private void Job_JobFailed(object sender, EventArgs e) {
       IsStopping = true;
@@ -185,21 +185,21 @@
     #endregion
 
-    public JobData GetJobData() {
+    public TaskData GetJobData() {
       if (jobDataInvalid) return null;
 
       if (job.ExecutionState == ExecutionState.Started) {
-        throw new InvalidStateException("Job is still running");
+        throw new InvalidStateException("Task is still running");
       } else {
-        JobData jobData = new JobData();
+        TaskData jobData = new TaskData();
         if (job == null) {
           //send empty job and save exception
-          jobData.Data = PersistenceUtil.Serialize(new JobData());
+          jobData.Data = PersistenceUtil.Serialize(new TaskData());
           if (CurrentException == null) {
-            CurrentException = new Exception("Job with id " + this.JobId + " is null, sending empty job");
+            CurrentException = new Exception("Task with id " + this.JobId + " is null, sending empty job");
           }
         } else {
           jobData.Data = PersistenceUtil.Serialize(job);
         }
-        jobData.JobId = JobId;
+        jobData.TaskId = JobId;
         return jobData;
       }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/JobStatus.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/JobStatus.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/JobStatus.cs	(revision 6721)
@@ -27,5 +27,5 @@
   public class JobStatus {
     /// <summary>
-    /// Id of the Job
+    /// Id of the Task
     /// </summary>
     [DataMember]
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Manager/JobManager.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Manager/JobManager.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Manager/JobManager.cs	(revision 6721)
@@ -65,6 +65,6 @@
     }
 
-    #region Job Control methods
-    public void StartJobAsync(Job job, JobData jobData) {
+    #region Task Control methods
+    public void StartJobAsync(Task job, TaskData jobData) {
       SlaveJob slaveJob = null;
       slaveJobsLocker.EnterUpgradeableReadLock();
@@ -160,5 +160,5 @@
 
     #region Add/Remove SlaveJob
-    private void AddSlaveJob(Job job, SlaveJob slaveJob) {
+    private void AddSlaveJob(Task job, SlaveJob slaveJob) {
       slaveJobsLocker.EnterWriteLock();
       try {
@@ -217,5 +217,5 @@
       finally { slaveJobsLocker.ExitUpgradeableReadLock(); }
 
-      JobData jobData = null;
+      TaskData jobData = null;
       try {
         jobData = slaveJob.GetJobData();
@@ -240,5 +240,5 @@
       finally { slaveJobsLocker.ExitUpgradeableReadLock(); }
 
-      JobData jobData = null;
+      TaskData jobData = null;
       try {
         jobData = slaveJob.GetJobData();
@@ -263,5 +263,5 @@
       finally { slaveJobsLocker.ExitUpgradeableReadLock(); }
 
-      JobData jobData = null;
+      TaskData jobData = null;
       try {
         jobData = slaveJob.GetJobData();
@@ -294,20 +294,20 @@
     }
 
-    public event EventHandler<EventArgs<SlaveJob, JobData>> JobStopped;
-    private void OnJobStopped(SlaveJob slaveJob, JobData jobData) {
+    public event EventHandler<EventArgs<SlaveJob, TaskData>> JobStopped;
+    private void OnJobStopped(SlaveJob slaveJob, TaskData jobData) {
       var handler = JobStopped;
-      if (handler != null) handler(this, new EventArgs<SlaveJob, JobData>(slaveJob, jobData));
-    }
-
-    public event EventHandler<EventArgs<SlaveJob, JobData>> JobPaused;
-    private void OnJobPaused(SlaveJob slaveJob, JobData jobData) {
+      if (handler != null) handler(this, new EventArgs<SlaveJob, TaskData>(slaveJob, jobData));
+    }
+
+    public event EventHandler<EventArgs<SlaveJob, TaskData>> JobPaused;
+    private void OnJobPaused(SlaveJob slaveJob, TaskData jobData) {
       var handler = JobPaused;
-      if (handler != null) handler(this, new EventArgs<SlaveJob, JobData>(slaveJob, jobData));
-    }
-
-    public event EventHandler<EventArgs<Tuple<SlaveJob, JobData, Exception>>> JobFailed;
-    private void OnJobFailed(SlaveJob slaveJob, JobData jobData, Exception exception) {
+      if (handler != null) handler(this, new EventArgs<SlaveJob, TaskData>(slaveJob, jobData));
+    }
+
+    public event EventHandler<EventArgs<Tuple<SlaveJob, TaskData, Exception>>> JobFailed;
+    private void OnJobFailed(SlaveJob slaveJob, TaskData jobData, Exception exception) {
       var handler = JobFailed;
-      if (handler != null) handler(this, new EventArgs<Tuple<SlaveJob, JobData, Exception>>(new Tuple<SlaveJob, JobData, Exception>(slaveJob, jobData, exception)));
+      if (handler != null) handler(this, new EventArgs<Tuple<SlaveJob, TaskData, Exception>>(new Tuple<SlaveJob, TaskData, Exception>(slaveJob, jobData, exception)));
     }
 
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Manager/PluginManager.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Manager/PluginManager.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/Manager/PluginManager.cs	(revision 6721)
@@ -135,5 +135,5 @@
     /// then copies the required plugins for the job.
     /// </summary>        
-    public void PreparePlugins(Job job, out string configFileName) {
+    public void PreparePlugins(Task job, out string configFileName) {
       lock (locker) {
         log.LogMessage("Fetching plugins for job " + job.Id);
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/SlaveJob.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/SlaveJob.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/SlaveJob.cs	(revision 6721)
@@ -63,5 +63,5 @@
     }
 
-    public void StartJobAsync(Job job, JobData jobData) {
+    public void StartJobAsync(Task job, TaskData jobData) {
       try {
         this.JobId = job.Id;
@@ -86,5 +86,5 @@
     }
 
-    private void Prepare(Job job) {
+    private void Prepare(Task job) {
       string pluginDir = Path.Combine(pluginManager.PluginTempBaseDir, job.Id.ToString());
       string configFileName;
@@ -94,5 +94,5 @@
     }
 
-    private AppDomain CreateAppDomain(Job job, String pluginDir, string configFileName) {
+    private AppDomain CreateAppDomain(Task job, String pluginDir, string configFileName) {
       if (job.IsPrivileged) {
         appDomain = SandboxManager.CreateAndInitPrivilegedSandbox(job.Id.ToString(), pluginDir, Path.Combine(pluginDir, configFileName));
@@ -111,5 +111,5 @@
     }
 
-    private void StartJobInAppDomain(JobData jobData) {
+    private void StartJobInAppDomain(TaskData jobData) {
       executor.Start(jobData.Data);
       waitForStartBeforeKillSem.Release();
@@ -118,5 +118,5 @@
 
     public void DisposeAppDomain() {
-      log.LogMessage(string.Format("Shutting down Appdomain for Job {0}", JobId));
+      log.LogMessage(string.Format("Shutting down Appdomain for Task {0}", JobId));
       StopExecutorMonitoringThread();
 
@@ -154,5 +154,5 @@
     }
 
-    public JobData GetJobData() {
+    public TaskData GetJobData() {
       return executor.GetJobData();
     }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/WcfService.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/WcfService.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave/3.3/WcfService.cs	(revision 6721)
@@ -54,16 +54,16 @@
     }
 
-    #region Job Methods
-    public Job GetJob(Guid jobId) {
+    #region Task Methods
+    public Task GetJob(Guid jobId) {
       return CallHiveService(s => s.GetJob(jobId));
     }
 
-    public void UpdateJob(Job job) {
+    public void UpdateJob(Task job) {
       CallHiveService(s => s.UpdateJob(job));
     }
     #endregion
 
-    #region JobData Methods
-    public JobData GetJobData(Guid jobId) {
+    #region TaskData Methods
+    public TaskData GetJobData(Guid jobId) {
       return CallHiveService(s => s.GetJobData(jobId));
     }
@@ -72,8 +72,8 @@
     /// Uploads the jobData and sets a new jobState (while correctly setting Transferring state)
     /// </summary>
-    public void UpdateJobData(Job job, JobData jobData, Guid slaveId, JobState state, string exception = "") {
+    public void UpdateJobData(Task job, TaskData jobData, Guid slaveId, TaskState state, string exception = "") {
       CallHiveService(service => {
         service.UpdateJob(job);
-        job = service.UpdateJobState(job.Id, JobState.Transferring, slaveId, null, null);
+        job = service.UpdateJobState(job.Id, TaskState.Transferring, slaveId, null, null);
         HiveClient.TryAndRepeat(() => {
           service.UpdateJobData(job, jobData);
@@ -83,5 +83,5 @@
     }
 
-    public Job UpdateJobState(Guid jobId, JobState jobState, string exception) {
+    public Task UpdateJobState(Guid jobId, TaskState jobState, string exception) {
       return CallHiveService(s => s.UpdateJobState(jobId, jobState, ConfigManager.Instance.GetClientInfo().Id, null, exception));
     }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.3/HiveJobs/HiveJobView.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.3/HiveJobs/HiveJobView.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.3/HiveJobs/HiveJobView.cs	(revision 6721)
@@ -47,5 +47,5 @@
       Content.ItemJobChanged += new EventHandler(Content_JobItemChanged);
       Content.JobChanged += new EventHandler(Content_JobChanged);
-      Content.JobStateChanged += new EventHandler(Content_JobStateChanged);
+      Content.JobStateChanged += new EventHandler(Content_TaskStateChanged);
       Content.StateLogChanged += new EventHandler(Content_StateLogChanged);
     }
@@ -54,5 +54,5 @@
       Content.ItemJobChanged -= new EventHandler(Content_JobItemChanged);
       Content.JobChanged -= new EventHandler(Content_JobChanged);
-      Content.JobStateChanged -= new EventHandler(Content_JobStateChanged);
+      Content.JobStateChanged -= new EventHandler(Content_TaskStateChanged);
       Content.StateLogChanged -= new EventHandler(Content_StateLogChanged);
       base.DeregisterContentEvents();
@@ -68,5 +68,5 @@
       Content_JobItemChanged(this, EventArgs.Empty);
       Content_JobChanged(this, EventArgs.Empty);
-      Content_JobStateChanged(this, EventArgs.Empty);
+      Content_TaskStateChanged(this, EventArgs.Empty);
     }
 
@@ -119,7 +119,7 @@
     }
 
-    protected virtual void Content_JobStateChanged(object sender, EventArgs e) {
+    protected virtual void Content_TaskStateChanged(object sender, EventArgs e) {
       if (InvokeRequired) {
-        Invoke(new EventHandler(Content_JobStateChanged), sender, e);
+        Invoke(new EventHandler(Content_TaskStateChanged), sender, e);
       } else {
         if (Content != null && Content.Job != null) {
@@ -201,5 +201,5 @@
       this.computeInParallelCheckBox.Enabled = !this.ReadOnly && this.Content != null && this.Content.ItemJob != null && this.Content.ItemJob.IsParallelizable;
 
-      this.modifyItemButton.Enabled = (Content != null && Content.ItemJob.Item != null && (Content.Job.State == JobState.Paused || Content.Job.State == JobState.Offline || Content.Job.State == JobState.Finished || Content.Job.State == JobState.Failed || Content.Job.State == JobState.Aborted));
+      this.modifyItemButton.Enabled = (Content != null && Content.ItemJob.Item != null && (Content.Job.State == TaskState.Paused || Content.Job.State == TaskState.Offline || Content.Job.State == TaskState.Finished || Content.Job.State == TaskState.Failed || Content.Job.State == TaskState.Aborted));
 
       optimizerItemView.ReadOnly = true;
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.3/HiveJobs/HiveJobView.designer.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.3/HiveJobs/HiveJobView.designer.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.3/HiveJobs/HiveJobView.designer.cs	(revision 6721)
@@ -241,5 +241,5 @@
       this.jobStatusGroupBox.TabIndex = 24;
       this.jobStatusGroupBox.TabStop = false;
-      this.jobStatusGroupBox.Text = "Job Status";
+      this.jobStatusGroupBox.Text = "Task Status";
       // 
       // stateTextBox
@@ -416,5 +416,5 @@
       this.jobIdLabel.Size = new System.Drawing.Size(36, 13);
       this.jobIdLabel.TabIndex = 25;
-      this.jobIdLabel.Text = "JobId:";
+      this.jobIdLabel.Text = "TaskId:";
       // 
       // jobIdTextBox
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.3/HiveJobs/OptimizerHiveJobView.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.3/HiveJobs/OptimizerHiveJobView.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.3/HiveJobs/OptimizerHiveJobView.cs	(revision 6721)
@@ -82,7 +82,7 @@
       base.SetEnabledStateOfControls();
 
-      this.restartButton.Enabled = Content != null && Content.IsControllable && !Content.Job.Command.HasValue && (Content.Job.State == JobState.Paused || Content.Job.State == JobState.Failed || Content.Job.State == JobState.Aborted);
-      this.pauseButton.Enabled = Content != null && Content.IsControllable && !Content.Job.Command.HasValue && Content.Job.State == JobState.Calculating;
-      this.stopButton.Enabled = Content != null && Content.IsControllable && !Content.Job.Command.HasValue && (Content.Job.State == JobState.Calculating || Content.Job.State == JobState.Waiting || Content.Job.State == JobState.Paused);
+      this.restartButton.Enabled = Content != null && Content.IsControllable && !Content.Job.Command.HasValue && (Content.Job.State == TaskState.Paused || Content.Job.State == TaskState.Failed || Content.Job.State == TaskState.Aborted);
+      this.pauseButton.Enabled = Content != null && Content.IsControllable && !Content.Job.Command.HasValue && Content.Job.State == TaskState.Calculating;
+      this.stopButton.Enabled = Content != null && Content.IsControllable && !Content.Job.Command.HasValue && (Content.Job.State == TaskState.Calculating || Content.Job.State == TaskState.Waiting || Content.Job.State == TaskState.Paused);
     }
   }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogGanttChartListView.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogGanttChartListView.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogGanttChartListView.cs	(revision 6721)
@@ -65,5 +65,5 @@
           DateTime maxValue = Content.Max(x => x.Count > 0 ? x.Max(y => y.DateTime) : DateTime.MinValue);
           DateTime upperLimit;
-          if (Content.All(x => x.Count > 0 ? (x.Last().State == JobState.Finished || x.Last().State == JobState.Failed || x.Last().State == JobState.Aborted) : true)) {
+          if (Content.All(x => x.Count > 0 ? (x.Last().State == TaskState.Finished || x.Last().State == TaskState.Failed || x.Last().State == TaskState.Aborted) : true)) {
             upperLimit = DateTime.FromOADate(Math.Min(DateTime.Now.AddSeconds(10).ToOADate(), maxValue.AddSeconds(10).ToOADate()));
           } else {
@@ -73,5 +73,5 @@
           for (int i = 0; i < Content.Count; i++) {
             for (int j = 0; j < Content[i].Count - 1; j++) {
-              if (Content[i][j].State != JobState.Offline)
+              if (Content[i][j].State != TaskState.Offline)
                 AddData(ganttChart, i.ToString(), Content[i][j], Content[i][j + 1], upperLimit);
             }
@@ -85,12 +85,12 @@
 
     public static void SetupCategories(GanttChart ganttChart) {
-      ganttChart.AddCategory(JobState.Offline.ToString(), Color.Gainsboro);
-      ganttChart.AddCategory(JobState.Waiting.ToString(), Color.NavajoWhite);
-      ganttChart.AddCategory(JobState.Paused.ToString(), Color.PaleVioletRed);
-      ganttChart.AddCategory(JobState.Transferring.ToString(), Color.CornflowerBlue);
-      ganttChart.AddCategory(JobState.Calculating.ToString(), Color.DarkGreen);
-      ganttChart.AddCategory(JobState.Finished.ToString(), Color.White);
-      ganttChart.AddCategory(JobState.Aborted.ToString(), Color.Orange);
-      ganttChart.AddCategory(JobState.Failed.ToString(), Color.Red);
+      ganttChart.AddCategory(TaskState.Offline.ToString(), Color.Gainsboro);
+      ganttChart.AddCategory(TaskState.Waiting.ToString(), Color.NavajoWhite);
+      ganttChart.AddCategory(TaskState.Paused.ToString(), Color.PaleVioletRed);
+      ganttChart.AddCategory(TaskState.Transferring.ToString(), Color.CornflowerBlue);
+      ganttChart.AddCategory(TaskState.Calculating.ToString(), Color.DarkGreen);
+      ganttChart.AddCategory(TaskState.Finished.ToString(), Color.White);
+      ganttChart.AddCategory(TaskState.Aborted.ToString(), Color.Orange);
+      ganttChart.AddCategory(TaskState.Failed.ToString(), Color.Red);
     }
 
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogGanttChartView.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogGanttChartView.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.3/StateLog/StateLogGanttChartView.cs	(revision 6721)
@@ -63,5 +63,5 @@
         if (Content.Count > 0) {
           DateTime upperLimit;
-          if (Content.Last().State == JobState.Finished || Content.Last().State == JobState.Failed || Content.Last().State == JobState.Aborted) {
+          if (Content.Last().State == TaskState.Finished || Content.Last().State == TaskState.Failed || Content.Last().State == TaskState.Aborted) {
             upperLimit = DateTime.FromOADate(Math.Min(Content.Max(x => x.DateTime).ToOADate(), DateTime.Now.AddSeconds(10).ToOADate()));
           } else {
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.3/TreeView/DeleteJobTreeNodeAction.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.3/TreeView/DeleteJobTreeNodeAction.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Views/3.3/TreeView/DeleteJobTreeNodeAction.cs	(revision 6721)
@@ -13,5 +13,5 @@
 
     public string Name {
-      get { return "Delete Job"; }
+      get { return "Delete Task"; }
     }
 
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ConcurrentJobDownloader.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ConcurrentJobDownloader.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ConcurrentJobDownloader.cs	(revision 6721)
@@ -35,5 +35,5 @@
     private Semaphore downloadSemaphore;
     private Semaphore deserializeSemaphore;
-    
+
     public ConcurrentJobDownloader(int concurrentDownloads, int concurrentDeserializations) {
       downloadSemaphore = new Semaphore(concurrentDownloads, concurrentDownloads);
@@ -42,6 +42,6 @@
     }
 
-    public void DownloadJob(Job job, Action<Job, T> onFinishedAction) {
-      Task<T> task = Task<JobData>.Factory.StartNew((x) => DownloadJob(x), job.Id)
+    public void DownloadJob(Task job, Action<Task, T> onFinishedAction) {
+      Task<T> task = Task<TaskData>.Factory.StartNew((x) => DownloadJob(x), job.Id)
                                      .ContinueWith((x) => DeserializeJob(x.Result));
       task.ContinueWith((x) => OnJobFinished(job, x, onFinishedAction), TaskContinuationOptions.ExecuteSynchronously | TaskContinuationOptions.OnlyOnRanToCompletion);
@@ -49,8 +49,8 @@
     }
 
-    private void OnJobFinished(Job job, Task<T> task, Action<Job, T> onFinishedAction) {
+    private void OnJobFinished(Task job, Task<T> task, Action<Task, T> onFinishedAction) {
       onFinishedAction(job, task.Result);
     }
-    private void OnJobFailed(Job job, Task<T> task, Action<Job, T> onFinishedAction) {
+    private void OnJobFailed(Task job, Task<T> task, Action<Task, T> onFinishedAction) {
       task.Exception.Flatten().Handle((e) => { return true; });
       OnExceptionOccured(task.Exception.Flatten());
@@ -58,8 +58,8 @@
     }
 
-    protected JobData DownloadJob(object jobId) {
+    protected TaskData DownloadJob(object jobId) {
       downloadSemaphore.WaitOne();
       deserializeSemaphore.WaitOne();
-      JobData result;
+      TaskData result;
       try {
         if (abort) return null;
@@ -72,8 +72,8 @@
     }
 
-    protected T DeserializeJob(JobData jobData) {
+    protected T DeserializeJob(TaskData jobData) {
       try {
         if (abort || jobData == null) return null;
-        Job job = ServiceLocator.Instance.CallHiveService(s => s.GetJob(jobData.JobId));
+        Task job = ServiceLocator.Instance.CallHiveService(s => s.GetJob(jobData.TaskId));
         if (job == null) return null;
         var deserializedJob = PersistenceUtil.Deserialize<T>(jobData.Data);
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj	(revision 6721)
@@ -165,9 +165,9 @@
     <Compile Include="ServiceClients\SlaveGroup.cs" />
     <Compile Include="ServiceClients\Slave.cs" />
-    <Compile Include="ServiceClients\LightweightJob.cs" />
+    <Compile Include="ServiceClients\LightweightTask.cs" />
     <Compile Include="ServiceClients\ExecutorMessageContainer.cs" />
     <Compile Include="ServiceClients\MessageContainer.cs" />
     <Compile Include="ServiceClients\HiveServiceClient.cs" />
-    <Compile Include="ServiceClients\Job.cs" />
+    <Compile Include="ServiceClients\Task.cs" />
     <Compile Include="ServiceLocator.cs" />
     <None Include="app_ascheibe.config" />
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/HiveClient.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/HiveClient.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/HiveClient.cs	(revision 6721)
@@ -31,4 +31,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.PluginInfrastructure;
+using TS = System.Threading.Tasks;
 
 namespace HeuristicLab.Clients.Hive {
@@ -217,5 +218,5 @@
       ServiceLocator.Instance.CallHiveService(service => {
         foreach (HiveJob job in refreshableHiveExperiment.GetAllHiveJobs()) {
-          if (job.Job.State != JobState.Finished && job.Job.State != JobState.Aborted && job.Job.State != JobState.Failed)
+          if (job.Job.State != TaskState.Finished && job.Job.State != TaskState.Aborted && job.Job.State != TaskState.Failed)
             service.PauseJob(job.Job.Id);
         }
@@ -227,5 +228,5 @@
       ServiceLocator.Instance.CallHiveService(service => {
         foreach (HiveJob job in refreshableHiveExperiment.GetAllHiveJobs()) {
-          if (job.Job.State != JobState.Finished && job.Job.State != JobState.Aborted && job.Job.State != JobState.Failed)
+          if (job.Job.State != TaskState.Finished && job.Job.State != TaskState.Aborted && job.Job.State != TaskState.Failed)
             service.StopJob(job.Job.Id);
         }
@@ -282,7 +283,7 @@
         refreshableHiveExperiment.Progress.Status = "Uploading jobs...";
 
-        var tasks = new List<Task>();
+        var tasks = new List<TS.Task>();
         foreach (HiveJob hiveJob in refreshableHiveExperiment.HiveJobs) {
-          tasks.Add(Task.Factory.StartNew((hj) => {
+          tasks.Add(TS.Task.Factory.StartNew((hj) => {
             UploadJobWithChildren(refreshableHiveExperiment.Progress, (HiveJob)hj, null, resourceIds, jobCount, totalJobCount, configFilePlugin.Id, refreshableHiveExperiment.HiveExperiment.Id, refreshableHiveExperiment.Log, refreshableHiveExperiment.HiveExperiment.IsPrivileged, cancellationToken);
           }, hiveJob)
@@ -290,5 +291,5 @@
         }
         try {
-          Task.WaitAll(tasks.ToArray());
+          TS.Task.WaitAll(tasks.ToArray());
         }
         catch (AggregateException ae) {
@@ -341,5 +342,5 @@
           jobCount[0]++;
         }
-        JobData jobData;
+        TaskData jobData;
         List<IPluginDescription> plugins;
 
@@ -384,7 +385,7 @@
         }
 
-        var tasks = new List<Task>();
+        var tasks = new List<TS.Task>();
         foreach (HiveJob child in hiveJob.ChildHiveJobs) {
-          tasks.Add(Task.Factory.StartNew((tuple) => {
+          tasks.Add(TS.Task.Factory.StartNew((tuple) => {
             var arguments = (Tuple<HiveJob, HiveJob>)tuple;
             UploadJobWithChildren(progress, arguments.Item1, arguments.Item2, groups, jobCount, totalJobCount, configPluginId, hiveExperimentId, log, isPrivileged, cancellationToken);
@@ -394,5 +395,5 @@
         jobUploadSemaphore.Release(); semaphoreReleased = true; // the semaphore has to be release before waitall!
         try {
-          Task.WaitAll(tasks.ToArray());
+          TS.Task.WaitAll(tasks.ToArray());
         }
         catch (AggregateException ae) {
@@ -414,8 +415,8 @@
         refreshableHiveExperiment.IsProgressing = true;
         int totalJobCount = 0;
-        IEnumerable<LightweightJob> allJobs;
+        IEnumerable<LightweightTask> allJobs;
 
         refreshableHiveExperiment.Progress.Status = "Connecting to Server...";
-        // fetch all Job objects to create the full tree of tree of HiveJob objects
+        // fetch all Task objects to create the full tree of tree of HiveJob objects
         refreshableHiveExperiment.Progress.Status = "Downloading list of jobs...";
         allJobs = ServiceLocator.Instance.CallHiveService(s => s.GetLightweightExperimentJobs(hiveExperiment.Id));
@@ -436,5 +437,5 @@
         IDictionary<Guid, HiveJob> allHiveJobs = downloader.Results;
 
-        refreshableHiveExperiment.HiveJobs = new ItemCollection<HiveJob>(allHiveJobs.Values.Where(x => !x.Job.ParentJobId.HasValue));
+        refreshableHiveExperiment.HiveJobs = new ItemCollection<HiveJob>(allHiveJobs.Values.Where(x => !x.Job.ParentTaskId.HasValue));
 
         if (refreshableHiveExperiment.IsFinished()) {
@@ -456,10 +457,10 @@
     }
 
-    private static void BuildHiveJobTree(HiveJob parentHiveJob, IEnumerable<LightweightJob> allJobs, IDictionary<Guid, HiveJob> allHiveJobs) {
-      IEnumerable<LightweightJob> childJobs = from job in allJobs
-                                              where job.ParentJobId.HasValue && job.ParentJobId.Value == parentHiveJob.Job.Id
-                                              orderby job.DateCreated ascending
-                                              select job;
-      foreach (LightweightJob job in childJobs) {
+    private static void BuildHiveJobTree(HiveJob parentHiveJob, IEnumerable<LightweightTask> allJobs, IDictionary<Guid, HiveJob> allHiveJobs) {
+      IEnumerable<LightweightTask> childJobs = from job in allJobs
+                                               where job.ParentTaskId.HasValue && job.ParentTaskId.Value == parentHiveJob.Job.Id
+                                               orderby job.DateCreated ascending
+                                               select job;
+      foreach (LightweightTask job in childJobs) {
         HiveJob childHiveJob = allHiveJobs[job.Id];
         parentHiveJob.AddChildHiveJob(childHiveJob);
@@ -481,5 +482,5 @@
 
     public static ItemJob LoadItemJob(Guid jobId) {
-      JobData jobData = ServiceLocator.Instance.CallHiveService(s => s.GetJobData(jobId));
+      TaskData jobData = ServiceLocator.Instance.CallHiveService(s => s.GetJobData(jobId));
       try {
         return PersistenceUtil.Deserialize<ItemJob>(jobData.Data);
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/HiveJobDownloader.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/HiveJobDownloader.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/HiveJobDownloader.cs	(revision 6721)
@@ -73,5 +73,5 @@
     public void StartAsync() {
       foreach (Guid jobId in jobIds) {
-        Job job = ServiceLocator.Instance.CallHiveService(s => s.GetJob(jobId));
+        Task job = ServiceLocator.Instance.CallHiveService(s => s.GetJob(jobId));
 
         jobDownloader.DownloadJob(job,
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/HiveJobs/EngineHiveJob.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/HiveJobs/EngineHiveJob.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/HiveJobs/EngineHiveJob.cs	(revision 6721)
@@ -47,10 +47,10 @@
     #endregion
 
-    public override JobData GetAsJobData(bool withoutChildOptimizers, out List<IPluginDescription> plugins) {
+    public override TaskData GetAsJobData(bool withoutChildOptimizers, out List<IPluginDescription> plugins) {
       plugins = new List<IPluginDescription>();
       if (this.itemJob == null)
         return null;
 
-      JobData jobData = new JobData();
+      TaskData jobData = new TaskData();
       IEnumerable<Type> usedTypes;
 
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/HiveJobs/HiveJob.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/HiveJobs/HiveJob.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/HiveJobs/HiveJob.cs	(revision 6721)
@@ -34,5 +34,5 @@
 namespace HeuristicLab.Clients.Hive {
 
-  [Item("Hive Job", "Represents a hive job.")]
+  [Item("Hive Task", "Represents a hive job.")]
   [StorableClass]
   public class HiveJob : NamedItem, IItemTree<HiveJob> {
@@ -45,11 +45,11 @@
           return HeuristicLab.Common.Resources.VSImageLibrary.Event;
         } else {
-          if (job.State == JobState.Waiting) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutablePrepared;
-          else if (job.State == JobState.Calculating) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutableStarted;
-          else if (job.State == JobState.Transferring) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutableStarted;
-          else if (job.State == JobState.Paused) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutablePaused;
-          else if (job.State == JobState.Aborted) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutableStopped;
-          else if (job.State == JobState.Failed) return HeuristicLab.Common.Resources.VSImageLibrary.Error;
-          else if (job.State == JobState.Finished) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutableStopped;
+          if (job.State == TaskState.Waiting) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutablePrepared;
+          else if (job.State == TaskState.Calculating) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutableStarted;
+          else if (job.State == TaskState.Transferring) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutableStarted;
+          else if (job.State == TaskState.Paused) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutablePaused;
+          else if (job.State == TaskState.Aborted) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutableStopped;
+          else if (job.State == TaskState.Failed) return HeuristicLab.Common.Resources.VSImageLibrary.Error;
+          else if (job.State == TaskState.Finished) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutableStopped;
           else return HeuristicLab.Common.Resources.VSImageLibrary.Event;
         }
@@ -58,6 +58,6 @@
 
     [Storable]
-    protected Job job;
-    public Job Job {
+    protected Task job;
+    public Task Job {
       get { return job; }
       set {
@@ -154,6 +154,6 @@
     #region Constructors and Cloning
     public HiveJob() {
-      this.Job = new Job() { CoresNeeded = 1, MemoryNeeded = 0 };
-      job.State = JobState.Offline;
+      this.Job = new Task() { CoresNeeded = 1, MemoryNeeded = 0 };
+      job.State = TaskState.Offline;
       this.childHiveJobs = new ItemList<HiveJob>();
       syncJobsWithOptimizers = true;
@@ -168,5 +168,5 @@
     }
 
-    public HiveJob(Job job, JobData jobData, bool autoCreateChildHiveJobs) {
+    public HiveJob(Task job, TaskData jobData, bool autoCreateChildHiveJobs) {
       this.syncJobsWithOptimizers = autoCreateChildHiveJobs;
       this.Job = job;
@@ -251,8 +251,8 @@
     }
 
-    public virtual void UpdateFromLightweightJob(LightweightJob lightweightJob) {
+    public virtual void UpdateFromLightweightJob(LightweightTask lightweightJob) {
       if (lightweightJob != null) {
         job.Id = lightweightJob.Id;
-        job.ParentJobId = lightweightJob.ParentJobId;
+        job.ParentTaskId = lightweightJob.ParentTaskId;
         job.ExecutionTime = lightweightJob.ExecutionTime;
         job.State = lightweightJob.State;
@@ -268,10 +268,10 @@
 
     /// <summary>
-    /// Creates a JobData object containing the Job and the IJob-Object as byte[]
+    /// Creates a TaskData object containing the Task and the IJob-Object as byte[]
     /// </summary>
     /// <param name="withoutChildOptimizers">
     ///   if true the Child-Optimizers will not be serialized (if the job contains an Experiment)
     /// </param>
-    public virtual JobData GetAsJobData(bool withoutChildOptimizers, out List<IPluginDescription> plugins) {
+    public virtual TaskData GetAsJobData(bool withoutChildOptimizers, out List<IPluginDescription> plugins) {
       plugins = new List<IPluginDescription>();
       if (this.itemJob == null)
@@ -280,5 +280,5 @@
       IEnumerable<Type> usedTypes;
       byte[] jobByteArray = PersistenceUtil.Serialize(this.ItemJob, out usedTypes);
-      JobData jobData = new JobData() { JobId = job.Id, Data = jobByteArray };
+      TaskData jobData = new TaskData() { TaskId = job.Id, Data = jobByteArray };
       PluginUtil.CollectDeclaringPlugins(plugins, usedTypes);
       return jobData;
@@ -478,10 +478,10 @@
     public void Restart() {
       ServiceLocator.Instance.CallHiveService(service => {
-        JobData jobData = new JobData();
-        jobData.JobId = this.job.Id;
+        TaskData jobData = new TaskData();
+        jobData.TaskId = this.job.Id;
         jobData.Data = PersistenceUtil.Serialize(this.itemJob);
         service.UpdateJobData(this.Job, jobData);
         service.RestartJob(this.job.Id);
-        Job job = service.GetJob(this.job.Id);
+        Task job = service.GetJob(this.job.Id);
         this.job.LastJobDataUpdate = job.LastJobDataUpdate;
       });
@@ -504,5 +504,5 @@
   }
 
-  [Item("Hive Job", "Represents a hive job.")]
+  [Item("Hive Task", "Represents a hive job.")]
   [StorableClass]
   public class HiveJob<T> : HiveJob where T : ItemJob {
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/HiveJobs/OptimizerHiveJob.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/HiveJobs/OptimizerHiveJob.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/HiveJobs/OptimizerHiveJob.cs	(revision 6721)
@@ -232,5 +232,5 @@
     private void UpdateOptimizerInExperiment(Optimization.Experiment experiment, OptimizerJob optimizerJob) {
       if (optimizerJob.IndexInParentOptimizerList < 0)
-        throw new IndexOutOfRangeException("IndexInParentOptimizerList must be equal or greater than zero! The Job is invalid and the optimizer-tree cannot be reassembled.");
+        throw new IndexOutOfRangeException("IndexInParentOptimizerList must be equal or greater than zero! The Task is invalid and the optimizer-tree cannot be reassembled.");
 
       while (experiment.Optimizers.Count < optimizerJob.IndexInParentOptimizerList) {
@@ -250,5 +250,5 @@
     /// <summary>
     /// Sets the IndexInParentOptimizerList property of the OptimizerJob
-    /// according to the position in the OptimizerList of the parentHiveJob.Job
+    /// according to the position in the OptimizerList of the parentHiveJob.Task
     /// Recursively updates all the child-jobs as well
     /// </summary>
@@ -279,5 +279,5 @@
         // if job is in state Paused, it has to preserve its ResultCollection, which is cleared when a optimizer is added to an experiment
         OptimizerJob optimizerJobClone = null;
-        if (optimizerHiveJob.Job.State == JobState.Paused) {
+        if (optimizerHiveJob.Job.State == TaskState.Paused) {
           optimizerJobClone = (OptimizerJob)optimizerHiveJob.ItemJob.Clone();
         }
@@ -291,5 +291,5 @@
         }
 
-        if (optimizerHiveJob.Job.State == JobState.Paused) {
+        if (optimizerHiveJob.Job.State == TaskState.Paused) {
           optimizerHiveJob.ItemJob = optimizerJobClone;
         }
@@ -299,10 +299,10 @@
 
     /// <summary>
-    /// Creates a JobData object containing the Job and the IJob-Object as byte[]
+    /// Creates a TaskData object containing the Task and the IJob-Object as byte[]
     /// </summary>
     /// <param name="withoutChildOptimizers">
     ///   if true the Child-Optimizers will not be serialized (if the job contains an Experiment)
     /// </param>
-    public override JobData GetAsJobData(bool withoutChildOptimizers, out List<IPluginDescription> plugins) {
+    public override TaskData GetAsJobData(bool withoutChildOptimizers, out List<IPluginDescription> plugins) {
       plugins = new List<IPluginDescription>();
       if (this.itemJob == null) // || this.jobItem.Optimizer == null
@@ -326,5 +326,5 @@
       }
 
-      JobData jobData = new JobData() { JobId = job.Id, Data = jobByteArray };
+      TaskData jobData = new TaskData() { TaskId = job.Id, Data = jobByteArray };
       PluginUtil.CollectDeclaringPlugins(plugins, usedTypes);
       return jobData;
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/JobResultPoller.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/JobResultPoller.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/JobResultPoller.cs	(revision 6721)
@@ -105,7 +105,7 @@
     }
 
-    public IEnumerable<LightweightJob> FetchJobResults() {
+    public IEnumerable<LightweightTask> FetchJobResults() {
       return ServiceLocator.Instance.CallHiveService(service => {
-        var responses = new List<LightweightJob>();
+        var responses = new List<LightweightTask>();
         responses.AddRange(service.GetLightweightExperimentJobs(hiveExperimentId));
         OnJobResultsReceived(responses);
@@ -114,8 +114,8 @@
     }
 
-    public event EventHandler<EventArgs<IEnumerable<LightweightJob>>> JobResultsReceived;
-    private void OnJobResultsReceived(IEnumerable<LightweightJob> lightweightJobs) {
+    public event EventHandler<EventArgs<IEnumerable<LightweightTask>>> JobResultsReceived;
+    private void OnJobResultsReceived(IEnumerable<LightweightTask> lightweightJobs) {
       var handler = JobResultsReceived;
-      if (handler != null) handler(this, new EventArgs<IEnumerable<LightweightJob>>(lightweightJobs));
+      if (handler != null) handler(this, new EventArgs<IEnumerable<LightweightTask>>(lightweightJobs));
     }
 
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/Jobs/ItemJob.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/Jobs/ItemJob.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/Jobs/ItemJob.cs	(revision 6721)
@@ -28,5 +28,5 @@
 
 namespace HeuristicLab.Clients.Hive {
-  [Item("Item Job", "Represents a executable hive job which contains a HeuristicLab Item.")]
+  [Item("Item Task", "Represents a executable hive job which contains a HeuristicLab Item.")]
   [StorableClass]
   public abstract class ItemJob : NamedItem, IJob {
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/Jobs/OptimizerJob.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/Jobs/OptimizerJob.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/Jobs/OptimizerJob.cs	(revision 6721)
@@ -29,5 +29,5 @@
 
 namespace HeuristicLab.Clients.Hive.Jobs {
-  [Item("Optimizer Job", "Represents Job which executes a IOptimizer object.")]
+  [Item("Optimizer Task", "Represents Task which executes a IOptimizer object.")]
   [StorableClass]
   public class OptimizerJob : ItemJob {
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/RefreshableHiveExperiment.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/RefreshableHiveExperiment.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/RefreshableHiveExperiment.cs	(revision 6721)
@@ -225,5 +225,5 @@
     }
     #endregion
-    
+
     #region JobResultPoller Events
 
@@ -248,10 +248,10 @@
     private void RegisterResultPollingEvents() {
       jobResultPoller.ExceptionOccured += new EventHandler<EventArgs<Exception>>(jobResultPoller_ExceptionOccured);
-      jobResultPoller.JobResultsReceived += new EventHandler<EventArgs<IEnumerable<LightweightJob>>>(jobResultPoller_JobResultReceived);
+      jobResultPoller.JobResultsReceived += new EventHandler<EventArgs<IEnumerable<LightweightTask>>>(jobResultPoller_JobResultReceived);
       jobResultPoller.IsPollingChanged += new EventHandler(jobResultPoller_IsPollingChanged);
     }
     private void DeregisterResultPollingEvents() {
       jobResultPoller.ExceptionOccured -= new EventHandler<EventArgs<Exception>>(jobResultPoller_ExceptionOccured);
-      jobResultPoller.JobResultsReceived -= new EventHandler<EventArgs<IEnumerable<LightweightJob>>>(jobResultPoller_JobResultReceived);
+      jobResultPoller.JobResultsReceived -= new EventHandler<EventArgs<IEnumerable<LightweightTask>>>(jobResultPoller_JobResultReceived);
       jobResultPoller.IsPollingChanged -= new EventHandler(jobResultPoller_IsPollingChanged);
     }
@@ -262,10 +262,10 @@
       }
     }
-    private void jobResultPoller_JobResultReceived(object sender, EventArgs<IEnumerable<LightweightJob>> e) {
-      foreach (LightweightJob lightweightJob in e.Value) {
+    private void jobResultPoller_JobResultReceived(object sender, EventArgs<IEnumerable<LightweightTask>> e) {
+      foreach (LightweightTask lightweightJob in e.Value) {
         HiveJob hiveJob = GetHiveJobById(lightweightJob.Id);
         if (hiveJob != null) {
           // lastJobDataUpdate equals DateTime.MinValue right after it was uploaded. When the first results are polled, this value is updated
-          if (hiveJob.Job.State == JobState.Offline && lightweightJob.State != JobState.Finished && lightweightJob.State != JobState.Failed && lightweightJob.State != JobState.Aborted) {
+          if (hiveJob.Job.State == TaskState.Offline && lightweightJob.State != TaskState.Finished && lightweightJob.State != TaskState.Failed && lightweightJob.State != TaskState.Aborted) {
             hiveJob.Job.LastJobDataUpdate = lightweightJob.LastJobDataUpdate;
           }
@@ -289,9 +289,9 @@
                 // if the job is paused, download but don't integrate into parent optimizer (to avoid Prepare)
 
-                if (localJob.State == JobState.Paused) {
+                if (localJob.State == TaskState.Paused) {
                   localHiveJob.ItemJob = itemJob;
                 } else {
-                  if (localJob.ParentJobId.HasValue) {
-                    HiveJob parentHiveJob = GetHiveJobById(localJob.ParentJobId.Value);
+                  if (localJob.ParentTaskId.HasValue) {
+                    HiveJob parentHiveJob = GetHiveJobById(localJob.ParentTaskId.Value);
                     parentHiveJob.IntegrateChild(itemJob, localJob.Id);
                   } else {
@@ -327,13 +327,13 @@
       var jobs = this.GetAllHiveJobs();
       hiveExperiment.JobCount = jobs.Count();
-      hiveExperiment.CalculatingCount = jobs.Count(j => j.Job.State == JobState.Calculating);
-      hiveExperiment.FinishedCount = jobs.Count(j => j.Job.State == JobState.Finished);
+      hiveExperiment.CalculatingCount = jobs.Count(j => j.Job.State == TaskState.Calculating);
+      hiveExperiment.FinishedCount = jobs.Count(j => j.Job.State == TaskState.Finished);
       OnJobStatisticsChanged();
     }
 
     public bool AllJobsFinished() {
-      return this.GetAllHiveJobs().All(j => (j.Job.State == JobState.Finished
-                                                   || j.Job.State == JobState.Aborted
-                                                   || j.Job.State == JobState.Failed)
+      return this.GetAllHiveJobs().All(j => (j.Job.State == TaskState.Finished
+                                                   || j.Job.State == TaskState.Aborted
+                                                   || j.Job.State == TaskState.Failed)
                                                    && j.IsFinishedJobDownloaded);
     }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/HiveServiceClient.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/HiveServiceClient.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/HiveServiceClient.cs	(revision 6721)
@@ -16,7 +16,7 @@
   [System.Runtime.Serialization.DataContractAttribute(Name = "HiveItem", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
   [System.SerializableAttribute()]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.LightweightJob))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.LightweightTask))]
   [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.StateLog))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Job))]
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Task))]
   [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Downtime))]
   [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.HiveExperimentPermission))]
@@ -63,8 +63,8 @@
   [System.Diagnostics.DebuggerStepThroughAttribute()]
   [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "LightweightJob", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "LightweightTask", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
   [System.SerializableAttribute()]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Job))]
-  public partial class LightweightJob : HeuristicLab.Clients.Hive.HiveItem {
+  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.Hive.Task))]
+  public partial class LightweightTask : HeuristicLab.Clients.Hive.HiveItem {
 
     [System.Runtime.Serialization.OptionalFieldAttribute()]
@@ -78,8 +78,8 @@
 
     [System.Runtime.Serialization.OptionalFieldAttribute()]
-    private System.Nullable<System.Guid> ParentJobIdField;
-
-    [System.Runtime.Serialization.OptionalFieldAttribute()]
-    private HeuristicLab.Clients.Hive.JobState StateField;
+    private System.Nullable<System.Guid> ParentTaskIdField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private HeuristicLab.Clients.Hive.TaskState StateField;
 
     [System.Runtime.Serialization.OptionalFieldAttribute()]
@@ -126,18 +126,18 @@
 
     [System.Runtime.Serialization.DataMemberAttribute()]
-    public System.Nullable<System.Guid> ParentJobId {
-      get {
-        return this.ParentJobIdField;
-      }
-      set {
-        if ((this.ParentJobIdField.Equals(value) != true)) {
-          this.ParentJobIdField = value;
-          this.RaisePropertyChanged("ParentJobId");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public HeuristicLab.Clients.Hive.JobState State {
+    public System.Nullable<System.Guid> ParentTaskId {
+      get {
+        return this.ParentTaskIdField;
+      }
+      set {
+        if ((this.ParentTaskIdField.Equals(value) != true)) {
+          this.ParentTaskIdField = value;
+          this.RaisePropertyChanged("ParentTaskId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public HeuristicLab.Clients.Hive.TaskState State {
       get {
         return this.StateField;
@@ -178,11 +178,11 @@
 
     [System.Runtime.Serialization.OptionalFieldAttribute()]
-    private System.Guid JobIdField;
-
-    [System.Runtime.Serialization.OptionalFieldAttribute()]
     private System.Nullable<System.Guid> SlaveIdField;
 
     [System.Runtime.Serialization.OptionalFieldAttribute()]
-    private HeuristicLab.Clients.Hive.JobState StateField;
+    private HeuristicLab.Clients.Hive.TaskState StateField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid TaskIdField;
 
     [System.Runtime.Serialization.OptionalFieldAttribute()]
@@ -216,17 +216,4 @@
 
     [System.Runtime.Serialization.DataMemberAttribute()]
-    public System.Guid JobId {
-      get {
-        return this.JobIdField;
-      }
-      set {
-        if ((this.JobIdField.Equals(value) != true)) {
-          this.JobIdField = value;
-          this.RaisePropertyChanged("JobId");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
     public System.Nullable<System.Guid> SlaveId {
       get {
@@ -242,5 +229,5 @@
 
     [System.Runtime.Serialization.DataMemberAttribute()]
-    public HeuristicLab.Clients.Hive.JobState State {
+    public HeuristicLab.Clients.Hive.TaskState State {
       get {
         return this.StateField;
@@ -255,4 +242,17 @@
 
     [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid TaskId {
+      get {
+        return this.TaskIdField;
+      }
+      set {
+        if ((this.TaskIdField.Equals(value) != true)) {
+          this.TaskIdField = value;
+          this.RaisePropertyChanged("TaskId");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
     public System.Nullable<System.Guid> UserId {
       get {
@@ -270,7 +270,7 @@
   [System.Diagnostics.DebuggerStepThroughAttribute()]
   [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "Job", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "Task", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
   [System.SerializableAttribute()]
-  public partial class Job : HeuristicLab.Clients.Hive.LightweightJob {
+  public partial class Task : HeuristicLab.Clients.Hive.LightweightTask {
 
     [System.Runtime.Serialization.OptionalFieldAttribute()]
@@ -1144,6 +1144,6 @@
 
   [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "JobState", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
-  public enum JobState : int {
+  [System.Runtime.Serialization.DataContractAttribute(Name = "TaskState", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  public enum TaskState : int {
 
     [System.Runtime.Serialization.EnumMemberAttribute()]
@@ -1213,7 +1213,7 @@
   [System.Diagnostics.DebuggerStepThroughAttribute()]
   [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "JobData", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "TaskData", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.Hive.DataTransfer")]
   [System.SerializableAttribute()]
-  public partial class JobData : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+  public partial class TaskData : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
 
     [System.NonSerializedAttribute()]
@@ -1224,8 +1224,8 @@
 
     [System.Runtime.Serialization.OptionalFieldAttribute()]
-    private System.Guid JobIdField;
-
-    [System.Runtime.Serialization.OptionalFieldAttribute()]
     private System.DateTime LastUpdateField;
+
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid TaskIdField;
 
     public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
@@ -1252,17 +1252,4 @@
 
     [System.Runtime.Serialization.DataMemberAttribute()]
-    public System.Guid JobId {
-      get {
-        return this.JobIdField;
-      }
-      set {
-        if ((this.JobIdField.Equals(value) != true)) {
-          this.JobIdField = value;
-          this.RaisePropertyChanged("JobId");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
     public System.DateTime LastUpdate {
       get {
@@ -1273,4 +1260,17 @@
           this.LastUpdateField = value;
           this.RaisePropertyChanged("LastUpdate");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid TaskId {
+      get {
+        return this.TaskIdField;
+      }
+      set {
+        if ((this.TaskIdField.Equals(value) != true)) {
+          this.TaskIdField = value;
+          this.RaisePropertyChanged("TaskId");
         }
       }
@@ -1421,9 +1421,9 @@
 
     [System.Runtime.Serialization.OptionalFieldAttribute()]
-    private System.Guid JobIdField;
-
-    [System.Runtime.Serialization.OptionalFieldAttribute()]
     private HeuristicLab.Clients.Hive.MessageContainer.MessageType MessageField;
 
+    [System.Runtime.Serialization.OptionalFieldAttribute()]
+    private System.Guid TaskIdField;
+
     public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
       get {
@@ -1432,17 +1432,4 @@
       set {
         this.extensionDataField = value;
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public System.Guid JobId {
-      get {
-        return this.JobIdField;
-      }
-      set {
-        if ((this.JobIdField.Equals(value) != true)) {
-          this.JobIdField = value;
-          this.RaisePropertyChanged("JobId");
-        }
       }
     }
@@ -1457,4 +1444,17 @@
           this.MessageField = value;
           this.RaisePropertyChanged("Message");
+        }
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute()]
+    public System.Guid TaskId {
+      get {
+        return this.TaskIdField;
+      }
+      set {
+        if ((this.TaskIdField.Equals(value) != true)) {
+          this.TaskIdField = value;
+          this.RaisePropertyChanged("TaskId");
         }
       }
@@ -1576,5 +1576,5 @@
 
     [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetJobsByResourceId", ReplyAction = "http://tempuri.org/IHiveService/GetJobsByResourceIdResponse")]
-    System.Collections.Generic.List<HeuristicLab.Clients.Hive.Job> GetJobsByResourceId(System.Guid resourceId);
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.Task> GetJobsByResourceId(System.Guid resourceId);
 
     [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/TriggerEventManager", ReplyAction = "http://tempuri.org/IHiveService/TriggerEventManagerResponse")]
@@ -1600,32 +1600,32 @@
 
     [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/AddJob", ReplyAction = "http://tempuri.org/IHiveService/AddJobResponse")]
-    System.Guid AddJob(HeuristicLab.Clients.Hive.Job job, HeuristicLab.Clients.Hive.JobData jobData, System.Collections.Generic.List<System.Guid> resourceIds);
+    System.Guid AddJob(HeuristicLab.Clients.Hive.Task job, HeuristicLab.Clients.Hive.TaskData jobData, System.Collections.Generic.List<System.Guid> resourceIds);
 
     [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/AddChildJob", ReplyAction = "http://tempuri.org/IHiveService/AddChildJobResponse")]
-    System.Guid AddChildJob(System.Guid parentJobId, HeuristicLab.Clients.Hive.Job job, HeuristicLab.Clients.Hive.JobData jobData);
+    System.Guid AddChildJob(System.Guid parentJobId, HeuristicLab.Clients.Hive.Task job, HeuristicLab.Clients.Hive.TaskData jobData);
 
     [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetJob", ReplyAction = "http://tempuri.org/IHiveService/GetJobResponse")]
-    HeuristicLab.Clients.Hive.Job GetJob(System.Guid jobId);
+    HeuristicLab.Clients.Hive.Task GetJob(System.Guid jobId);
 
     [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetJobs", ReplyAction = "http://tempuri.org/IHiveService/GetJobsResponse")]
-    System.Collections.Generic.List<HeuristicLab.Clients.Hive.Job> GetJobs();
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.Task> GetJobs();
 
     [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetLightweightJobs", ReplyAction = "http://tempuri.org/IHiveService/GetLightweightJobsResponse")]
-    System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightJob> GetLightweightJobs(System.Collections.Generic.List<System.Guid> jobIds);
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightTask> GetLightweightJobs(System.Collections.Generic.List<System.Guid> jobIds);
 
     [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetLightweightChildJobs", ReplyAction = "http://tempuri.org/IHiveService/GetLightweightChildJobsResponse")]
-    System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightJob> GetLightweightChildJobs(System.Nullable<System.Guid> parentJobId, bool recursive, bool includeParent);
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightTask> GetLightweightChildJobs(System.Nullable<System.Guid> parentJobId, bool recursive, bool includeParent);
 
     [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetLightweightExperimentJobs", ReplyAction = "http://tempuri.org/IHiveService/GetLightweightExperimentJobsResponse")]
-    System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightJob> GetLightweightExperimentJobs(System.Guid experimentId);
+    System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightTask> GetLightweightExperimentJobs(System.Guid experimentId);
 
     [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/GetJobData", ReplyAction = "http://tempuri.org/IHiveService/GetJobDataResponse")]
-    HeuristicLab.Clients.Hive.JobData GetJobData(System.Guid jobId);
+    HeuristicLab.Clients.Hive.TaskData GetJobData(System.Guid jobId);
 
     [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/UpdateJob", ReplyAction = "http://tempuri.org/IHiveService/UpdateJobResponse")]
-    void UpdateJob(HeuristicLab.Clients.Hive.Job jobDto);
+    void UpdateJob(HeuristicLab.Clients.Hive.Task jobDto);
 
     [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/UpdateJobData", ReplyAction = "http://tempuri.org/IHiveService/UpdateJobDataResponse")]
-    void UpdateJobData(HeuristicLab.Clients.Hive.Job jobDto, HeuristicLab.Clients.Hive.JobData jobDataDto);
+    void UpdateJobData(HeuristicLab.Clients.Hive.Task jobDto, HeuristicLab.Clients.Hive.TaskData jobDataDto);
 
     [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/DeleteJob", ReplyAction = "http://tempuri.org/IHiveService/DeleteJobResponse")]
@@ -1636,5 +1636,5 @@
 
     [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/UpdateJobState", ReplyAction = "http://tempuri.org/IHiveService/UpdateJobStateResponse")]
-    HeuristicLab.Clients.Hive.Job UpdateJobState(System.Guid jobId, HeuristicLab.Clients.Hive.JobState jobState, System.Nullable<System.Guid> slaveId, System.Nullable<System.Guid> userId, string exception);
+    HeuristicLab.Clients.Hive.Task UpdateJobState(System.Guid jobId, HeuristicLab.Clients.Hive.TaskState jobState, System.Nullable<System.Guid> slaveId, System.Nullable<System.Guid> userId, string exception);
 
     [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IHiveService/StopJob", ReplyAction = "http://tempuri.org/IHiveService/StopJobResponse")]
@@ -1778,5 +1778,5 @@
     }
 
-    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.Job> GetJobsByResourceId(System.Guid resourceId) {
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.Task> GetJobsByResourceId(System.Guid resourceId) {
       return base.Channel.GetJobsByResourceId(resourceId);
     }
@@ -1810,41 +1810,41 @@
     }
 
-    public System.Guid AddJob(HeuristicLab.Clients.Hive.Job job, HeuristicLab.Clients.Hive.JobData jobData, System.Collections.Generic.List<System.Guid> resourceIds) {
+    public System.Guid AddJob(HeuristicLab.Clients.Hive.Task job, HeuristicLab.Clients.Hive.TaskData jobData, System.Collections.Generic.List<System.Guid> resourceIds) {
       return base.Channel.AddJob(job, jobData, resourceIds);
     }
 
-    public System.Guid AddChildJob(System.Guid parentJobId, HeuristicLab.Clients.Hive.Job job, HeuristicLab.Clients.Hive.JobData jobData) {
+    public System.Guid AddChildJob(System.Guid parentJobId, HeuristicLab.Clients.Hive.Task job, HeuristicLab.Clients.Hive.TaskData jobData) {
       return base.Channel.AddChildJob(parentJobId, job, jobData);
     }
 
-    public HeuristicLab.Clients.Hive.Job GetJob(System.Guid jobId) {
+    public HeuristicLab.Clients.Hive.Task GetJob(System.Guid jobId) {
       return base.Channel.GetJob(jobId);
     }
 
-    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.Job> GetJobs() {
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.Task> GetJobs() {
       return base.Channel.GetJobs();
     }
 
-    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightJob> GetLightweightJobs(System.Collections.Generic.List<System.Guid> jobIds) {
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightTask> GetLightweightJobs(System.Collections.Generic.List<System.Guid> jobIds) {
       return base.Channel.GetLightweightJobs(jobIds);
     }
 
-    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightJob> GetLightweightChildJobs(System.Nullable<System.Guid> parentJobId, bool recursive, bool includeParent) {
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightTask> GetLightweightChildJobs(System.Nullable<System.Guid> parentJobId, bool recursive, bool includeParent) {
       return base.Channel.GetLightweightChildJobs(parentJobId, recursive, includeParent);
     }
 
-    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightJob> GetLightweightExperimentJobs(System.Guid experimentId) {
+    public System.Collections.Generic.List<HeuristicLab.Clients.Hive.LightweightTask> GetLightweightExperimentJobs(System.Guid experimentId) {
       return base.Channel.GetLightweightExperimentJobs(experimentId);
     }
 
-    public HeuristicLab.Clients.Hive.JobData GetJobData(System.Guid jobId) {
+    public HeuristicLab.Clients.Hive.TaskData GetJobData(System.Guid jobId) {
       return base.Channel.GetJobData(jobId);
     }
 
-    public void UpdateJob(HeuristicLab.Clients.Hive.Job jobDto) {
+    public void UpdateJob(HeuristicLab.Clients.Hive.Task jobDto) {
       base.Channel.UpdateJob(jobDto);
     }
 
-    public void UpdateJobData(HeuristicLab.Clients.Hive.Job jobDto, HeuristicLab.Clients.Hive.JobData jobDataDto) {
+    public void UpdateJobData(HeuristicLab.Clients.Hive.Task jobDto, HeuristicLab.Clients.Hive.TaskData jobDataDto) {
       base.Channel.UpdateJobData(jobDto, jobDataDto);
     }
@@ -1858,5 +1858,5 @@
     }
 
-    public HeuristicLab.Clients.Hive.Job UpdateJobState(System.Guid jobId, HeuristicLab.Clients.Hive.JobState jobState, System.Nullable<System.Guid> slaveId, System.Nullable<System.Guid> userId, string exception) {
+    public HeuristicLab.Clients.Hive.Task UpdateJobState(System.Guid jobId, HeuristicLab.Clients.Hive.TaskState jobState, System.Nullable<System.Guid> slaveId, System.Nullable<System.Guid> userId, string exception) {
       return base.Channel.UpdateJobState(jobId, jobState, slaveId, userId, exception);
     }
Index: anches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/Job.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/Job.cs	(revision 6720)
+++ 	(revision )
@@ -1,57 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using HeuristicLab.Common;
-
-namespace HeuristicLab.Clients.Hive {
-  public partial class Job : LightweightJob {
-
-    public Job() { }
-
-    protected Job(Job original, Cloner cloner)
-      : base(original, cloner) {
-      this.Priority = original.Priority;
-      this.CoresNeeded = original.CoresNeeded;
-      this.MemoryNeeded = original.MemoryNeeded;
-      this.PluginsNeededIds = new List<Guid>(original.PluginsNeededIds);
-      this.LastHeartbeat = original.LastHeartbeat;
-      this.IsParentJob = original.IsParentJob;
-      this.FinishWhenChildJobsFinished = original.FinishWhenChildJobsFinished;
-      this.HiveExperimentId = original.HiveExperimentId;
-      this.IsPrivileged = original.IsPrivileged;
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new Job(this, cloner);
-    }
-
-    public override string ToString() {
-      return string.Format("State: {0}, SlaveId: {1}, DateCreated: {2}, CoresNeeded: {3}, MemoryNeeded: {4}",
-        State,
-        CurrentStateLog != null ? (CurrentStateLog.SlaveId.HasValue ? CurrentStateLog.SlaveId.Value.ToString() : string.Empty) : string.Empty,
-        DateCreated.HasValue ? DateCreated.ToString() : string.Empty,
-        CoresNeeded,
-        MemoryNeeded);
-    }
-  }
-}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/JobData.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/JobData.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/JobData.cs	(revision 6721)
@@ -24,8 +24,8 @@
 
 namespace HeuristicLab.Clients.Hive {
-  public partial class JobData : IDeepCloneable, IContent {
-    public JobData() { }
+  public partial class TaskData : IDeepCloneable, IContent {
+    public TaskData() { }
 
-    protected JobData(JobData original, Cloner cloner) {
+    protected TaskData(TaskData original, Cloner cloner) {
       cloner.RegisterClonedObject(original, this);
       if (original.Data != null) this.Data = new byte[original.Data.Length]; Array.Copy(original.Data, this.Data, original.Data.Length);
@@ -34,5 +34,5 @@
 
     public IDeepCloneable Clone(Cloner cloner) {
-      return new JobData(this, cloner);
+      return new TaskData(this, cloner);
     }
 
Index: anches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/LightweightJob.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/LightweightJob.cs	(revision 6720)
+++ 	(revision )
@@ -1,60 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using HeuristicLab.Common;
-
-namespace HeuristicLab.Clients.Hive {
-  public partial class LightweightJob : IDeepCloneable, IContent {
-    public StateLog CurrentStateLog { get { return StateLog.LastOrDefault(); } }
-    public DateTime? DateCreated { get { return StateLog.Count > 0 ? new DateTime?(StateLog.First().DateTime) : null; } }
-    public DateTime? DateFinished { get { return (StateLog.Count > 0 && CurrentStateLog.State == JobState.Finished) ? new DateTime?(CurrentStateLog.DateTime) : null; } }
-
-    public LightweightJob() {
-      StateLog = new List<StateLog>();
-    }
-
-    public LightweightJob(Job job) {
-      this.Id = job.Id;
-      this.ExecutionTime = job.ExecutionTime;
-      this.ParentJobId = job.ParentJobId;
-      this.StateLog = new List<StateLog>(job.StateLog);
-      this.State = job.State;
-      this.Command = job.Command;
-      this.LastJobDataUpdate = job.LastJobDataUpdate;
-    }
-
-    protected LightweightJob(LightweightJob original, Cloner cloner)
-      : base(original, cloner) {
-      this.ExecutionTime = original.ExecutionTime;
-      this.ParentJobId = original.ParentJobId;
-      this.StateLog = new List<StateLog>(original.StateLog);
-      this.State = original.State;
-      this.Command = original.Command;
-      this.LastJobDataUpdate = original.LastJobDataUpdate;
-    }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new LightweightJob(this, cloner);
-    }
-  }
-}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/LightweightTask.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/LightweightTask.cs	(revision 6721)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/LightweightTask.cs	(revision 6721)
@@ -0,0 +1,60 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.Hive {
+  public partial class LightweightTask : IDeepCloneable, IContent {
+    public StateLog CurrentStateLog { get { return StateLog.LastOrDefault(); } }
+    public DateTime? DateCreated { get { return StateLog.Count > 0 ? new DateTime?(StateLog.First().DateTime) : null; } }
+    public DateTime? DateFinished { get { return (StateLog.Count > 0 && CurrentStateLog.State == TaskState.Finished) ? new DateTime?(CurrentStateLog.DateTime) : null; } }
+
+    public LightweightTask() {
+      StateLog = new List<StateLog>();
+    }
+
+    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;
+    }
+
+    protected LightweightTask(LightweightTask original, Cloner cloner)
+      : base(original, cloner) {
+      this.ExecutionTime = original.ExecutionTime;
+      this.ParentTaskId = original.ParentTaskId;
+      this.StateLog = new List<StateLog>(original.StateLog);
+      this.State = original.State;
+      this.Command = original.Command;
+      this.LastJobDataUpdate = original.LastJobDataUpdate;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new LightweightTask(this, cloner);
+    }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/MessageContainer.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/MessageContainer.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/MessageContainer.cs	(revision 6721)
@@ -29,9 +29,9 @@
     public MessageContainer(MessageType message) {
       Message = message;
-      JobId = Guid.Empty;
+      TaskId = Guid.Empty;
     }
     public MessageContainer(MessageType message, Guid jobId) {
       Message = message;
-      JobId = jobId;
+      TaskId = jobId;
     }
 
@@ -39,5 +39,5 @@
       cloner.RegisterClonedObject(original, this);
       this.Message = original.Message;
-      this.JobId = original.JobId;
+      this.TaskId = original.TaskId;
     }
     public virtual IDeepCloneable Clone(Cloner cloner) {
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/StateLog.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/StateLog.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/StateLog.cs	(revision 6721)
@@ -35,5 +35,5 @@
       this.Exception = original.Exception;
       this.State = original.State;
-      this.JobId = original.JobId;
+      this.TaskId = original.TaskId;
     }
 
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/Task.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/Task.cs	(revision 6721)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive/3.3/ServiceClients/Task.cs	(revision 6721)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Clients.Hive {
+  public partial class Task : LightweightTask {
+
+    public Task() { }
+
+    protected Task(Task original, Cloner cloner)
+      : base(original, cloner) {
+      this.Priority = original.Priority;
+      this.CoresNeeded = original.CoresNeeded;
+      this.MemoryNeeded = original.MemoryNeeded;
+      this.PluginsNeededIds = new List<Guid>(original.PluginsNeededIds);
+      this.LastHeartbeat = original.LastHeartbeat;
+      this.IsParentJob = original.IsParentJob;
+      this.FinishWhenChildJobsFinished = original.FinishWhenChildJobsFinished;
+      this.HiveExperimentId = original.HiveExperimentId;
+      this.IsPrivileged = original.IsPrivileged;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Task(this, cloner);
+    }
+
+    public override string ToString() {
+      return string.Format("State: {0}, SlaveId: {1}, DateCreated: {2}, CoresNeeded: {3}, MemoryNeeded: {4}",
+        State,
+        CurrentStateLog != null ? (CurrentStateLog.SlaveId.HasValue ? CurrentStateLog.SlaveId.Value.ToString() : string.Empty) : string.Empty,
+        DateCreated.HasValue ? DateCreated.ToString() : string.Empty,
+        CoresNeeded,
+        MemoryNeeded);
+    }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine/3.3/HiveEngine.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine/3.3/HiveEngine.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.HiveEngine/3.3/HiveEngine.cs	(revision 6721)
@@ -269,7 +269,7 @@
         log.LogMessage(string.Format("{0} finished (TotalExecutionTime: {1}).", refreshableHiveExperiment.ToString(), refreshableHiveExperiment.ExecutionTime));
 
-        var failedJobs = refreshableHiveExperiment.HiveJobs.Where(x => x.Job.State == JobState.Failed);
+        var failedJobs = refreshableHiveExperiment.HiveJobs.Where(x => x.Job.State == TaskState.Failed);
         if (failedJobs.Count() > 0) {
-          throw new HiveEngineException("Job failed: " + failedJobs.First().Job.StateLog.Last().Exception);
+          throw new HiveEngineException("Task failed: " + failedJobs.First().Job.StateLog.Last().Exception);
         }
 
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/TaskState.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/TaskState.cs	(revision 6721)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/Enums/TaskState.cs	(revision 6721)
@@ -0,0 +1,67 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Services.Hive.DataAccess {
+  [Serializable]
+  public enum TaskState {
+    /// <summary>
+    /// A job is offline as long as he is not yet submitted to the hive
+    /// </summary>
+    Offline,
+
+    /// <summary>
+    /// Job is waiting to be calculated
+    /// </summary>
+    Waiting,
+
+    /// <summary>
+    /// Job is beeing transferred
+    /// </summary>
+    Transferring,
+
+    /// <summary>
+    /// Job is actively calculated on a Slave
+    /// </summary>
+    Calculating,
+
+    /// <summary>
+    /// Job is paused, will not be picked up by slaves
+    /// </summary>
+    Paused,
+
+    /// <summary>
+    /// Job as finished and is ready to be collected by the Client
+    /// </summary>
+    Finished,
+
+    /// <summary>
+    /// Job is aborted and result can be collected by the Client
+    /// </summary>
+    Aborted,
+
+    /// <summary>
+    /// Job as been aborted due to an error. Results are ready to be collected
+    /// </summary>
+    Failed
+  };
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj	(revision 6721)
@@ -107,5 +107,5 @@
     </Compile>
     <Compile Include="ITransactionManager.cs" />
-    <Compile Include="Enums\JobState.cs" />
+    <Compile Include="Enums\TaskState.cs" />
     <Compile Include="Logger.cs" />
     <Compile Include="Enums\Permission.cs" />
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.dbml
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.dbml	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.dbml	(revision 6721)
@@ -4,7 +4,7 @@
     <Type Name="AssignedResource">
       <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
-      <Column Name="JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="TaskId" Storage="_JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
       <Association Name="Resource_AssignedResource" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" Type="Resource" IsForeignKey="true" DeleteRule="CASCADE" />
-      <Association Name="Job_AssignedResource" Member="Job" ThisKey="JobId" OtherKey="JobId" Type="Job" IsForeignKey="true" DeleteRule="CASCADE" />
+      <Association Name="Task_AssignedResource" Member="Task" Storage="_Job" ThisKey="TaskId" OtherKey="TaskId" Type="Task" IsForeignKey="true" DeleteRule="CASCADE" />
     </Type>
   </Table>
@@ -24,8 +24,8 @@
     <Type Name="RequiredPlugin">
       <Column Name="RequiredPluginId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" UpdateCheck="Never" />
-      <Column Name="JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="TaskId" Storage="_JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
       <Column Name="PluginId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
       <Association Name="Plugin_RequiredPlugin" Member="Plugin" Storage="_PluginInfo" ThisKey="PluginId" OtherKey="PluginId" Type="Plugin" IsForeignKey="true" DeleteRule="CASCADE" />
-      <Association Name="Job_RequiredPlugin" Member="Job" ThisKey="JobId" OtherKey="JobId" Type="Job" IsForeignKey="true" />
+      <Association Name="Task_RequiredPlugin" Member="Task" Storage="_Job" ThisKey="TaskId" OtherKey="TaskId" Type="Task" IsForeignKey="true" />
     </Type>
   </Table>
@@ -58,26 +58,26 @@
     </Type>
   </Table>
-  <Table Name="dbo.Job" Member="Jobs">
-    <Type Name="Job">
-      <Column Name="JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
-      <Column Name="JobState" Member="State" Type="global::HeuristicLab.Services.Hive.DataAccess.JobState" DbType="VarChar(30)" CanBeNull="false" />
+  <Table Name="dbo.Task" Member="Tasks">
+    <Type Name="Task">
+      <Column Name="TaskId" Storage="_JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="TaskState" Member="State" Type="global::HeuristicLab.Services.Hive.DataAccess.TaskState" DbType="VarChar(30)" CanBeNull="false" />
       <Column Name="ExecutionTimeMs" Storage="_ExecutionTime" Type="System.Double" DbType="float" CanBeNull="false" />
       <Column Name="LastHeartbeat" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
-      <Column Name="ParentJobId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+      <Column Name="ParentTaskId" Storage="_ParentJobId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
       <Column Name="Priority" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
       <Column Name="CoresNeeded" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
       <Column Name="MemoryNeeded" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
-      <Column Name="IsParentJob" Type="System.Boolean" DbType="Bit" CanBeNull="false" />
+      <Column Name="IsParentTask" Storage="_IsParentJob" Type="System.Boolean" DbType="Bit" CanBeNull="false" />
       <Column Name="FinishWhenChildJobsFinished" Type="System.Boolean" DbType="Bit" CanBeNull="false" />
       <Column Name="Command" Type="global::HeuristicLab.Services.Hive.DataAccess.Command?" DbType="VarChar(30)" CanBeNull="true" />
       <Column Name="HiveExperimentId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
       <Column Name="IsPrivileged" Type="System.Boolean" DbType="Bit" CanBeNull="false" />
-      <Association Name="Job_AssignedResource" Member="AssignedResources" ThisKey="JobId" OtherKey="JobId" Type="AssignedResource" />
-      <Association Name="Job_RequiredPlugin" Member="RequiredPlugins" ThisKey="JobId" OtherKey="JobId" Type="RequiredPlugin" />
-      <Association Name="Job_Job" Member="ChildJobs" Storage="_Jobs" ThisKey="JobId" OtherKey="ParentJobId" Type="Job" />
-      <Association Name="Job_JobData" Member="JobData" ThisKey="JobId" OtherKey="JobId" Type="JobData" Cardinality="One" />
-      <Association Name="Job_StateLog" Member="StateLogs" ThisKey="JobId" OtherKey="JobId" Type="StateLog" />
-      <Association Name="Job_Job" Member="ParentJob" Storage="_Job1" ThisKey="ParentJobId" OtherKey="JobId" Type="Job" IsForeignKey="true" />
-      <Association Name="HiveExperiment_Job" Member="HiveExperiment" ThisKey="HiveExperimentId" OtherKey="HiveExperimentId" Type="HiveExperiment" IsForeignKey="true" />
+      <Association Name="Task_AssignedResource" Member="AssignedResources" ThisKey="TaskId" OtherKey="TaskId" Type="AssignedResource" />
+      <Association Name="Task_RequiredPlugin" Member="RequiredPlugins" ThisKey="TaskId" OtherKey="TaskId" Type="RequiredPlugin" />
+      <Association Name="Task_Task" Member="ChildJobs" Storage="_Jobs" ThisKey="TaskId" OtherKey="ParentTaskId" Type="Task" />
+      <Association Name="Task_TaskData" Member="JobData" ThisKey="TaskId" OtherKey="TaskId" Type="TaskData" Cardinality="One" />
+      <Association Name="Task_StateLog" Member="StateLogs" ThisKey="TaskId" OtherKey="TaskId" Type="StateLog" />
+      <Association Name="Task_Task" Member="ParentJob" Storage="_Job1" ThisKey="ParentTaskId" OtherKey="TaskId" Type="Task" IsForeignKey="true" />
+      <Association Name="HiveExperiment_Task" Member="HiveExperiment" ThisKey="HiveExperimentId" OtherKey="HiveExperimentId" Type="HiveExperiment" IsForeignKey="true" />
     </Type>
   </Table>
@@ -104,14 +104,14 @@
       <Column Name="LastAccessed" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
       <Column Name="IsHiveEngine" Type="System.Boolean" DbType="Bit" CanBeNull="false" />
-      <Association Name="HiveExperiment_Job" Member="Jobs" ThisKey="HiveExperimentId" OtherKey="HiveExperimentId" Type="Job" />
+      <Association Name="HiveExperiment_Task" Member="Tasks" Storage="_Jobs" ThisKey="HiveExperimentId" OtherKey="HiveExperimentId" Type="Task" />
       <Association Name="HiveExperiment_HiveExperimentPermission" Member="HiveExperimentPermissions" ThisKey="HiveExperimentId" OtherKey="HiveExperimentId" Type="HiveExperimentPermission" />
     </Type>
   </Table>
-  <Table Name="dbo.JobData" Member="JobDatas">
-    <Type Name="JobData">
-      <Column Name="JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+  <Table Name="dbo.TaskData" Member="TaskDatas">
+    <Type Name="TaskData">
+      <Column Name="TaskId" Storage="_JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
       <Column Name="Data" Type="System.Data.Linq.Binary" DbType="VarBinary(MAX)" CanBeNull="false" UpdateCheck="Never" />
       <Column Name="LastUpdate" Type="System.DateTime" DbType="DateTime" CanBeNull="false" />
-      <Association Name="Job_JobData" Member="Job" ThisKey="JobId" OtherKey="JobId" Type="Job" IsForeignKey="true" />
+      <Association Name="Task_TaskData" Member="Task" Storage="_Job" ThisKey="TaskId" OtherKey="TaskId" Type="Task" IsForeignKey="true" />
     </Type>
   </Table>
@@ -128,11 +128,11 @@
     <Type Name="StateLog">
       <Column Name="StateLogId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
-      <Column Name="State" Type="global::HeuristicLab.Services.Hive.DataAccess.JobState" DbType="VarChar(30) NOT NULL" CanBeNull="false" />
+      <Column Name="State" Type="global::HeuristicLab.Services.Hive.DataAccess.TaskState" DbType="VarChar(30) NOT NULL" CanBeNull="false" />
       <Column Name="DateTime" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="false" />
-      <Column Name="JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="TaskId" Storage="_JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
       <Column Name="UserId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
       <Column Name="SlaveId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
       <Column Name="Exception" Type="System.String" DbType="VarChar(MAX)" CanBeNull="false" />
-      <Association Name="Job_StateLog" Member="Job" ThisKey="JobId" OtherKey="JobId" Type="Job" IsForeignKey="true" />
+      <Association Name="Task_StateLog" Member="Task" Storage="_Job" ThisKey="TaskId" OtherKey="TaskId" Type="Task" IsForeignKey="true" />
       <Association Name="Resource_StateLog" Member="Resource" ThisKey="SlaveId" OtherKey="ResourceId" Type="Resource" IsForeignKey="true" />
     </Type>
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.dbml.layout
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.dbml.layout	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.dbml.layout	(revision 6721)
@@ -28,5 +28,5 @@
     </classShape>
     <classShape Id="695bfc39-59f3-4e60-8644-f847964bf62c" absoluteBounds="6.5, 1, 2, 3.3093082682291666">
-      <DataClassMoniker Name="/HiveDataContext/Job" />
+      <DataClassMoniker Name="/HiveDataContext/Task" />
       <nestedChildShapes>
         <elementListCompartment Id="a6a30e11-03d1-4869-82e6-b733f4ef9974" absoluteBounds="6.5150000000000006, 1.46, 1.9700000000000002, 2.7493082682291665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
@@ -76,27 +76,6 @@
       </nodes>
     </associationConnector>
-    <associationConnector edgePoints="[(7.5 : 4.30930826822917); (7.5 : 4.751650890625); (8.875 : 4.751650890625)]" fixedFrom="NotFixed" fixedTo="NotFixed">
-      <AssociationMoniker Name="/HiveDataContext/Job/Job_AssignedResource" />
-      <nodes>
-        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
-        <classShapeMoniker Id="a929c9dc-69f4-4488-ba1c-a2342bf81d89" />
-      </nodes>
-    </associationConnector>
-    <associationConnector edgePoints="[(7.0893551015625 : 4.30930826822917); (7.0893551015625 : 5.5)]" fixedFrom="NotFixed" fixedTo="NotFixed">
-      <AssociationMoniker Name="/HiveDataContext/Job/Job_RequiredPlugin" />
-      <nodes>
-        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
-        <classShapeMoniker Id="97b00810-fa30-457e-b484-b4e80b22f91b" />
-      </nodes>
-    </associationConnector>
-    <associationConnector edgePoints="[(7.20923076923077 : 1); (7.20923076923077 : 0.75); (7.80461538461539 : 0.75); (7.80461538461539 : 1)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
-      <AssociationMoniker Name="/HiveDataContext/Job/Job_Job" />
-      <nodes>
-        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
-        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
-      </nodes>
-    </associationConnector>
     <classShape Id="6bc13f26-f9a8-4597-b054-35be34190d12" absoluteBounds="4.125, 1, 2, 1.3862939453125">
-      <DataClassMoniker Name="/HiveDataContext/JobData" />
+      <DataClassMoniker Name="/HiveDataContext/TaskData" />
       <nestedChildShapes>
         <elementListCompartment Id="a068522c-7974-4679-b356-e33c941c465b" absoluteBounds="4.14, 1.46, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
@@ -116,11 +95,4 @@
       </nodes>
     </associationConnector>
-    <associationConnector edgePoints="[(6.5 : 1.69314697265625); (6.125 : 1.69314697265625)]" fixedFrom="NotFixed" fixedTo="NotFixed">
-      <AssociationMoniker Name="/HiveDataContext/Job/Job_JobData" />
-      <nodes>
-        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
-        <classShapeMoniker Id="6bc13f26-f9a8-4597-b054-35be34190d12" />
-      </nodes>
-    </associationConnector>
     <associationConnector edgePoints="[(8.875 : 6.19314697265625); (8.5 : 6.19314697265625)]" fixedFrom="NotFixed" fixedTo="NotFixed">
       <AssociationMoniker Name="/HiveDataContext/Plugin/Plugin_RequiredPlugin" />
@@ -149,11 +121,4 @@
       </nestedChildShapes>
     </classShape>
-    <associationConnector edgePoints="[(6.5 : 2.50564697265625); (3.75 : 2.50564697265625)]" fixedFrom="NotFixed" fixedTo="NotFixed">
-      <AssociationMoniker Name="/HiveDataContext/Job/Job_StateLog" />
-      <nodes>
-        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
-        <classShapeMoniker Id="00352397-340e-449a-8e23-6ddd216e8617" />
-      </nodes>
-    </associationConnector>
     <associationConnector edgePoints="[(11.25 : 1.78929768880208); (10.9375 : 1.78929768880208); (10.9375 : 0.6875); (2.75 : 0.6875); (2.75 : 1)]" fixedFrom="NotFixed" fixedTo="NotFixed">
       <AssociationMoniker Name="/HiveDataContext/Resource/Resource_StateLog" />
@@ -176,11 +141,4 @@
       </nestedChildShapes>
     </classShape>
-    <associationConnector edgePoints="[(6.125 : 3.46715413411458); (6.5 : 3.46715413411458)]" fixedFrom="NotFixed" fixedTo="NotFixed">
-      <AssociationMoniker Name="/HiveDataContext/HiveExperiment/HiveExperiment_Job" />
-      <nodes>
-        <classShapeMoniker Id="e6f840cc-2968-4be1-b234-eef624ccacbb" />
-        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
-      </nodes>
-    </associationConnector>
     <classShape Id="cdddf4da-eaef-46a1-9cfd-987bb6b3d03e" absoluteBounds="17, 3.125, 2.5, 1.7708968098958327">
       <DataClassMoniker Name="/HiveDataContext/DeletedJobStatistics" />
@@ -228,4 +186,46 @@
       </nodes>
     </associationConnector>
+    <associationConnector edgePoints="[(7.5 : 4.30930826822917); (7.5 : 4.751650890625); (7.97916666666667 : 4.751650890625 : JumpStart); (8.14583333333333 : 4.751650890625 : JumpEnd); (8.875 : 4.751650890625)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Task/Task_AssignedResource" />
+      <nodes>
+        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
+        <classShapeMoniker Id="a929c9dc-69f4-4488-ba1c-a2342bf81d89" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8.0625 : 4.30930826822917); (8.0625 : 5.5)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Task/Task_RequiredPlugin" />
+      <nodes>
+        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
+        <classShapeMoniker Id="97b00810-fa30-457e-b484-b4e80b22f91b" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(7.20923076923077 : 1); (7.20923076923077 : 0.875); (7.80461538461539 : 0.875); (7.80461538461539 : 1)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Task/Task_Task" />
+      <nodes>
+        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
+        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(6.125 : 3.46715413411458); (6.5 : 3.46715413411458)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/HiveExperiment/HiveExperiment_Task" />
+      <nodes>
+        <classShapeMoniker Id="e6f840cc-2968-4be1-b234-eef624ccacbb" />
+        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(6.5 : 1.69314697265625); (6.125 : 1.69314697265625)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Task/Task_TaskData" />
+      <nodes>
+        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
+        <classShapeMoniker Id="6bc13f26-f9a8-4597-b054-35be34190d12" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(6.5 : 2.50564697265625); (3.75 : 2.50564697265625)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Task/Task_StateLog" />
+      <nodes>
+        <classShapeMoniker Id="695bfc39-59f3-4e60-8644-f847964bf62c" />
+        <classShapeMoniker Id="00352397-340e-449a-8e23-6ddd216e8617" />
+      </nodes>
+    </associationConnector>
   </nestedChildShapes>
 </ordesignerObjectsDiagram>
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.designer.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.designer.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.designer.cs	(revision 6721)
@@ -43,7 +43,7 @@
     partial void UpdateResource(Resource instance);
     partial void DeleteResource(Resource instance);
-    partial void InsertJob(Job instance);
-    partial void UpdateJob(Job instance);
-    partial void DeleteJob(Job instance);
+    partial void InsertTask(Task instance);
+    partial void UpdateTask(Task instance);
+    partial void DeleteTask(Task instance);
     partial void InsertDowntime(Downtime instance);
     partial void UpdateDowntime(Downtime instance);
@@ -52,7 +52,7 @@
     partial void UpdateHiveExperiment(HiveExperiment instance);
     partial void DeleteHiveExperiment(HiveExperiment instance);
-    partial void InsertJobData(JobData instance);
-    partial void UpdateJobData(JobData instance);
-    partial void DeleteJobData(JobData instance);
+    partial void InsertTaskData(TaskData instance);
+    partial void UpdateTaskData(TaskData instance);
+    partial void DeleteTaskData(TaskData instance);
     partial void InsertPluginData(PluginData instance);
     partial void UpdatePluginData(PluginData instance);
@@ -143,9 +143,9 @@
 		}
 		
-		public System.Data.Linq.Table<Job> Jobs
-		{
-			get
-			{
-				return this.GetTable<Job>();
+		public System.Data.Linq.Table<Task> Tasks
+		{
+			get
+			{
+				return this.GetTable<Task>();
 			}
 		}
@@ -167,9 +167,9 @@
 		}
 		
-		public System.Data.Linq.Table<JobData> JobDatas
-		{
-			get
-			{
-				return this.GetTable<JobData>();
+		public System.Data.Linq.Table<TaskData> TaskDatas
+		{
+			get
+			{
+				return this.GetTable<TaskData>();
 			}
 		}
@@ -252,5 +252,5 @@
 		private EntityRef<Resource> _Resource;
 		
-		private EntityRef<Job> _Job;
+		private EntityRef<Task> _Job;
 		
     #region Extensibility Method Definitions
@@ -260,6 +260,6 @@
     partial void OnResourceIdChanging(System.Guid value);
     partial void OnResourceIdChanged();
-    partial void OnJobIdChanging(System.Guid value);
-    partial void OnJobIdChanged();
+    partial void OnTaskIdChanging(System.Guid value);
+    partial void OnTaskIdChanged();
     #endregion
 		
@@ -267,5 +267,5 @@
 		{
 			this._Resource = default(EntityRef<Resource>);
-			this._Job = default(EntityRef<Job>);
+			this._Job = default(EntityRef<Task>);
 			OnCreated();
 		}
@@ -296,5 +296,5 @@
 		
 		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_JobId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
-		public System.Guid JobId
+		public System.Guid TaskId
 		{
 			get
@@ -310,9 +310,9 @@
 						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
 					}
-					this.OnJobIdChanging(value);
+					this.OnTaskIdChanging(value);
 					this.SendPropertyChanging();
 					this._JobId = value;
-					this.SendPropertyChanged("JobId");
-					this.OnJobIdChanged();
+					this.SendPropertyChanged("TaskId");
+					this.OnTaskIdChanged();
 				}
 			}
@@ -353,6 +353,6 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Job_AssignedResource", Storage="_Job", ThisKey="JobId", OtherKey="JobId", IsForeignKey=true, DeleteRule="CASCADE")]
-		public Job Job
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Task_AssignedResource", Storage="_Job", ThisKey="TaskId", OtherKey="TaskId", IsForeignKey=true, DeleteRule="CASCADE")]
+		public Task Task
 		{
 			get
@@ -362,5 +362,5 @@
 			set
 			{
-				Job previousValue = this._Job.Entity;
+				Task previousValue = this._Job.Entity;
 				if (((previousValue != value) 
 							|| (this._Job.HasLoadedOrAssignedValue == false)))
@@ -376,5 +376,5 @@
 					{
 						value.AssignedResources.Add(this);
-						this._JobId = value.JobId;
+						this._JobId = value.TaskId;
 					}
 					else
@@ -382,5 +382,5 @@
 						this._JobId = default(System.Guid);
 					}
-					this.SendPropertyChanged("Job");
+					this.SendPropertyChanged("Task");
 				}
 			}
@@ -660,5 +660,5 @@
 		private EntityRef<Plugin> _PluginInfo;
 		
-		private EntityRef<Job> _Job;
+		private EntityRef<Task> _Job;
 		
     #region Extensibility Method Definitions
@@ -668,6 +668,6 @@
     partial void OnRequiredPluginIdChanging(System.Guid value);
     partial void OnRequiredPluginIdChanged();
-    partial void OnJobIdChanging(System.Guid value);
-    partial void OnJobIdChanged();
+    partial void OnTaskIdChanging(System.Guid value);
+    partial void OnTaskIdChanged();
     partial void OnPluginIdChanging(System.Guid value);
     partial void OnPluginIdChanged();
@@ -677,5 +677,5 @@
 		{
 			this._PluginInfo = default(EntityRef<Plugin>);
-			this._Job = default(EntityRef<Job>);
+			this._Job = default(EntityRef<Task>);
 			OnCreated();
 		}
@@ -702,5 +702,5 @@
 		
 		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_JobId", DbType="UniqueIdentifier NOT NULL")]
-		public System.Guid JobId
+		public System.Guid TaskId
 		{
 			get
@@ -716,9 +716,9 @@
 						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
 					}
-					this.OnJobIdChanging(value);
+					this.OnTaskIdChanging(value);
 					this.SendPropertyChanging();
 					this._JobId = value;
-					this.SendPropertyChanged("JobId");
-					this.OnJobIdChanged();
+					this.SendPropertyChanged("TaskId");
+					this.OnTaskIdChanged();
 				}
 			}
@@ -783,6 +783,6 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Job_RequiredPlugin", Storage="_Job", ThisKey="JobId", OtherKey="JobId", IsForeignKey=true)]
-		public Job Job
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Task_RequiredPlugin", Storage="_Job", ThisKey="TaskId", OtherKey="TaskId", IsForeignKey=true)]
+		public Task Task
 		{
 			get
@@ -792,5 +792,5 @@
 			set
 			{
-				Job previousValue = this._Job.Entity;
+				Task previousValue = this._Job.Entity;
 				if (((previousValue != value) 
 							|| (this._Job.HasLoadedOrAssignedValue == false)))
@@ -806,5 +806,5 @@
 					{
 						value.RequiredPlugins.Add(this);
-						this._JobId = value.JobId;
+						this._JobId = value.TaskId;
 					}
 					else
@@ -812,5 +812,5 @@
 						this._JobId = default(System.Guid);
 					}
-					this.SendPropertyChanged("Job");
+					this.SendPropertyChanged("Task");
 				}
 			}
@@ -1446,6 +1446,6 @@
 	}
 	
-	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Job")]
-	public partial class Job : INotifyPropertyChanging, INotifyPropertyChanged
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Task")]
+	public partial class Task : INotifyPropertyChanging, INotifyPropertyChanged
 	{
 		
@@ -1454,5 +1454,5 @@
 		private System.Guid _JobId;
 		
-		private global::HeuristicLab.Services.Hive.DataAccess.JobState _State;
+		private global::HeuristicLab.Services.Hive.DataAccess.TaskState _State;
 		
 		private double _ExecutionTime;
@@ -1482,11 +1482,11 @@
 		private EntitySet<RequiredPlugin> _RequiredPlugins;
 		
-		private EntitySet<Job> _Jobs;
-		
-		private EntityRef<JobData> _JobData;
+		private EntitySet<Task> _Jobs;
+		
+		private EntityRef<TaskData> _JobData;
 		
 		private EntitySet<StateLog> _StateLogs;
 		
-		private EntityRef<Job> _Job1;
+		private EntityRef<Task> _Job1;
 		
 		private EntityRef<HiveExperiment> _HiveExperiment;
@@ -1496,7 +1496,7 @@
     partial void OnValidate(System.Data.Linq.ChangeAction action);
     partial void OnCreated();
-    partial void OnJobIdChanging(System.Guid value);
-    partial void OnJobIdChanged();
-    partial void OnStateChanging(global::HeuristicLab.Services.Hive.DataAccess.JobState value);
+    partial void OnTaskIdChanging(System.Guid value);
+    partial void OnTaskIdChanged();
+    partial void OnStateChanging(global::HeuristicLab.Services.Hive.DataAccess.TaskState value);
     partial void OnStateChanged();
     partial void OnExecutionTimeMsChanging(double value);
@@ -1504,6 +1504,6 @@
     partial void OnLastHeartbeatChanging(System.Nullable<System.DateTime> value);
     partial void OnLastHeartbeatChanged();
-    partial void OnParentJobIdChanging(System.Nullable<System.Guid> value);
-    partial void OnParentJobIdChanged();
+    partial void OnParentTaskIdChanging(System.Nullable<System.Guid> value);
+    partial void OnParentTaskIdChanged();
     partial void OnPriorityChanging(int value);
     partial void OnPriorityChanged();
@@ -1512,6 +1512,6 @@
     partial void OnMemoryNeededChanging(int value);
     partial void OnMemoryNeededChanged();
-    partial void OnIsParentJobChanging(bool value);
-    partial void OnIsParentJobChanged();
+    partial void OnIsParentTaskChanging(bool value);
+    partial void OnIsParentTaskChanged();
     partial void OnFinishWhenChildJobsFinishedChanging(bool value);
     partial void OnFinishWhenChildJobsFinishedChanged();
@@ -1524,12 +1524,12 @@
     #endregion
 		
-		public Job()
+		public Task()
 		{
 			this._AssignedResources = new EntitySet<AssignedResource>(new Action<AssignedResource>(this.attach_AssignedResources), new Action<AssignedResource>(this.detach_AssignedResources));
 			this._RequiredPlugins = new EntitySet<RequiredPlugin>(new Action<RequiredPlugin>(this.attach_RequiredPlugins), new Action<RequiredPlugin>(this.detach_RequiredPlugins));
-			this._Jobs = new EntitySet<Job>(new Action<Job>(this.attach_Jobs), new Action<Job>(this.detach_Jobs));
-			this._JobData = default(EntityRef<JobData>);
+			this._Jobs = new EntitySet<Task>(new Action<Task>(this.attach_Jobs), new Action<Task>(this.detach_Jobs));
+			this._JobData = default(EntityRef<TaskData>);
 			this._StateLogs = new EntitySet<StateLog>(new Action<StateLog>(this.attach_StateLogs), new Action<StateLog>(this.detach_StateLogs));
-			this._Job1 = default(EntityRef<Job>);
+			this._Job1 = default(EntityRef<Task>);
 			this._HiveExperiment = default(EntityRef<HiveExperiment>);
 			OnCreated();
@@ -1537,5 +1537,5 @@
 		
 		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_JobId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
-		public System.Guid JobId
+		public System.Guid TaskId
 		{
 			get
@@ -1547,15 +1547,15 @@
 				if ((this._JobId != value))
 				{
-					this.OnJobIdChanging(value);
+					this.OnTaskIdChanging(value);
 					this.SendPropertyChanging();
 					this._JobId = value;
-					this.SendPropertyChanged("JobId");
-					this.OnJobIdChanged();
-				}
-			}
-		}
-		
-		[global::System.Data.Linq.Mapping.ColumnAttribute(Name="JobState", Storage="_State", DbType="VarChar(30)", CanBeNull=false)]
-		public global::HeuristicLab.Services.Hive.DataAccess.JobState State
+					this.SendPropertyChanged("TaskId");
+					this.OnTaskIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Name="TaskState", Storage="_State", DbType="VarChar(30)", CanBeNull=false)]
+		public global::HeuristicLab.Services.Hive.DataAccess.TaskState State
 		{
 			get
@@ -1617,5 +1617,5 @@
 		
 		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ParentJobId", DbType="UniqueIdentifier")]
-		public System.Nullable<System.Guid> ParentJobId
+		public System.Nullable<System.Guid> ParentTaskId
 		{
 			get
@@ -1631,9 +1631,9 @@
 						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
 					}
-					this.OnParentJobIdChanging(value);
+					this.OnParentTaskIdChanging(value);
 					this.SendPropertyChanging();
 					this._ParentJobId = value;
-					this.SendPropertyChanged("ParentJobId");
-					this.OnParentJobIdChanged();
+					this.SendPropertyChanged("ParentTaskId");
+					this.OnParentTaskIdChanged();
 				}
 			}
@@ -1701,5 +1701,5 @@
 		
 		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_IsParentJob", DbType="Bit")]
-		public bool IsParentJob
+		public bool IsParentTask
 		{
 			get
@@ -1711,9 +1711,9 @@
 				if ((this._IsParentJob != value))
 				{
-					this.OnIsParentJobChanging(value);
+					this.OnIsParentTaskChanging(value);
 					this.SendPropertyChanging();
 					this._IsParentJob = value;
-					this.SendPropertyChanged("IsParentJob");
-					this.OnIsParentJobChanged();
+					this.SendPropertyChanged("IsParentTask");
+					this.OnIsParentTaskChanged();
 				}
 			}
@@ -1804,5 +1804,5 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Job_AssignedResource", Storage="_AssignedResources", ThisKey="JobId", OtherKey="JobId")]
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Task_AssignedResource", Storage="_AssignedResources", ThisKey="TaskId", OtherKey="TaskId")]
 		public EntitySet<AssignedResource> AssignedResources
 		{
@@ -1817,5 +1817,5 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Job_RequiredPlugin", Storage="_RequiredPlugins", ThisKey="JobId", OtherKey="JobId")]
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Task_RequiredPlugin", Storage="_RequiredPlugins", ThisKey="TaskId", OtherKey="TaskId")]
 		public EntitySet<RequiredPlugin> RequiredPlugins
 		{
@@ -1830,6 +1830,6 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Job_Job", Storage="_Jobs", ThisKey="JobId", OtherKey="ParentJobId")]
-		public EntitySet<Job> ChildJobs
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Task_Task", Storage="_Jobs", ThisKey="TaskId", OtherKey="ParentTaskId")]
+		public EntitySet<Task> ChildJobs
 		{
 			get
@@ -1843,6 +1843,6 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Job_JobData", Storage="_JobData", ThisKey="JobId", OtherKey="JobId", IsUnique=true, IsForeignKey=false)]
-		public JobData JobData
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Task_TaskData", Storage="_JobData", ThisKey="TaskId", OtherKey="TaskId", IsUnique=true, IsForeignKey=false)]
+		public TaskData JobData
 		{
 			get
@@ -1852,5 +1852,5 @@
 			set
 			{
-				JobData previousValue = this._JobData.Entity;
+				TaskData previousValue = this._JobData.Entity;
 				if (((previousValue != value) 
 							|| (this._JobData.HasLoadedOrAssignedValue == false)))
@@ -1860,10 +1860,10 @@
 					{
 						this._JobData.Entity = null;
-						previousValue.Job = null;
+						previousValue.Task = null;
 					}
 					this._JobData.Entity = value;
 					if ((value != null))
 					{
-						value.Job = this;
+						value.Task = this;
 					}
 					this.SendPropertyChanged("JobData");
@@ -1872,5 +1872,5 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Job_StateLog", Storage="_StateLogs", ThisKey="JobId", OtherKey="JobId")]
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Task_StateLog", Storage="_StateLogs", ThisKey="TaskId", OtherKey="TaskId")]
 		public EntitySet<StateLog> StateLogs
 		{
@@ -1885,6 +1885,6 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Job_Job", Storage="_Job1", ThisKey="ParentJobId", OtherKey="JobId", IsForeignKey=true)]
-		public Job ParentJob
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Task_Task", Storage="_Job1", ThisKey="ParentTaskId", OtherKey="TaskId", IsForeignKey=true)]
+		public Task ParentJob
 		{
 			get
@@ -1894,5 +1894,5 @@
 			set
 			{
-				Job previousValue = this._Job1.Entity;
+				Task previousValue = this._Job1.Entity;
 				if (((previousValue != value) 
 							|| (this._Job1.HasLoadedOrAssignedValue == false)))
@@ -1908,5 +1908,5 @@
 					{
 						value.ChildJobs.Add(this);
-						this._ParentJobId = value.JobId;
+						this._ParentJobId = value.TaskId;
 					}
 					else
@@ -1919,5 +1919,5 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="HiveExperiment_Job", Storage="_HiveExperiment", ThisKey="HiveExperimentId", OtherKey="HiveExperimentId", IsForeignKey=true)]
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="HiveExperiment_Task", Storage="_HiveExperiment", ThisKey="HiveExperimentId", OtherKey="HiveExperimentId", IsForeignKey=true)]
 		public HiveExperiment HiveExperiment
 		{
@@ -1936,10 +1936,10 @@
 					{
 						this._HiveExperiment.Entity = null;
-						previousValue.Jobs.Remove(this);
+						previousValue.Tasks.Remove(this);
 					}
 					this._HiveExperiment.Entity = value;
 					if ((value != null))
 					{
-						value.Jobs.Add(this);
+						value.Tasks.Add(this);
 						this._HiveExperimentId = value.HiveExperimentId;
 					}
@@ -1976,5 +1976,5 @@
 		{
 			this.SendPropertyChanging();
-			entity.Job = this;
+			entity.Task = this;
 		}
 		
@@ -1982,5 +1982,5 @@
 		{
 			this.SendPropertyChanging();
-			entity.Job = null;
+			entity.Task = null;
 		}
 		
@@ -1988,5 +1988,5 @@
 		{
 			this.SendPropertyChanging();
-			entity.Job = this;
+			entity.Task = this;
 		}
 		
@@ -1994,8 +1994,8 @@
 		{
 			this.SendPropertyChanging();
-			entity.Job = null;
-		}
-		
-		private void attach_Jobs(Job entity)
+			entity.Task = null;
+		}
+		
+		private void attach_Jobs(Task entity)
 		{
 			this.SendPropertyChanging();
@@ -2003,5 +2003,5 @@
 		}
 		
-		private void detach_Jobs(Job entity)
+		private void detach_Jobs(Task entity)
 		{
 			this.SendPropertyChanging();
@@ -2012,5 +2012,5 @@
 		{
 			this.SendPropertyChanging();
-			entity.Job = this;
+			entity.Task = this;
 		}
 		
@@ -2018,5 +2018,5 @@
 		{
 			this.SendPropertyChanging();
-			entity.Job = null;
+			entity.Task = null;
 		}
 	}
@@ -2291,5 +2291,5 @@
 		private bool _IsHiveEngine;
 		
-		private EntitySet<Job> _Jobs;
+		private EntitySet<Task> _Jobs;
 		
 		private EntitySet<HiveExperimentPermission> _HiveExperimentPermissions;
@@ -2319,5 +2319,5 @@
 		public HiveExperiment()
 		{
-			this._Jobs = new EntitySet<Job>(new Action<Job>(this.attach_Jobs), new Action<Job>(this.detach_Jobs));
+			this._Jobs = new EntitySet<Task>(new Action<Task>(this.attach_Jobs), new Action<Task>(this.detach_Jobs));
 			this._HiveExperimentPermissions = new EntitySet<HiveExperimentPermission>(new Action<HiveExperimentPermission>(this.attach_HiveExperimentPermissions), new Action<HiveExperimentPermission>(this.detach_HiveExperimentPermissions));
 			OnCreated();
@@ -2484,6 +2484,6 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="HiveExperiment_Job", Storage="_Jobs", ThisKey="HiveExperimentId", OtherKey="HiveExperimentId")]
-		public EntitySet<Job> Jobs
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="HiveExperiment_Task", Storage="_Jobs", ThisKey="HiveExperimentId", OtherKey="HiveExperimentId")]
+		public EntitySet<Task> Tasks
 		{
 			get
@@ -2530,5 +2530,5 @@
 		}
 		
-		private void attach_Jobs(Job entity)
+		private void attach_Jobs(Task entity)
 		{
 			this.SendPropertyChanging();
@@ -2536,5 +2536,5 @@
 		}
 		
-		private void detach_Jobs(Job entity)
+		private void detach_Jobs(Task entity)
 		{
 			this.SendPropertyChanging();
@@ -2555,6 +2555,6 @@
 	}
 	
-	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.JobData")]
-	public partial class JobData : INotifyPropertyChanging, INotifyPropertyChanged
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.TaskData")]
+	public partial class TaskData : INotifyPropertyChanging, INotifyPropertyChanged
 	{
 		
@@ -2567,5 +2567,5 @@
 		private System.DateTime _LastUpdate;
 		
-		private EntityRef<Job> _Job;
+		private EntityRef<Task> _Job;
 		
     #region Extensibility Method Definitions
@@ -2573,6 +2573,6 @@
     partial void OnValidate(System.Data.Linq.ChangeAction action);
     partial void OnCreated();
-    partial void OnJobIdChanging(System.Guid value);
-    partial void OnJobIdChanged();
+    partial void OnTaskIdChanging(System.Guid value);
+    partial void OnTaskIdChanged();
     partial void OnDataChanging(System.Data.Linq.Binary value);
     partial void OnDataChanged();
@@ -2581,12 +2581,12 @@
     #endregion
 		
-		public JobData()
-		{
-			this._Job = default(EntityRef<Job>);
+		public TaskData()
+		{
+			this._Job = default(EntityRef<Task>);
 			OnCreated();
 		}
 		
 		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_JobId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
-		public System.Guid JobId
+		public System.Guid TaskId
 		{
 			get
@@ -2602,9 +2602,9 @@
 						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
 					}
-					this.OnJobIdChanging(value);
+					this.OnTaskIdChanging(value);
 					this.SendPropertyChanging();
 					this._JobId = value;
-					this.SendPropertyChanged("JobId");
-					this.OnJobIdChanged();
+					this.SendPropertyChanged("TaskId");
+					this.OnTaskIdChanged();
 				}
 			}
@@ -2651,6 +2651,6 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Job_JobData", Storage="_Job", ThisKey="JobId", OtherKey="JobId", IsForeignKey=true)]
-		public Job Job
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Task_TaskData", Storage="_Job", ThisKey="TaskId", OtherKey="TaskId", IsForeignKey=true)]
+		public Task Task
 		{
 			get
@@ -2660,5 +2660,5 @@
 			set
 			{
-				Job previousValue = this._Job.Entity;
+				Task previousValue = this._Job.Entity;
 				if (((previousValue != value) 
 							|| (this._Job.HasLoadedOrAssignedValue == false)))
@@ -2674,5 +2674,5 @@
 					{
 						value.JobData = this;
-						this._JobId = value.JobId;
+						this._JobId = value.TaskId;
 					}
 					else
@@ -2680,5 +2680,5 @@
 						this._JobId = default(System.Guid);
 					}
-					this.SendPropertyChanged("Job");
+					this.SendPropertyChanged("Task");
 				}
 			}
@@ -2889,5 +2889,5 @@
 		private System.Guid _StateLogId;
 		
-		private global::HeuristicLab.Services.Hive.DataAccess.JobState _State;
+		private global::HeuristicLab.Services.Hive.DataAccess.TaskState _State;
 		
 		private System.DateTime _DateTime;
@@ -2901,5 +2901,5 @@
 		private string _Exception;
 		
-		private EntityRef<Job> _Job;
+		private EntityRef<Task> _Job;
 		
 		private EntityRef<Resource> _Resource;
@@ -2911,10 +2911,10 @@
     partial void OnStateLogIdChanging(System.Guid value);
     partial void OnStateLogIdChanged();
-    partial void OnStateChanging(global::HeuristicLab.Services.Hive.DataAccess.JobState value);
+    partial void OnStateChanging(global::HeuristicLab.Services.Hive.DataAccess.TaskState value);
     partial void OnStateChanged();
     partial void OnDateTimeChanging(System.DateTime value);
     partial void OnDateTimeChanged();
-    partial void OnJobIdChanging(System.Guid value);
-    partial void OnJobIdChanged();
+    partial void OnTaskIdChanging(System.Guid value);
+    partial void OnTaskIdChanged();
     partial void OnUserIdChanging(System.Nullable<System.Guid> value);
     partial void OnUserIdChanged();
@@ -2927,5 +2927,5 @@
 		public StateLog()
 		{
-			this._Job = default(EntityRef<Job>);
+			this._Job = default(EntityRef<Task>);
 			this._Resource = default(EntityRef<Resource>);
 			OnCreated();
@@ -2953,5 +2953,5 @@
 		
 		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_State", DbType="VarChar(30) NOT NULL", CanBeNull=false)]
-		public global::HeuristicLab.Services.Hive.DataAccess.JobState State
+		public global::HeuristicLab.Services.Hive.DataAccess.TaskState State
 		{
 			get
@@ -2993,5 +2993,5 @@
 		
 		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_JobId", DbType="UniqueIdentifier NOT NULL")]
-		public System.Guid JobId
+		public System.Guid TaskId
 		{
 			get
@@ -3007,9 +3007,9 @@
 						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
 					}
-					this.OnJobIdChanging(value);
+					this.OnTaskIdChanging(value);
 					this.SendPropertyChanging();
 					this._JobId = value;
-					this.SendPropertyChanged("JobId");
-					this.OnJobIdChanged();
+					this.SendPropertyChanged("TaskId");
+					this.OnTaskIdChanged();
 				}
 			}
@@ -3080,6 +3080,6 @@
 		}
 		
-		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Job_StateLog", Storage="_Job", ThisKey="JobId", OtherKey="JobId", IsForeignKey=true)]
-		public Job Job
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Task_StateLog", Storage="_Job", ThisKey="TaskId", OtherKey="TaskId", IsForeignKey=true)]
+		public Task Task
 		{
 			get
@@ -3089,5 +3089,5 @@
 			set
 			{
-				Job previousValue = this._Job.Entity;
+				Task previousValue = this._Job.Entity;
 				if (((previousValue != value) 
 							|| (this._Job.HasLoadedOrAssignedValue == false)))
@@ -3103,5 +3103,5 @@
 					{
 						value.StateLogs.Add(this);
-						this._JobId = value.JobId;
+						this._JobId = value.TaskId;
 					}
 					else
@@ -3109,5 +3109,5 @@
 						this._JobId = default(System.Guid);
 					}
-					this.SendPropertyChanged("Job");
+					this.SendPropertyChanged("Task");
 				}
 			}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/SQL Scripts/Initialize Hive Database.sql
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/SQL Scripts/Initialize Hive Database.sql	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/SQL Scripts/Initialize Hive Database.sql	(revision 6721)
@@ -5,6 +5,6 @@
 CREATE TABLE [dbo].[AssignedResources](
   [ResourceId] UniqueIdentifier NOT NULL, 
-  [JobId] UniqueIdentifier NOT NULL,   
-  CONSTRAINT [PK_dbo.ResourceIdJobId] PRIMARY KEY ([ResourceId], [JobId])
+  [TaskId] UniqueIdentifier NOT NULL,   
+  CONSTRAINT [PK_dbo.ResourceIdTaskId] PRIMARY KEY ([ResourceId], [TaskId])
   )
 CREATE TABLE [dbo].[Plugin](
@@ -19,5 +19,5 @@
 CREATE TABLE [dbo].[RequiredPlugins](
   [RequiredPluginId] UniqueIdentifier NOT NULL, 
-  [JobId] UniqueIdentifier NOT NULL, 
+  [TaskId] UniqueIdentifier NOT NULL, 
   [PluginId] UniqueIdentifier NOT NULL, 
   CONSTRAINT [PK_dbo.RequiredPlugins] PRIMARY KEY ([RequiredPluginId])
@@ -42,19 +42,19 @@
   CONSTRAINT [PK_dbo.Resource] PRIMARY KEY ([ResourceId])
   )
-CREATE TABLE [dbo].[Job](
-  [JobId] UniqueIdentifier NOT NULL, 
-  [JobState] VarChar(30), 
+CREATE TABLE [dbo].[Task](
+  [TaskId] UniqueIdentifier NOT NULL, 
+  [TaskState] VarChar(30), 
   [ExecutionTimeMs] float, 
   [LastHeartbeat] DateTime, 
-  [ParentJobId] UniqueIdentifier, 
+  [ParentTaskId] UniqueIdentifier, 
   [Priority] Int NOT NULL, 
   [CoresNeeded] Int NOT NULL, 
   [MemoryNeeded] Int NOT NULL, 
-  [IsParentJob] Bit, 
+  [IsParentTask] Bit, 
   [FinishWhenChildJobsFinished] Bit, 
   [Command] VarChar(30), 
   [HiveExperimentId] UniqueIdentifier NOT NULL, 
   [IsPrivileged] Bit, 
-  CONSTRAINT [PK_dbo.Job] PRIMARY KEY ([JobId])
+  CONSTRAINT [PK_dbo.Task] PRIMARY KEY ([TaskId])
   )
 CREATE TABLE [dbo].[Downtime](
@@ -79,9 +79,9 @@
   CONSTRAINT [PK_dbo.HiveExperiment] PRIMARY KEY ([HiveExperimentId])
   )
-CREATE TABLE [dbo].[JobData](
-  [JobId] UniqueIdentifier NOT NULL, 
+CREATE TABLE [dbo].[TaskData](
+  [TaskId] UniqueIdentifier NOT NULL, 
   [Data] VarBinary(MAX), 
   [LastUpdate] DateTime, 
-  CONSTRAINT [PK_dbo.JobData] PRIMARY KEY ([JobId])
+  CONSTRAINT [PK_dbo.TaskData] PRIMARY KEY ([TaskId])
   )
 CREATE TABLE [dbo].[PluginData](
@@ -96,5 +96,5 @@
   [State] VarChar(30) NOT NULL, 
   [DateTime] DateTime NOT NULL, 
-  [JobId] UniqueIdentifier NOT NULL, 
+  [TaskId] UniqueIdentifier NOT NULL, 
   [UserId] UniqueIdentifier, 
   [SlaveId] UniqueIdentifier, 
@@ -149,23 +149,23 @@
   ADD CONSTRAINT [Resource_AssignedResource] FOREIGN KEY ([ResourceId]) REFERENCES [dbo].[Resource]([ResourceId])
 ALTER TABLE [dbo].[AssignedResources]
-  ADD CONSTRAINT [Job_AssignedResource] FOREIGN KEY ([JobId]) REFERENCES [dbo].[Job]([JobId])
+  ADD CONSTRAINT [Task_AssignedResource] FOREIGN KEY ([TaskId]) REFERENCES [dbo].[Task]([TaskId])
 ALTER TABLE [dbo].[RequiredPlugins]
   ADD CONSTRAINT [Plugin_RequiredPlugin] FOREIGN KEY ([PluginId]) REFERENCES [dbo].[Plugin]([PluginId])
 ALTER TABLE [dbo].[RequiredPlugins]
-  ADD CONSTRAINT [Job_RequiredPlugin] FOREIGN KEY ([JobId]) REFERENCES [dbo].[Job]([JobId])
+  ADD CONSTRAINT [Task_RequiredPlugin] FOREIGN KEY ([TaskId]) REFERENCES [dbo].[Task]([TaskId])
 ALTER TABLE [dbo].[Resource]
   ADD CONSTRAINT [Resource_Resource] FOREIGN KEY ([ParentResourceId]) REFERENCES [dbo].[Resource]([ResourceId])
-ALTER TABLE [dbo].[Job]
-  ADD CONSTRAINT [Job_Job] FOREIGN KEY ([ParentJobId]) REFERENCES [dbo].[Job]([JobId])
-ALTER TABLE [dbo].[Job]
+ALTER TABLE [dbo].[Task]
+  ADD CONSTRAINT [Task_Task] FOREIGN KEY ([ParentTaskId]) REFERENCES [dbo].[Task]([TaskId])
+ALTER TABLE [dbo].[Task]
   ADD CONSTRAINT [HiveExperiment_Job] FOREIGN KEY ([HiveExperimentId]) REFERENCES [dbo].[HiveExperiment]([HiveExperimentId])
 ALTER TABLE [dbo].[Downtime]
   ADD CONSTRAINT [Resource_Downtime] FOREIGN KEY ([ResourceId]) REFERENCES [dbo].[Resource]([ResourceId])
-ALTER TABLE [dbo].[JobData]
-  ADD CONSTRAINT [Job_JobData] FOREIGN KEY ([JobId]) REFERENCES [dbo].[Job]([JobId])
+ALTER TABLE [dbo].[TaskData]
+  ADD CONSTRAINT [Task_TaskData] FOREIGN KEY ([TaskId]) REFERENCES [dbo].[Task]([TaskId])
 ALTER TABLE [dbo].[PluginData]
   ADD CONSTRAINT [Plugin_PluginData] FOREIGN KEY ([PluginId]) REFERENCES [dbo].[Plugin]([PluginId])
 ALTER TABLE [dbo].[StateLog]
-  ADD CONSTRAINT [Job_StateLog] FOREIGN KEY ([JobId]) REFERENCES [dbo].[Job]([JobId])
+  ADD CONSTRAINT [Task_StateLog] FOREIGN KEY ([TaskId]) REFERENCES [dbo].[Task]([TaskId])
 ALTER TABLE [dbo].[StateLog]
   ADD CONSTRAINT [Resource_StateLog] FOREIGN KEY ([SlaveId]) REFERENCES [dbo].[Resource]([ResourceId])
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/SQL Scripts/Prepare Hive Database.sql
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/SQL Scripts/Prepare Hive Database.sql	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/SQL Scripts/Prepare Hive Database.sql	(revision 6721)
@@ -8,7 +8,7 @@
 
 
-ALTER TABLE [dbo].[AssignedResources]  DROP  CONSTRAINT [Job_AssignedResource]
-ALTER TABLE [dbo].[AssignedResources]  WITH CHECK ADD  CONSTRAINT [Job_AssignedResource] FOREIGN KEY([JobId])
-REFERENCES [dbo].[Job] ([JobId])
+ALTER TABLE [dbo].[AssignedResources]  DROP  CONSTRAINT [Task_AssignedResource]
+ALTER TABLE [dbo].[AssignedResources]  WITH CHECK ADD  CONSTRAINT [Task_AssignedResource] FOREIGN KEY([TaskId])
+REFERENCES [dbo].[Task] ([TaskId])
 ON UPDATE CASCADE
 ON DELETE CASCADE
@@ -21,11 +21,11 @@
 GO
 
-ALTER TABLE dbo.Job ALTER COLUMN JobId ADD ROWGUIDCOL;
-ALTER TABLE dbo.Job WITH NOCHECK ADD CONSTRAINT [DF_Job_JobId] DEFAULT (NEWSEQUENTIALID()) FOR JobId;
-GO
-
-ALTER TABLE [dbo].[StateLog]  DROP  CONSTRAINT [Job_StateLog]
-ALTER TABLE [dbo].[StateLog]  WITH CHECK ADD CONSTRAINT [Job_StateLog] FOREIGN KEY([JobId])
-REFERENCES [dbo].[Job] ([JobId])
+ALTER TABLE dbo.Task ALTER COLUMN TaskId ADD ROWGUIDCOL;
+ALTER TABLE dbo.Task WITH NOCHECK ADD CONSTRAINT [DF_Task_TaskId] DEFAULT (NEWSEQUENTIALID()) FOR TaskId;
+GO
+
+ALTER TABLE [dbo].[StateLog]  DROP  CONSTRAINT [Task_StateLog]
+ALTER TABLE [dbo].[StateLog]  WITH CHECK ADD CONSTRAINT [Task_StateLog] FOREIGN KEY([TaskId])
+REFERENCES [dbo].[Task] ([TaskId])
 ON UPDATE CASCADE
 ON DELETE CASCADE
@@ -54,7 +54,7 @@
 ALTER TABLE dbo.RequiredPlugins WITH NOCHECK ADD CONSTRAINT [DF_RequiredPlugins_RequiredPluginId] DEFAULT (NEWSEQUENTIALID()) FOR RequiredPluginId;
 
-ALTER TABLE [dbo].[RequiredPlugins]  DROP  CONSTRAINT [Job_RequiredPlugin]
-ALTER TABLE [dbo].[RequiredPlugins]  WITH CHECK ADD  CONSTRAINT [Job_RequiredPlugin] FOREIGN KEY([JobId])
-REFERENCES [dbo].[Job] ([JobId])
+ALTER TABLE [dbo].[RequiredPlugins]  DROP  CONSTRAINT [Task_RequiredPlugin]
+ALTER TABLE [dbo].[RequiredPlugins]  WITH CHECK ADD  CONSTRAINT [Task_RequiredPlugin] FOREIGN KEY([TaskId])
+REFERENCES [dbo].[Task] ([TaskId])
 ON UPDATE CASCADE
 ON DELETE CASCADE
@@ -110,5 +110,5 @@
 
 /* create indices */
-CREATE INDEX Index_RequiredPlugins_JobId ON RequiredPlugins(JobId);
+CREATE INDEX Index_RequiredPlugins_TaskId ON RequiredPlugins(TaskId);
 GO
 
@@ -120,9 +120,9 @@
 CREATE VIEW [dbo].[view_FirstState]
 AS
-SELECT     sl.JobId, sl.DateTime, sl.State
+SELECT     sl.TaskId, sl.DateTime, sl.State
 FROM         dbo.StateLog AS sl INNER JOIN
-                          (SELECT     JobId, MIN(DateTime) AS DateTime
+                          (SELECT     TaskId, MIN(DateTime) AS DateTime
                             FROM          dbo.StateLog
-                            GROUP BY JobId) AS minDate ON sl.DateTime = minDate.DateTime AND sl.JobId = minDate.JobId
+                            GROUP BY TaskId) AS minDate ON sl.DateTime = minDate.DateTime AND sl.TaskId = minDate.TaskId
 
 GO
@@ -134,9 +134,9 @@
 CREATE VIEW [dbo].[view_LastState]
 AS
-SELECT     sl.JobId, sl.DateTime, sl.State
+SELECT     sl.TaskId, sl.DateTime, sl.State
 FROM         dbo.StateLog AS sl INNER JOIN
-                          (SELECT     JobId, MAX(DateTime) AS DateTime
+                          (SELECT     TaskId, MAX(DateTime) AS DateTime
                             FROM          dbo.StateLog
-                            GROUP BY JobId) AS minDate ON sl.DateTime = minDate.DateTime AND sl.JobId = minDate.JobId
+                            GROUP BY TaskId) AS minDate ON sl.DateTime = minDate.DateTime AND sl.TaskId = minDate.TaskId
 GO
 
@@ -176,5 +176,5 @@
 CREATE TRIGGER [dbo].[tr_HiveExperimentDeleteCascade] ON [dbo].[HiveExperiment] INSTEAD OF DELETE AS 
 BEGIN
-	DELETE Job FROM deleted, Job WHERE deleted.HiveExperimentId = Job.HiveExperimentId
+	DELETE Task FROM deleted, Task WHERE deleted.HiveExperimentId = Task.HiveExperimentId
 	DELETE HiveExperiment FROM deleted, HiveExperiment WHERE deleted.HiveExperimentId = HiveExperiment.HiveExperimentId
 END
@@ -186,5 +186,5 @@
 -- Description:	Recursively deletes all child-jobs of a job when it is deleted. (Source: http://devio.wordpress.com/2008/05/23/recursive-delete-in-sql-server/)
 -- =============================================
-CREATE TRIGGER [dbo].[tr_JobDeleteCascade] ON [dbo].[Job] INSTEAD OF DELETE AS 
+CREATE TRIGGER [dbo].[tr_JobDeleteCascade] ON [dbo].[Task] INSTEAD OF DELETE AS 
 BEGIN
 	-- add statistics
@@ -202,31 +202,31 @@
 	WHERE 
 		he.HiveExperimentId = j.HiveExperimentId AND 
-		fs.JobId = j.JobId AND 
-		ls.JobId = j.JobId
+		fs.TaskId = j.TaskId AND 
+		ls.TaskId = j.TaskId
 	GROUP BY he.OwnerUserId
 
 	-- recursively delete jobs
 	CREATE TABLE #Table( 
-		JobId uniqueidentifier 
+		TaskId uniqueidentifier 
 	)
-	INSERT INTO #Table (JobId)
-	SELECT JobId FROM deleted
+	INSERT INTO #Table (TaskId)
+	SELECT TaskId FROM deleted
 	
 	DECLARE @c INT
 	SET @c = 0
 	
-	WHILE @c <> (SELECT COUNT(JobId) FROM #Table) BEGIN
-		SELECT @c = COUNT(JobId) FROM #Table
+	WHILE @c <> (SELECT COUNT(TaskId) FROM #Table) BEGIN
+		SELECT @c = COUNT(TaskId) FROM #Table
 		
-		INSERT INTO #Table (JobId)
-			SELECT Job.JobId
-			FROM Job
-			LEFT OUTER JOIN #Table ON Job.JobId = #Table.JobId
-			WHERE Job.ParentJobId IN (SELECT JobId FROM #Table)
-				AND #Table.JobId IS NULL
+		INSERT INTO #Table (TaskId)
+			SELECT Task.TaskId
+			FROM Task
+			LEFT OUTER JOIN #Table ON Task.TaskId = #Table.TaskId
+			WHERE Task.ParentTaskId IN (SELECT TaskId FROM #Table)
+				AND #Table.TaskId IS NULL
 	END
 	
-	DELETE JobData FROM JobData INNER JOIN #Table ON JobData.JobId = #Table.JobId
-	DELETE Job FROM Job INNER JOIN #Table ON Job.JobId = #Table.JobId
+	DELETE TaskData FROM TaskData INNER JOIN #Table ON TaskData.TaskId = #Table.TaskId
+	DELETE Task FROM Task INNER JOIN #Table ON Task.TaskId = #Table.TaskId
 END
 GO
@@ -235,7 +235,7 @@
 -- Author:		cneumuel
 -- Create date: 17.05.2011
--- Description:	Writes the execution times of deleted jobs into DeletedJobStats to ensure correct statistics
--- =============================================
---CREATE TRIGGER [dbo].[tr_DeletedJobStats] ON [dbo].[Job] AFTER DELETE AS
+-- Description:	Writes the execution times of deleted Tasks into DeletedJobStats to ensure correct statistics
+-- =============================================
+--CREATE TRIGGER [dbo].[tr_DeletedJobStats] ON [dbo].[Task] AFTER DELETE AS
 --BEGIN
 
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/SQL Scripts/Query Jobs.sql
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/SQL Scripts/Query Jobs.sql	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.DataAccess/3.3/SQL Scripts/Query Jobs.sql	(revision 6721)
@@ -1,5 +1,5 @@
 /****** Script for SelectTopNRows command from SSMS  ******/
-SELECT j.[JobId]
-      ,j.[JobState]
+SELECT j.[TaskId]
+      ,j.[TaskState]
       ,j.[ExecutionTimeMs]/1000/60/60 AS ExecutionTimeHours
       ,DATALENGTH(jd.data)/1024.0/1024.0 AS MB
@@ -13,18 +13,18 @@
       ,j.[IsPrivileged]
       ,j.[Command]
-      ,j.[IsParentJob]   
+      ,j.[IsParentTask]   
       ,j.[FinishWhenChildJobsFinished]
-      ,j.[ParentJobId]
+      ,j.[ParentTaskId]
       , he.HiveExperimentId
   FROM 
-	[HeuristicLab.Hive-3.3].[dbo].[Job] j
+	[HeuristicLab.Hive-3.3].[dbo].[Task] j
 	,[HeuristicLab.Hive-3.3].[dbo].[HiveExperiment] he
 	,[HeuristicLab.Authentication].dbo.aspnet_Users u
-	,[HeuristicLab.Hive-3.3].dbo.JobData jd
+	,[HeuristicLab.Hive-3.3].dbo.TaskData jd
   WHERE
 	j.HiveExperimentId = he.HiveExperimentId
-	AND j.JobId = jd.JobId
+	AND j.TaskId = jd.TaskId
 	AND he.OwnerUserId = u.UserId
 	--AND he.DateCreated > '06-03-2011 10:30'
 	
-ORDER BY j.JobState, he.DateCreated DESC
+ORDER BY j.TaskState, he.DateCreated DESC
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/DaoTests.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/DaoTests.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/DaoTests.cs	(revision 6721)
@@ -51,12 +51,12 @@
       he.Id = dao.AddHiveExperiment(he);
 
-      DT.Job job1 = new DT.Job();
-      job1.State = DT.JobState.Offline;
-      job1.StateLog.Add(new DT.StateLog { State = DT.JobState.Offline, DateTime = DateTime.Now });
+      DT.Task job1 = new DT.Task();
+      job1.State = DT.TaskState.Offline;
+      job1.StateLog.Add(new DT.StateLog { State = DT.TaskState.Offline, DateTime = DateTime.Now });
       job1.Command = DT.Command.Pause;
       job1.HiveExperimentId = he.Id;
       job1.IsPrivileged = true;
 
-      DT.JobData jobData1 = new DT.JobData();
+      DT.TaskData jobData1 = new DT.TaskData();
       jobData1.Data = new byte[] { 0, 1, 2, 3, 4, 5 };
       jobData1.LastUpdate = DateTime.Now;
@@ -81,8 +81,8 @@
 
       job1.Id = dao.AddJob(job1);
-      jobData1.JobId = job1.Id;
+      jobData1.TaskId = job1.Id;
       dao.AddJobData(jobData1);
 
-      DT.Job job1loaded = dao.GetJob(job1.Id);
+      DT.Task job1loaded = dao.GetJob(job1.Id);
       Assert.AreEqual(job1.Id, job1loaded.Id);
       Assert.AreEqual(job1.CoresNeeded, job1loaded.CoresNeeded);
@@ -96,5 +96,5 @@
       Assert.IsTrue(Math.Abs((job1loaded.LastJobDataUpdate - jobData1.LastUpdate).TotalSeconds) < 1);
       for (int i = 0; i < job1.StateLog.Count; i++) {
-        Assert.AreEqual(job1.Id, job1loaded.StateLog[i].JobId);
+        Assert.AreEqual(job1.Id, job1loaded.StateLog[i].TaskId);
         Assert.AreEqual(job1.StateLog[i].State, job1loaded.StateLog[i].State);
         Assert.AreEqual(job1.StateLog[i].SlaveId, job1loaded.StateLog[i].SlaveId);
@@ -107,13 +107,13 @@
 
       // test jobstates
-      job1.StateLog.Add(new DT.StateLog { State = DT.JobState.Transferring, DateTime = DateTime.Now }); Thread.Sleep(10);
-      job1.StateLog.Add(new DT.StateLog { State = DT.JobState.Calculating, DateTime = DateTime.Now }); Thread.Sleep(10);
-      job1.StateLog.Add(new DT.StateLog { State = DT.JobState.Transferring, DateTime = DateTime.Now }); Thread.Sleep(10);
-      job1.StateLog.Add(new DT.StateLog { State = DT.JobState.Finished, DateTime = DateTime.Now }); Thread.Sleep(10);
+      job1.StateLog.Add(new DT.StateLog { State = DT.TaskState.Transferring, DateTime = DateTime.Now }); Thread.Sleep(10);
+      job1.StateLog.Add(new DT.StateLog { State = DT.TaskState.Calculating, DateTime = DateTime.Now }); Thread.Sleep(10);
+      job1.StateLog.Add(new DT.StateLog { State = DT.TaskState.Transferring, DateTime = DateTime.Now }); Thread.Sleep(10);
+      job1.StateLog.Add(new DT.StateLog { State = DT.TaskState.Finished, DateTime = DateTime.Now }); Thread.Sleep(10);
       dao.UpdateJob(job1);
 
       job1loaded = dao.GetJob(job1.Id);
       for (int i = 0; i < job1.StateLog.Count; i++) {
-        Assert.AreEqual(job1.Id, job1loaded.StateLog[i].JobId);
+        Assert.AreEqual(job1.Id, job1loaded.StateLog[i].TaskId);
         Assert.AreEqual(job1.StateLog[i].State, job1loaded.StateLog[i].State);
         Assert.AreEqual(job1.StateLog[i].SlaveId, job1loaded.StateLog[i].SlaveId);
@@ -123,6 +123,6 @@
       }
 
-      DT.JobData jobData1Loaded = dao.GetJobData(job1.Id);
-      Assert.AreEqual(jobData1.JobId, jobData1Loaded.JobId);
+      DT.TaskData jobData1Loaded = dao.GetJobData(job1.Id);
+      Assert.AreEqual(jobData1.TaskId, jobData1Loaded.TaskId);
       Assert.IsTrue(Math.Abs((jobData1.LastUpdate - jobData1Loaded.LastUpdate).TotalSeconds) < 1);
       Assert.IsTrue(jobData1.Data.SequenceEqual(jobData1Loaded.Data));
@@ -222,7 +222,7 @@
       he.Id = dao.AddHiveExperiment(he);
 
-      DT.Job job = new DT.Job();
-      job.State = DT.JobState.Offline;
-      job.StateLog.Add(new DT.StateLog { State = DT.JobState.Offline, DateTime = DateTime.Now });
+      DT.Task job = new DT.Task();
+      job.State = DT.TaskState.Offline;
+      job.StateLog.Add(new DT.StateLog { State = DT.TaskState.Offline, DateTime = DateTime.Now });
       job.HiveExperimentId = he.Id;
       job.Id = dao.AddJob(job);
@@ -242,5 +242,5 @@
       //Assert.AreEqual(he.DateCreated, heLoaded.DateCreated);
 
-      DT.Job jobLoaded = dao.GetJob(job.Id);
+      DT.Task jobLoaded = dao.GetJob(job.Id);
       Assert.AreEqual(job.Id, jobLoaded.Id);
       Assert.AreEqual(job.State, jobLoaded.State);
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/Mocks/MockUserManager.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/Mocks/MockUserManager.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/Mocks/MockUserManager.cs	(revision 6721)
@@ -1,3 +1,24 @@
-﻿using System;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
 using System.Web.Security;
 
@@ -16,5 +37,5 @@
       get { return null; /* todo */ }
     }
-    
+
     public MembershipUser GetUserByName(string username) {
       return null; // todo
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/ServiceTests.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/ServiceTests.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Tests/ServiceTests.cs	(revision 6721)
@@ -52,9 +52,9 @@
 
       // create job
-      DT.Job job = new DT.Job() { CoresNeeded = 1, MemoryNeeded = 0, Priority = 0 };
-      job.State = DT.JobState.Offline;
-      job.StateLog.Add(new DT.StateLog { State = DT.JobState.Offline, DateTime = DateTime.Now });
-
-      DT.JobData jobData = new DT.JobData() {
+      DT.Task job = new DT.Task() { CoresNeeded = 1, MemoryNeeded = 0, Priority = 0 };
+      job.State = DT.TaskState.Offline;
+      job.StateLog.Add(new DT.StateLog { State = DT.TaskState.Offline, DateTime = DateTime.Now });
+
+      DT.TaskData jobData = new DT.TaskData() {
         //Data = PersistenceUtil.Serialize(new MockJob(500, true))
         Data = new byte[10000]
@@ -105,15 +105,15 @@
 
       // test job
-      DT.Job jobLoaded = service.GetJob(job.Id);
+      DT.Task jobLoaded = service.GetJob(job.Id);
       Assert.AreEqual(job.Id, jobLoaded.Id);
       Assert.AreEqual(job.CoresNeeded, jobLoaded.CoresNeeded);
       Assert.AreEqual(job.MemoryNeeded, jobLoaded.MemoryNeeded);
       Assert.AreEqual(job.Priority, jobLoaded.Priority);
-      Assert.AreEqual(DT.JobState.Waiting, jobLoaded.State);
+      Assert.AreEqual(DT.TaskState.Waiting, jobLoaded.State);
       Assert.IsTrue(job.PluginsNeededIds.SequenceEqual(jobLoaded.PluginsNeededIds));
       Assert.AreEqual(job.HiveExperimentId, jobLoaded.HiveExperimentId);
 
-      DT.JobData jobDataLoaded = service.GetJobData(job.Id);
-      Assert.AreEqual(job.Id, jobDataLoaded.JobId);
+      DT.TaskData jobDataLoaded = service.GetJobData(job.Id);
+      Assert.AreEqual(job.Id, jobDataLoaded.TaskId);
       Assert.IsTrue(jobData.Data.SequenceEqual(jobDataLoaded.Data));
 
@@ -128,11 +128,11 @@
       Assert.AreEqual(1, actions.Count);
       Assert.AreEqual(MessageContainer.MessageType.CalculateJob, actions[0].Message);
-      Assert.AreEqual(job.Id, actions[0].JobId);
+      Assert.AreEqual(job.Id, actions[0].TaskId);
 
       jobLoaded = service.GetJob(job.Id);
-      Assert.AreEqual(JobState.Transferring, jobLoaded.State);
+      Assert.AreEqual(TaskState.Transferring, jobLoaded.State);
 
       // slave is responsible for updating state to 'Calculating'
-      service.UpdateJobState(jobLoaded.Id, DT.JobState.Calculating, slave.Id, null, null);
+      service.UpdateJobState(jobLoaded.Id, DT.TaskState.Calculating, slave.Id, null, null);
 
       // send progress
@@ -144,5 +144,5 @@
       // the job should be in state 'Calculating' now
       jobLoaded = service.GetJob(job.Id);
-      Assert.AreEqual(JobState.Calculating, jobLoaded.State);
+      Assert.AreEqual(TaskState.Calculating, jobLoaded.State);
       Assert.AreEqual(new TimeSpan(1, 5, 10, 20, 30), jobLoaded.ExecutionTime);
 
@@ -153,5 +153,5 @@
 
       // set it to finished
-      service.UpdateJobState(jobLoaded.Id, DT.JobState.Finished, slave.Id, null, null);
+      service.UpdateJobState(jobLoaded.Id, DT.TaskState.Finished, slave.Id, null, null);
 
       // test if the job is returned for the resource (it should not be)
@@ -160,5 +160,5 @@
 
       // set job waiting again
-      service.UpdateJobState(job.Id, DT.JobState.Waiting, null, null, string.Empty);
+      service.UpdateJobState(job.Id, DT.TaskState.Waiting, null, null, string.Empty);
 
       // get job again
@@ -166,5 +166,5 @@
       Assert.AreEqual(1, actions.Count);
       Assert.AreEqual(MessageContainer.MessageType.CalculateJob, actions[0].Message);
-      Assert.AreEqual(job.Id, actions[0].JobId);
+      Assert.AreEqual(job.Id, actions[0].TaskId);
 
       // create downtime which should make slave unavailable for calculation
@@ -176,5 +176,5 @@
       Assert.AreEqual(1, actions.Count);
       Assert.AreEqual(MessageContainer.MessageType.PauseAll, actions[0].Message);
-      Assert.AreEqual(Guid.Empty, actions[0].JobId);
+      Assert.AreEqual(Guid.Empty, actions[0].TaskId);
 
       service.DeleteDowntime(downtimeId);
@@ -190,5 +190,5 @@
       Assert.AreEqual(1, actions.Count);
       Assert.AreEqual(MessageContainer.MessageType.AbortJob, actions[0].Message);
-      Assert.AreEqual(job.Id, actions[0].JobId);
+      Assert.AreEqual(job.Id, actions[0].TaskId);
 
       // delete slave
@@ -204,5 +204,5 @@
 
       // create parent job
-      DT.Job parentJob = new DT.Job() {
+      DT.Task parentJob = new DT.Task() {
         CoresNeeded = 1,
         MemoryNeeded = 0,
@@ -211,19 +211,19 @@
         FinishWhenChildJobsFinished = true
       };
-      parentJob.State = DT.JobState.Offline;
-      parentJob.StateLog.Add(new DT.StateLog { State = DT.JobState.Offline, DateTime = DateTime.Now });
-
-      DT.JobData parentJobData = new DT.JobData() { Data = new byte[0] };
+      parentJob.State = DT.TaskState.Offline;
+      parentJob.StateLog.Add(new DT.StateLog { State = DT.TaskState.Offline, DateTime = DateTime.Now });
+
+      DT.TaskData parentJobData = new DT.TaskData() { Data = new byte[0] };
 
       // create child job
-      DT.Job childJob = new DT.Job() {
+      DT.Task childJob = new DT.Task() {
         CoresNeeded = 1,
         MemoryNeeded = 0,
         Priority = 0
       };
-      childJob.State = DT.JobState.Offline;
-      childJob.StateLog.Add(new DT.StateLog { State = DT.JobState.Offline, DateTime = DateTime.Now });
-
-      DT.JobData childJobData = new DT.JobData() { Data = new byte[1000] };
+      childJob.State = DT.TaskState.Offline;
+      childJob.StateLog.Add(new DT.StateLog { State = DT.TaskState.Offline, DateTime = DateTime.Now });
+
+      DT.TaskData childJobData = new DT.TaskData() { Data = new byte[1000] };
 
       // create slave
@@ -250,11 +250,11 @@
       childJob.HiveExperimentId = experiment.Id;
       childJob.Id = service.AddChildJob(parentJob.Id, childJob, childJobData);
-      childJob.ParentJobId = parentJob.Id;
+      childJob.ParentTaskId = parentJob.Id;
 
       // test child job
       var childJobLoaded = service.GetJob(childJob.Id);
-      Assert.AreEqual(childJob.ParentJobId, childJobLoaded.ParentJobId);
+      Assert.AreEqual(childJob.ParentTaskId, childJobLoaded.ParentTaskId);
       Assert.AreEqual(childJob.HiveExperimentId, childJobLoaded.HiveExperimentId);
-      Assert.AreEqual(DT.JobState.Waiting, childJobLoaded.State);
+      Assert.AreEqual(DT.TaskState.Waiting, childJobLoaded.State);
       Assert.AreEqual(false, childJobLoaded.FinishWhenChildJobsFinished);
       Assert.AreEqual(false, childJobLoaded.IsParentJob);
@@ -263,5 +263,5 @@
       var parentJobLoaded = service.GetJob(parentJob.Id);
       Assert.AreEqual(parentJob.HiveExperimentId, parentJobLoaded.HiveExperimentId);
-      Assert.AreEqual(JobState.Waiting, parentJobLoaded.State);
+      Assert.AreEqual(TaskState.Waiting, parentJobLoaded.State);
       Assert.AreEqual(true, parentJobLoaded.FinishWhenChildJobsFinished);
       Assert.AreEqual(true, parentJobLoaded.IsParentJob);
@@ -271,5 +271,5 @@
       Assert.AreEqual(1, actions.Count); // only the child job should be assigned
       Assert.AreEqual(MessageContainer.MessageType.CalculateJob, actions[0].Message);
-      Assert.AreEqual(childJob.Id, actions[0].JobId);
+      Assert.AreEqual(childJob.Id, actions[0].TaskId);
 
       // lifecycle - let it process one server-heartbeat; the parent job must NOT be set to finished
@@ -277,8 +277,8 @@
 
       parentJobLoaded = service.GetJob(parentJob.Id);
-      Assert.AreEqual(JobState.Waiting, parentJobLoaded.State);
+      Assert.AreEqual(TaskState.Waiting, parentJobLoaded.State);
 
       // set child job to finished
-      childJobLoaded = service.UpdateJobState(childJobLoaded.Id, DT.JobState.Finished, slave.Id, null, null);
+      childJobLoaded = service.UpdateJobState(childJobLoaded.Id, DT.TaskState.Finished, slave.Id, null, null);
 
       // lifecycle - let it process one server-heartbeat; this should set the parent job to finished
@@ -287,5 +287,5 @@
       // test if parent job is finished
       parentJobLoaded = service.GetJob(parentJob.Id);
-      Assert.AreEqual(JobState.Finished, parentJobLoaded.State);
+      Assert.AreEqual(TaskState.Finished, parentJobLoaded.State);
 
       // delete experiment
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Web/Hive-3.4/Status.aspx.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Web/Hive-3.4/Status.aspx.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive.Web/Hive-3.4/Status.aspx.cs	(revision 6721)
@@ -32,5 +32,5 @@
     int currentlyAvailableCores = onlineSlaves.Sum(s => s.Cores.Value);
     int currentlyUsedCores = currentlyAvailableCores - onlineSlaves.Sum(s => s.FreeCores.Value);
-    int currentlyJobsWaiting = ServiceLocator.Instance.HiveDao.GetJobs(x => x.State == DA.JobState.Waiting).Count();
+    int currentlyJobsWaiting = ServiceLocator.Instance.HiveDao.GetJobs(x => x.State == DA.TaskState.Waiting).Count();
 
     this.availableCoresLabel.Text = currentlyAvailableCores.ToString();
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 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Convert.cs	(revision 6721)
@@ -31,12 +31,12 @@
   public static class Convert {
     #region Job
-    public static DT.Job ToDto(DB.Job source) {
-      if (source == null) return null;
-      return new DT.Job {
-        Id = source.JobId,
+    public static DT.Task ToDto(DB.Task source) {
+      if (source == null) return null;
+      return new DT.Task {
+        Id = source.TaskId,
         CoresNeeded = source.CoresNeeded,
         ExecutionTime = TimeSpan.FromMilliseconds(source.ExecutionTimeMs),
         MemoryNeeded = source.MemoryNeeded,
-        ParentJobId = source.ParentJobId,
+        ParentTaskId = source.ParentTaskId,
         Priority = source.Priority,
         PluginsNeededIds = (source.RequiredPlugins == null ? new List<Guid>() : source.RequiredPlugins.Select(x => x.PluginId).ToList()),
@@ -44,5 +44,5 @@
         State = Convert.ToDto(source.State),
         StateLog = (source.StateLogs == null ? new List<DT.StateLog>() : source.StateLogs.Select(x => Convert.ToDto(x)).OrderBy(x => x.DateTime).ToList()),
-        IsParentJob = source.IsParentJob,
+        IsParentJob = source.IsParentTask,
         FinishWhenChildJobsFinished = source.FinishWhenChildJobsFinished,
         Command = Convert.ToDto(source.Command),
@@ -53,16 +53,16 @@
     }
 
-    public static DB.Job ToEntity(DT.Job source) {
-      if (source == null) return null;
-      var entity = new DB.Job(); ToEntity(source, entity);
-      return entity;
-    }
-    public static void ToEntity(DT.Job source, DB.Job target) {
-      if ((source != null) && (target != null)) {
-        target.JobId = source.Id;
+    public static DB.Task ToEntity(DT.Task source) {
+      if (source == null) return null;
+      var entity = new DB.Task(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.Task source, DB.Task target) {
+      if ((source != null) && (target != null)) {
+        target.TaskId = source.Id;
         target.CoresNeeded = source.CoresNeeded;
         target.ExecutionTimeMs = source.ExecutionTime.TotalMilliseconds;
         target.MemoryNeeded = source.MemoryNeeded;
-        target.ParentJobId = source.ParentJobId;
+        target.ParentTaskId = source.ParentTaskId;
         target.Priority = source.Priority;
         target.LastHeartbeat = source.LastHeartbeat;
@@ -72,5 +72,5 @@
           target.StateLogs.Add(Convert.ToEntity(sl));
         }
-        target.IsParentJob = source.IsParentJob;
+        target.IsParentTask = source.IsParentJob;
         target.FinishWhenChildJobsFinished = source.FinishWhenChildJobsFinished;
         target.Command = Convert.ToEntity(source.Command);
@@ -83,16 +83,16 @@
 
     #region JobData
-    public static DT.JobData ToDto(DB.JobData source) {
-      if (source == null) return null;
-      return new DT.JobData { JobId = source.JobId, Data = source.Data.ToArray(), LastUpdate = source.LastUpdate };
-    }
-    public static DB.JobData ToEntity(DT.JobData source) {
-      if (source == null) return null;
-      var entity = new DB.JobData(); ToEntity(source, entity);
-      return entity;
-    }
-    public static void ToEntity(DT.JobData source, DB.JobData target) {
-      if ((source != null) && (target != null)) {
-        target.JobId = source.JobId; target.Data = new Binary(source.Data); target.LastUpdate = source.LastUpdate;
+    public static DT.TaskData ToDto(DB.TaskData source) {
+      if (source == null) return null;
+      return new DT.TaskData { TaskId = source.TaskId, Data = source.Data.ToArray(), LastUpdate = source.LastUpdate };
+    }
+    public static DB.TaskData ToEntity(DT.TaskData source) {
+      if (source == null) return null;
+      var entity = new DB.TaskData(); ToEntity(source, entity);
+      return entity;
+    }
+    public static void ToEntity(DT.TaskData source, DB.TaskData target) {
+      if ((source != null) && (target != null)) {
+        target.TaskId = source.TaskId; target.Data = new Binary(source.Data); target.LastUpdate = source.LastUpdate;
       }
     }
@@ -102,5 +102,5 @@
     public static DT.StateLog ToDto(DB.StateLog source) {
       if (source == null) return null;
-      return new DT.StateLog { Id = source.StateLogId, DateTime = source.DateTime, Exception = source.Exception, JobId = source.JobId, SlaveId = source.SlaveId, State = Convert.ToDto(source.State), UserId = source.UserId };
+      return new DT.StateLog { Id = source.StateLogId, DateTime = source.DateTime, Exception = source.Exception, TaskId = source.TaskId, SlaveId = source.SlaveId, State = Convert.ToDto(source.State), UserId = source.UserId };
     }
     public static DB.StateLog ToEntity(DT.StateLog source) {
@@ -111,5 +111,5 @@
     public static void ToEntity(DT.StateLog source, DB.StateLog target) {
       if ((source != null) && (target != null)) {
-        target.StateLogId = source.Id; target.DateTime = source.DateTime; target.Exception = source.Exception; target.JobId = source.JobId; target.SlaveId = source.SlaveId; target.State = Convert.ToEntity(source.State); target.UserId = source.UserId;
+        target.StateLogId = source.Id; target.DateTime = source.DateTime; target.Exception = source.Exception; target.TaskId = source.TaskId; target.SlaveId = source.SlaveId; target.State = Convert.ToEntity(source.State); target.UserId = source.UserId;
       }
     }
@@ -365,45 +365,45 @@
 
 
-    #region JobState
-    public static DT.JobState ToDto(DB.JobState source) {
-      if (source == DB.JobState.Aborted) {
-        return JobState.Aborted;
-      } else if (source == DB.JobState.Calculating) {
-        return JobState.Calculating;
-      } else if (source == DB.JobState.Failed) {
-        return JobState.Failed;
-      } else if (source == DB.JobState.Finished) {
-        return JobState.Finished;
-      } else if (source == DB.JobState.Offline) {
-        return JobState.Offline;
-      } else if (source == DB.JobState.Paused) {
-        return JobState.Paused;
-      } else if (source == DB.JobState.Transferring) {
-        return JobState.Transferring;
-      } else if (source == DB.JobState.Waiting) {
-        return JobState.Waiting;
-      } else
-        return JobState.Failed;
-    }
-
-    public static DB.JobState ToEntity(DT.JobState source) {
-      if (source == DT.JobState.Aborted) {
-        return DB.JobState.Aborted;
-      } else if (source == DT.JobState.Calculating) {
-        return DB.JobState.Calculating;
-      } else if (source == DT.JobState.Failed) {
-        return DB.JobState.Failed;
-      } else if (source == DT.JobState.Finished) {
-        return DB.JobState.Finished;
-      } else if (source == DT.JobState.Offline) {
-        return DB.JobState.Offline;
-      } else if (source == DT.JobState.Paused) {
-        return DB.JobState.Paused;
-      } else if (source == DT.JobState.Transferring) {
-        return DB.JobState.Transferring;
-      } else if (source == DT.JobState.Waiting) {
-        return DB.JobState.Waiting;
-      } else
-        return DB.JobState.Failed;
+    #region TaskData
+    public static DT.TaskState ToDto(DB.TaskState source) {
+      if (source == DB.TaskState.Aborted) {
+        return TaskState.Aborted;
+      } else if (source == DB.TaskState.Calculating) {
+        return TaskState.Calculating;
+      } else if (source == DB.TaskState.Failed) {
+        return TaskState.Failed;
+      } else if (source == DB.TaskState.Finished) {
+        return TaskState.Finished;
+      } else if (source == DB.TaskState.Offline) {
+        return TaskState.Offline;
+      } else if (source == DB.TaskState.Paused) {
+        return TaskState.Paused;
+      } else if (source == DB.TaskState.Transferring) {
+        return TaskState.Transferring;
+      } else if (source == DB.TaskState.Waiting) {
+        return TaskState.Waiting;
+      } else
+        return TaskState.Failed;
+    }
+
+    public static DB.TaskState ToEntity(DT.TaskState source) {
+      if (source == DT.TaskState.Aborted) {
+        return DB.TaskState.Aborted;
+      } else if (source == DT.TaskState.Calculating) {
+        return DB.TaskState.Calculating;
+      } else if (source == DT.TaskState.Failed) {
+        return DB.TaskState.Failed;
+      } else if (source == DT.TaskState.Finished) {
+        return DB.TaskState.Finished;
+      } else if (source == DT.TaskState.Offline) {
+        return DB.TaskState.Offline;
+      } else if (source == DT.TaskState.Paused) {
+        return DB.TaskState.Paused;
+      } else if (source == DT.TaskState.Transferring) {
+        return DB.TaskState.Transferring;
+      } else if (source == DT.TaskState.Waiting) {
+        return DB.TaskState.Waiting;
+      } else
+        return DB.TaskState.Failed;
     }
     #endregion
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 6721)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/LightweightTask.cs	(revision 6721)
@@ -0,0 +1,62 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class LightweightTask : HiveItem {
+    [DataMember]
+    public TimeSpan ExecutionTime { get; set; }
+    [DataMember]
+    public Guid? ParentTaskId { get; set; }
+    [DataMember]
+    public List<StateLog> StateLog { get; set; }
+    [DataMember]
+    public TaskState State { get; set; }
+    [DataMember]
+    public Command? Command { get; set; }
+    [DataMember]
+    public DateTime LastJobDataUpdate { get; set; }
+
+    public StateLog CurrentStateLog { get { return StateLog.LastOrDefault(); } }
+    public DateTime? DateCreated { get { return StateLog.Count > 0 ? new DateTime?(StateLog.First().DateTime) : null; } }
+    public DateTime? DateFinished { get { return (StateLog.Count > 0 && CurrentStateLog.State == TaskState.Finished) ? new DateTime?(CurrentStateLog.DateTime) : null; } }
+
+    public LightweightTask() {
+      StateLog = new List<DataTransfer.StateLog>();
+    }
+
+    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;
+    }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/StateLog.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/StateLog.cs	(revision 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/StateLog.cs	(revision 6721)
@@ -36,7 +36,7 @@
     public string Exception { get; set; }
     [DataMember]
-    public JobState State { get; set; }
+    public TaskState State { get; set; }
     [DataMember]
-    public Guid JobId { get; set; }
+    public Guid TaskId { get; set; }
 
     public StateLog() { }
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Task.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Task.cs	(revision 6721)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/Task.cs	(revision 6721)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class Task : LightweightTask {
+    [DataMember]
+    public int Priority { get; set; }
+    [DataMember]
+    public int CoresNeeded { get; set; }
+    [DataMember]
+    public int MemoryNeeded { get; set; }
+    [DataMember]
+    public List<Guid> PluginsNeededIds { get; set; }
+    [DataMember]
+    public DateTime? LastHeartbeat { get; set; }
+    [DataMember]
+    public bool IsParentJob { get; set; }
+    [DataMember]
+    public bool FinishWhenChildJobsFinished { get; set; }
+    [DataMember]
+    public Guid HiveExperimentId { get; set; }
+    [DataMember]
+    public bool IsPrivileged { get; set; }
+
+    public Task() {
+      this.PluginsNeededIds = new List<Guid>();
+    }
+  }
+}
Index: /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/TaskData.cs
===================================================================
--- /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/TaskData.cs	(revision 6721)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/TaskData.cs	(revision 6721)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [DataContract]
+  [Serializable]
+  public class TaskData {
+    [DataMember]
+    public Guid TaskId { get; set; }
+    [DataMember]
+    public byte[] Data { get; set; }
+    [DataMember]
+    public DateTime LastUpdate { get; set; }
+
+    public TaskData() { }
+  }
+}
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 6721)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/DataTransfer/TaskState.cs	(revision 6721)
@@ -0,0 +1,92 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Services.Hive.DataTransfer {
+  [Serializable]
+  public enum TaskState {
+    /// <summary>
+    /// A task is offline as long as he is not yet submitted to the hive
+    /// </summary>
+    Offline,
+
+    /// <summary>
+    /// Task is waiting to be calculated
+    /// </summary>
+    Waiting,
+
+    /// <summary>
+    /// Task is beeing transferred
+    /// </summary>
+    Transferring,
+
+    /// <summary>
+    /// Task is actively calculated on a Slave
+    /// </summary>
+    Calculating,
+
+    /// <summary>
+    /// Task is paused, will not be picked up by slaves
+    /// </summary>
+    Paused,
+
+    /// <summary>
+    /// Task as finished and is ready to be collected by the Client
+    /// </summary>
+    Finished,
+
+    /// <summary>
+    /// Task is aborted and result can be collected by the Client
+    /// </summary>
+    Aborted,
+
+    /// <summary>
+    /// Task as been aborted due to an error. Results are ready to be collected
+    /// </summary>
+    Failed
+  };
+
+  public static class TaskStateExtensions {
+    /// <summary>
+    /// This job is not yet done
+    /// </summary>
+    public static bool IsActive(this TaskState taskState) {
+      return !taskState.IsDone();
+    }
+
+    /// <summary>
+    /// This job is Waiting
+    /// </summary>
+    public static bool IsWaiting(this TaskState taskState) {
+      return taskState == TaskState.Waiting;
+    }
+
+    /// <summary>
+    /// This job is Finished || Failed || Aborted
+    /// </summary>
+    public static bool IsDone(this TaskState taskState) {
+      return taskState == TaskState.Finished ||
+        taskState == TaskState.Aborted ||
+        taskState == TaskState.Failed;
+    }
+  }
+}
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 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj	(revision 6721)
@@ -111,8 +111,8 @@
     <Compile Include="DataTransfer\HiveExperimentPermission.cs" />
     <Compile Include="DataTransfer\HiveItem.cs" />
-    <Compile Include="DataTransfer\Job.cs" />
-    <Compile Include="DataTransfer\JobData.cs" />
-    <Compile Include="DataTransfer\JobState.cs" />
-    <Compile Include="DataTransfer\LightweightJob.cs" />
+    <Compile Include="DataTransfer\Task.cs" />
+    <Compile Include="DataTransfer\TaskData.cs" />
+    <Compile Include="DataTransfer\TaskState.cs" />
+    <Compile Include="DataTransfer\LightweightTask.cs" />
     <Compile Include="DataTransfer\NamedHiveItem.cs" />
     <Compile Include="DataTransfer\Permission.cs" />
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 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HiveDao.cs	(revision 6721)
@@ -37,37 +37,37 @@
 
     #region Job Methods
-    public DT.Job GetJob(Guid id) {
-      using (var db = CreateContext()) {
-        return DT.Convert.ToDto(db.Jobs.SingleOrDefault(x => x.JobId == id));
-      }
-    }
-
-    public IEnumerable<DT.Job> GetJobs(Expression<Func<Job, bool>> predicate) {
-      using (var db = CreateContext()) {
-        return db.Jobs.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
-      }
-    }
-
-    public Guid AddJob(DT.Job dto) {
-      using (var db = CreateContext()) {
-        var entity = DT.Convert.ToEntity(dto);
-        db.Jobs.InsertOnSubmit(entity);
+    public DT.Task GetJob(Guid id) {
+      using (var db = CreateContext()) {
+        return DT.Convert.ToDto(db.Tasks.SingleOrDefault(x => x.TaskId == id));
+      }
+    }
+
+    public IEnumerable<DT.Task> GetJobs(Expression<Func<Task, bool>> predicate) {
+      using (var db = CreateContext()) {
+        return db.Tasks.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddJob(DT.Task dto) {
+      using (var db = CreateContext()) {
+        var entity = DT.Convert.ToEntity(dto);
+        db.Tasks.InsertOnSubmit(entity);
         db.SubmitChanges();
         foreach (Guid pluginId in dto.PluginsNeededIds) {
-          db.RequiredPlugins.InsertOnSubmit(new RequiredPlugin() { JobId = entity.JobId, PluginId = pluginId });
-        }
-        db.SubmitChanges();
-        return entity.JobId;
-      }
-    }
-
-    public void UpdateJob(DT.Job dto) {
-      using (var db = CreateContext()) {
-        var entity = db.Jobs.FirstOrDefault(x => x.JobId == dto.Id);
-        if (entity == null) db.Jobs.InsertOnSubmit(DT.Convert.ToEntity(dto));
+          db.RequiredPlugins.InsertOnSubmit(new RequiredPlugin() { TaskId = entity.TaskId, PluginId = pluginId });
+        }
+        db.SubmitChanges();
+        return entity.TaskId;
+      }
+    }
+
+    public void UpdateJob(DT.Task dto) {
+      using (var db = CreateContext()) {
+        var entity = db.Tasks.FirstOrDefault(x => x.TaskId == dto.Id);
+        if (entity == null) db.Tasks.InsertOnSubmit(DT.Convert.ToEntity(dto));
         else DT.Convert.ToEntity(dto, entity);
         foreach (Guid pluginId in dto.PluginsNeededIds) {
           if (db.RequiredPlugins.Count(p => p.PluginId == pluginId) == 0) {
-            db.RequiredPlugins.InsertOnSubmit(new RequiredPlugin() { JobId = entity.JobId, PluginId = pluginId });
+            db.RequiredPlugins.InsertOnSubmit(new RequiredPlugin() { TaskId = entity.TaskId, PluginId = pluginId });
           }
         }
@@ -78,6 +78,6 @@
     public void DeleteJob(Guid id) {
       using (var db = CreateContext()) {
-        var entity = db.Jobs.FirstOrDefault(x => x.JobId == id);
-        if (entity != null) db.Jobs.DeleteOnSubmit(entity);
+        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
       }
@@ -91,26 +91,26 @@
     /// <param name="finished">if true, all parent jobs which have FinishWhenChildJobsFinished=true are returned, otherwise only FinishWhenChildJobsFinished=false are returned</param>
     /// <returns></returns>
-    public IEnumerable<DT.Job> GetParentJobs(IEnumerable<Guid> resourceIds, int count, bool finished) {
+    public IEnumerable<DT.Task> GetParentJobs(IEnumerable<Guid> resourceIds, int count, bool finished) {
       using (var db = CreateContext()) {
         var query = from ar in db.AssignedResources
                     where resourceIds.Contains(ar.ResourceId)
-                       && ar.Job.State == JobState.Waiting
-                       && ar.Job.IsParentJob
-                       && (finished ? ar.Job.FinishWhenChildJobsFinished : !ar.Job.FinishWhenChildJobsFinished)
-                       && (from child in db.Jobs
-                           where child.ParentJobId == ar.Job.JobId
-                           select child.State == JobState.Finished
-                               || child.State == JobState.Aborted
-                               || child.State == JobState.Failed).All(x => x)
-                       && (from child in db.Jobs // avoid returning WaitForChildJobs jobs where no child-jobs exist (yet)
-                           where child.ParentJobId == ar.Job.JobId
+                       && ar.Task.State == TaskState.Waiting
+                       && ar.Task.IsParentTask
+                       && (finished ? ar.Task.FinishWhenChildJobsFinished : !ar.Task.FinishWhenChildJobsFinished)
+                       && (from child in db.Tasks
+                           where child.ParentTaskId == ar.Task.TaskId
+                           select child.State == TaskState.Finished
+                               || 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)
+                           where child.ParentTaskId == ar.Task.TaskId
                            select child).Count() > 0
-                    orderby ar.Job.Priority descending, db.Random()
-                    select DT.Convert.ToDto(ar.Job);
+                    orderby ar.Task.Priority descending, db.Random()
+                    select DT.Convert.ToDto(ar.Task);
         return count == 0 ? query.ToArray() : query.Take(count).ToArray();
       }
     }
 
-    public IEnumerable<DT.Job> GetWaitingJobs(DT.Slave slave, int count) {
+    public IEnumerable<DT.Task> GetWaitingJobs(DT.Slave slave, int count) {
       using (var db = CreateContext()) {
         var resourceIds = GetParentResources(slave.Id).Select(r => r.Id);
@@ -120,10 +120,10 @@
         var query = from ar in db.AssignedResources
                     where resourceIds.Contains(ar.ResourceId)
-                       && !(ar.Job.IsParentJob && ar.Job.FinishWhenChildJobsFinished)
-                       && ar.Job.State == JobState.Waiting
-                       && ar.Job.CoresNeeded <= slave.FreeCores
-                       && ar.Job.MemoryNeeded <= slave.FreeMemory
-                    orderby ar.Job.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)
-                    select DT.Convert.ToDto(ar.Job);
+                       && !(ar.Task.IsParentTask && ar.Task.FinishWhenChildJobsFinished)
+                       && ar.Task.State == TaskState.Waiting
+                       && 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)
+                    select DT.Convert.ToDto(ar.Task);
         var waitingJobs = (count == 0 ? query : query.Take(count)).ToArray();
         return waitingJobs.Union(waitingParentJobs).OrderByDescending(x => x.Priority);
@@ -131,10 +131,10 @@
     }
 
-    public DT.Job UpdateJobState(Guid jobId, JobState jobState, Guid? slaveId, Guid? userId, string exception) {
-      using (var db = CreateContext()) {
-        var job = db.Jobs.SingleOrDefault(x => x.JobId == jobId);
+    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;
         db.StateLogs.InsertOnSubmit(new StateLog {
-          JobId = jobId,
+          TaskId = jobId,
           State = jobState,
           SlaveId = slaveId,
@@ -144,5 +144,5 @@
         });
         db.SubmitChanges();
-        job = db.Jobs.SingleOrDefault(x => x.JobId == jobId);
+        job = db.Tasks.SingleOrDefault(x => x.TaskId == jobId);
         return DT.Convert.ToDto(job);
       }
@@ -151,29 +151,29 @@
 
     #region JobData Methods
-    public DT.JobData GetJobData(Guid id) {
+    public DT.TaskData GetJobData(Guid id) {
       using (var db = CreateContext(true)) {
-        return DT.Convert.ToDto(db.JobDatas.SingleOrDefault(x => x.JobId == id));
-      }
-    }
-
-    public IEnumerable<DT.JobData> GetJobDatas(Expression<Func<JobData, bool>> predicate) {
+        return DT.Convert.ToDto(db.TaskDatas.SingleOrDefault(x => x.TaskId == id));
+      }
+    }
+
+    public IEnumerable<DT.TaskData> GetJobDatas(Expression<Func<TaskData, bool>> predicate) {
       using (var db = CreateContext(true)) {
-        return db.JobDatas.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
-      }
-    }
-
-    public Guid AddJobData(DT.JobData dto) {
+        return db.TaskDatas.Where(predicate).Select(x => DT.Convert.ToDto(x)).ToArray();
+      }
+    }
+
+    public Guid AddJobData(DT.TaskData dto) {
       using (var db = CreateContext(true)) {
         var entity = DT.Convert.ToEntity(dto);
-        db.JobDatas.InsertOnSubmit(entity);
-        db.SubmitChanges();
-        return entity.JobId;
-      }
-    }
-
-    public void UpdateJobData(DT.JobData dto) {
+        db.TaskDatas.InsertOnSubmit(entity);
+        db.SubmitChanges();
+        return entity.TaskId;
+      }
+    }
+
+    public void UpdateJobData(DT.TaskData dto) {
       using (var db = CreateContext(true)) {
-        var entity = db.JobDatas.FirstOrDefault(x => x.JobId == dto.JobId);
-        if (entity == null) db.JobDatas.InsertOnSubmit(DT.Convert.ToEntity(dto));
+        var entity = db.TaskDatas.FirstOrDefault(x => x.TaskId == dto.TaskId);
+        if (entity == null) db.TaskDatas.InsertOnSubmit(DT.Convert.ToEntity(dto));
         else DT.Convert.ToEntity(dto, entity);
         db.SubmitChanges();
@@ -183,6 +183,6 @@
     public void DeleteJobData(Guid id) {
       using (var db = CreateContext()) {
-        var entity = db.JobDatas.FirstOrDefault(x => x.JobId == id); // check if all the byte[] is loaded into memory here. otherwise work around to delete without loading it
-        if (entity != null) db.JobDatas.DeleteOnSubmit(entity);
+        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
+        if (entity != null) db.TaskDatas.DeleteOnSubmit(entity);
         db.SubmitChanges();
       }
@@ -241,8 +241,8 @@
         return null;
 
-      var jobs = db.Jobs.Where(j => j.HiveExperimentId == exp.Id);
+      var jobs = db.Tasks.Where(j => j.HiveExperimentId == exp.Id);
       exp.JobCount = jobs.Count();
-      exp.CalculatingCount = jobs.Count(j => j.State == JobState.Calculating);
-      exp.FinishedCount = jobs.Count(j => j.State == JobState.Finished);
+      exp.CalculatingCount = jobs.Count(j => j.State == TaskState.Calculating);
+      exp.FinishedCount = jobs.Count(j => j.State == TaskState.Finished);
       return exp;
     }
@@ -554,6 +554,6 @@
     public void AssignJobToResource(Guid jobId, Guid resourceId) {
       using (var db = CreateContext()) {
-        var job = db.Jobs.Where(x => x.JobId == jobId).Single();
-        job.AssignedResources.Add(new AssignedResource() { JobId = jobId, ResourceId = resourceId });
+        var job = db.Tasks.Where(x => x.TaskId == jobId).Single();
+        job.AssignedResources.Add(new AssignedResource() { TaskId = jobId, ResourceId = resourceId });
         db.SubmitChanges();
       }
@@ -562,5 +562,5 @@
     public IEnumerable<DT.Resource> GetAssignedResources(Guid jobId) {
       using (var db = CreateContext()) {
-        var job = db.Jobs.Where(x => x.JobId == jobId).Single();
+        var job = db.Tasks.Where(x => x.TaskId == jobId).Single();
         return job.AssignedResources.Select(x => DT.Convert.ToDto(x.Resource)).ToArray();
       }
@@ -598,11 +598,11 @@
     }
 
-    public IEnumerable<DT.Job> GetJobsByResourceId(Guid resourceId) {
+    public IEnumerable<DT.Task> GetJobsByResourceId(Guid resourceId) {
       using (var db = CreateContext()) {
         var resources = GetChildResources(resourceId).Select(x => x.Id).ToList();
         resources.Add(resourceId);
 
-        var jobs = db.Jobs.Where(j =>
-          j.State == JobState.Calculating &&
+        var jobs = db.Tasks.Where(j =>
+          j.State == TaskState.Calculating &&
           j.StateLogs.OrderByDescending(x => x.DateTime).First().SlaveId.HasValue &&
           resources.Contains(j.StateLogs.OrderByDescending(x => x.DateTime).First().SlaveId.Value));
@@ -631,5 +631,5 @@
     public Guid GetExperimentForJob(Guid jobId) {
       using (var db = CreateContext()) {
-        return db.Jobs.Single(j => j.JobId == jobId).HiveExperimentId;
+        return db.Tasks.Single(j => j.TaskId == jobId).HiveExperimentId;
       }
     }
@@ -743,6 +743,6 @@
         var userStats = new Dictionary<Guid, DT.UserStatistics>();
 
-        var usedCoresByUser = from job in db.Jobs
-                              where job.State == JobState.Calculating
+        var usedCoresByUser = from job in db.Tasks
+                              where job.State == TaskState.Calculating
                               group job by job.HiveExperiment.OwnerUserId into g
                               select new { UserId = g.Key, UsedCores = g.Count() };
@@ -755,5 +755,5 @@
         }
 
-        var executionTimesByUser = from job in db.Jobs
+        var executionTimesByUser = from job in db.Tasks
                                    group job by job.HiveExperiment.OwnerUserId into g
                                    select new { UserId = g.Key, ExecutionTime = TimeSpan.FromMilliseconds(g.Select(x => x.ExecutionTimeMs).Sum()) };
@@ -766,6 +766,6 @@
 
         // execution times only of finished jobs - necessary to compute efficieny
-        var executionTimesFinishedJobs = from job in db.Jobs
-                                         where job.State == JobState.Finished
+        var executionTimesFinishedJobs = from job in db.Tasks
+                                         where job.State == TaskState.Finished
                                          group job by job.HiveExperiment.OwnerUserId into g
                                          select new { UserId = g.Key, ExecutionTimeFinishedJobs = TimeSpan.FromMilliseconds(g.Select(x => x.ExecutionTimeMs).Sum()) };
@@ -779,6 +779,6 @@
 
         // start to end times only of finished jobs - necessary to compute efficiency
-        var startToEndTimesFinishedJobs = from job in db.Jobs
-                                          where job.State == JobState.Finished
+        var startToEndTimesFinishedJobs = from job in db.Tasks
+                                          where job.State == TaskState.Finished
                                           group job by job.HiveExperiment.OwnerUserId into g
                                           select new {
@@ -817,10 +817,10 @@
 
     #region Helpers
-    private void CollectChildJobs(HiveDataContext db, Guid parentJobId, List<Job> collection) {
-      var jobs = db.Jobs.Where(j => j.ParentJobId == parentJobId);
+    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.IsParentJob)
-          CollectChildJobs(db, job.JobId, collection);
+        if (job.IsParentTask)
+          CollectChildJobs(db, job.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 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/HiveService.cs	(revision 6721)
@@ -61,9 +61,9 @@
 
     #region Job Methods
-    public Guid AddJob(Job job, JobData jobData, IEnumerable<Guid> resourceIds) {
+    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.JobId = job.Id;
+        jobData.TaskId = job.Id;
         jobData.LastUpdate = DateTime.Now;
         foreach (Guid slaveGroupId in resourceIds) {
@@ -71,18 +71,18 @@
         }
         dao.AddJobData(jobData);
-        dao.UpdateJobState(job.Id, DA.JobState.Waiting, null, userManager.CurrentUserId, null);
-        return jobData.JobId;
+        dao.UpdateJobState(job.Id, DA.TaskState.Waiting, null, userManager.CurrentUserId, null);
+        return jobData.TaskId;
       }, false, true);
     }
 
-    public Guid AddChildJob(Guid parentJobId, Job job, JobData jobData) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
-      return trans.UseTransaction(() => {
-        job.ParentJobId = parentJobId;
+    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));
       }, false, true);
     }
 
-    public Job GetJob(Guid jobId) {
+    public Task GetJob(Guid jobId) {
       authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
       author.AuthorizeForJob(jobId, Permission.Read);
@@ -90,5 +90,5 @@
     }
 
-    public IEnumerable<Job> GetJobs() {
+    public IEnumerable<Task> GetJobs() {
       authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
       var jobs = dao.GetJobs(x => true);
@@ -98,7 +98,7 @@
     }
 
-    public IEnumerable<LightweightJob> GetLightweightJobs(IEnumerable<Guid> jobIds) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
-      var jobs = dao.GetJobs(x => jobIds.Contains(x.JobId)).Select(x => new LightweightJob(x)).ToArray();
+    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);
@@ -106,7 +106,7 @@
     }
 
-    public IEnumerable<LightweightJob> GetLightweightChildJobs(Guid? parentJobId, bool recursive, bool includeParent) {
-      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
-      var jobs = GetChildJobs(parentJobId, recursive, includeParent).Select(x => new LightweightJob(x)).ToArray();
+    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);
@@ -114,11 +114,11 @@
     }
 
-    public IEnumerable<LightweightJob> GetLightweightExperimentJobs(Guid experimentId) {
+    public IEnumerable<LightweightTask> GetLightweightExperimentJobs(Guid experimentId) {
       authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
       author.AuthorizeForExperiment(experimentId, Permission.Read);
-      return dao.GetJobs(x => x.HiveExperimentId == experimentId).Select(x => new LightweightJob(x)).ToArray();
-    }
-
-    public JobData GetJobData(Guid jobId) {
+      return dao.GetJobs(x => x.HiveExperimentId == 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);
@@ -126,5 +126,5 @@
     }
 
-    public void UpdateJob(Job job) {
+    public void UpdateJob(Task job) {
       authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
       author.AuthorizeForJob(job.Id, Permission.Full);
@@ -134,8 +134,8 @@
     }
 
-    public void UpdateJobData(Job job, JobData jobData) {
+    public void UpdateJobData(Task job, TaskData jobData) {
       authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
       author.AuthorizeForJob(job.Id, Permission.Full);
-      author.AuthorizeForJob(jobData.JobId, Permission.Full);
+      author.AuthorizeForJob(jobData.TaskId, Permission.Full);
       //trans.UseTransaction(() => { // cneumuel: try without transaction
       jobData.LastUpdate = DateTime.Now;
@@ -165,19 +165,19 @@
     }
 
-    public Job UpdateJobState(Guid jobId, JobState jobState, Guid? slaveId, Guid? userId, string exception) {
+    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(() => {
-        Job job = dao.UpdateJobState(jobId, DataTransfer.Convert.ToEntity(jobState), slaveId, userId, exception);
-
-        if (job.Command.HasValue && job.Command.Value == Command.Pause && job.State == JobState.Paused) {
+        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 == JobState.Aborted) {
+        } 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 == JobState.Aborted) {
+        } else if (job.Command.HasValue && job.Command.Value == Command.Stop && job.State == TaskState.Aborted) {
           job.Command = null;
-        } else if (jobState == JobState.Paused && !job.Command.HasValue) {
+        } 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(JobState.Waiting), slaveId, userId, exception);
+          job = dao.UpdateJobState(jobId, DataTransfer.Convert.ToEntity(TaskState.Waiting), slaveId, userId, exception);
         }
 
@@ -187,5 +187,5 @@
     }
 
-    public IEnumerable<Job> GetJobsByResourceId(Guid resourceId) {
+    public IEnumerable<Task> GetJobsByResourceId(Guid resourceId) {
       authen.AuthenticateForAnyRole(HiveRoles.Administrator);
       var jobs = trans.UseTransaction(() => dao.GetJobsByResourceId(resourceId));
@@ -202,10 +202,10 @@
       trans.UseTransaction(() => {
         var job = dao.GetJob(jobId);
-        if (job.State == JobState.Calculating || job.State == JobState.Transferring) {
+        if (job.State == TaskState.Calculating || job.State == TaskState.Transferring) {
           job.Command = Command.Stop;
           dao.UpdateJob(job);
         } else {
-          if (job.State != JobState.Aborted && job.State != JobState.Finished && job.State != JobState.Failed) {
-            job = UpdateJobState(jobId, JobState.Aborted, null, null, string.Empty);
+          if (job.State != TaskState.Aborted && job.State != TaskState.Finished && job.State != TaskState.Failed) {
+            job = UpdateJobState(jobId, TaskState.Aborted, null, null, string.Empty);
           }
         }
@@ -218,9 +218,9 @@
       trans.UseTransaction(() => {
         var job = dao.GetJob(jobId);
-        if (job.State == JobState.Calculating || job.State == JobState.Transferring) {
+        if (job.State == TaskState.Calculating || job.State == TaskState.Transferring) {
           job.Command = Command.Pause;
           dao.UpdateJob(job);
         } else {
-          job = UpdateJobState(jobId, JobState.Paused, null, null, string.Empty);
+          job = UpdateJobState(jobId, TaskState.Paused, null, null, string.Empty);
         }
       });
@@ -231,5 +231,5 @@
       author.AuthorizeForJob(jobId, Permission.Full);
       trans.UseTransaction(() => {
-        Job job = dao.UpdateJobState(jobId, DA.JobState.Waiting, null, userManager.CurrentUserId, string.Empty);
+        Task job = dao.UpdateJobState(jobId, DA.TaskState.Waiting, null, userManager.CurrentUserId, string.Empty);
         job.Command = null;
         dao.UpdateJob(job);
@@ -591,9 +591,9 @@
 
     #region Helper Methods
-    private IEnumerable<Job> GetChildJobs(Guid? parentJobId, bool recursive, bool includeParent) {
-      var jobs = new List<Job>(dao.GetJobs(x => parentJobId == null ? !x.ParentJobId.HasValue : x.ParentJobId.Value == parentJobId));
+    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));
 
       if (recursive) {
-        var childs = new List<Job>();
+        var childs = new List<Task>();
         foreach (var job in jobs) {
           childs.AddRange(GetChildJobs(job.Id, recursive, false));
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 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Interfaces/IHiveDao.cs	(revision 6721)
@@ -29,19 +29,19 @@
   public interface IHiveDao {
     #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);
+    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.Job> GetWaitingJobs(DT.Slave slave, int count);
-    IEnumerable<DT.Job> GetParentJobs(IEnumerable<Guid> resourceIds, int count, bool finished);
-    DT.Job UpdateJobState(Guid jobId, JobState jobState, Guid? slaveId, Guid? userId, string exception);
+    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);
     #endregion
 
     #region JobData Methods
-    DT.JobData GetJobData(Guid id);
-    IEnumerable<DT.JobData> GetJobDatas(Expression<Func<JobData, bool>> predicate);
-    Guid AddJobData(DT.JobData dto);
-    void UpdateJobData(DT.JobData dto);
+    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);
     #endregion
@@ -117,5 +117,5 @@
     IEnumerable<DT.Resource> GetParentResources(Guid resourceId);
     IEnumerable<DT.Resource> GetChildResources(Guid resourceId);
-    IEnumerable<DT.Job> GetJobsByResourceId(Guid resourceId);
+    IEnumerable<DT.Task> GetJobsByResourceId(Guid resourceId);
     #endregion
 
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 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Manager/EventManager.cs	(revision 6721)
@@ -23,5 +23,4 @@
 using System.Collections.Generic;
 using System.Linq;
-using HeuristicLab.Services.Hive.DataAccess;
 using HeuristicLab.Services.Hive.DataAccess;
 using DT = HeuristicLab.Services.Hive.DataTransfer;
@@ -92,12 +91,12 @@
       var parentJobsToFinish = dao.GetParentJobs(dao.GetResources(x => true).Select(x => x.Id), 0, true);
       foreach (var job in parentJobsToFinish) {
-        dao.UpdateJobState(job.Id, JobState.Finished, null, null, string.Empty);
+        dao.UpdateJobState(job.Id, TaskState.Finished, null, null, string.Empty);
       }
     }
 
     private void SetJobsWaiting(Guid slaveId) {
-      var jobs = dao.GetJobs(x => x.State == JobState.Calculating).Where(x => x.StateLog.Last().SlaveId == slaveId);
+      var jobs = dao.GetJobs(x => x.State == TaskState.Calculating).Where(x => x.StateLog.Last().SlaveId == slaveId);
       foreach (var j in jobs) {
-        DT.Job job = dao.UpdateJobState(j.Id, JobState.Waiting, slaveId, null, "Slave timed out.");
+        DT.Task job = dao.UpdateJobState(j.Id, TaskState.Waiting, slaveId, null, "Slave timed out.");
         job.Command = null;
         dao.UpdateJob(job);
@@ -109,8 +108,8 @@
     /// </summary>
     private void SetTimeoutJobsWaiting() {
-      var jobs = dao.GetJobs(x => (x.State == JobState.Calculating && (DateTime.Now - x.LastHeartbeat) > HeuristicLab.Services.Hive.Properties.Settings.Default.CalculatingJobHeartbeatTimeout)
-                               || (x.State == JobState.Transferring && (DateTime.Now - x.LastHeartbeat) > HeuristicLab.Services.Hive.Properties.Settings.Default.TransferringJobHeartbeatTimeout));
+      var jobs = dao.GetJobs(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.Job job = dao.UpdateJobState(j.Id, JobState.Waiting, null, null, "Slave timed out.");
+        DT.Task job = dao.UpdateJobState(j.Id, TaskState.Waiting, null, null, "Slave timed out.");
         job.Command = null;
         dao.UpdateJob(job);
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 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/Manager/HeartbeatManager.cs	(revision 6721)
@@ -71,9 +71,9 @@
 
     // returns true if assignment was successful
-    private bool AssignJob(Slave slave, Job job) {
+    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 != JobState.Waiting) return false;
+      if (dao.GetJob(job.Id).State != TaskState.Waiting) return false;
 
-      job = dao.UpdateJobState(job.Id, DataAccess.JobState.Transferring, slave.Id, null, null);
+      job = dao.UpdateJobState(job.Id, DataAccess.TaskState.Transferring, slave.Id, null, null);
 
       // from now on the job has some time to send the next heartbeat (ApplicationConstants.TransferringJobHeartbeatTimeout)
@@ -98,5 +98,5 @@
         // process the jobProgresses
         foreach (var jobProgress in heartbeat.JobProgress) {
-          Job curJob = dao.GetJob(jobProgress.Key);
+          Task curJob = dao.GetJob(jobProgress.Key);
           if (curJob == null) {
             // job does not exist in db
@@ -135,5 +135,5 @@
     }
 
-    private bool JobIsAllowedToBeCalculatedBySlave(Guid slaveId, Job curJob) {
+    private bool JobIsAllowedToBeCalculatedBySlave(Guid slaveId, Task curJob) {
       var assignedResourceIds = dao.GetAssignedResources(curJob.Id).Select(x => x.Id);
       var slaveResourceIds = dao.GetParentResources(slaveId).Select(x => x.Id);
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 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/MessageContainer.cs	(revision 6721)
@@ -28,5 +28,5 @@
   /// <summary>
   /// The MessageContainer is a container class for Messages. Its two parts are:
-  /// the actual message itself and the JobId, refered by the message
+  /// the actual message itself and the TaskId, refered by the message
   /// </summary>
   [StorableClass]
@@ -56,5 +56,5 @@
     [Storable]
     [DataMember]
-    public Guid JobId { get; set; }
+    public Guid TaskId { get; set; }
 
     [StorableConstructor]
@@ -63,14 +63,14 @@
     public MessageContainer(MessageType message) {
       Message = message;
-      JobId = Guid.Empty;
+      TaskId = Guid.Empty;
     }
     public MessageContainer(MessageType message, Guid jobId) {
       Message = message;
-      JobId = jobId;
+      TaskId = jobId;
     }
     protected MessageContainer(MessageContainer original, Cloner cloner) {
       cloner.RegisterClonedObject(original, this);
       this.Message = original.Message;
-      this.JobId = original.JobId;
+      this.TaskId = original.TaskId;
     }
     public virtual IDeepCloneable Clone(Cloner cloner) {
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 6720)
+++ /branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.3/ServiceContracts/IHiveService.cs	(revision 6721)
@@ -33,32 +33,32 @@
     #region Job Methods
     [OperationContract]
-    Guid AddJob(Job job, JobData jobData, IEnumerable<Guid> resourceIds);
-
-    [OperationContract]
-    Guid AddChildJob(Guid parentJobId, Job job, JobData jobData);
-
-    [OperationContract]
-    Job GetJob(Guid jobId);
-
-    [OperationContract]
-    IEnumerable<Job> GetJobs();
-
-    [OperationContract]
-    IEnumerable<LightweightJob> GetLightweightJobs(IEnumerable<Guid> jobIds);
-
-    [OperationContract]
-    IEnumerable<LightweightJob> GetLightweightChildJobs(Guid? parentJobId, bool recursive, bool includeParent);
-
-    [OperationContract]
-    IEnumerable<LightweightJob> GetLightweightExperimentJobs(Guid experimentId);
-
-    [OperationContract]
-    JobData GetJobData(Guid jobId);
-
-    [OperationContract]
-    void UpdateJob(Job jobDto);
-
-    [OperationContract]
-    void UpdateJobData(Job jobDto, JobData jobDataDto);
+    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]
@@ -69,5 +69,5 @@
 
     [OperationContract]
-    Job UpdateJobState(Guid jobId, JobState jobState, Guid? slaveId, Guid? userId, string exception);
+    Task UpdateJobState(Guid jobId, TaskState jobState, Guid? slaveId, Guid? userId, string exception);
     #endregion
 
@@ -194,5 +194,5 @@
 
     [OperationContract]
-    IEnumerable<Job> GetJobsByResourceId(Guid resourceId);
+    IEnumerable<Task> GetJobsByResourceId(Guid resourceId);
 
     [OperationContract]
