Index: /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/HeuristicLab.Hive.Server.ADODataAccess.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/HeuristicLab.Hive.Server.ADODataAccess.csproj	(revision 999)
+++ /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/HeuristicLab.Hive.Server.ADODataAccess.csproj	(revision 1000)
@@ -80,4 +80,5 @@
     <Compile Include="ICachedDataAdapter.cs" />
     <Compile Include="JobAdapter.cs" />
+    <Compile Include="JobResultsAdapter.cs" />
     <Compile Include="PermissionOwnerAdapter.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
Index: /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/JobAdapter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/JobAdapter.cs	(revision 999)
+++ /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/JobAdapter.cs	(revision 1000)
@@ -202,8 +202,4 @@
     }
 
-    public JobResult GetResult(Job job) {
-      throw new NotImplementedException();
-    }
-
     public ICollection<Job> GetJobsOf(ClientInfo client) {
       if (client != null) {
Index: /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/JobResultsAdapter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/JobResultsAdapter.cs	(revision 1000)
+++ /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/JobResultsAdapter.cs	(revision 1000)
@@ -0,0 +1,62 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.ADODataAccess {
+  class JobResultsAdapter: 
+    DataAdapterBase<dsHiveServerTableAdapters.JobResultTableAdapter, 
+                    JobResult, 
+                    dsHiveServer.JobResultRow>,
+    IJobResultsAdapter {
+    #region Overrides
+    protected override dsHiveServer.JobResultRow Convert(JobResult obj, dsHiveServer.JobResultRow row) {
+      throw new NotImplementedException();
+    }
+
+    protected override JobResult Convert(dsHiveServer.JobResultRow row, JobResult obj) {
+      throw new NotImplementedException();
+    }
+
+    protected override dsHiveServer.JobResultRow InsertNewRow(JobResult obj) {
+      throw new NotImplementedException();
+    }
+
+    protected override void UpdateRow(dsHiveServer.JobResultRow row) {
+      throw new NotImplementedException();
+    }
+
+    protected override IEnumerable<dsHiveServer.JobResultRow> FindById(long id) {
+      throw new NotImplementedException();
+    }
+
+    protected override IEnumerable<dsHiveServer.JobResultRow> FindAll() {
+      throw new NotImplementedException();
+    }
+    #endregion
+
+    #region IJobResultsAdapter Members
+    public override void Update(JobResult ob) {
+      throw new NotImplementedException();
+    }
+
+    public override JobResult GetById(long id) {
+      throw new NotImplementedException();
+    }
+
+    public override ICollection<JobResult> GetAll() {
+      throw new NotImplementedException();
+    }
+
+    public override bool Delete(JobResult obj) {
+      throw new NotImplementedException();
+    }
+
+    public ICollection<JobResult> GetResultsOf(Job job) {
+      throw new NotImplementedException();
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.Designer.cs	(revision 999)
+++ /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.Designer.cs	(revision 1000)
@@ -44,4 +44,6 @@
         private ClientGroup_ResourceDataTable tableClientGroup_Resource;
         
+        private JobResultDataTable tableJobResult;
+        
         private global::System.Data.DataRelation relationClient_is_a_Resource;
         
@@ -63,4 +65,6 @@
         
         private global::System.Data.DataRelation relationR_59;
+        
+        private global::System.Data.DataRelation relationR_14;
         
         private global::System.Data.SchemaSerializationMode _schemaSerializationMode = global::System.Data.SchemaSerializationMode.IncludeSchema;
@@ -117,4 +121,7 @@
                     base.Tables.Add(new ClientGroup_ResourceDataTable(ds.Tables["ClientGroup_Resource"]));
                 }
+                if ((ds.Tables["JobResult"] != null)) {
+                    base.Tables.Add(new JobResultDataTable(ds.Tables["JobResult"]));
+                }
                 this.DataSetName = ds.DataSetName;
                 this.Prefix = ds.Prefix;
@@ -217,4 +224,13 @@
         
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Browsable(false)]
+        [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)]
+        public JobResultDataTable JobResult {
+            get {
+                return this.tableJobResult;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
         [global::System.ComponentModel.BrowsableAttribute(true)]
         [global::System.ComponentModel.DesignerSerializationVisibilityAttribute(global::System.ComponentModel.DesignerSerializationVisibility.Visible)]
@@ -301,4 +317,7 @@
                 if ((ds.Tables["ClientGroup_Resource"] != null)) {
                     base.Tables.Add(new ClientGroup_ResourceDataTable(ds.Tables["ClientGroup_Resource"]));
+                }
+                if ((ds.Tables["JobResult"] != null)) {
+                    base.Tables.Add(new JobResultDataTable(ds.Tables["JobResult"]));
                 }
                 this.DataSetName = ds.DataSetName;
@@ -384,4 +403,10 @@
                 if ((this.tableClientGroup_Resource != null)) {
                     this.tableClientGroup_Resource.InitVars();
+                }
+            }
+            this.tableJobResult = ((JobResultDataTable)(base.Tables["JobResult"]));
+            if ((initTable == true)) {
+                if ((this.tableJobResult != null)) {
+                    this.tableJobResult.InitVars();
                 }
             }
@@ -396,4 +421,5 @@
             this.relationR_52 = this.Relations["R_52"];
             this.relationR_59 = this.Relations["R_59"];
+            this.relationR_14 = this.Relations["R_14"];
         }
         
@@ -423,4 +449,6 @@
             this.tableClientGroup_Resource = new ClientGroup_ResourceDataTable();
             base.Tables.Add(this.tableClientGroup_Resource);
+            this.tableJobResult = new JobResultDataTable();
+            base.Tables.Add(this.tableJobResult);
             this.relationClient_is_a_Resource = new global::System.Data.DataRelation("Client_is_a_Resource", new global::System.Data.DataColumn[] {
                         this.tableResource.ResourceIdColumn}, new global::System.Data.DataColumn[] {
@@ -463,4 +491,8 @@
                         this.tableClientGroup_Resource.ResourceIdColumn}, false);
             this.Relations.Add(this.relationR_59);
+            this.relationR_14 = new global::System.Data.DataRelation("R_14", new global::System.Data.DataColumn[] {
+                        this.tableJob.JobIdColumn}, new global::System.Data.DataColumn[] {
+                        this.tableJobResult.JobIdColumn}, false);
+            this.Relations.Add(this.relationR_14);
         }
         
@@ -507,4 +539,9 @@
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
         private bool ShouldSerializeClientGroup_Resource() {
+            return false;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private bool ShouldSerializeJobResult() {
             return false;
         }
@@ -580,4 +617,6 @@
         
         public delegate void ClientGroup_ResourceRowChangeEventHandler(object sender, ClientGroup_ResourceRowChangeEvent e);
+        
+        public delegate void JobResultRowChangeEventHandler(object sender, JobResultRowChangeEvent e);
         
         /// <summary>
@@ -2938,4 +2977,283 @@
         
         /// <summary>
+        ///Represents the strongly named DataTable class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        [global::System.Serializable()]
+        [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedTableSchema")]
+        public partial class JobResultDataTable : global::System.Data.TypedTableBase<JobResultRow> {
+            
+            private global::System.Data.DataColumn columnJobResultId;
+            
+            private global::System.Data.DataColumn columnJobId;
+            
+            private global::System.Data.DataColumn columnJobResult;
+            
+            private global::System.Data.DataColumn columnResourceId;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobResultDataTable() {
+                this.TableName = "JobResult";
+                this.BeginInit();
+                this.InitClass();
+                this.EndInit();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal JobResultDataTable(global::System.Data.DataTable table) {
+                this.TableName = table.TableName;
+                if ((table.CaseSensitive != table.DataSet.CaseSensitive)) {
+                    this.CaseSensitive = table.CaseSensitive;
+                }
+                if ((table.Locale.ToString() != table.DataSet.Locale.ToString())) {
+                    this.Locale = table.Locale;
+                }
+                if ((table.Namespace != table.DataSet.Namespace)) {
+                    this.Namespace = table.Namespace;
+                }
+                this.Prefix = table.Prefix;
+                this.MinimumCapacity = table.MinimumCapacity;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected JobResultDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : 
+                    base(info, context) {
+                this.InitVars();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn JobResultIdColumn {
+                get {
+                    return this.columnJobResultId;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn JobIdColumn {
+                get {
+                    return this.columnJobId;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn JobResultColumn {
+                get {
+                    return this.columnJobResult;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn ResourceIdColumn {
+                get {
+                    return this.columnResourceId;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            [global::System.ComponentModel.Browsable(false)]
+            public int Count {
+                get {
+                    return this.Rows.Count;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobResultRow this[int index] {
+                get {
+                    return ((JobResultRow)(this.Rows[index]));
+                }
+            }
+            
+            public event JobResultRowChangeEventHandler JobResultRowChanging;
+            
+            public event JobResultRowChangeEventHandler JobResultRowChanged;
+            
+            public event JobResultRowChangeEventHandler JobResultRowDeleting;
+            
+            public event JobResultRowChangeEventHandler JobResultRowDeleted;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void AddJobResultRow(JobResultRow row) {
+                this.Rows.Add(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobResultRow AddJobResultRow(JobRow parentJobRowByR_14, byte[] JobResult, long ResourceId) {
+                JobResultRow rowJobResultRow = ((JobResultRow)(this.NewRow()));
+                object[] columnValuesArray = new object[] {
+                        null,
+                        null,
+                        JobResult,
+                        ResourceId};
+                if ((parentJobRowByR_14 != null)) {
+                    columnValuesArray[1] = parentJobRowByR_14[0];
+                }
+                rowJobResultRow.ItemArray = columnValuesArray;
+                this.Rows.Add(rowJobResultRow);
+                return rowJobResultRow;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobResultRow FindByJobResultId(long JobResultId) {
+                return ((JobResultRow)(this.Rows.Find(new object[] {
+                            JobResultId})));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public override global::System.Data.DataTable Clone() {
+                JobResultDataTable cln = ((JobResultDataTable)(base.Clone()));
+                cln.InitVars();
+                return cln;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataTable CreateInstance() {
+                return new JobResultDataTable();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal void InitVars() {
+                this.columnJobResultId = base.Columns["JobResultId"];
+                this.columnJobId = base.Columns["JobId"];
+                this.columnJobResult = base.Columns["JobResult"];
+                this.columnResourceId = base.Columns["ResourceId"];
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            private void InitClass() {
+                this.columnJobResultId = new global::System.Data.DataColumn("JobResultId", typeof(long), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnJobResultId);
+                this.columnJobId = new global::System.Data.DataColumn("JobId", typeof(long), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnJobId);
+                this.columnJobResult = new global::System.Data.DataColumn("JobResult", typeof(byte[]), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnJobResult);
+                this.columnResourceId = new global::System.Data.DataColumn("ResourceId", typeof(long), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnResourceId);
+                this.Constraints.Add(new global::System.Data.UniqueConstraint("Constraint1", new global::System.Data.DataColumn[] {
+                                this.columnJobResultId}, true));
+                this.columnJobResultId.AutoIncrement = true;
+                this.columnJobResultId.AutoIncrementSeed = -1;
+                this.columnJobResultId.AutoIncrementStep = -1;
+                this.columnJobResultId.AllowDBNull = false;
+                this.columnJobResultId.ReadOnly = true;
+                this.columnJobResultId.Unique = true;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobResultRow NewJobResultRow() {
+                return ((JobResultRow)(this.NewRow()));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) {
+                return new JobResultRow(builder);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Type GetRowType() {
+                return typeof(JobResultRow);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanged(e);
+                if ((this.JobResultRowChanged != null)) {
+                    this.JobResultRowChanged(this, new JobResultRowChangeEvent(((JobResultRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanging(e);
+                if ((this.JobResultRowChanging != null)) {
+                    this.JobResultRowChanging(this, new JobResultRowChangeEvent(((JobResultRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleted(e);
+                if ((this.JobResultRowDeleted != null)) {
+                    this.JobResultRowDeleted(this, new JobResultRowChangeEvent(((JobResultRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleting(e);
+                if ((this.JobResultRowDeleting != null)) {
+                    this.JobResultRowDeleting(this, new JobResultRowChangeEvent(((JobResultRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void RemoveJobResultRow(JobResultRow row) {
+                this.Rows.Remove(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) {
+                global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType();
+                global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence();
+                dsHiveServer ds = new dsHiveServer();
+                global::System.Xml.Schema.XmlSchemaAny any1 = new global::System.Xml.Schema.XmlSchemaAny();
+                any1.Namespace = "http://www.w3.org/2001/XMLSchema";
+                any1.MinOccurs = new decimal(0);
+                any1.MaxOccurs = decimal.MaxValue;
+                any1.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any1);
+                global::System.Xml.Schema.XmlSchemaAny any2 = new global::System.Xml.Schema.XmlSchemaAny();
+                any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1";
+                any2.MinOccurs = new decimal(1);
+                any2.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any2);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute1 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute1.Name = "namespace";
+                attribute1.FixedValue = ds.Namespace;
+                type.Attributes.Add(attribute1);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute2 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute2.Name = "tableTypeName";
+                attribute2.FixedValue = "JobResultDataTable";
+                type.Attributes.Add(attribute2);
+                type.Particle = sequence;
+                global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable();
+                if (xs.Contains(dsSchema.TargetNamespace)) {
+                    global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream();
+                    global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream();
+                    try {
+                        global::System.Xml.Schema.XmlSchema schema = null;
+                        dsSchema.Write(s1);
+                        for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) {
+                            schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current));
+                            s2.SetLength(0);
+                            schema.Write(s2);
+                            if ((s1.Length == s2.Length)) {
+                                s1.Position = 0;
+                                s2.Position = 0;
+                                for (; ((s1.Position != s1.Length) 
+                                            && (s1.ReadByte() == s2.ReadByte())); ) {
+                                    ;
+                                }
+                                if ((s1.Position == s1.Length)) {
+                                    return type;
+                                }
+                            }
+                        }
+                    }
+                    finally {
+                        if ((s1 != null)) {
+                            s1.Close();
+                        }
+                        if ((s2 != null)) {
+                            s2.Close();
+                        }
+                    }
+                }
+                xs.Add(dsSchema);
+                return type;
+            }
+        }
+        
+        /// <summary>
         ///Represents strongly named DataRow class.
         ///</summary>
@@ -3675,4 +3993,14 @@
                 this[this.tableJob.ResourceIdColumn] = global::System.Convert.DBNull;
             }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobResultRow[] GetJobResultRows() {
+                if ((this.Table.ChildRelations["R_14"] == null)) {
+                    return new JobResultRow[0];
+                }
+                else {
+                    return ((JobResultRow[])(base.GetChildRows(this.Table.ChildRelations["R_14"])));
+                }
+            }
         }
         
@@ -3733,4 +4061,114 @@
         
         /// <summary>
+        ///Represents strongly named DataRow class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public partial class JobResultRow : global::System.Data.DataRow {
+            
+            private JobResultDataTable tableJobResult;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal JobResultRow(global::System.Data.DataRowBuilder rb) : 
+                    base(rb) {
+                this.tableJobResult = ((JobResultDataTable)(this.Table));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public long JobResultId {
+                get {
+                    return ((long)(this[this.tableJobResult.JobResultIdColumn]));
+                }
+                set {
+                    this[this.tableJobResult.JobResultIdColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public long JobId {
+                get {
+                    try {
+                        return ((long)(this[this.tableJobResult.JobIdColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'JobId\' in table \'JobResult\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableJobResult.JobIdColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public byte[] JobResult {
+                get {
+                    try {
+                        return ((byte[])(this[this.tableJobResult.JobResultColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'JobResult\' in table \'JobResult\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableJobResult.JobResultColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public long ResourceId {
+                get {
+                    try {
+                        return ((long)(this[this.tableJobResult.ResourceIdColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'ResourceId\' in table \'JobResult\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableJobResult.ResourceIdColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobRow JobRow {
+                get {
+                    return ((JobRow)(this.GetParentRow(this.Table.ParentRelations["R_14"])));
+                }
+                set {
+                    this.SetParentRow(value, this.Table.ParentRelations["R_14"]);
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsJobIdNull() {
+                return this.IsNull(this.tableJobResult.JobIdColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetJobIdNull() {
+                this[this.tableJobResult.JobIdColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsJobResultNull() {
+                return this.IsNull(this.tableJobResult.JobResultColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetJobResultNull() {
+                this[this.tableJobResult.JobResultColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsResourceIdNull() {
+                return this.IsNull(this.tableJobResult.ResourceIdColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetResourceIdNull() {
+                this[this.tableJobResult.ResourceIdColumn] = global::System.Convert.DBNull;
+            }
+        }
+        
+        /// <summary>
         ///Row event argument class
         ///</summary>
@@ -3998,4 +4436,35 @@
             [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
             public ClientGroup_ResourceRow Row {
+                get {
+                    return this.eventRow;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataRowAction Action {
+                get {
+                    return this.eventAction;
+                }
+            }
+        }
+        
+        /// <summary>
+        ///Row event argument class
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public class JobResultRowChangeEvent : global::System.EventArgs {
+            
+            private JobResultRow eventRow;
+            
+            private global::System.Data.DataRowAction eventAction;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobResultRowChangeEvent(JobResultRow row, global::System.Data.DataRowAction action) {
+                this.eventRow = row;
+                this.eventAction = action;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobResultRow Row {
                 get {
                     return this.eventRow;
@@ -7807,4 +8276,379 @@
     
     /// <summary>
+    ///Represents the connection and commands used to retrieve and save data.
+    ///</summary>
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+    [global::System.ComponentModel.DesignerCategoryAttribute("code")]
+    [global::System.ComponentModel.ToolboxItem(true)]
+    [global::System.ComponentModel.DataObjectAttribute(true)]
+    [global::System.ComponentModel.DesignerAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterDesigner, Microsoft.VSDesigner" +
+        ", Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+    [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+    public partial class JobResultTableAdapter : global::System.ComponentModel.Component {
+        
+        private global::System.Data.SqlClient.SqlDataAdapter _adapter;
+        
+        private global::System.Data.SqlClient.SqlConnection _connection;
+        
+        private global::System.Data.SqlClient.SqlTransaction _transaction;
+        
+        private global::System.Data.SqlClient.SqlCommand[] _commandCollection;
+        
+        private bool _clearBeforeFill;
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public JobResultTableAdapter() {
+            this.ClearBeforeFill = true;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected internal global::System.Data.SqlClient.SqlDataAdapter Adapter {
+            get {
+                if ((this._adapter == null)) {
+                    this.InitAdapter();
+                }
+                return this._adapter;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlConnection Connection {
+            get {
+                if ((this._connection == null)) {
+                    this.InitConnection();
+                }
+                return this._connection;
+            }
+            set {
+                this._connection = value;
+                if ((this.Adapter.InsertCommand != null)) {
+                    this.Adapter.InsertCommand.Connection = value;
+                }
+                if ((this.Adapter.DeleteCommand != null)) {
+                    this.Adapter.DeleteCommand.Connection = value;
+                }
+                if ((this.Adapter.UpdateCommand != null)) {
+                    this.Adapter.UpdateCommand.Connection = value;
+                }
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    if ((this.CommandCollection[i] != null)) {
+                        ((global::System.Data.SqlClient.SqlCommand)(this.CommandCollection[i])).Connection = value;
+                    }
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlTransaction Transaction {
+            get {
+                return this._transaction;
+            }
+            set {
+                this._transaction = value;
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    this.CommandCollection[i].Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.DeleteCommand != null))) {
+                    this.Adapter.DeleteCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.InsertCommand != null))) {
+                    this.Adapter.InsertCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.UpdateCommand != null))) {
+                    this.Adapter.UpdateCommand.Transaction = this._transaction;
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected global::System.Data.SqlClient.SqlCommand[] CommandCollection {
+            get {
+                if ((this._commandCollection == null)) {
+                    this.InitCommandCollection();
+                }
+                return this._commandCollection;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public bool ClearBeforeFill {
+            get {
+                return this._clearBeforeFill;
+            }
+            set {
+                this._clearBeforeFill = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitAdapter() {
+            this._adapter = new global::System.Data.SqlClient.SqlDataAdapter();
+            global::System.Data.Common.DataTableMapping tableMapping = new global::System.Data.Common.DataTableMapping();
+            tableMapping.SourceTable = "Table";
+            tableMapping.DataSetTable = "JobResult";
+            tableMapping.ColumnMappings.Add("JobResultId", "JobResultId");
+            tableMapping.ColumnMappings.Add("JobId", "JobId");
+            tableMapping.ColumnMappings.Add("JobResult", "JobResult");
+            tableMapping.ColumnMappings.Add("ResourceId", "ResourceId");
+            this._adapter.TableMappings.Add(tableMapping);
+            this._adapter.DeleteCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.DeleteCommand.Connection = this.Connection;
+            this._adapter.DeleteCommand.CommandText = @"DELETE FROM [dbo].[JobResult] WHERE (([JobResultId] = @Original_JobResultId) AND ((@IsNull_JobId = 1 AND [JobId] IS NULL) OR ([JobId] = @Original_JobId)) AND ((@IsNull_JobResult = 1 AND [JobResult] IS NULL) OR ([JobResult] = @Original_JobResult)) AND ((@IsNull_ResourceId = 1 AND [ResourceId] IS NULL) OR ([ResourceId] = @Original_ResourceId)))";
+            this._adapter.DeleteCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_JobResultId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobResultId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_JobId", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobId", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_JobId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_JobResult", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobResult", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_JobResult", global::System.Data.SqlDbType.VarBinary, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobResult", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_ResourceId", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.InsertCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.InsertCommand.Connection = this.Connection;
+            this._adapter.InsertCommand.CommandText = "INSERT INTO [dbo].[JobResult] ([JobId], [JobResult], [ResourceId]) VALUES (@JobId" +
+                ", @JobResult, @ResourceId);\r\nSELECT JobResultId, JobId, JobResult, ResourceId FR" +
+                "OM JobResult WHERE (JobResultId = SCOPE_IDENTITY())";
+            this._adapter.InsertCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@JobId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@JobResult", global::System.Data.SqlDbType.VarBinary, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobResult", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.UpdateCommand.Connection = this.Connection;
+            this._adapter.UpdateCommand.CommandText = @"UPDATE [dbo].[JobResult] SET [JobId] = @JobId, [JobResult] = @JobResult, [ResourceId] = @ResourceId WHERE (([JobResultId] = @Original_JobResultId) AND ((@IsNull_JobId = 1 AND [JobId] IS NULL) OR ([JobId] = @Original_JobId)) AND ((@IsNull_JobResult = 1 AND [JobResult] IS NULL) OR ([JobResult] = @Original_JobResult)) AND ((@IsNull_ResourceId = 1 AND [ResourceId] IS NULL) OR ([ResourceId] = @Original_ResourceId)));
+SELECT JobResultId, JobId, JobResult, ResourceId FROM JobResult WHERE (JobResultId = @JobResultId)";
+            this._adapter.UpdateCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@JobId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@JobResult", global::System.Data.SqlDbType.VarBinary, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobResult", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_JobResultId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobResultId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_JobId", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobId", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_JobId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_JobResult", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobResult", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_JobResult", global::System.Data.SqlDbType.VarBinary, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobResult", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_ResourceId", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@JobResultId", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "JobResultId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitConnection() {
+            this._connection = new global::System.Data.SqlClient.SqlConnection();
+            this._connection.ConnectionString = global::HeuristicLab.Hive.Server.ADODataAccess.Properties.Settings.Default.HiveServerConnectionString;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitCommandCollection() {
+            this._commandCollection = new global::System.Data.SqlClient.SqlCommand[1];
+            this._commandCollection[0] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[0].Connection = this.Connection;
+            this._commandCollection[0].CommandText = "SELECT JobResultId, JobId, JobResult, ResourceId FROM dbo.JobResult";
+            this._commandCollection[0].CommandType = global::System.Data.CommandType.Text;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, true)]
+        public virtual int Fill(dsHiveServer.JobResultDataTable dataTable) {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, true)]
+        public virtual dsHiveServer.JobResultDataTable GetData() {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            dsHiveServer.JobResultDataTable dataTable = new dsHiveServer.JobResultDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer.JobResultDataTable dataTable) {
+            return this.Adapter.Update(dataTable);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer dataSet) {
+            return this.Adapter.Update(dataSet, "JobResult");
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow dataRow) {
+            return this.Adapter.Update(new global::System.Data.DataRow[] {
+                        dataRow});
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow[] dataRows) {
+            return this.Adapter.Update(dataRows);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Delete, true)]
+        public virtual int Delete(long Original_JobResultId, global::System.Nullable<long> Original_JobId, byte[] Original_JobResult, global::System.Nullable<long> Original_ResourceId) {
+            this.Adapter.DeleteCommand.Parameters[0].Value = ((long)(Original_JobResultId));
+            if ((Original_JobId.HasValue == true)) {
+                this.Adapter.DeleteCommand.Parameters[1].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[2].Value = ((long)(Original_JobId.Value));
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[1].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[2].Value = global::System.DBNull.Value;
+            }
+            if ((Original_JobResult == null)) {
+                this.Adapter.DeleteCommand.Parameters[3].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[4].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[3].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[4].Value = ((byte[])(Original_JobResult));
+            }
+            if ((Original_ResourceId.HasValue == true)) {
+                this.Adapter.DeleteCommand.Parameters[5].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[6].Value = ((long)(Original_ResourceId.Value));
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[5].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[6].Value = global::System.DBNull.Value;
+            }
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.DeleteCommand.Connection.State;
+            if (((this.Adapter.DeleteCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.DeleteCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.DeleteCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.DeleteCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Insert, true)]
+        public virtual int Insert(global::System.Nullable<long> JobId, byte[] JobResult, global::System.Nullable<long> ResourceId) {
+            if ((JobId.HasValue == true)) {
+                this.Adapter.InsertCommand.Parameters[0].Value = ((long)(JobId.Value));
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            if ((JobResult == null)) {
+                this.Adapter.InsertCommand.Parameters[1].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[1].Value = ((byte[])(JobResult));
+            }
+            if ((ResourceId.HasValue == true)) {
+                this.Adapter.InsertCommand.Parameters[2].Value = ((long)(ResourceId.Value));
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[2].Value = global::System.DBNull.Value;
+            }
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.InsertCommand.Connection.State;
+            if (((this.Adapter.InsertCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.InsertCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.InsertCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.InsertCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(global::System.Nullable<long> JobId, byte[] JobResult, global::System.Nullable<long> ResourceId, long Original_JobResultId, global::System.Nullable<long> Original_JobId, byte[] Original_JobResult, global::System.Nullable<long> Original_ResourceId, long JobResultId) {
+            if ((JobId.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[0].Value = ((long)(JobId.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            if ((JobResult == null)) {
+                this.Adapter.UpdateCommand.Parameters[1].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[1].Value = ((byte[])(JobResult));
+            }
+            if ((ResourceId.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[2].Value = ((long)(ResourceId.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[2].Value = global::System.DBNull.Value;
+            }
+            this.Adapter.UpdateCommand.Parameters[3].Value = ((long)(Original_JobResultId));
+            if ((Original_JobId.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[4].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[5].Value = ((long)(Original_JobId.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[4].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[5].Value = global::System.DBNull.Value;
+            }
+            if ((Original_JobResult == null)) {
+                this.Adapter.UpdateCommand.Parameters[6].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[7].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[6].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[7].Value = ((byte[])(Original_JobResult));
+            }
+            if ((Original_ResourceId.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[8].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[9].Value = ((long)(Original_ResourceId.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[8].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[9].Value = global::System.DBNull.Value;
+            }
+            this.Adapter.UpdateCommand.Parameters[10].Value = ((long)(JobResultId));
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.UpdateCommand.Connection.State;
+            if (((this.Adapter.UpdateCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.UpdateCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.UpdateCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.UpdateCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(global::System.Nullable<long> JobId, byte[] JobResult, global::System.Nullable<long> ResourceId, long Original_JobResultId, global::System.Nullable<long> Original_JobId, byte[] Original_JobResult, global::System.Nullable<long> Original_ResourceId) {
+            return this.Update(JobId, JobResult, ResourceId, Original_JobResultId, Original_JobId, Original_JobResult, Original_ResourceId, Original_JobResultId);
+        }
+    }
+    
+    /// <summary>
     ///TableAdapterManager is used to coordinate TableAdapters in the dataset to enable Hierarchical Update scenarios
     ///</summary>
@@ -7837,4 +8681,6 @@
         private ClientGroup_ResourceTableAdapter _clientGroup_ResourceTableAdapter;
         
+        private JobResultTableAdapter _jobResultTableAdapter;
+        
         private bool _backupDataSetBeforeUpdate;
         
@@ -7969,4 +8815,17 @@
         
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.EditorAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterManagerPropertyEditor, Microso" +
+            "ft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" +
+            "", "System.Drawing.Design.UITypeEditor")]
+        public JobResultTableAdapter JobResultTableAdapter {
+            get {
+                return this._jobResultTableAdapter;
+            }
+            set {
+                this._jobResultTableAdapter = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
         public bool BackupDataSetBeforeUpdate {
             get {
@@ -8020,4 +8879,8 @@
                             && (this._clientGroup_ResourceTableAdapter.Connection != null))) {
                     return this._clientGroup_ResourceTableAdapter.Connection;
+                }
+                if (((this._jobResultTableAdapter != null) 
+                            && (this._jobResultTableAdapter.Connection != null))) {
+                    return this._jobResultTableAdapter.Connection;
                 }
                 return null;
@@ -8058,4 +8921,7 @@
                 }
                 if ((this._clientGroup_ResourceTableAdapter != null)) {
+                    count = (count + 1);
+                }
+                if ((this._jobResultTableAdapter != null)) {
                     count = (count + 1);
                 }
@@ -8088,4 +8954,22 @@
                 }
             }
+            if ((this._hiveUserTableAdapter != null)) {
+                global::System.Data.DataRow[] updatedRows = dataSet.HiveUser.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
+                updatedRows = this.GetRealUpdatedRows(updatedRows, allAddedRows);
+                if (((updatedRows != null) 
+                            && (0 < updatedRows.Length))) {
+                    result = (result + this._hiveUserTableAdapter.Update(updatedRows));
+                    allChangedRows.AddRange(updatedRows);
+                }
+            }
+            if ((this._clientTableAdapter != null)) {
+                global::System.Data.DataRow[] updatedRows = dataSet.Client.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
+                updatedRows = this.GetRealUpdatedRows(updatedRows, allAddedRows);
+                if (((updatedRows != null) 
+                            && (0 < updatedRows.Length))) {
+                    result = (result + this._clientTableAdapter.Update(updatedRows));
+                    allChangedRows.AddRange(updatedRows);
+                }
+            }
             if ((this._clientGroupTableAdapter != null)) {
                 global::System.Data.DataRow[] updatedRows = dataSet.ClientGroup.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
@@ -8097,4 +8981,13 @@
                 }
             }
+            if ((this._jobTableAdapter != null)) {
+                global::System.Data.DataRow[] updatedRows = dataSet.Job.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
+                updatedRows = this.GetRealUpdatedRows(updatedRows, allAddedRows);
+                if (((updatedRows != null) 
+                            && (0 < updatedRows.Length))) {
+                    result = (result + this._jobTableAdapter.Update(updatedRows));
+                    allChangedRows.AddRange(updatedRows);
+                }
+            }
             if ((this._userGroupTableAdapter != null)) {
                 global::System.Data.DataRow[] updatedRows = dataSet.UserGroup.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
@@ -8106,19 +8999,10 @@
                 }
             }
-            if ((this._clientTableAdapter != null)) {
-                global::System.Data.DataRow[] updatedRows = dataSet.Client.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
+            if ((this._jobResultTableAdapter != null)) {
+                global::System.Data.DataRow[] updatedRows = dataSet.JobResult.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
                 updatedRows = this.GetRealUpdatedRows(updatedRows, allAddedRows);
                 if (((updatedRows != null) 
                             && (0 < updatedRows.Length))) {
-                    result = (result + this._clientTableAdapter.Update(updatedRows));
-                    allChangedRows.AddRange(updatedRows);
-                }
-            }
-            if ((this._hiveUserTableAdapter != null)) {
-                global::System.Data.DataRow[] updatedRows = dataSet.HiveUser.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
-                updatedRows = this.GetRealUpdatedRows(updatedRows, allAddedRows);
-                if (((updatedRows != null) 
-                            && (0 < updatedRows.Length))) {
-                    result = (result + this._hiveUserTableAdapter.Update(updatedRows));
+                    result = (result + this._jobResultTableAdapter.Update(updatedRows));
                     allChangedRows.AddRange(updatedRows);
                 }
@@ -8130,13 +9014,4 @@
                             && (0 < updatedRows.Length))) {
                     result = (result + this._clientGroup_ResourceTableAdapter.Update(updatedRows));
-                    allChangedRows.AddRange(updatedRows);
-                }
-            }
-            if ((this._jobTableAdapter != null)) {
-                global::System.Data.DataRow[] updatedRows = dataSet.Job.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
-                updatedRows = this.GetRealUpdatedRows(updatedRows, allAddedRows);
-                if (((updatedRows != null) 
-                            && (0 < updatedRows.Length))) {
-                    result = (result + this._jobTableAdapter.Update(updatedRows));
                     allChangedRows.AddRange(updatedRows);
                 }
@@ -8176,4 +9051,20 @@
                 }
             }
+            if ((this._hiveUserTableAdapter != null)) {
+                global::System.Data.DataRow[] addedRows = dataSet.HiveUser.Select(null, null, global::System.Data.DataViewRowState.Added);
+                if (((addedRows != null) 
+                            && (0 < addedRows.Length))) {
+                    result = (result + this._hiveUserTableAdapter.Update(addedRows));
+                    allAddedRows.AddRange(addedRows);
+                }
+            }
+            if ((this._clientTableAdapter != null)) {
+                global::System.Data.DataRow[] addedRows = dataSet.Client.Select(null, null, global::System.Data.DataViewRowState.Added);
+                if (((addedRows != null) 
+                            && (0 < addedRows.Length))) {
+                    result = (result + this._clientTableAdapter.Update(addedRows));
+                    allAddedRows.AddRange(addedRows);
+                }
+            }
             if ((this._clientGroupTableAdapter != null)) {
                 global::System.Data.DataRow[] addedRows = dataSet.ClientGroup.Select(null, null, global::System.Data.DataViewRowState.Added);
@@ -8184,4 +9075,12 @@
                 }
             }
+            if ((this._jobTableAdapter != null)) {
+                global::System.Data.DataRow[] addedRows = dataSet.Job.Select(null, null, global::System.Data.DataViewRowState.Added);
+                if (((addedRows != null) 
+                            && (0 < addedRows.Length))) {
+                    result = (result + this._jobTableAdapter.Update(addedRows));
+                    allAddedRows.AddRange(addedRows);
+                }
+            }
             if ((this._userGroupTableAdapter != null)) {
                 global::System.Data.DataRow[] addedRows = dataSet.UserGroup.Select(null, null, global::System.Data.DataViewRowState.Added);
@@ -8192,17 +9091,9 @@
                 }
             }
-            if ((this._clientTableAdapter != null)) {
-                global::System.Data.DataRow[] addedRows = dataSet.Client.Select(null, null, global::System.Data.DataViewRowState.Added);
+            if ((this._jobResultTableAdapter != null)) {
+                global::System.Data.DataRow[] addedRows = dataSet.JobResult.Select(null, null, global::System.Data.DataViewRowState.Added);
                 if (((addedRows != null) 
                             && (0 < addedRows.Length))) {
-                    result = (result + this._clientTableAdapter.Update(addedRows));
-                    allAddedRows.AddRange(addedRows);
-                }
-            }
-            if ((this._hiveUserTableAdapter != null)) {
-                global::System.Data.DataRow[] addedRows = dataSet.HiveUser.Select(null, null, global::System.Data.DataViewRowState.Added);
-                if (((addedRows != null) 
-                            && (0 < addedRows.Length))) {
-                    result = (result + this._hiveUserTableAdapter.Update(addedRows));
+                    result = (result + this._jobResultTableAdapter.Update(addedRows));
                     allAddedRows.AddRange(addedRows);
                 }
@@ -8213,12 +9104,4 @@
                             && (0 < addedRows.Length))) {
                     result = (result + this._clientGroup_ResourceTableAdapter.Update(addedRows));
-                    allAddedRows.AddRange(addedRows);
-                }
-            }
-            if ((this._jobTableAdapter != null)) {
-                global::System.Data.DataRow[] addedRows = dataSet.Job.Select(null, null, global::System.Data.DataViewRowState.Added);
-                if (((addedRows != null) 
-                            && (0 < addedRows.Length))) {
-                    result = (result + this._jobTableAdapter.Update(addedRows));
                     allAddedRows.AddRange(addedRows);
                 }
@@ -8249,4 +9132,28 @@
                 }
             }
+            if ((this._clientGroup_ResourceTableAdapter != null)) {
+                global::System.Data.DataRow[] deletedRows = dataSet.ClientGroup_Resource.Select(null, null, global::System.Data.DataViewRowState.Deleted);
+                if (((deletedRows != null) 
+                            && (0 < deletedRows.Length))) {
+                    result = (result + this._clientGroup_ResourceTableAdapter.Update(deletedRows));
+                    allChangedRows.AddRange(deletedRows);
+                }
+            }
+            if ((this._jobResultTableAdapter != null)) {
+                global::System.Data.DataRow[] deletedRows = dataSet.JobResult.Select(null, null, global::System.Data.DataViewRowState.Deleted);
+                if (((deletedRows != null) 
+                            && (0 < deletedRows.Length))) {
+                    result = (result + this._jobResultTableAdapter.Update(deletedRows));
+                    allChangedRows.AddRange(deletedRows);
+                }
+            }
+            if ((this._userGroupTableAdapter != null)) {
+                global::System.Data.DataRow[] deletedRows = dataSet.UserGroup.Select(null, null, global::System.Data.DataViewRowState.Deleted);
+                if (((deletedRows != null) 
+                            && (0 < deletedRows.Length))) {
+                    result = (result + this._userGroupTableAdapter.Update(deletedRows));
+                    allChangedRows.AddRange(deletedRows);
+                }
+            }
             if ((this._jobTableAdapter != null)) {
                 global::System.Data.DataRow[] deletedRows = dataSet.Job.Select(null, null, global::System.Data.DataViewRowState.Deleted);
@@ -8257,9 +9164,17 @@
                 }
             }
-            if ((this._clientGroup_ResourceTableAdapter != null)) {
-                global::System.Data.DataRow[] deletedRows = dataSet.ClientGroup_Resource.Select(null, null, global::System.Data.DataViewRowState.Deleted);
+            if ((this._clientGroupTableAdapter != null)) {
+                global::System.Data.DataRow[] deletedRows = dataSet.ClientGroup.Select(null, null, global::System.Data.DataViewRowState.Deleted);
                 if (((deletedRows != null) 
                             && (0 < deletedRows.Length))) {
-                    result = (result + this._clientGroup_ResourceTableAdapter.Update(deletedRows));
+                    result = (result + this._clientGroupTableAdapter.Update(deletedRows));
+                    allChangedRows.AddRange(deletedRows);
+                }
+            }
+            if ((this._clientTableAdapter != null)) {
+                global::System.Data.DataRow[] deletedRows = dataSet.Client.Select(null, null, global::System.Data.DataViewRowState.Deleted);
+                if (((deletedRows != null) 
+                            && (0 < deletedRows.Length))) {
+                    result = (result + this._clientTableAdapter.Update(deletedRows));
                     allChangedRows.AddRange(deletedRows);
                 }
@@ -8273,28 +9188,4 @@
                 }
             }
-            if ((this._clientTableAdapter != null)) {
-                global::System.Data.DataRow[] deletedRows = dataSet.Client.Select(null, null, global::System.Data.DataViewRowState.Deleted);
-                if (((deletedRows != null) 
-                            && (0 < deletedRows.Length))) {
-                    result = (result + this._clientTableAdapter.Update(deletedRows));
-                    allChangedRows.AddRange(deletedRows);
-                }
-            }
-            if ((this._userGroupTableAdapter != null)) {
-                global::System.Data.DataRow[] deletedRows = dataSet.UserGroup.Select(null, null, global::System.Data.DataViewRowState.Deleted);
-                if (((deletedRows != null) 
-                            && (0 < deletedRows.Length))) {
-                    result = (result + this._userGroupTableAdapter.Update(deletedRows));
-                    allChangedRows.AddRange(deletedRows);
-                }
-            }
-            if ((this._clientGroupTableAdapter != null)) {
-                global::System.Data.DataRow[] deletedRows = dataSet.ClientGroup.Select(null, null, global::System.Data.DataViewRowState.Deleted);
-                if (((deletedRows != null) 
-                            && (0 < deletedRows.Length))) {
-                    result = (result + this._clientGroupTableAdapter.Update(deletedRows));
-                    allChangedRows.AddRange(deletedRows);
-                }
-            }
             if ((this._resourceTableAdapter != null)) {
                 global::System.Data.DataRow[] deletedRows = dataSet.Resource.Select(null, null, global::System.Data.DataViewRowState.Deleted);
@@ -8392,4 +9283,9 @@
             if (((this._clientGroup_ResourceTableAdapter != null) 
                         && (this.MatchTableAdapterConnection(this._clientGroup_ResourceTableAdapter.Connection) == false))) {
+                throw new global::System.ArgumentException("All TableAdapters managed by a TableAdapterManager must use the same connection s" +
+                        "tring.");
+            }
+            if (((this._jobResultTableAdapter != null) 
+                        && (this.MatchTableAdapterConnection(this._jobResultTableAdapter.Connection) == false))) {
                 throw new global::System.ArgumentException("All TableAdapters managed by a TableAdapterManager must use the same connection s" +
                         "tring.");
@@ -8506,4 +9402,13 @@
                         this._clientGroup_ResourceTableAdapter.Adapter.AcceptChangesDuringUpdate = false;
                         adaptersWithAcceptChangesDuringUpdate.Add(this._clientGroup_ResourceTableAdapter.Adapter);
+                    }
+                }
+                if ((this._jobResultTableAdapter != null)) {
+                    revertConnections.Add(this._jobResultTableAdapter, this._jobResultTableAdapter.Connection);
+                    this._jobResultTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(workConnection));
+                    this._jobResultTableAdapter.Transaction = ((global::System.Data.SqlClient.SqlTransaction)(workTransaction));
+                    if (this._jobResultTableAdapter.Adapter.AcceptChangesDuringUpdate) {
+                        this._jobResultTableAdapter.Adapter.AcceptChangesDuringUpdate = false;
+                        adaptersWithAcceptChangesDuringUpdate.Add(this._jobResultTableAdapter.Adapter);
                     }
                 }
@@ -8602,4 +9507,8 @@
                     this._clientGroup_ResourceTableAdapter.Transaction = null;
                 }
+                if ((this._jobResultTableAdapter != null)) {
+                    this._jobResultTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(revertConnections[this._jobResultTableAdapter]));
+                    this._jobResultTableAdapter.Transaction = null;
+                }
                 if ((0 < adaptersWithAcceptChangesDuringUpdate.Count)) {
                     global::System.Data.Common.DataAdapter[] adapters = new System.Data.Common.DataAdapter[adaptersWithAcceptChangesDuringUpdate.Count];
Index: /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.xsd
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.xsd	(revision 999)
+++ /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.xsd	(revision 1000)
@@ -762,4 +762,67 @@
               </DbSource>
             </Sources>
+          </TableAdapter>
+          <TableAdapter BaseClass="System.ComponentModel.Component" DataAccessorModifier="AutoLayout, AnsiClass, Class, Public" DataAccessorName="JobResultTableAdapter" GeneratorDataComponentClassName="JobResultTableAdapter" Name="JobResult" UserDataComponentName="JobResultTableAdapter">
+            <MainSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.JobResult" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="Fill" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetData" GeneratorSourceName="Fill" GetMethodModifier="Public" GetMethodName="GetData" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetData" UserSourceName="Fill">
+                <DeleteCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>DELETE FROM [dbo].[JobResult] WHERE (([JobResultId] = @Original_JobResultId) AND ((@IsNull_JobId = 1 AND [JobId] IS NULL) OR ([JobId] = @Original_JobId)) AND ((@IsNull_JobResult = 1 AND [JobResult] IS NULL) OR ([JobResult] = @Original_JobResult)) AND ((@IsNull_ResourceId = 1 AND [ResourceId] IS NULL) OR ([ResourceId] = @Original_ResourceId)))</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_JobResultId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="JobResultId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_JobId" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="JobId" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_JobId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="JobId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_JobResult" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="JobResult" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Binary" Direction="Input" ParameterName="@Original_JobResult" Precision="0" ProviderType="VarBinary" Scale="0" Size="0" SourceColumn="JobResult" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_ResourceId" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                    </Parameters>
+                  </DbCommand>
+                </DeleteCommand>
+                <InsertCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>INSERT INTO [dbo].[JobResult] ([JobId], [JobResult], [ResourceId]) VALUES (@JobId, @JobResult, @ResourceId);
+SELECT JobResultId, JobId, JobResult, ResourceId FROM JobResult WHERE (JobResultId = SCOPE_IDENTITY())</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@JobId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="JobId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Binary" Direction="Input" ParameterName="@JobResult" Precision="0" ProviderType="VarBinary" Scale="0" Size="0" SourceColumn="JobResult" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </InsertCommand>
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>SELECT JobResultId, JobId, JobResult, ResourceId FROM dbo.JobResult</CommandText>
+                    <Parameters />
+                  </DbCommand>
+                </SelectCommand>
+                <UpdateCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>UPDATE [dbo].[JobResult] SET [JobId] = @JobId, [JobResult] = @JobResult, [ResourceId] = @ResourceId WHERE (([JobResultId] = @Original_JobResultId) AND ((@IsNull_JobId = 1 AND [JobId] IS NULL) OR ([JobId] = @Original_JobId)) AND ((@IsNull_JobResult = 1 AND [JobResult] IS NULL) OR ([JobResult] = @Original_JobResult)) AND ((@IsNull_ResourceId = 1 AND [ResourceId] IS NULL) OR ([ResourceId] = @Original_ResourceId)));
+SELECT JobResultId, JobId, JobResult, ResourceId FROM JobResult WHERE (JobResultId = @JobResultId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@JobId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="JobId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Binary" Direction="Input" ParameterName="@JobResult" Precision="0" ProviderType="VarBinary" Scale="0" Size="0" SourceColumn="JobResult" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_JobResultId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="JobResultId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_JobId" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="JobId" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_JobId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="JobId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_JobResult" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="JobResult" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Binary" Direction="Input" ParameterName="@Original_JobResult" Precision="0" ProviderType="VarBinary" Scale="0" Size="0" SourceColumn="JobResult" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_ResourceId" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="JobResultId" ColumnName="JobResultId" DataSourceName="" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@JobResultId" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="JobResultId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </UpdateCommand>
+              </DbSource>
+            </MainSource>
+            <Mappings>
+              <Mapping SourceColumn="JobResultId" DataSetColumn="JobResultId" />
+              <Mapping SourceColumn="JobId" DataSetColumn="JobId" />
+              <Mapping SourceColumn="JobResult" DataSetColumn="JobResult" />
+              <Mapping SourceColumn="ResourceId" DataSetColumn="ResourceId" />
+            </Mappings>
+            <Sources />
           </TableAdapter>
         </Tables>
@@ -880,4 +943,14 @@
           </xs:complexType>
         </xs:element>
+        <xs:element name="JobResult" msprop:Generator_UserTableName="JobResult" msprop:Generator_RowDeletedName="JobResultRowDeleted" msprop:Generator_TableClassName="JobResultDataTable" msprop:Generator_RowChangedName="JobResultRowChanged" msprop:Generator_RowClassName="JobResultRow" msprop:Generator_RowChangingName="JobResultRowChanging" msprop:Generator_RowEvArgName="JobResultRowChangeEvent" msprop:Generator_RowEvHandlerName="JobResultRowChangeEventHandler" msprop:Generator_TablePropName="JobResult" msprop:Generator_TableVarName="tableJobResult" msprop:Generator_RowDeletingName="JobResultRowDeleting">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name="JobResultId" msdata:ReadOnly="true" msdata:AutoIncrement="true" msdata:AutoIncrementSeed="-1" msdata:AutoIncrementStep="-1" msprop:Generator_UserColumnName="JobResultId" msprop:Generator_ColumnPropNameInRow="JobResultId" msprop:Generator_ColumnVarNameInTable="columnJobResultId" msprop:Generator_ColumnPropNameInTable="JobResultIdColumn" type="xs:long" />
+              <xs:element name="JobId" msprop:Generator_UserColumnName="JobId" msprop:Generator_ColumnPropNameInRow="JobId" msprop:Generator_ColumnVarNameInTable="columnJobId" msprop:Generator_ColumnPropNameInTable="JobIdColumn" type="xs:long" minOccurs="0" />
+              <xs:element name="JobResult" msprop:Generator_UserColumnName="JobResult" msprop:Generator_ColumnPropNameInRow="JobResult" msprop:Generator_ColumnVarNameInTable="columnJobResult" msprop:Generator_ColumnPropNameInTable="JobResultColumn" type="xs:base64Binary" minOccurs="0" />
+              <xs:element name="ResourceId" msprop:Generator_UserColumnName="ResourceId" msprop:Generator_ColumnPropNameInRow="ResourceId" msprop:Generator_ColumnVarNameInTable="columnResourceId" msprop:Generator_ColumnPropNameInTable="ResourceIdColumn" type="xs:long" minOccurs="0" />
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
       </xs:choice>
     </xs:complexType>
@@ -920,4 +993,8 @@
       <xs:field xpath="mstns:ResourceId" />
     </xs:unique>
+    <xs:unique name="JobResult_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true">
+      <xs:selector xpath=".//mstns:JobResult" />
+      <xs:field xpath="mstns:JobResultId" />
+    </xs:unique>
   </xs:element>
   <xs:annotation>
@@ -933,4 +1010,5 @@
       <msdata:Relationship name="R_52" msdata:parent="ClientGroup" msdata:child="ClientGroup_Resource" msdata:parentkey="ResourceId" msdata:childkey="ClientGroupId" msprop:Generator_UserRelationName="R_52" msprop:Generator_RelationVarName="relationR_52" msprop:Generator_UserChildTable="ClientGroup_Resource" msprop:Generator_UserParentTable="ClientGroup" msprop:Generator_ParentPropName="ClientGroupRow" msprop:Generator_ChildPropName="GetClientGroup_ResourceRows" />
       <msdata:Relationship name="R_59" msdata:parent="Resource" msdata:child="ClientGroup_Resource" msdata:parentkey="ResourceId" msdata:childkey="ResourceId" msprop:Generator_UserRelationName="R_59" msprop:Generator_RelationVarName="relationR_59" msprop:Generator_UserChildTable="ClientGroup_Resource" msprop:Generator_UserParentTable="Resource" msprop:Generator_ParentPropName="ResourceRow" msprop:Generator_ChildPropName="GetClientGroup_ResourceRows" />
+      <msdata:Relationship name="R_14" msdata:parent="Job" msdata:child="JobResult" msdata:parentkey="JobId" msdata:childkey="JobId" msprop:Generator_UserRelationName="R_14" msprop:Generator_RelationVarName="relationR_14" msprop:Generator_UserChildTable="JobResult" msprop:Generator_UserParentTable="Job" msprop:Generator_ParentPropName="JobRow" msprop:Generator_ChildPropName="GetJobResultRows" />
     </xs:appinfo>
   </xs:annotation>
Index: /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.xss
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.xss	(revision 999)
+++ /trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.xss	(revision 1000)
@@ -5,18 +5,19 @@
      the code is regenerated.
 </autogenerated>-->
-<DiagramLayout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ex:showrelationlabel="False" ViewPortX="-220" ViewPortY="130" xmlns:ex="urn:schemas-microsoft-com:xml-msdatasource-layout-extended" xmlns="urn:schemas-microsoft-com:xml-msdatasource-layout">
+<DiagramLayout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ex:showrelationlabel="False" ViewPortX="-285" ViewPortY="130" xmlns:ex="urn:schemas-microsoft-com:xml-msdatasource-layout-extended" xmlns="urn:schemas-microsoft-com:xml-msdatasource-layout">
   <Shapes>
-    <Shape ID="DesignTable:Resource" ZOrder="18" X="31" Y="-16" Height="156" Width="226" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="58" />
-    <Shape ID="DesignTable:Client" ZOrder="5" X="-210" Y="176" Height="258" Width="265" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="160" />
-    <Shape ID="DesignTable:HiveUser" ZOrder="15" X="885" Y="224" Height="139" Width="226" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="58" />
-    <Shape ID="DesignTable:PermissionOwner" ZOrder="14" X="572" Y="-7" Height="139" Width="242" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="58" />
-    <Shape ID="DesignTable:UserGroup" ZOrder="8" X="566" Y="409" Height="123" Width="226" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="42" />
-    <Shape ID="DesignTable:PermissionOwner_UserGroup" ZOrder="6" X="456" Y="215" Height="156" Width="300" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="58" />
-    <Shape ID="DesignTable:ClientGroup" ZOrder="7" X="78" Y="417" Height="106" Width="209" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="42" />
-    <Shape ID="DesignTable:Job" ZOrder="9" X="-22" Y="543" Height="224" Width="281" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="109" />
-    <Shape ID="DesignTable:ClientGroup_Resource" ZOrder="4" X="150" Y="207" Height="156" Width="300" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="58" />
+    <Shape ID="DesignTable:Resource" ZOrder="20" X="31" Y="-16" Height="156" Width="226" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="58" />
+    <Shape ID="DesignTable:Client" ZOrder="7" X="-210" Y="176" Height="258" Width="265" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="160" />
+    <Shape ID="DesignTable:HiveUser" ZOrder="17" X="885" Y="224" Height="139" Width="226" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="58" />
+    <Shape ID="DesignTable:PermissionOwner" ZOrder="16" X="572" Y="-7" Height="139" Width="242" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="58" />
+    <Shape ID="DesignTable:UserGroup" ZOrder="10" X="566" Y="409" Height="123" Width="226" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="42" />
+    <Shape ID="DesignTable:PermissionOwner_UserGroup" ZOrder="8" X="456" Y="215" Height="156" Width="300" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="58" />
+    <Shape ID="DesignTable:ClientGroup" ZOrder="9" X="78" Y="417" Height="106" Width="209" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="42" />
+    <Shape ID="DesignTable:Job" ZOrder="11" X="-22" Y="543" Height="224" Width="281" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="109" />
+    <Shape ID="DesignTable:ClientGroup_Resource" ZOrder="6" X="150" Y="207" Height="156" Width="300" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="58" />
+    <Shape ID="DesignTable:JobResult" ZOrder="2" X="-274" Y="567" Height="139" Width="197" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="92" />
   </Shapes>
   <Connectors>
-    <Connector ID="DesignRelation:Client_is_a_Resource" ZOrder="19" LineWidth="11">
+    <Connector ID="DesignRelation:Client_is_a_Resource" ZOrder="21" LineWidth="11">
       <RoutePoints>
         <Point>
@@ -30,5 +31,5 @@
       </RoutePoints>
     </Connector>
-    <Connector ID="DesignRelation:User_is_a_PermissionOwner" ZOrder="11" LineWidth="11">
+    <Connector ID="DesignRelation:User_is_a_PermissionOwner" ZOrder="13" LineWidth="11">
       <RoutePoints>
         <Point>
@@ -46,5 +47,5 @@
       </RoutePoints>
     </Connector>
-    <Connector ID="DesignRelation:UserGroup_is_a_PermissionOwner" ZOrder="16" LineWidth="11">
+    <Connector ID="DesignRelation:UserGroup_is_a_PermissionOwner" ZOrder="18" LineWidth="11">
       <RoutePoints>
         <Point>
@@ -62,5 +63,5 @@
       </RoutePoints>
     </Connector>
-    <Connector ID="DesignRelation:R_44" ZOrder="12" LineWidth="11">
+    <Connector ID="DesignRelation:R_44" ZOrder="14" LineWidth="11">
       <RoutePoints>
         <Point>
@@ -74,5 +75,5 @@
       </RoutePoints>
     </Connector>
-    <Connector ID="DesignRelation:R_57" ZOrder="17" LineWidth="11">
+    <Connector ID="DesignRelation:R_57" ZOrder="19" LineWidth="11">
       <RoutePoints>
         <Point>
@@ -86,5 +87,5 @@
       </RoutePoints>
     </Connector>
-    <Connector ID="DesignRelation:ClientGroup_is_a_Resource" ZOrder="13" LineWidth="11">
+    <Connector ID="DesignRelation:ClientGroup_is_a_Resource" ZOrder="15" LineWidth="11">
       <RoutePoints>
         <Point>
@@ -98,5 +99,5 @@
       </RoutePoints>
     </Connector>
-    <Connector ID="DesignRelation:R_21" ZOrder="10" LineWidth="11">
+    <Connector ID="DesignRelation:R_21" ZOrder="12" LineWidth="11">
       <RoutePoints>
         <Point>
@@ -110,5 +111,5 @@
       </RoutePoints>
     </Connector>
-    <Connector ID="DesignRelation:R_35" ZOrder="1" LineWidth="11">
+    <Connector ID="DesignRelation:R_35" ZOrder="3" LineWidth="11">
       <RoutePoints>
         <Point>
@@ -126,5 +127,5 @@
       </RoutePoints>
     </Connector>
-    <Connector ID="DesignRelation:R_52" ZOrder="3" LineWidth="11">
+    <Connector ID="DesignRelation:R_52" ZOrder="5" LineWidth="11">
       <RoutePoints>
         <Point>
@@ -142,5 +143,5 @@
       </RoutePoints>
     </Connector>
-    <Connector ID="DesignRelation:R_59" ZOrder="2" LineWidth="11">
+    <Connector ID="DesignRelation:R_59" ZOrder="4" LineWidth="11">
       <RoutePoints>
         <Point>
@@ -158,4 +159,20 @@
       </RoutePoints>
     </Connector>
+    <Connector ID="DesignRelation:R_14" ZOrder="1" LineWidth="11">
+      <RoutePoints>
+        <Point>
+          <X>-22</X>
+          <Y>732</Y>
+        </Point>
+        <Point>
+          <X>-124</X>
+          <Y>732</Y>
+        </Point>
+        <Point>
+          <X>-124</X>
+          <Y>706</Y>
+        </Point>
+      </RoutePoints>
+    </Connector>
   </Connectors>
 </DiagramLayout>
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/HeuristicLab.Hive.Server.Core.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/HeuristicLab.Hive.Server.Core.csproj	(revision 999)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/HeuristicLab.Hive.Server.Core.csproj	(revision 1000)
@@ -75,4 +75,5 @@
     <Compile Include="InternalInterfaces\DataAccess\IDataAdapter.cs" />
     <Compile Include="InternalInterfaces\DataAccess\IJobAdapter.cs" />
+    <Compile Include="InternalInterfaces\DataAccess\IJobResultsAdapter.cs" />
     <Compile Include="InternalInterfaces\DataAccess\IPermissionOwnerAdapter.cs" />
     <Compile Include="InternalInterfaces\DataAccess\IResourceAdapter.cs" />
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IJobAdapter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IJobAdapter.cs	(revision 999)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IJobAdapter.cs	(revision 1000)
@@ -35,11 +35,4 @@
 
     /// <summary>
-    /// Gets the result of a job
-    /// </summary>
-    /// <param name="job"></param>
-    /// <returns></returns>
-    JobResult GetResult(Job job);
-
-    /// <summary>
     /// Gets all Jobs with the specified state
     /// </summary>
Index: /trunk/sources/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IJobResultsAdapter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IJobResultsAdapter.cs	(revision 1000)
+++ /trunk/sources/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IJobResultsAdapter.cs	(revision 1000)
@@ -0,0 +1,37 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess {
+  public interface IJobResultsAdapter: IDataAdapter<JobResult> {
+    /// <summary>
+    /// Gets all results for the specified job
+    /// </summary>
+    /// <param name="job"></param>
+    /// <returns></returns>
+    ICollection<JobResult> GetResultsOf(Job job);
+  }
+}
