Index: trunk/sources/HeuristicLab.Hive.Client.Common/Interfaces/IJob.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Client.Common/Interfaces/IJob.cs	(revision 815)
+++ trunk/sources/HeuristicLab.Hive.Client.Common/Interfaces/IJob.cs	(revision 816)
@@ -1,9 +1,9 @@
 ﻿using System;
+using HeuristicLab.Core;
 namespace HeuristicLab.Hive.Client.Common {
-  public interface IJob {
-    System.Xml.XmlNode GetXmlNode();
+  public interface IJob: IStorable {
     event EventHandler JobStopped;
     long JobId { get; set; }
-    int Progress { get; set; }
+    double Progress { get; set; }
     void Run();
     bool Running { get; set; }
Index: trunk/sources/HeuristicLab.Hive.Client.Common/JobBase.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Client.Common/JobBase.cs	(revision 815)
+++ trunk/sources/HeuristicLab.Hive.Client.Common/JobBase.cs	(revision 816)
@@ -31,16 +31,14 @@
 namespace HeuristicLab.Hive.Client.Common {
   [Serializable]
-  abstract public class JobBase : IJob {
-
-    public long JobId { get; set; }
+  abstract public class JobBase : StorableBase, IJob {
 
     private Thread thread = null;
+    public event EventHandler JobStopped;
     
-    public int Progress { get; set; }
+    public long JobId { get; set; }    
+    public double Progress { get; set; }        
+    public bool Running { get; set; }
     
-    protected bool abort = false;
-    public bool Running { get; set; }
-
-    public event EventHandler JobStopped;
+    protected bool abort = false;    
 
     abstract public void Run();
@@ -63,7 +61,18 @@
     }
 
-    public XmlNode GetXmlNode() {
-      XmlDocument doc = PersistenceManager.CreateXmlDocument();
-      return doc.CreateNode(XmlNodeType.Element, "testnode", null);      
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+
+      XmlNode progr = document.CreateNode(XmlNodeType.Element, "Progress", null);
+      progr.InnerText = Convert.ToString(Progress);
+
+      node.AppendChild(progr);
+      return node;
+    }
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+
+      XmlNode progr = node.SelectSingleNode("Progress");
+      Progress = Convert.ToDouble(progr.InnerText);
     }
 
Index: trunk/sources/HeuristicLab.Hive.Client.Common/TestJob.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Client.Common/TestJob.cs	(revision 815)
+++ trunk/sources/HeuristicLab.Hive.Client.Common/TestJob.cs	(revision 816)
@@ -25,21 +25,47 @@
 using System.Text;
 using System.Diagnostics;
+using System.Xml;
 
 namespace HeuristicLab.Hive.Client.Common {
   [Serializable]
   public class TestJob: JobBase {
+
+    private int runValue = 0;
+
     public override void Run() {
-      for (int x = 0; x < 10; x++) {
+      int max = 10;
+      while(runValue < max && abort == false) {
         for (int y = 0; y < Int32.MaxValue; y++) ;
-        if (abort == true) {
-          Logging.GetInstance().Info(this.ToString(), "Job Processing aborted");
-          Debug.WriteLine("Job Abort Processing");
-          break;
-        }
-        Logging.GetInstance().Info(this.ToString(), "Iteration " + x + " done");
-        Debug.WriteLine("Iteration " + x + " done");
+          if (abort == true) {
+            Logging.GetInstance().Info(this.ToString(), "Job Processing aborted");
+            Debug.WriteLine("Job Abort Processing");
+           break;
+          }
+        runValue++;
+        Progress = runValue / max;
+        Logging.GetInstance().Info(this.ToString(), "Iteration " + runValue + " done");
+        Debug.WriteLine("Iteration " + runValue + " done");
+        Debug.WriteLine("Progress " + Progress*100 + " Percent");
       }      
       OnJobStopped();
     }
+    public override System.Xml.XmlNode GetXmlNode(string name, System.Xml.XmlDocument document, IDictionary<Guid, HeuristicLab.Core.IStorable> persistedObjects) {      
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+    
+      XmlNode startValue = document.CreateNode(XmlNodeType.Element, "StartValue", null);
+      startValue.InnerText = Convert.ToString(runValue);
+      
+      node.AppendChild(startValue);
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid, HeuristicLab.Core.IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+
+      XmlNode startValue = node.SelectSingleNode("StartValue");
+      runValue = Convert.ToInt32(startValue.InnerText);
+    }
+
+
   }
 }
Index: trunk/sources/HeuristicLab.Hive.Client.Core/Core.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Client.Core/Core.cs	(revision 815)
+++ trunk/sources/HeuristicLab.Hive.Client.Core/Core.cs	(revision 816)
@@ -36,4 +36,5 @@
 using HeuristicLab.Hive.Contracts;
 using System.Runtime.Remoting.Messaging;
+using HeuristicLab.PluginInfrastructure;
 
 
@@ -140,6 +141,6 @@
     private void GetFinishedJob(object jobId) {
       long jId = (long)jobId;
-      String obj = engines[jId].GetFinishedJob();
-      engines[jId].GetFinishedJob();
+      byte[] obj = engines[jId].GetFinishedJob();
+      
       AppDomain.Unload(appDomains[jId]);
       appDomains.Remove(jId);
@@ -152,5 +153,5 @@
     private void GetSnapshot(object jobId) {
       long jId = (long)jobId;
-      String obj = engines[jId].GetSnapshot();
+      byte[] obj = engines[jId].GetSnapshot();
     }
 
@@ -160,9 +161,11 @@
       IJob job = new TestJob { JobId = e.Result.JobId };
 
-      AppDomain appDomain = CreateNewAppDomain(sandboxed);
+      PluginManager pm = PluginManager.Manager;
+      AppDomain appDomain =  pm.CreateAndInitAppDomain("AppDomain");
+
+      //AppDomain appDomain = CreateNewAppDomain(sandboxed);
       appDomains.Add(job.JobId, appDomain);
 
       Executor engine = (Executor)appDomain.CreateInstanceAndUnwrap(typeof(Executor).Assembly.GetName().Name, typeof(Executor).FullName);
-      engine.Job = job;
       engine.JobId = job.JobId;
       engine.Queue = MessageQueue.GetInstance();
Index: trunk/sources/HeuristicLab.Hive.Client.Core/CoreApplication.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Client.Core/CoreApplication.cs	(revision 815)
+++ trunk/sources/HeuristicLab.Hive.Client.Core/CoreApplication.cs	(revision 816)
@@ -31,5 +31,5 @@
 
 namespace HeuristicLab.Hive.Client.Core {
-  [ClassInfo(Name = "Hive Client Core", Description = "Hive Client Core baseclass", AutoRestart = true)]
+  [ClassInfo(Name = "Hive Client", Description = "Hive Client Core baseclass", AutoRestart = true)]
   public class CoreApplication: ApplicationBase {
     public override void Run() {
Index: trunk/sources/HeuristicLab.Hive.Client.Core/HeuristicLab.Hive.Client.Core.csproj
===================================================================
--- trunk/sources/HeuristicLab.Hive.Client.Core/HeuristicLab.Hive.Client.Core.csproj	(revision 815)
+++ trunk/sources/HeuristicLab.Hive.Client.Core/HeuristicLab.Hive.Client.Core.csproj	(revision 816)
@@ -82,4 +82,8 @@
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.Hive.Client.Common\HeuristicLab.Hive.Client.Common.csproj">
       <Project>{89F4BC52-C174-481E-9BD2-3814171020E8}</Project>
Index: trunk/sources/HeuristicLab.Hive.Client.ExecutionEngine/Executor.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Client.ExecutionEngine/Executor.cs	(revision 815)
+++ trunk/sources/HeuristicLab.Hive.Client.ExecutionEngine/Executor.cs	(revision 816)
@@ -29,4 +29,5 @@
 using System.IO;
 using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Core;
 
 namespace HeuristicLab.Hive.Client.ExecutionEngine {
@@ -56,5 +57,5 @@
     }
 
-    public String GetSnapshot() {
+    public byte[] GetSnapshot() {
       //if the job is still running, something went VERY bad.
       if (Job.Running) {
@@ -64,5 +65,5 @@
         CurrentMessage = MessageContainer.MessageType.NoMessage;
         // Pack the whole job inside an xml document
-        String job = SerializeJobObject();        
+        byte[] job = SerializeJobObject();        
         // Restart the job
         Job.Start();
@@ -72,5 +73,5 @@
     }
 
-    public String GetFinishedJob() {
+    public byte[] GetFinishedJob() {
       //Job isn't finished!
       if (Job.Running) {
@@ -87,22 +88,15 @@
     }
 
-    private String SerializeJobObject() {
-      XmlSerializer serializer = new XmlSerializer(typeof(TestJob));
-      MemoryStream ms = new MemoryStream();
-      serializer.Serialize(ms, Job);
-      StreamReader reader = new StreamReader(ms);
-      return reader.ReadToEnd();       
+    private byte[] SerializeJobObject() {
+      return PersistenceManager.SaveToGZip(Job);
     }
 
-    private void RestoreJobObject(String serializedJob) {
-      System.Text.ASCIIEncoding  encoding=new System.Text.ASCIIEncoding();
-      XmlSerializer serializer = new XmlSerializer(typeof(TestJob));
-      MemoryStream ms = new MemoryStream();
-      ms.Write(encoding.GetBytes(serializedJob), 0, serializedJob.Length);
-      Job = (TestJob) serializer.Deserialize(ms);      
+    private void RestoreJobObject(byte[] sjob) {
+      Job = (IJob)PersistenceManager.RestoreFromGZip(sjob);
     }
 
     public Executor() {
       CurrentMessage = MessageContainer.MessageType.NoMessage;
+      Job = new TestJob();
     }    
   }
Index: trunk/sources/HeuristicLab.Hive.Client.ExecutionEngine/HeuristicLab.Hive.Client.ExecutionEngine.csproj
===================================================================
--- trunk/sources/HeuristicLab.Hive.Client.ExecutionEngine/HeuristicLab.Hive.Client.ExecutionEngine.csproj	(revision 815)
+++ trunk/sources/HeuristicLab.Hive.Client.ExecutionEngine/HeuristicLab.Hive.Client.ExecutionEngine.csproj	(revision 816)
@@ -57,4 +57,8 @@
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.Hive.Client.Common\HeuristicLab.Hive.Client.Common.csproj">
       <Project>{89F4BC52-C174-481E-9BD2-3814171020E8}</Project>
Index: trunk/sources/HeuristicLab.Hive.Server.Core/ClientCommunicator.cs
===================================================================
--- trunk/sources/HeuristicLab.Hive.Server.Core/ClientCommunicator.cs	(revision 815)
+++ trunk/sources/HeuristicLab.Hive.Server.Core/ClientCommunicator.cs	(revision 816)
@@ -14,5 +14,5 @@
     List<ClientInfo> clients;
     LinkedList<long> jobs;
-    int nrOfJobs = 3;
+    int nrOfJobs = 1;
 
     public ClientCommunicator() {
