Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ConcurrentTaskDownloader.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ConcurrentTaskDownloader.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ConcurrentTaskDownloader.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ConcurrentTaskDownloaderException.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ConcurrentTaskDownloaderException.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ConcurrentTaskDownloaderException.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Exceptions/AddTaskToHiveException.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Exceptions/AddTaskToHiveException.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Exceptions/AddTaskToHiveException.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Exceptions/AnonymousUserException.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Exceptions/AnonymousUserException.cs	(revision 7268)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Exceptions/AnonymousUserException.cs	(revision 7268)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Clients.Hive {
+  public class AnonymousUserException : Exception {
+  }
+}
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Exceptions/HiveException.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Exceptions/HiveException.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Exceptions/HiveException.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Exceptions/OptimizerNotFoundException.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Exceptions/OptimizerNotFoundException.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Exceptions/OptimizerNotFoundException.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Exceptions/ResourceNotFoundException.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Exceptions/ResourceNotFoundException.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Exceptions/ResourceNotFoundException.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Exceptions/ServiceClientFactoryException.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Exceptions/ServiceClientFactoryException.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Exceptions/ServiceClientFactoryException.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Exceptions/TaskResultPollingException.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Exceptions/TaskResultPollingException.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Exceptions/TaskResultPollingException.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj	(revision 7268)
@@ -116,4 +116,5 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Exceptions\AnonymousUserException.cs" />
     <Compile Include="HiveAdminClient.cs" />
     <Compile Include="HiveClient.cs" />
@@ -136,5 +137,5 @@
     <Compile Include="Exceptions\OptimizerNotFoundException.cs" />
     <Compile Include="ConcurrentTaskDownloader.cs" />
-    <Compile Include="HiveJobs\EngineHiveTask.cs" />
+    <Compile Include="HiveTasks\EngineHiveTask.cs" />
     <Compile Include="Exceptions\HiveException.cs" />
     <Compile Include="TaskDownloader.cs" />
@@ -142,5 +143,5 @@
     <Compile Include="TreeView\IItemTree.cs" />
     <Compile Include="TreeView\IItemTreeAction.cs" />
-    <Compile Include="HiveJobs\OptimizerHiveTask.cs">
+    <Compile Include="HiveTasks\OptimizerHiveTask.cs">
       <SubType>Code</SubType>
     </Compile>
@@ -150,5 +151,5 @@
     <Compile Include="Tasks\OptimizerTask.cs" />
     <Compile Include="Plugin.cs" />
-    <Compile Include="HiveJobs\HiveTask.cs" />
+    <Compile Include="HiveTasks\HiveTask.cs" />
     <Compile Include="JobResultPoller.cs" />
     <Compile Include="Util\PersistenceUtil.cs" />
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/HiveAdminClient.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/HiveAdminClient.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/HiveAdminClient.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/HiveClient.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/HiveClient.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/HiveClient.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/HiveServiceLocator.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/HiveServiceLocator.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/HiveServiceLocator.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -59,7 +59,10 @@
     public T CallHiveService<T>(Func<IHiveService, T> call) {
       HiveServiceClient client = NewServiceClient();
+      HandleAnonymousUser(client);
+
       try {
         return call(client);
-      } finally {
+      }
+      finally {
         try {
           client.Close();
@@ -73,7 +76,10 @@
     public void CallHiveService(Action<IHiveService> call) {
       HiveServiceClient client = NewServiceClient();
+      HandleAnonymousUser(client);
+
       try {
         call(client);
-      } finally {
+      }
+      finally {
         try {
           client.Close();
@@ -84,4 +90,16 @@
       }
     }
+
+    private void HandleAnonymousUser(HiveServiceClient client) {
+      if (client.ClientCredentials.UserName.UserName == Settings.Default.AnonymousUserName) {
+        try {
+          client.Close();
+        }
+        catch (Exception) {
+          client.Abort();
+        }
+        throw new AnonymousUserException();
+      }
+    }
   }
 }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/HiveTasks/EngineHiveTask.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/HiveTasks/EngineHiveTask.cs	(revision 7268)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/HiveTasks/EngineHiveTask.cs	(revision 7268)
@@ -0,0 +1,71 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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;
+using HeuristicLab.Core;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.Hive {
+  public class EngineHiveTask : HiveTask<EngineTask> {
+    private IScope parentScopeClone;
+
+    #region Constructors and cloning
+    public EngineHiveTask() { }
+    public EngineHiveTask(EngineTask engineJob, IScope parentScopeClone)
+      : base(engineJob) {
+      this.parentScopeClone = parentScopeClone;
+    }
+
+    protected EngineHiveTask(EngineHiveTask original, Cloner cloner)
+      : base(original, cloner) {
+      this.parentScopeClone = cloner.Clone(original.parentScopeClone);
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new EngineHiveTask(this, cloner);
+    }
+    #endregion
+
+    public override TaskData GetAsTaskData(bool withoutChildOptimizers, out List<IPluginDescription> plugins) {
+      plugins = new List<IPluginDescription>();
+      if (this.itemTask == null)
+        return null;
+
+      TaskData jobData = new TaskData();
+      IEnumerable<Type> usedTypes;
+
+      // clone operation and remove unnecessary scopes; don't do this earlier to avoid memory problems      
+      ((IAtomicOperation)ItemTask.InitialOperation).Scope.Parent = parentScopeClone;
+      ItemTask.InitialOperation = (IOperation)ItemTask.InitialOperation.Clone();
+      ((IAtomicOperation)ItemTask.InitialOperation).Scope.ClearParentScopes();
+      jobData.Data = PersistenceUtil.Serialize(ItemTask, out usedTypes);
+
+      PluginUtil.CollectDeclaringPlugins(plugins, usedTypes);
+      return jobData;
+    }
+
+    public override void ClearData() {
+      base.ClearData();
+      this.ItemTask.InitialOperation = null;
+    }
+  }
+}
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/HiveTasks/HiveTask.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/HiveTasks/HiveTask.cs	(revision 7268)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/HiveTasks/HiveTask.cs	(revision 7268)
@@ -0,0 +1,542 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.ComponentModel;
+using System.Drawing;
+using System.Linq;
+using System.Threading;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.Hive {
+
+  [Item("Hive Task", "Represents a hive task.")]
+  [StorableClass]
+  public class HiveTask : NamedItem, IItemTree<HiveTask> {
+    protected static object locker = new object();
+    protected ReaderWriterLockSlim childHiveTasksLock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
+
+    public static new Image StaticItemImage {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Event; }
+    }
+    public override Image ItemImage {
+      get {
+        if (task.Id == Guid.Empty) { // not yet uploaded
+          return HeuristicLab.Common.Resources.VSImageLibrary.Event;
+        } else {
+          if (task.State == TaskState.Waiting) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutablePrepared;
+          else if (task.State == TaskState.Calculating) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutableStarted;
+          else if (task.State == TaskState.Transferring) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutableStarted;
+          else if (task.State == TaskState.Paused) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutablePaused;
+          else if (task.State == TaskState.Aborted) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutableStopped;
+          else if (task.State == TaskState.Failed) return HeuristicLab.Common.Resources.VSImageLibrary.Error;
+          else if (task.State == TaskState.Finished) return HeuristicLab.Common.Resources.VSImageLibrary.ExecutableStopped;
+          else return base.ItemImage;
+        }
+      }
+    }
+
+    [Storable]
+    protected Task task;
+    public Task Task {
+      get { return task; }
+      set {
+        if (task != value) {
+          DeregisterJobEvents();
+          task = value;
+          RegisterJobEvents();
+          IsFinishedTaskDownloaded = false;
+          OnTaskChanged();
+          OnToStringChanged();
+          OnItemImageChanged();
+        }
+      }
+    }
+
+    [Storable]
+    protected ItemTask itemTask;
+    public ItemTask ItemTask {
+      get { return itemTask; }
+      set {
+        if (itemTask != null && syncTasksWithOptimizers) {
+          this.childHiveTasks.Clear();
+        }
+        if (itemTask != value) {
+          DergisterItemTaskEvents();
+          itemTask = value;
+          RegisterItemTaskEvents();
+          OnItemTaskChanged();
+          IsFinishedTaskDownloaded = true;
+        }
+      }
+    }
+
+    // task downloaded since last status change
+    [Storable]
+    private bool isFinishedTaskDownloaded = false;
+    public bool IsFinishedTaskDownloaded {
+      get { return isFinishedTaskDownloaded; }
+      set {
+        if (value != isFinishedTaskDownloaded) {
+          this.isFinishedTaskDownloaded = value;
+          OnIsFinishedJobDownloadedChanged();
+        }
+      }
+    }
+
+    public bool IsDownloading { get; set; }
+
+    // if true, all control buttons should be enabled. otherwise disabled
+    private bool isControllable = true;
+    public bool IsControllable {
+      get { return isControllable; }
+      set {
+        if (value != isControllable) {
+          isControllable = value;
+          OnIsControllableChanged();
+          childHiveTasksLock.EnterReadLock();
+          try {
+            foreach (var hiveJob in childHiveTasks) {
+              hiveJob.IsControllable = value;
+            }
+          }
+          finally {
+            childHiveTasksLock.ExitReadLock();
+          }
+        }
+      }
+    }
+
+    [Storable]
+    protected ItemList<HiveTask> childHiveTasks;
+    public virtual ReadOnlyItemList<HiveTask> ChildHiveTasks {
+      get {
+        childHiveTasksLock.EnterReadLock();
+        try {
+          return childHiveTasks.AsReadOnly();
+        }
+        finally { childHiveTasksLock.ExitReadLock(); }
+      }
+    }
+
+    [Storable]
+    protected bool syncTasksWithOptimizers = true;
+
+    public StateLogList StateLog {
+      get {
+        var list = new StateLogList(this.task.StateLog);
+        list.ForEach(s => { s.TaskName = itemTask.Name; });
+        return list;
+      }
+    }
+
+    public StateLogListList ChildStateLogList {
+      get { return new StateLogListList(this.childHiveTasks.Select(x => x.StateLog)); }
+    }
+
+    #region Constructors and Cloning
+    [StorableConstructor]
+    protected HiveTask(bool deserializing) { }
+
+    public HiveTask() {
+      this.Task = new Task() { CoresNeeded = 1, MemoryNeeded = 128 };
+      task.State = TaskState.Offline;
+      this.childHiveTasks = new ItemList<HiveTask>();
+      syncTasksWithOptimizers = true;
+      RegisterChildHiveJobEvents();
+    }
+
+    public HiveTask(ItemTask itemJob, bool autoCreateChildHiveJobs)
+      : this() {
+      this.syncTasksWithOptimizers = autoCreateChildHiveJobs;
+      this.ItemTask = itemJob;
+      this.syncTasksWithOptimizers = true;
+    }
+
+    public HiveTask(Task job, TaskData taskData, bool autoCreateChildHiveTasks) {
+      this.syncTasksWithOptimizers = autoCreateChildHiveTasks;
+      this.Task = job;
+      try {
+        this.ItemTask = PersistenceUtil.Deserialize<ItemTask>(taskData.Data);
+      }
+      catch {
+        this.ItemTask = null;
+      }
+      this.childHiveTasks = new ItemList<HiveTask>();
+      this.syncTasksWithOptimizers = true;
+      RegisterChildHiveJobEvents();
+    }
+
+    protected HiveTask(HiveTask original, Cloner cloner)
+      : base(original, cloner) {
+      this.Task = cloner.Clone(original.task);
+      this.ItemTask = cloner.Clone(original.ItemTask);
+      original.childHiveTasksLock.EnterReadLock();
+      try {
+        this.childHiveTasks = cloner.Clone(original.childHiveTasks);
+      }
+      finally { original.childHiveTasksLock.ExitReadLock(); }
+      this.syncTasksWithOptimizers = original.syncTasksWithOptimizers;
+      this.isFinishedTaskDownloaded = original.isFinishedTaskDownloaded;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new HiveTask(this, cloner);
+    }
+    #endregion
+
+    protected virtual void UpdateChildHiveTasks() { }
+
+    protected virtual void RegisterItemTaskEvents() {
+      if (ItemTask != null) {
+        ItemTask.ComputeInParallelChanged += new EventHandler(ItemJob_ComputeInParallelChanged);
+        ItemTask.ToStringChanged += new EventHandler(ItemJob_ToStringChanged);
+      }
+    }
+    protected virtual void DergisterItemTaskEvents() {
+      if (ItemTask != null) {
+        ItemTask.ComputeInParallelChanged -= new EventHandler(ItemJob_ComputeInParallelChanged);
+        ItemTask.ToStringChanged -= new EventHandler(ItemJob_ToStringChanged);
+      }
+    }
+
+    protected virtual void RegisterChildHiveJobEvents() {
+      this.childHiveTasks.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<HiveTask>>(OnItemsAdded);
+      this.childHiveTasks.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<HiveTask>>(OnItemsRemoved);
+      this.childHiveTasks.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<HiveTask>>(OnCollectionReset);
+    }
+    protected virtual void DeregisterChildHiveJobEvents() {
+      this.childHiveTasks.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<HiveTask>>(OnItemsAdded);
+      this.childHiveTasks.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<HiveTask>>(OnItemsRemoved);
+      this.childHiveTasks.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<HiveTask>>(OnCollectionReset);
+    }
+
+    protected virtual void ItemJob_ToStringChanged(object sender, EventArgs e) {
+      this.OnToStringChanged();
+    }
+
+    protected virtual void ItemJob_ComputeInParallelChanged(object sender, EventArgs e) {
+      if (ItemTask != null && syncTasksWithOptimizers) {
+        this.UpdateChildHiveTasks();
+      }
+    }
+
+    public virtual void AddChildHiveTask(HiveTask hiveTask) {
+      childHiveTasksLock.EnterWriteLock();
+      try {
+        this.childHiveTasks.Add(hiveTask);
+      }
+      finally { childHiveTasksLock.ExitWriteLock(); }
+    }
+
+    public override string ToString() {
+      if (itemTask != null && itemTask.Item != null) {
+        return itemTask.ToString();
+      } else {
+        return Task.Id.ToString();
+      }
+    }
+
+    public virtual void UpdateFromLightweightJob(LightweightTask lightweightJob) {
+      if (lightweightJob != null) {
+        task.Id = lightweightJob.Id;
+        task.ParentTaskId = lightweightJob.ParentTaskId;
+        task.ExecutionTime = lightweightJob.ExecutionTime;
+        task.State = lightweightJob.State;
+        task.StateLog = new List<StateLog>(lightweightJob.StateLog);
+        task.Command = lightweightJob.Command;
+
+        OnTaskStateChanged();
+        OnToStringChanged();
+        OnItemImageChanged();
+        OnStateLogChanged();
+      }
+    }
+
+    /// <summary>
+    /// 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 task contains an Experiment)
+    /// </param>
+    public virtual TaskData GetAsTaskData(bool withoutChildOptimizers, out List<IPluginDescription> plugins) {
+      plugins = new List<IPluginDescription>();
+      if (this.itemTask == null)
+        return null;
+
+      IEnumerable<Type> usedTypes;
+      byte[] taskByteArray = PersistenceUtil.Serialize(this.ItemTask, out usedTypes);
+      TaskData taskData = new TaskData() { TaskId = task.Id, Data = taskByteArray };
+      PluginUtil.CollectDeclaringPlugins(plugins, usedTypes);
+      return taskData;
+    }
+
+    #region Event Handler
+    public event EventHandler TaskChanged;
+    private void OnTaskChanged() {
+      EventHandler handler = TaskChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler TaskStateChanged;
+    private void OnTaskStateChanged() {
+      EventHandler handler = TaskStateChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ItemTaskChanged;
+    private void OnItemTaskChanged() {
+      ItemJob_ComputeInParallelChanged(this, EventArgs.Empty);
+      var handler = ItemTaskChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler IsFinishedJobDownloadedChanged;
+    private void OnIsFinishedJobDownloadedChanged() {
+      var handler = IsFinishedJobDownloadedChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler StateLogChanged;
+    private void OnStateLogChanged() {
+      var handler = StateLogChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler IsControllableChanged;
+    private void OnIsControllableChanged() {
+      var handler = IsControllableChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    private void RegisterJobEvents() {
+      if (task != null)
+        task.PropertyChanged += new PropertyChangedEventHandler(job_PropertyChanged);
+    }
+
+    private void DeregisterJobEvents() {
+      if (task != null)
+        task.PropertyChanged += new PropertyChangedEventHandler(job_PropertyChanged);
+    }
+
+    private void job_PropertyChanged(object sender, PropertyChangedEventArgs e) {
+      if (e.PropertyName == "State") {
+        IsFinishedTaskDownloaded = false;
+      }
+      if (e.PropertyName == "Priority" && Task != null) {
+        foreach (var task in childHiveTasks) {
+          task.Task.Priority = Task.Priority;
+        }
+      }
+    }
+    #endregion
+
+    /// <summary>
+    /// Returns a list of HiveTasks including this and all its child-jobs recursively
+    /// </summary>
+    public IEnumerable<HiveTask> GetAllHiveTasks() {
+      childHiveTasksLock.EnterReadLock();
+      try {
+        var tasks = new List<HiveTask>();
+        tasks.Add(this);
+        foreach (HiveTask child in this.childHiveTasks) {
+          tasks.AddRange(child.GetAllHiveTasks());
+        }
+        return tasks;
+      }
+      finally { childHiveTasksLock.ExitReadLock(); }
+    }
+
+    public HiveTask GetParentByJobId(Guid taskId) {
+      childHiveTasksLock.EnterReadLock();
+      try {
+        if (this.ChildHiveTasks.SingleOrDefault(j => j.task.Id == taskId) != null)
+          return this;
+        foreach (HiveTask child in this.childHiveTasks) {
+          HiveTask result = child.GetParentByJobId(taskId);
+          if (result != null)
+            return result;
+        }
+        return null;
+      }
+      finally { childHiveTasksLock.ExitWriteLock(); }
+    }
+
+    /// <summary>
+    /// Searches for an HiveTask object with the correct taskId recursively
+    /// </summary>
+    public HiveTask GetHiveTaskByTaskId(Guid jobId) {
+      if (this.Task.Id == jobId) {
+        return this;
+      } else {
+        childHiveTasksLock.EnterReadLock();
+        try {
+          foreach (HiveTask child in this.childHiveTasks) {
+            HiveTask result = child.GetHiveTaskByTaskId(jobId);
+            if (result != null)
+              return result;
+          }
+        }
+        finally { childHiveTasksLock.ExitReadLock(); }
+      }
+      return null;
+    }
+
+    public void RemoveByTaskId(Guid taskId) {
+      childHiveTasksLock.EnterWriteLock();
+      try {
+        IEnumerable<HiveTask> tasks = childHiveTasks.Where(j => j.Task.Id == taskId).ToList();
+        foreach (HiveTask t in tasks) {
+          this.childHiveTasks.Remove(t);
+        }
+        foreach (HiveTask child in childHiveTasks) {
+          child.RemoveByTaskId(taskId);
+        }
+      }
+      finally { childHiveTasksLock.ExitWriteLock(); }
+    }
+
+    public IEnumerable<IItemTree<HiveTask>> GetChildItems() {
+      return this.ChildHiveTasks;
+    }
+
+    #region INotifyObservableCollectionItemsChanged<IItemTree> Members
+
+    public event CollectionItemsChangedEventHandler<IItemTree<HiveTask>> CollectionReset;
+    private void OnCollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<HiveTask>> e) {
+      foreach (var item in e.Items) {
+        item.Value.StateLogChanged -= new EventHandler(ChildHiveJob_StateLogChanged);
+      }
+      var handler = CollectionReset;
+      if (handler != null) handler(this, ToCollectionItemsChangedEventArgs(e));
+    }
+
+    public event CollectionItemsChangedEventHandler<IItemTree<HiveTask>> ItemsAdded;
+    private void OnItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<HiveTask>> e) {
+      foreach (var item in e.Items) {
+        item.Value.StateLogChanged += new EventHandler(ChildHiveJob_StateLogChanged);
+        item.Value.IsControllable = this.IsControllable;
+      }
+      var handler = ItemsAdded;
+      if (handler != null) handler(this, ToCollectionItemsChangedEventArgs(e));
+    }
+
+    public event CollectionItemsChangedEventHandler<IItemTree<HiveTask>> ItemsRemoved;
+    private void OnItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<HiveTask>> e) {
+      foreach (var item in e.Items) {
+        item.Value.StateLogChanged -= new EventHandler(ChildHiveJob_StateLogChanged);
+      }
+      var handler = ItemsRemoved;
+      if (handler != null) handler(this, ToCollectionItemsChangedEventArgs(e));
+    }
+
+    private static CollectionItemsChangedEventArgs<IItemTree<HiveTask>> ToCollectionItemsChangedEventArgs(CollectionItemsChangedEventArgs<IndexedItem<HiveTask>> e) {
+      return new CollectionItemsChangedEventArgs<IItemTree<HiveTask>>(e.Items.Select(x => x.Value), e.OldItems == null ? null : e.OldItems.Select(x => x.Value));
+    }
+
+    private void ChildHiveJob_StateLogChanged(object sender, EventArgs e) {
+      OnStateLogChanged();
+    }
+    #endregion
+
+    public void Pause() {
+      if (this.Task.IsParentTask) {
+        childHiveTasksLock.EnterReadLock();
+        try {
+          foreach (var child in childHiveTasks) {
+            HiveServiceLocator.Instance.CallHiveService(s => s.PauseTask(child.task.Id));
+          }
+        }
+        finally { childHiveTasksLock.ExitReadLock(); }
+      } else {
+        HiveServiceLocator.Instance.CallHiveService(s => s.PauseTask(this.task.Id));
+      }
+    }
+
+    public void Stop() {
+      if (this.Task.IsParentTask) {
+        childHiveTasksLock.EnterReadLock();
+        try {
+          foreach (var child in childHiveTasks) {
+            HiveServiceLocator.Instance.CallHiveService(s => s.StopTask(child.task.Id));
+          }
+        }
+        finally { childHiveTasksLock.ExitReadLock(); }
+      } else {
+        HiveServiceLocator.Instance.CallHiveService(s => s.StopTask(this.task.Id));
+      }
+    }
+
+    public void Restart() {
+      HiveServiceLocator.Instance.CallHiveService(service => {
+        TaskData taskData = new TaskData();
+        taskData.TaskId = this.task.Id;
+        taskData.Data = PersistenceUtil.Serialize(this.itemTask);
+        service.UpdateTaskData(this.Task, taskData);
+        service.RestartTask(this.task.Id);
+        Task task = service.GetTask(this.task.Id);
+        this.task.LastTaskDataUpdate = task.LastTaskDataUpdate;
+      });
+    }
+
+    public ICollection<IItemTreeNodeAction<HiveTask>> Actions {
+      get {
+        return new List<IItemTreeNodeAction<HiveTask>>();
+      }
+    }
+
+    public virtual void IntegrateChild(ItemTask task, Guid childTaskId) { }
+
+    /// <summary>
+    /// Delete ItemTask
+    /// </summary>
+    public virtual void ClearData() {
+      this.ItemTask.Item = null;
+    }
+  }
+
+  [Item("Hive Task", "Represents a hive task.")]
+  [StorableClass]
+  public class HiveTask<T> : HiveTask where T : ItemTask {
+
+    public new T ItemTask {
+      get { return (T)base.ItemTask; }
+      internal set { base.ItemTask = value; }
+    }
+
+    #region Constructors and Cloning
+    public HiveTask() : base() { }
+    [StorableConstructor]
+    protected HiveTask(bool deserializing) { }
+    public HiveTask(T itemJob) : base(itemJob, true) { }
+    protected HiveTask(HiveTask<T> original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new HiveTask<T>(this, cloner);
+    }
+    #endregion
+  }
+}
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/HiveTasks/OptimizerHiveTask.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/HiveTasks/OptimizerHiveTask.cs	(revision 7268)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/HiveTasks/OptimizerHiveTask.cs	(revision 7268)
@@ -0,0 +1,395 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Clients.Hive.Jobs;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Optimization;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Clients.Hive {
+  public class OptimizerHiveTask : HiveTask<OptimizerTask> {
+
+    #region Constructors and Cloning
+    public OptimizerHiveTask() { }
+    public OptimizerHiveTask(IOptimizer optimizer)
+      : this() {
+      this.ItemTask = new OptimizerTask(optimizer);
+    }
+    public OptimizerHiveTask(OptimizerTask optimizerJob)
+      : this() {
+      this.ItemTask = optimizerJob;
+    }
+    protected OptimizerHiveTask(OptimizerHiveTask original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new OptimizerHiveTask(this, cloner);
+    }
+    #endregion
+
+    /// <summary>
+    /// if this.Optimizer is an experiment
+    ///   Uses the child-optimizers of this.HiveTask and creates HiveTask-childs
+    /// if this.Optimizer is a batchrun
+    ///   Creates a number of child-jobs according to repetitions
+    /// </summary>
+    protected override void UpdateChildHiveTasks() {
+      base.UpdateChildHiveTasks();
+      if (Task != null && syncTasksWithOptimizers) {
+        if (!ItemTask.ComputeInParallel) {
+          this.childHiveTasks.Clear();
+        } else {
+          if (ItemTask.Item is Optimization.Experiment) {
+            Optimization.Experiment experiment = (Optimization.Experiment)ItemTask.Item;
+            foreach (IOptimizer childOpt in experiment.Optimizers) {
+              var optimizerHiveTask = new OptimizerHiveTask(childOpt);
+              optimizerHiveTask.Task.Priority = Task.Priority; //inherit priority from parent
+              this.childHiveTasks.Add(optimizerHiveTask);
+            }
+          } else if (ItemTask.Item is Optimization.BatchRun) {
+            Optimization.BatchRun batchRun = ItemTask.OptimizerAsBatchRun;
+            if (batchRun.Optimizer != null) {
+              while (this.childHiveTasks.Count < batchRun.Repetitions) {
+                var optimizerHiveTask = new OptimizerHiveTask(batchRun.Optimizer);
+                optimizerHiveTask.Task.Priority = Task.Priority;
+                this.childHiveTasks.Add(optimizerHiveTask);
+              }
+              while (this.childHiveTasks.Count > batchRun.Repetitions) {
+                this.childHiveTasks.Remove(this.childHiveTasks.Last());
+              }
+            }
+          }
+        }
+      }
+    }
+
+    protected override void RegisterItemTaskEvents() {
+      base.RegisterItemTaskEvents();
+      if (ItemTask != null) {
+        if (ItemTask.Item is Optimization.Experiment) {
+          Optimization.Experiment experiment = ItemTask.OptimizerAsExperiment;
+          experiment.Optimizers.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsAdded);
+          experiment.Optimizers.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsReplaced);
+          experiment.Optimizers.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsRemoved);
+          experiment.Optimizers.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_CollectionReset);
+        } else if (ItemTask.Item is Optimization.BatchRun) {
+          Optimization.BatchRun batchRun = ItemTask.OptimizerAsBatchRun;
+          batchRun.RepetitionsChanged += new EventHandler(batchRun_RepetitionsChanged);
+          batchRun.OptimizerChanged += new EventHandler(batchRun_OptimizerChanged);
+        }
+      }
+    }
+    protected override void DergisterItemTaskEvents() {
+      base.DergisterItemTaskEvents();
+      if (ItemTask != null) {
+        if (ItemTask.Item is Optimization.Experiment) {
+          Optimization.Experiment experiment = ItemTask.OptimizerAsExperiment;
+          experiment.Optimizers.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsAdded);
+          experiment.Optimizers.ItemsReplaced -= new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsReplaced);
+          experiment.Optimizers.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_ItemsRemoved);
+          experiment.Optimizers.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<IOptimizer>>(Optimizers_CollectionReset);
+        } else if (ItemTask.Item is Optimization.BatchRun) {
+          Optimization.BatchRun batchRun = ItemTask.OptimizerAsBatchRun;
+          batchRun.RepetitionsChanged -= new EventHandler(batchRun_RepetitionsChanged);
+          batchRun.OptimizerChanged -= new EventHandler(batchRun_OptimizerChanged);
+        }
+      }
+    }
+
+    private void batchRun_OptimizerChanged(object sender, EventArgs e) {
+      if (syncTasksWithOptimizers) {
+        UpdateChildHiveTasks();
+      }
+    }
+
+    private void batchRun_RepetitionsChanged(object sender, EventArgs e) {
+      if (syncTasksWithOptimizers) {
+        UpdateChildHiveTasks();
+      }
+    }
+
+    private void Optimizers_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) {
+      if (syncTasksWithOptimizers && this.ItemTask.ComputeInParallel) {
+        childHiveTasksLock.EnterWriteLock();
+        try {
+          foreach (var item in e.Items) {
+            if (GetChildByOptimizer(item.Value) == null && item.Value.Name != "Placeholder") {
+              this.childHiveTasks.Add(new OptimizerHiveTask(item.Value));
+            }
+          }
+        }
+        finally { childHiveTasksLock.ExitWriteLock(); }
+      }
+    }
+    private void Optimizers_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) {
+      if (syncTasksWithOptimizers && this.ItemTask.ComputeInParallel) {
+        childHiveTasksLock.EnterWriteLock();
+        try {
+          foreach (var item in e.OldItems) {
+            this.childHiveTasks.Remove(this.GetChildByOptimizer(item.Value));
+          }
+          foreach (var item in e.Items) {
+            if (GetChildByOptimizer(item.Value) == null && item.Value.Name != "Placeholder") {
+              this.childHiveTasks.Add(new OptimizerHiveTask(item.Value));
+            }
+          }
+        }
+        finally { childHiveTasksLock.ExitWriteLock(); }
+      }
+    }
+    private void Optimizers_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) {
+      if (syncTasksWithOptimizers && this.ItemTask.ComputeInParallel) {
+        childHiveTasksLock.EnterWriteLock();
+        try {
+          foreach (var item in e.Items) {
+            this.childHiveTasks.Remove(this.GetChildByOptimizer(item.Value));
+          }
+        }
+        finally { childHiveTasksLock.ExitWriteLock(); }
+      }
+    }
+    private void Optimizers_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<IOptimizer>> e) {
+      if (syncTasksWithOptimizers && this.ItemTask.ComputeInParallel) {
+        childHiveTasksLock.EnterWriteLock();
+        try {
+          foreach (var item in e.Items) {
+            this.childHiveTasks.Remove(this.GetChildByOptimizer(item.Value));
+          }
+        }
+        finally { childHiveTasksLock.ExitWriteLock(); }
+      }
+    }
+
+    /// <summary>
+    /// if this.Optimizer is Experiment
+    ///   replace the child-optimizer in the experiment
+    /// if this.Optimizer is BatchRun
+    ///   add the runs from the optimizerTask to the batchrun and replace the Optimizer
+    /// </summary>
+    public override void IntegrateChild(ItemTask task, Guid childTaskId) {
+      var optimizerTask = (OptimizerTask)task;
+      syncTasksWithOptimizers = false; // don't sync with optimizers during this method
+
+      if (this.ItemTask != null && this.ItemTask.Item != null) {
+        if (this.ItemTask.Item is Optimization.Experiment) {
+          UpdateOptimizerInExperiment(this.ItemTask.OptimizerAsExperiment, optimizerTask);
+        } else if (this.ItemTask.Item is Optimization.BatchRun) {
+          UpdateOptimizerInBatchRun(this.ItemTask.OptimizerAsBatchRun, optimizerTask);
+        }
+      }
+
+      IEnumerable<HiveTask> childs = this.ChildHiveTasks.Where(j => j.Task.Id == childTaskId);
+      //TODO: in very rare cases childs is empty. This shouldn't be the case and should be further investigated. 
+      if (childs.Count() > 0) {
+        OptimizerHiveTask child = childs.First() as OptimizerHiveTask;
+
+        if (child != null && !optimizerTask.ComputeInParallel) {
+          child.syncTasksWithOptimizers = false;
+          child.ItemTask = optimizerTask;
+          child.syncTasksWithOptimizers = true;
+        }
+      }
+
+      syncTasksWithOptimizers = true;
+    }
+
+    /// <summary>
+    /// Adds the runs from the optimizerTask to the batchrun and replaces the Optimizer 
+    /// Sideeffect: the optimizerTask.Optimizer will be prepared (scopes are deleted and executionstate will be reset)
+    /// </summary>
+    private void UpdateOptimizerInBatchRun(BatchRun batchRun, OptimizerTask optimizerTask) {
+      if (batchRun.Optimizer == null) {
+        batchRun.Optimizer = (IOptimizer)optimizerTask.Item; // only set the first optimizer as Optimizer. if every time the Optimizer would be set, the runs would be cleared each time
+      }
+      foreach (IRun run in optimizerTask.Item.Runs) {
+        if (!batchRun.Runs.Contains(run)) {
+          run.Name = GetNewRunName(run, batchRun.Runs);
+          batchRun.Runs.Add(run);
+        }
+      }
+    }
+
+    /// <summary>
+    /// replace the child-optimizer in the experiment
+    /// Sideeffect: the optimizerTask.Optimizer will be prepared (scopes are deleted and executionstate will be reset)
+    /// </summary>
+    private void UpdateOptimizerInExperiment(Optimization.Experiment experiment, OptimizerTask optimizerTask) {
+      if (optimizerTask.IndexInParentOptimizerList < 0)
+        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 < optimizerTask.IndexInParentOptimizerList) {
+        experiment.Optimizers.Add(new UserDefinedAlgorithm("Placeholder")); // add dummy-entries to Optimizers so that its possible to insert the optimizerTask at the correct position
+      }
+      if (experiment.Optimizers.Count < optimizerTask.IndexInParentOptimizerList + 1) {
+        experiment.Optimizers.Add(optimizerTask.Item);
+      } else {
+        // if ComputeInParallel==true, don't replace the optimizer (except it is still a Placeholder)
+        // this is because Jobs with ComputeInParallel get submitted to hive with their child-optimizers deleted
+        if (!optimizerTask.ComputeInParallel || experiment.Optimizers[optimizerTask.IndexInParentOptimizerList].Name == "Placeholder") {
+          experiment.Optimizers[optimizerTask.IndexInParentOptimizerList] = optimizerTask.Item;
+        }
+      }
+    }
+
+    /// <summary>
+    /// Sets the IndexInParentOptimizerList property of the OptimizerJob
+    /// according to the position in the OptimizerList of the parentHiveTask.Task
+    /// Recursively updates all the child-jobs as well
+    /// </summary>
+    internal void SetIndexInParentOptimizerList(OptimizerHiveTask parentHiveTask) {
+      if (parentHiveTask != null) {
+        if (parentHiveTask.ItemTask.Item is Optimization.Experiment) {
+          this.ItemTask.IndexInParentOptimizerList = parentHiveTask.ItemTask.OptimizerAsExperiment.Optimizers.IndexOf(this.ItemTask.Item);
+        } else if (parentHiveTask.ItemTask.Item is Optimization.BatchRun) {
+          this.ItemTask.IndexInParentOptimizerList = 0;
+        } else {
+          throw new NotSupportedException("Only Experiment and BatchRuns are supported");
+        }
+      }
+      childHiveTasksLock.EnterReadLock();
+      try {
+        foreach (OptimizerHiveTask child in childHiveTasks) {
+          child.SetIndexInParentOptimizerList(this);
+        }
+      }
+      finally { childHiveTasksLock.ExitReadLock(); }
+    }
+
+    public override void AddChildHiveTask(HiveTask hiveTask) {
+      base.AddChildHiveTask(hiveTask);
+      var optimizerHiveJob = (OptimizerHiveTask)hiveTask;
+      syncTasksWithOptimizers = false;
+      if (this.ItemTask != null && optimizerHiveJob.ItemTask != null) {
+        // if task is in state Paused, it has to preserve its ResultCollection, which is cleared when a optimizer is added to an experiment
+        OptimizerTask optimizerJobClone = null;
+        if (optimizerHiveJob.Task.State == TaskState.Paused) {
+          optimizerJobClone = (OptimizerTask)optimizerHiveJob.ItemTask.Clone();
+        }
+
+        if (this.ItemTask.Item is Optimization.Experiment) {
+          if (!this.ItemTask.OptimizerAsExperiment.Optimizers.Contains(optimizerHiveJob.ItemTask.Item)) {
+            UpdateOptimizerInExperiment(this.ItemTask.OptimizerAsExperiment, optimizerHiveJob.ItemTask);
+          }
+        } else if (this.ItemTask.Item is Optimization.BatchRun) {
+          UpdateOptimizerInBatchRun(this.ItemTask.OptimizerAsBatchRun, optimizerHiveJob.ItemTask);
+        }
+
+        if (optimizerHiveJob.Task.State == TaskState.Paused) {
+          optimizerHiveJob.ItemTask = optimizerJobClone;
+        }
+      }
+      syncTasksWithOptimizers = true;
+    }
+
+    /// <summary>
+    /// 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 task contains an Experiment)
+    /// </param>
+    public override TaskData GetAsTaskData(bool withoutChildOptimizers, out List<IPluginDescription> plugins) {
+      plugins = new List<IPluginDescription>();
+      if (this.itemTask == null) // || this.jobItem.Optimizer == null
+        return null;
+
+      IEnumerable<Type> usedTypes;
+      byte[] jobByteArray;
+      if (withoutChildOptimizers && this.ItemTask.Item is Optimization.Experiment) {
+        OptimizerTask clonedJob = (OptimizerTask)this.ItemTask.Clone(); // use a cloned task, so that the childHiveJob don't get confused
+        clonedJob.OptimizerAsExperiment.Optimizers.Clear();
+        jobByteArray = PersistenceUtil.Serialize(clonedJob, out usedTypes);
+      } else if (withoutChildOptimizers && this.ItemTask.Item is Optimization.BatchRun) {
+        OptimizerTask clonedJob = (OptimizerTask)this.ItemTask.Clone();
+        clonedJob.OptimizerAsBatchRun.Optimizer = null;
+        jobByteArray = PersistenceUtil.Serialize(clonedJob, out usedTypes);
+      } else if (this.ItemTask.Item is IAlgorithm) {
+        ((IAlgorithm)this.ItemTask.Item).StoreAlgorithmInEachRun = false; // avoid storing the algorithm in runs to reduce size
+        jobByteArray = PersistenceUtil.Serialize(this.ItemTask, out usedTypes);
+      } else {
+        jobByteArray = PersistenceUtil.Serialize(this.ItemTask, out usedTypes);
+      }
+
+      TaskData jobData = new TaskData() { TaskId = task.Id, Data = jobByteArray };
+      PluginUtil.CollectDeclaringPlugins(plugins, usedTypes);
+      return jobData;
+    }
+
+    public OptimizerHiveTask GetChildByOptimizerTask(OptimizerTask optimizerTask) {
+      childHiveTasksLock.EnterReadLock();
+      try {
+        foreach (OptimizerHiveTask child in childHiveTasks) {
+          if (child.ItemTask == optimizerTask)
+            return child;
+        }
+        return null;
+      }
+      finally { childHiveTasksLock.ExitReadLock(); }
+    }
+
+    public HiveTask<OptimizerTask> GetChildByOptimizer(IOptimizer optimizer) {
+      childHiveTasksLock.EnterReadLock();
+      try {
+        foreach (OptimizerHiveTask child in childHiveTasks) {
+          if (child.ItemTask.Item == optimizer)
+            return child;
+        }
+        return null;
+      }
+      finally { childHiveTasksLock.ExitReadLock(); }
+    }
+
+    #region Helpers
+    /// <summary>
+    /// Parses the run numbers out of runs and renames the run to the next number
+    /// </summary>
+    private static string GetNewRunName(IRun run, RunCollection runs) {
+      int idx = run.Name.IndexOf("Run ") + 4;
+
+      if (idx == 3 || runs.Count == 0)
+        return run.Name;
+
+      int maxRunNumber = int.MinValue;
+      foreach (IRun r in runs) {
+        int number = GetRunNumber(r.Name);
+        maxRunNumber = Math.Max(maxRunNumber, number);
+      }
+
+      return run.Name.Substring(0, idx) + (maxRunNumber + 1).ToString();
+    }
+
+    /// <summary>
+    /// Parses the number of a Run out of its name. Example "Genetic Algorithm Run 3" -> 3
+    /// </summary>
+    private static int GetRunNumber(string runName) {
+      int idx = runName.IndexOf("Run ") + 4;
+      if (idx == 3) {
+        return 0;
+      } else {
+        return int.Parse(runName.Substring(idx, runName.Length - idx));
+      }
+    }
+    #endregion
+  }
+}
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/IHiveServiceLocator.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/IHiveServiceLocator.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/IHiveServiceLocator.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/JobResultPoller.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/JobResultPoller.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/JobResultPoller.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Plugin.cs.frame
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Plugin.cs.frame	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Plugin.cs.frame	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -27,5 +27,5 @@
 
 namespace HeuristicLab.Clients.Hive {
-  [Plugin("HeuristicLab.Clients.Hive", "3.3.5.$WCREV$")]
+  [Plugin("HeuristicLab.Clients.Hive", "3.3.6.$WCREV$")]
   [PluginFile("HeuristicLab.Clients.Hive-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Clients.Common", "3.3")]
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Progress/IProgress.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Progress/IProgress.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Progress/IProgress.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Progress/IProgressReporter.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Progress/IProgressReporter.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Progress/IProgressReporter.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Progress/Progress.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Progress/Progress.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Progress/Progress.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Properties/AssemblyInfo.cs.frame	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Properties/AssemblyInfo.cs.frame	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -32,5 +32,5 @@
 [assembly: AssemblyCompany("")]
 [assembly: AssemblyProduct("HeuristicLab")]
-[assembly: AssemblyCopyright("(c) 2002-2011 HEAL")]
+[assembly: AssemblyCopyright("(c) 2002-2012 HEAL")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
@@ -54,4 +54,4 @@
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("3.3.5.0")]
-[assembly: AssemblyFileVersion("3.3.5.$WCREV$")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.6.$WCREV$")]
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/RefreshableJob.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/RefreshableJob.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/RefreshableJob.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -265,5 +265,5 @@
     private void jobResultPoller_JobResultReceived(object sender, EventArgs<IEnumerable<LightweightTask>> e) {
       foreach (LightweightTask lightweightTask in e.Value) {
-        HiveTask hiveTask = GetHiveJobById(lightweightTask.Id);
+        HiveTask hiveTask = GetHiveTaskById(lightweightTask.Id);
         if (hiveTask != null) {
           // lastJobDataUpdate equals DateTime.MinValue right after it was uploaded. When the first results are polled, this value is updated
@@ -279,5 +279,5 @@
             jobDownloader.DownloadTaskData(hiveTask.Task, (localJob, itemJob) => {
               log.LogMessage(string.Format("Finished downloading task {0}", localJob.Id));
-              HiveTask localHiveTask = GetHiveJobById(localJob.Id);
+              HiveTask localHiveTask = GetHiveTaskById(localJob.Id);
 
               if (itemJob == null) {
@@ -294,5 +294,5 @@
                 } else {
                   if (localJob.ParentTaskId.HasValue) {
-                    HiveTask parentHiveTask = GetHiveJobById(localJob.ParentTaskId.Value);
+                    HiveTask parentHiveTask = GetHiveTaskById(localJob.ParentTaskId.Value);
                     parentHiveTask.IntegrateChild(itemJob, localJob.Id);
                   } else {
@@ -317,7 +317,7 @@
     }
 
-    public HiveTask GetHiveJobById(Guid jobId) {
-      foreach (HiveTask job in this.HiveTasks) {
-        var hj = job.GetHiveTaskByTaskId(jobId);
+    public HiveTask GetHiveTaskById(Guid jobId) {
+      foreach (HiveTask t in this.HiveTasks) {
+        var hj = t.GetHiveTaskByTaskId(jobId);
         if (hj != null)
           return hj;
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ScopeExtensions.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ScopeExtensions.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ScopeExtensions.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/Downtime.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/Downtime.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/Downtime.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/Heartbeat.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/Heartbeat.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/Heartbeat.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/HiveItem.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/HiveItem.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/HiveItem.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -38,5 +38,5 @@
       get { return ItemAttribute.GetVersion(this.GetType()); }
     }
-    public static new Image StaticItemImage {
+    public static Image StaticItemImage {
       get { return HeuristicLab.Common.Resources.VSImageLibrary.Database; }
     }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/HiveItemCollection.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/HiveItemCollection.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/HiveItemCollection.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/IHiveItem.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/IHiveItem.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/IHiveItem.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/Job.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/Job.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/Job.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/JobPermission.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/JobPermission.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/JobPermission.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/LightweightTask.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/LightweightTask.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/LightweightTask.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/MessageContainer.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/MessageContainer.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/MessageContainer.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/NamedHiveItem.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/NamedHiveItem.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/NamedHiveItem.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/Plugin.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/Plugin.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/Plugin.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/PluginData.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/PluginData.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/PluginData.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/Resource.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/Resource.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/Resource.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/Slave.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/Slave.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/Slave.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/SlaveGroup.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/SlaveGroup.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/SlaveGroup.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/StateLog.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/StateLog.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/StateLog.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/Task.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/Task.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/Task.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/TaskData.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/TaskData.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/ServiceClients/TaskData.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Settings.Designer.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Settings.Designer.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Settings.Designer.cs	(revision 7268)
@@ -68,4 +68,13 @@
             }
         }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("anonymous")]
+        public string AnonymousUserName {
+            get {
+                return ((string)(this["AnonymousUserName"]));
+            }
+        }
     }
 }
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Settings.settings
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Settings.settings	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Settings.settings	(revision 7268)
@@ -18,4 +18,7 @@
       <Value Profile="(Default)">5</Value>
     </Setting>
+    <Setting Name="AnonymousUserName" Type="System.String" Scope="Application">
+      <Value Profile="(Default)">anonymous</Value>
+    </Setting>
   </Settings>
 </SettingsFile>
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/StateLogList.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/StateLogList.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/StateLogList.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/StateLogListList.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/StateLogListList.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/StateLogListList.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/TaskDownloader.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/TaskDownloader.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/TaskDownloader.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Tasks/EngineTask.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Tasks/EngineTask.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Tasks/EngineTask.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Tasks/ItemTask.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Tasks/ItemTask.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Tasks/ItemTask.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Tasks/OptimizerTask.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Tasks/OptimizerTask.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Tasks/OptimizerTask.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/TreeView/IItemTree.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/TreeView/IItemTree.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/TreeView/IItemTree.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/TreeView/IItemTreeAction.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/TreeView/IItemTreeAction.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/TreeView/IItemTreeAction.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Util/PersistenceUtil.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Util/PersistenceUtil.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Util/PersistenceUtil.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Util/PluginUtil.cs
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Util/PluginUtil.cs	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/Util/PluginUtil.cs	(revision 7268)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
Index: branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/app.config
===================================================================
--- branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/app.config	(revision 7213)
+++ branches/HeuristicLab.TimeSeries/HeuristicLab.Clients.Hive/3.3/app.config	(revision 7268)
@@ -22,4 +22,7 @@
       <setting name="MaxRepeatServiceCalls" serializeAs="String">
         <value>5</value>
+      </setting>
+      <setting name="AnonymousUserName" serializeAs="String">
+        <value>anonymous</value>
       </setting>
     </HeuristicLab.Clients.Hive.Settings>
