Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab 3.3.vsmdi
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab 3.3.vsmdi	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab 3.3.vsmdi	(revision 4340)
@@ -0,0 +1,6 @@
+﻿<?xml version="1.0" encoding="UTF-8"?>
+<TestLists xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
+  <TestList name="Lists of Tests" id="8c43106b-9dc1-4907-a29f-aa66a61bf5b6">
+    <RunConfiguration id="f9392825-866f-4434-be36-358db28f0c59" name="Local Test Run" storage="localtestrun.testrunconfig" type="Microsoft.VisualStudio.TestTools.Common.TestRunConfiguration, Microsoft.VisualStudio.QualityTools.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  </TestList>
+</TestLists>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Appointment/Appointment.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Appointment/Appointment.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Appointment/Appointment.cs	(revision 4340)
@@ -0,0 +1,253 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Windows.Forms;
+using System.Diagnostics;
+using System.Data;
+using System.Xml.Serialization;
+
+namespace HeuristicLab.Calendar
+{
+	public class Appointment : iAppointment
+    {
+
+		#region " Private Fields "
+		private int layer;
+		private string group;
+		private DateTime startDate;
+		private DateTime endDate;
+		private bool locked;
+		private Color color = Color.White;
+		private Color textColor = Color.Black;
+		private int appointmentId = 0;
+		private Color borderColor = Color.Blue;
+		private bool drawBorder = false;
+		private string subject = string.Empty;
+		private bool allDayEvent = false;
+		private bool reccuringEvent = false;
+    private Guid reccuringID = Guid.Empty;
+		internal int conflictCount;
+		#endregion
+
+
+        public Appointment()
+        {
+			color = Color.White;
+			borderColor = Color.Blue;
+			Subject = "New Appointment";
+		}
+
+		#region " Public Properties "
+        [XmlIgnore]
+		public int Layer
+        {
+            get { return layer; }
+            set { layer = value; }
+        }
+
+        [XmlIgnore]
+        public string Group
+        {
+            get { return group; }
+            set { group = value; }
+        }
+
+        [XmlAttribute("Locked")]
+        [System.ComponentModel.DefaultValue(false)]
+        public bool Locked
+        {
+            get
+            {
+                return locked;
+            }
+            set
+            {
+                locked = value;
+                OnLockedChanged();
+            }
+        }
+
+        [XmlIgnore]
+        public Color Color
+		{
+			get
+			{
+				return color;
+			}
+			set
+			{
+				color = value;
+				OnColorChanged();
+			}
+		}
+
+        [XmlIgnore]
+        public Color TextColor
+        {
+            get
+            {
+                return textColor;
+            }
+            set
+            {
+                textColor = value;
+                OnTextColorChanged();
+            }
+        }
+
+        [XmlIgnore]
+		public Color BorderColor
+		{
+			get
+			{
+				return borderColor;
+			}
+			set
+			{
+				borderColor = value;
+				OnBorderColorChanged();
+			}
+		}
+
+        [XmlIgnore]
+		public bool DrawBorder
+        {
+            get
+            {
+                return drawBorder;
+            }
+            set
+            {
+                drawBorder = value;
+            }
+        }
+
+        [XmlAttribute("AllDayEvent")]
+        public bool AllDayEvent
+        {
+            get
+            {
+                return allDayEvent;
+            }
+            set
+            {
+                allDayEvent = value;
+                OnAllDayEventChanged();
+            }
+        }
+
+        [XmlAttribute("Recurring")]
+		public bool Recurring
+		{
+			get
+			{
+				return reccuringEvent;
+			}
+			set
+			{
+				reccuringEvent = value;
+			}
+		}
+        [XmlAttribute("RecurringId")]
+    public Guid RecurringId {
+      get {
+        return reccuringID;
+      }
+      set {
+        reccuringID = value;
+      }
+    }
+		#endregion
+
+		#region " Events "
+		protected virtual void OnStartDateChanged()
+		{
+		}
+		protected virtual void OnEndDateChanged()
+		{
+		}
+		protected virtual void OnLockedChanged()
+		{
+		}
+		protected virtual void OnColorChanged()
+		{
+		}
+		protected virtual void OnTextColorChanged()
+		{
+		}
+		protected virtual void OnBorderColorChanged()
+		{
+		}
+		protected virtual void OnTitleChanged()
+		{
+		}
+		protected virtual void OnAllDayEventChanged()
+		{
+		}
+		#endregion
+
+		#region iAppointment Members
+        [XmlAttribute("StartDate")]
+		public DateTime StartDate
+		{
+			get
+			{
+				return startDate;
+			}
+			set
+			{
+				startDate = value;
+				OnStartDateChanged();
+
+			}
+		}
+
+        [XmlAttribute("EndDate")]
+		public DateTime EndDate
+		{
+			get
+			{
+				return endDate;
+			}
+			set
+			{
+				endDate = value;
+				OnEndDateChanged();
+			}
+		}
+
+        [XmlIgnore]
+		public int AppointmentId
+		{
+			get
+			{
+				return appointmentId;
+			}
+			set
+			{
+				appointmentId = value;
+			}
+		}
+        [XmlElement("Subject")]
+		public string Subject
+		{
+			get
+			{
+				return subject;
+			}
+			set
+			{
+				subject = value;
+			}
+		}
+
+        [XmlIgnore]
+		public string Location { get; set; }
+
+        [XmlIgnore]
+		public string Note { get; set; }
+		#endregion
+	}
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Appointment/AppointmentEventArgs.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Appointment/AppointmentEventArgs.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Appointment/AppointmentEventArgs.cs	(revision 4340)
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Calendar
+{
+    public class AppointmentEventArgs : EventArgs
+    {
+        public AppointmentEventArgs( Appointment appointment )
+        {
+            m_Appointment = appointment;
+        }
+
+        private Appointment m_Appointment;
+
+        public Appointment Appointment
+        {
+            get { return m_Appointment; }
+        }
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Appointment/AppointmentHieghtDrawMode.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Appointment/AppointmentHieghtDrawMode.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Appointment/AppointmentHieghtDrawMode.cs	(revision 4340)
@@ -0,0 +1,15 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Calendar
+{
+	public enum AppHeightDrawMode
+	{
+		TrueHeightAll = 0, // all appointments have height proportional to true length
+		FullHalfHourBlocksAll = 1, // all appts drawn in half hour blocks
+		EndHalfHourBlocksAll = 2, // all appts boxes start at actual time, end in half hour blocks
+		FullHalfHourBlocksShort = 3, // short (< 30 mins) appts drawn in half hour blocks
+		EndHalfHourBlocksShort = 4, // short appts boxes start at actual time, end in half hour blocks
+	}
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Appointment/AppointmentSlot.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Appointment/AppointmentSlot.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Appointment/AppointmentSlot.cs	(revision 4340)
@@ -0,0 +1,10 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Calendar
+{
+	public class AppointmentSlot
+	{
+	}
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Appointment/AppointmentSlotDuration.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Appointment/AppointmentSlotDuration.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Appointment/AppointmentSlotDuration.cs	(revision 4340)
@@ -0,0 +1,16 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Calendar
+{
+	public enum AppointmentSlotDuration
+	{
+		SixtyMinutes = 1,
+		ThirtyMinutes = 2,
+		TwentyMinutes = 3,
+		FifteenMinutes = 4,
+		TenMinutes = 6,
+		FiveMinutes = 12,	
+	}
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Appointment/NewAppointmentEvent.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Appointment/NewAppointmentEvent.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Appointment/NewAppointmentEvent.cs	(revision 4340)
@@ -0,0 +1,39 @@
+
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Calendar
+{
+    public class NewAppointmentEventArgs : EventArgs
+    {
+        public NewAppointmentEventArgs( string title, DateTime start, DateTime end )
+        {
+            m_Title = title;
+            m_StartDate = start;
+            m_EndDate = end;
+        }
+
+        private string m_Title;
+
+        public string Title
+        {
+            get { return m_Title; }
+        }
+
+        private DateTime m_StartDate;
+
+        public DateTime StartDate
+        {
+            get { return m_StartDate; }
+        }
+
+        private DateTime m_EndDate;
+
+        public DateTime EndDate
+        {
+            get { return m_EndDate; }
+        }
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Appointment/ResolveAppointmentsEvent.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Appointment/ResolveAppointmentsEvent.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Appointment/ResolveAppointmentsEvent.cs	(revision 4340)
@@ -0,0 +1,42 @@
+
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Calendar
+{
+    public class ResolveAppointmentsEventArgs : EventArgs
+    {
+        public ResolveAppointmentsEventArgs(DateTime start, DateTime end)
+        {
+            m_StartDate = start;
+            m_EndDate = end;
+            m_Appointments = new List<Appointment>();
+        }
+
+        private DateTime m_StartDate;
+
+        public DateTime StartDate
+        {
+            get { return m_StartDate; }
+            set { m_StartDate = value; }
+        }
+
+        private DateTime m_EndDate;
+
+        public DateTime EndDate
+        {
+            get { return m_EndDate; }
+            set { m_EndDate = value; }
+        }
+
+        private List<Appointment> m_Appointments;
+
+        public List<Appointment> Appointments
+        {
+            get { return m_Appointments; }
+            set { m_Appointments = value; }
+        }
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Appointment/iAppointment.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Appointment/iAppointment.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Appointment/iAppointment.cs	(revision 4340)
@@ -0,0 +1,16 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Calendar
+{
+	interface iAppointment
+	{
+		int AppointmentId { get; set; }
+		DateTime StartDate { get; set; }
+		DateTime EndDate { get; set; }
+		string Subject { get; set; }
+		string Location { get; set; }
+		string Note { get; set; }
+	}
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/CalendarStorage/iCalendarStorage.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/CalendarStorage/iCalendarStorage.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/CalendarStorage/iCalendarStorage.cs	(revision 4340)
@@ -0,0 +1,9 @@
+﻿using System;
+using System.Collections.Generic;
+
+namespace HeuristicLab.Calendar.DataStorage
+{
+	public interface iCalendarStorage
+	{
+	}
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/DayView.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/DayView.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/DayView.cs	(revision 4340)
@@ -0,0 +1,1632 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using System.Drawing;
+using System.ComponentModel;
+using System.Drawing.Drawing2D;
+
+namespace HeuristicLab.Calendar
+{
+    public class DayView : Control
+    {
+        public DayView()
+        {
+            SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
+            SetStyle(ControlStyles.ResizeRedraw, true);
+            SetStyle(ControlStyles.Selectable, true);
+			SetStyle(ControlStyles.AllPaintingInWmPaint, true);
+			SetStyle(ControlStyles.UserPaint, true);
+
+            scrollbar = new VScrollBar();
+            scrollbar.SmallChange = appointmentSlotHeight;
+            scrollbar.LargeChange = appointmentSlotHeight * 2;
+            scrollbar.Dock = DockStyle.Right;
+            scrollbar.Visible = allowScroll;
+            scrollbar.Scroll += new ScrollEventHandler(scrollbar_Scroll);
+            AdjustScrollbar();
+            scrollbar.Value = (startHour * 2 * appointmentSlotHeight);
+
+            this.Controls.Add(scrollbar);
+
+            editbox = new TextBox();
+            editbox.Multiline = true;
+            editbox.Visible = false;
+            editbox.BorderStyle = BorderStyle.None;
+            editbox.KeyUp += new KeyEventHandler(editbox_KeyUp);
+            editbox.Margin = Padding.Empty;
+
+            this.Controls.Add(editbox);
+
+            drawTool = new DrawTool();
+            drawTool.DayView = this;
+
+            selectionTool = new SelectionTool();
+            selectionTool.DayView = this;
+            selectionTool.Complete += new EventHandler(selectionTool_Complete);
+
+            activeTool = drawTool;
+
+            UpdateWorkingHours();
+
+            this.Renderer = new Office12Renderer();
+        }
+
+		#region " Private Fields "
+		private TextBox editbox;
+		private VScrollBar scrollbar;
+		private DrawTool drawTool;
+		private SelectionTool selectionTool;
+		private int allDayEventsHeaderHeight = 20;
+
+		private DateTime workStart;
+		private DateTime workEnd;
+
+		private int hourLabelWidth = 50;
+		private int hourLabelIndent = 2;
+		private int dayHeadersHeight = 20;
+		private int appointmentGripWidth = 5;
+		private int dayGripWidth = 5;
+		private int horizontalAppointmentHeight = 20;
+
+		private AppHeightDrawMode appHeightMode = AppHeightDrawMode.TrueHeightAll;
+		private int appointmentSlotHeight = 24;
+		private AbstractRenderer renderer;
+		private bool ampmdisplay = false;
+		private bool drawAllAppBorder = false;
+		private bool minHalfHourApp = false;
+		private int daysToShow = 1;
+		private SelectionType selection;
+		private DateTime startDate;
+		private int startHour = 8;
+		private Appointment selectedAppointment;
+		private DateTime selectionStart;
+		private DateTime selectionEnd;
+		private ITool activeTool;
+		private int workingHourStart = 8;
+		private int workingMinuteStart = 30;
+		private int workingHourEnd = 18;
+		private int workingMinuteEnd = 30;
+		private bool selectedAppointmentIsNew;
+		private bool allowScroll = true;
+		private bool allowInplaceEditing = true;
+		private bool allowNew = true;
+		private bool enableShadows = true;
+		private bool enableRoundCorners = false;
+		private bool enableTimeIndicator = false;
+		private bool enableDurationDisplay = false;
+		private AppointmentSlotDuration appointmentSlotDuration = AppointmentSlotDuration.ThirtyMinutes;
+
+		internal System.Collections.Hashtable cachedAppointments = new System.Collections.Hashtable();
+		internal Dictionary<Appointment, AppointmentView> appointmentViews = new Dictionary<Appointment, AppointmentView>();
+		internal Dictionary<Appointment, AppointmentView> longappointmentViews = new Dictionary<Appointment, AppointmentView>();
+		#endregion
+
+		#region Properties
+		[Category("DailyView")]
+		[System.ComponentModel.DefaultValue(5)]
+		public int DayGripWidth
+		{
+			get
+			{
+				return dayGripWidth;
+			}
+			set
+			{
+				if (dayGripWidth == value)
+					return;
+
+				dayGripWidth = value;
+				this.Invalidate();
+			}
+		}
+
+		[Category("DailyView")]
+		[System.ComponentModel.DefaultValue(20)]
+		public int DayHeadersHeight
+		{
+			get
+			{
+				return dayHeadersHeight;
+			}
+			set
+			{
+				if (dayHeadersHeight == value)
+					return;
+
+				dayHeadersHeight = value;
+				this.Invalidate();
+			}
+		}
+		
+		[Category("DailyView")]
+		public bool AmPmDisplay
+        {
+            get
+            {
+                return ampmdisplay;
+            }
+            set
+            {
+				if (ampmdisplay == value)
+					return;
+                ampmdisplay = value;
+                this.Invalidate();
+            }
+        }
+
+		[Category("DailyView")]
+		public bool MinHalfHourApp
+        {
+            get
+            {
+                return minHalfHourApp;
+            }
+            set
+            {
+				if (minHalfHourApp == value)
+					return;
+
+                minHalfHourApp = value;
+                this.Invalidate();
+            }
+        }
+
+		[Category("DailyView")]
+        [System.ComponentModel.DefaultValue(1)]
+        public int DaysToShow
+        {
+            get
+            {
+                return daysToShow;
+            }
+            set
+            {
+				if (daysToShow == value)
+					return;
+                daysToShow = value;
+				
+				if (this.CurrentlyEditing)
+					FinishEditing(true);
+
+				this.Invalidate();
+            }
+        }
+
+		[Category("DailyView")]
+        public DateTime StartDate
+        {
+            get
+            {
+                return startDate;
+            }
+            set
+            {
+				if (startDate == value)
+					return;
+                startDate = value;
+
+				startDate = startDate.Date;
+
+				selectedAppointment = null;
+				selectedAppointmentIsNew = false;
+				selection = SelectionType.DateRange;
+
+				this.Invalidate();
+            }
+        }
+
+		[Category("DailyView")]
+        [System.ComponentModel.DefaultValue(8)]
+        public int StartHour
+        {
+            get
+            {
+                return startHour;
+            }
+            set
+            {
+                startHour = value;
+                OnStartHourChanged();
+            }
+        }
+
+		[Category("DailyView")]
+        [System.ComponentModel.DefaultValue(8)]
+        public int WorkingHourStart
+        {
+            get
+            {
+                return workingHourStart;
+            }
+            set
+            {
+                workingHourStart = value;
+                UpdateWorkingHours();
+            }
+        }
+
+		[Category("DailyView")]
+        [System.ComponentModel.DefaultValue(30)]
+        public int WorkingMinuteStart
+        {
+            get
+            {
+                return workingMinuteStart;
+            }
+            set
+            {
+                workingMinuteStart = value;
+                UpdateWorkingHours();
+            }
+        }
+
+		[Category("DailyView")]
+        [System.ComponentModel.DefaultValue(18)]
+        public int WorkingHourEnd
+        {
+            get
+            {
+                return workingHourEnd;
+            }
+            set
+            {
+                workingHourEnd = value;
+                UpdateWorkingHours();
+            }
+        }
+
+		[Category("DailyView")]
+        [System.ComponentModel.DefaultValue(30)]
+        public int WorkingMinuteEnd
+        {
+            get { return workingMinuteEnd; }
+            set
+            {
+                workingMinuteEnd = value;
+                UpdateWorkingHours();
+            }
+        }
+
+		[Category("DailyView")]
+        [DefaultValue(true)]
+        public bool AllowScroll
+        {
+            get
+            {
+                return allowScroll;
+            }
+            set
+            {
+				if (allowScroll == value)
+					return;
+
+                allowScroll = value;
+
+				this.scrollbar.Visible = this.AllowScroll;
+				this.Invalidate();
+            }
+        }
+
+		[Category("DailyView")]
+        [DefaultValue(true)]
+        public bool AllowInplaceEditing
+        {
+            get
+            {
+                return allowInplaceEditing;
+            }
+            set
+            {
+                allowInplaceEditing = value;
+            }
+        }
+
+		[Category("DailyView.Appointment")]
+		[System.ComponentModel.DefaultValue(24)]
+		public int AppointmentSlotHeight
+		{
+			get
+			{
+				return appointmentSlotHeight;
+			}
+			set
+			{
+				if (appointmentSlotHeight == value)
+					return;
+
+				appointmentSlotHeight = value;
+				AdjustScrollbar();
+				this.Invalidate();
+			}
+		}
+
+		[Category("DailyView.Appointment")]
+		[System.ComponentModel.DefaultValue(5)]
+		public int AppointmentGripWidth
+		{
+			get
+			{
+				return appointmentGripWidth;
+			}
+			set
+			{
+				if (appointmentGripWidth == value)
+					return;
+
+				appointmentGripWidth = value;
+				this.Invalidate();
+			}
+		}
+
+		[Category("DailyView.Appointment")]
+		public bool DrawAllAppBorder
+		{
+			get
+			{
+				return drawAllAppBorder;
+			}
+			set
+			{
+				if (drawAllAppBorder == value)
+					return;
+				drawAllAppBorder = value;
+				this.Invalidate();
+			}
+		}
+
+		[Category("DailyView.Appointment")]
+		[System.ComponentModel.DefaultValue(20)]
+		public int HorizontalAppointmentHeight
+		{
+			get
+			{
+				return horizontalAppointmentHeight;
+			}
+			set
+			{
+				if (horizontalAppointmentHeight == value)
+					return;
+
+				horizontalAppointmentHeight = value;
+				this.Invalidate();
+			}
+		}
+
+		[Category("DailyView.Appointment")]
+		public AppHeightDrawMode AppointmentHeightMode
+		{
+			get { return appHeightMode; }
+			set { appHeightMode = value; }
+		}
+		
+		[Category("DailyView.Appointment")]
+        [DefaultValue(true)]
+        public bool AllowNew
+        {
+            get
+            {
+                return allowNew;
+            }
+            set
+            {
+                allowNew = value;
+            }
+        }
+
+		[Category("DailyView.Appointment")]
+		public bool EnableShadows
+		{
+			get
+			{
+				return enableShadows;
+			}
+			set
+			{
+				if (enableShadows == value)
+					return;
+				enableShadows = value;
+				this.Invalidate();
+			}
+		}
+
+		[Category("DailyView.Appointment")]
+		public bool EnableRoundedCorners
+		{
+			get
+			{
+				return enableRoundCorners;
+			}
+			set
+			{
+				if (enableRoundCorners == value)
+					return;
+				enableRoundCorners = value;
+				this.Invalidate();
+			}
+		}
+
+		[Category("DailyView.Appointment")]
+		public bool EnableTimeIndicator
+		{
+			get
+			{
+				return enableTimeIndicator;
+			}
+			set
+			{
+				if (value == enableTimeIndicator)
+					return;
+				enableTimeIndicator = value;
+				this.Invalidate();
+			}
+		}
+
+		[Category("DailyView.Appointment")]
+		public bool EnableDurationDisplay
+		{
+			get
+			{
+				return enableDurationDisplay;
+			}
+			set
+			{
+				if (value == enableDurationDisplay)
+					return;
+				enableDurationDisplay = value;
+				this.Invalidate();
+			}
+		}
+
+		[Category("DailyView.Appointment")]
+		[System.ComponentModel.DefaultValue(AppointmentSlotDuration.ThirtyMinutes)]
+		public AppointmentSlotDuration AppointmentDuration
+		{
+			get
+			{
+				return appointmentSlotDuration;
+			}
+			set
+			{
+				if (appointmentSlotDuration == value)
+					return;
+				appointmentSlotDuration = value;
+				this.Invalidate();
+			}
+		}
+		#endregion
+
+		#region " Property Overrides "
+		[System.ComponentModel.Browsable(false)]
+		public override Color BackColor
+		{
+			get
+			{
+				return base.BackColor;
+			}
+			set
+			{
+				base.BackColor = value;
+			}
+		}
+		[System.ComponentModel.Browsable(false)]
+		public override string Text
+		{
+			get
+			{
+				return base.Text;
+			}
+			set
+			{
+				base.Text = value;
+			}
+		}
+		[System.ComponentModel.Browsable(false)]
+		public override Image BackgroundImage
+		{
+			get
+			{
+				return base.BackgroundImage;
+			}
+			set
+			{
+				base.BackgroundImage = value;
+			}
+		}
+		[System.ComponentModel.Browsable(false)]
+		public override ImageLayout BackgroundImageLayout
+		{
+			get
+			{
+				return base.BackgroundImageLayout;
+			}
+			set
+			{
+				base.BackgroundImageLayout = value;
+			}
+		}
+		[System.ComponentModel.Browsable(false)]
+		public override System.Drawing.Color ForeColor
+		{
+			get
+			{
+				return base.ForeColor;
+			}
+			set
+			{
+				base.ForeColor = value;
+			}
+		}
+		[System.ComponentModel.Browsable(false)]
+		public override Font Font
+		{
+			get
+			{
+				return base.Font;
+			}
+			set
+			{
+				base.Font = value;
+			}
+		}
+		[System.ComponentModel.Browsable(false)]
+		public override RightToLeft RightToLeft
+		{
+			get
+			{
+				return base.RightToLeft;
+			}
+			set
+			{
+				base.RightToLeft = value;
+			}
+		}
+		#endregion
+
+		#region " Private Properties "
+		[System.ComponentModel.Browsable(false)]
+		public DateTime SelectionStart
+		{
+			get { return selectionStart; }
+			set { selectionStart = value; }
+		}
+
+		[System.ComponentModel.Browsable(false)]
+		public DateTime SelectionEnd
+		{
+			get { return selectionEnd; }
+			set { selectionEnd = value; }
+		}
+		
+		[System.ComponentModel.Browsable(false)]
+		public bool SelectedAppointmentIsNew
+		{
+			get
+			{
+				return selectedAppointmentIsNew;
+			}
+		}
+
+		[System.ComponentModel.Browsable(false)]
+		public int VScrollBarWith
+		{
+			get
+			{
+				if (scrollbar.Visible)
+					return scrollbar.Width;
+				else
+					return 0;
+			}
+		}
+
+		[System.ComponentModel.Browsable(false)]
+		public ITool ActiveTool
+		{
+			get { return activeTool; }
+			set { activeTool = value; }
+		}
+
+		[System.ComponentModel.Browsable(false)]
+		public bool CurrentlyEditing
+		{
+			get
+			{
+				return editbox.Visible;
+			}
+		}
+
+		[System.ComponentModel.Browsable(false)]
+		public Appointment SelectedAppointment
+		{
+			get { return selectedAppointment; }
+		}
+
+		[System.ComponentModel.Browsable(false)]
+		public SelectionType Selection
+		{
+			get
+			{
+				return selection;
+			}
+		}
+
+		[System.ComponentModel.Browsable(false)]
+		[System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Hidden)]
+		public AbstractRenderer Renderer
+		{
+			get
+			{
+				return renderer;
+			}
+			set
+			{
+				if (renderer == value)
+					return;
+
+				renderer = value;
+				this.Font = renderer.BaseFont;
+				this.Invalidate();
+			}
+		}
+		
+		[System.ComponentModel.Browsable(false)]
+		private int HeaderHeight
+		{
+			get
+			{
+				return dayHeadersHeight + allDayEventsHeaderHeight;
+			}
+		}
+		#endregion
+
+		#region Event Handlers
+		private void editbox_KeyUp(object sender, KeyEventArgs e)
+        {
+            if (e.KeyCode == Keys.Escape)
+            {
+                e.Handled = true;
+                FinishEditing(true);
+            }
+            else if (e.KeyCode == Keys.Enter)
+            {
+                e.Handled = true;
+                FinishEditing(false);
+            }
+        }
+
+		private void selectionTool_Complete(object sender, EventArgs e)
+        {
+            if (selectedAppointment != null)
+            {
+                System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(EnterEditMode));
+            }
+        }
+
+		private void scrollbar_Scroll(object sender, ScrollEventArgs e)
+        {
+            Invalidate();
+			
+			//scroll text box too
+            if (editbox.Visible)
+                editbox.Top += e.OldValue - e.NewValue;
+        }
+
+        protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)
+        {
+            base.SetBoundsCore(x, y, width, height, specified);
+            AdjustScrollbar();
+        }
+
+        protected override void OnPaintBackground(PaintEventArgs pevent)
+        {
+            // Flicker free
+        }
+
+        protected override void OnMouseDown(MouseEventArgs e)
+        {
+            // Capture focus
+            this.Focus();
+
+            if (CurrentlyEditing)
+            {
+                FinishEditing(false);
+            }
+
+            if (selectedAppointmentIsNew)
+            {
+                RaiseNewAppointment();
+            }
+
+            ITool newTool = null;
+
+            Appointment appointment = GetAppointmentAt(e.X, e.Y);
+
+            if (e.Y < HeaderHeight && e.Y > dayHeadersHeight && appointment == null)
+            {
+                if (selectedAppointment != null)
+                {
+                    selectedAppointment = null;
+                    Invalidate();
+                }
+
+                newTool = drawTool;
+                selection = SelectionType.None;
+
+                base.OnMouseDown(e);
+                return;
+            }
+
+            if (appointment == null)
+            {
+                if (selectedAppointment != null)
+                {
+                    selectedAppointment = null;
+                    Invalidate();
+                }
+
+                newTool = drawTool;
+                selection = SelectionType.DateRange;
+            }
+            else
+            {
+                newTool = selectionTool;
+                selectedAppointment = appointment;
+                selection = SelectionType.Appointment;
+
+                Invalidate();
+            }
+
+            if (activeTool != null)
+            {
+                activeTool.MouseDown(e);
+            }
+
+            if ((activeTool != newTool) && (newTool != null))
+            {
+                newTool.Reset();
+                newTool.MouseDown(e);
+            }
+
+            activeTool = newTool;
+
+            base.OnMouseDown(e);
+        }
+
+        protected override void OnMouseMove(MouseEventArgs e)
+        {
+            if (activeTool != null)
+                activeTool.MouseMove(e);
+
+            base.OnMouseMove(e);
+        }
+
+        protected override void OnMouseUp(MouseEventArgs e)
+        {
+            if (activeTool != null)
+                activeTool.MouseUp(e);
+
+            base.OnMouseUp(e);
+        }
+
+        protected override void OnMouseWheel(MouseEventArgs e)
+        {
+            base.OnMouseWheel(e);
+
+            if (e.Delta < 0)
+            {//mouse wheel scroll down
+                ScrollMe(true);
+            }
+            else
+            {//mouse wheel scroll up
+                ScrollMe(false);
+            }
+        }
+
+		protected override void OnKeyPress(KeyPressEventArgs e)
+        {
+            if ((allowNew) && char.IsLetterOrDigit(e.KeyChar))
+            {
+                if ((this.Selection == SelectionType.DateRange))
+                {
+                    if (!selectedAppointmentIsNew)
+                        EnterNewAppointmentMode(e.KeyChar);
+                }
+            }
+        }
+
+		protected virtual void ResolveAppointments(ResolveAppointmentsEventArgs args)
+		{
+			//System.Diagnostics.Debug.WriteLine("Resolve app");
+
+			if (OnResolveAppointments != null)
+				OnResolveAppointments(this, args);
+
+			this.allDayEventsHeaderHeight = 0;
+
+			// cache resolved appointments in hashtable by days.
+			cachedAppointments.Clear();
+
+			if ((selectedAppointmentIsNew) && (selectedAppointment != null))
+			{
+				if ((selectedAppointment.StartDate > args.StartDate) && (selectedAppointment.StartDate < args.EndDate))
+				{
+					args.Appointments.Add(selectedAppointment);
+				}
+			}
+
+			foreach (Appointment appointment in args.Appointments)
+			{
+				int key = -1;
+				AppointmentList list;
+
+				if (appointment.StartDate.Day == appointment.EndDate.Day && appointment.AllDayEvent == false)
+				{
+					key = appointment.StartDate.Day;
+				}
+				else
+				{
+					key = -1;
+				}
+
+				list = (AppointmentList)cachedAppointments[key];
+
+				if (list == null)
+				{
+					list = new AppointmentList();
+					cachedAppointments[key] = list;
+				}
+
+				list.Add(appointment);
+			}
+		}
+		#endregion
+
+        #region " Public Methods "
+
+        public void ScrollMe(bool down)
+        {
+			if (this.AllowScroll == false)
+				return;
+
+			int newScrollValue;
+
+            if (down)
+            {//mouse wheel scroll down
+                newScrollValue = this.scrollbar.Value + this.scrollbar.SmallChange;
+
+                if (newScrollValue < this.scrollbar.Maximum)
+                    this.scrollbar.Value = newScrollValue;
+                else
+                    this.scrollbar.Value = this.scrollbar.Maximum;
+            }
+            else
+            {//mouse wheel scroll up
+                newScrollValue = this.scrollbar.Value - this.scrollbar.SmallChange;
+
+                if (newScrollValue > this.scrollbar.Minimum)
+                    this.scrollbar.Value = newScrollValue;
+                else
+                    this.scrollbar.Value = this.scrollbar.Minimum;
+            }
+
+			this.Invalidate();
+        }
+
+        public Rectangle GetTrueRectangle()
+        {
+            Rectangle truerect;
+            truerect = this.ClientRectangle;
+            truerect.X += hourLabelWidth + hourLabelIndent;
+			truerect.Width -= VScrollBarWith + hourLabelWidth + hourLabelIndent;
+            truerect.Y += this.HeaderHeight;
+            truerect.Height -= this.HeaderHeight;
+
+            return truerect;
+        }
+
+        public Rectangle GetFullDayApptsRectangle()
+        {
+            Rectangle fulldayrect;
+            fulldayrect = this.ClientRectangle;
+            fulldayrect.Height = this.HeaderHeight - dayHeadersHeight;
+            fulldayrect.Y += dayHeadersHeight;
+			fulldayrect.Width -= (hourLabelWidth + hourLabelIndent + this.VScrollBarWith);
+            fulldayrect.X += hourLabelWidth + hourLabelIndent;
+
+            return fulldayrect;
+        }
+        
+        public void StartEditing()
+        {
+            if (!selectedAppointment.Locked && appointmentViews.ContainsKey(selectedAppointment))
+            {
+                Rectangle editBounds = appointmentViews[selectedAppointment].Rectangle;
+
+                editBounds.Inflate(-3, -3);
+                editBounds.X += appointmentGripWidth - 2;
+                editBounds.Width -= appointmentGripWidth - 5;
+
+                editbox.Bounds = editBounds;
+                editbox.Text = selectedAppointment.Subject;
+                editbox.Visible = true;
+                editbox.SelectionStart = editbox.Text.Length;
+                editbox.SelectionLength = 0;
+
+                editbox.Focus();
+            }
+        }
+
+        public void FinishEditing(bool cancel)
+        {
+            editbox.Visible = false;
+
+            if (!cancel)
+            {
+                if (selectedAppointment != null)
+                    selectedAppointment.Subject = editbox.Text;
+            }
+            else
+            {
+                if (selectedAppointmentIsNew)
+                {
+                    selectedAppointment = null;
+                    selectedAppointmentIsNew = false;
+                }
+            }
+
+            Invalidate();
+            this.Focus();
+        }
+
+        public DateTime GetTimeAt(int x, int y)
+        {
+			int dayWidth = (this.Width - (VScrollBarWith + hourLabelWidth + hourLabelIndent)) / daysToShow;
+
+            int hour = (y - this.HeaderHeight + scrollbar.Value) / appointmentSlotHeight;
+            x -= hourLabelWidth;
+
+            DateTime date = startDate;
+
+            date = date.Date;
+            date = date.AddDays(x / dayWidth);
+
+            if ((hour > 0) && (hour < 24 * 2))
+                date = date.AddMinutes((hour * 30));
+
+            return date;
+        }
+
+        public Appointment GetAppointmentAt(int x, int y)
+        {
+            foreach (AppointmentView view in appointmentViews.Values)
+                if (view.Rectangle.Contains(x, y))
+                    return view.Appointment;
+
+            foreach (AppointmentView view in longappointmentViews.Values)
+                if (view.Rectangle.Contains(x, y))
+                    return view.Appointment;
+
+            return null;
+		}
+
+		private Rectangle GetHourRangeRectangle(DateTime start, DateTime end, Rectangle baseRectangle)
+		{
+			Rectangle rect = baseRectangle;
+
+			int startY;
+			int endY;
+
+			startY = (start.Hour * appointmentSlotHeight * 2) + ((start.Minute * appointmentSlotHeight) / 30);
+			endY = (end.Hour * appointmentSlotHeight * 2) + ((end.Minute * appointmentSlotHeight) / 30);
+
+			rect.Y = startY - scrollbar.Value + this.HeaderHeight;
+
+			rect.Height = System.Math.Max(1, endY - startY);
+
+			return rect;
+		}
+		#endregion
+		
+		#region " Private Methods "
+		private void AdjustScrollbar()
+		{
+			scrollbar.Maximum = (2 * appointmentSlotHeight * 25) - this.Height + this.HeaderHeight;
+			scrollbar.Minimum = 0;
+		}
+		protected virtual void OnStartHourChanged()
+		{
+			// Fix : http://www.codeproject.com/cs/miscctrl/Calendardayview.asp?forumid=232232&select=1901930&df=100#xx1901930xx
+
+			if ((startHour * 2 * appointmentSlotHeight) > scrollbar.Maximum) //maximum is lower on larger forms
+			{
+				scrollbar.Value = scrollbar.Maximum;
+			}
+			else
+			{
+				scrollbar.Value = (startHour * 2 * appointmentSlotHeight);
+			}
+
+			Invalidate();
+		}
+		private void UpdateWorkingHours()
+		{
+			workStart = new DateTime(1, 1, 1, workingHourStart, workingMinuteStart, 0);
+			workEnd = new DateTime(1, 1, 1, workingHourEnd, workingMinuteEnd, 0);
+
+			Invalidate();
+		}
+		private void EnterNewAppointmentMode(char key)
+		{
+			Appointment appointment = new Appointment();
+			appointment.StartDate = selectionStart;
+			appointment.EndDate = selectionEnd;
+			appointment.Subject = key.ToString();
+
+			selectedAppointment = appointment;
+			selectedAppointmentIsNew = true;
+
+			activeTool = selectionTool;
+
+			Invalidate();
+
+			System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(EnterEditMode));
+		}
+
+		private delegate void StartEditModeDelegate(object state);
+		private void EnterEditMode(object state)
+		{
+			if (!allowInplaceEditing)
+				return;
+
+			if (this.InvokeRequired)
+			{
+				Appointment selectedApp = selectedAppointment;
+
+				System.Threading.Thread.Sleep(200);
+
+				if (selectedApp == selectedAppointment)
+					this.Invoke(new StartEditModeDelegate(EnterEditMode), state);
+			}
+			else
+			{
+				StartEditing();
+			}
+		}
+		#endregion
+
+		#region " Method Overrides "
+		protected override void Dispose(bool disposing)
+		{
+			if (disposing)
+			{
+				editbox.Dispose();
+				scrollbar.Dispose();
+			}
+			base.Dispose(disposing);
+		}
+		#endregion
+
+		#region " Drawing Methods "
+		protected override void OnPaint(PaintEventArgs e)
+        {
+			e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
+
+			// resolve appointments on visible date range.
+			ResolveAppointmentsEventArgs args = new ResolveAppointmentsEventArgs(this.StartDate, this.StartDate.AddDays(daysToShow));
+			ResolveAppointments(args);
+
+			using (SolidBrush backBrush = new SolidBrush(renderer.BackColor))
+				e.Graphics.FillRectangle(backBrush, this.ClientRectangle);
+
+			// Visible Rectangle
+			Rectangle rectangle = new Rectangle(0, 0, this.Width - VScrollBarWith, this.Height);
+
+			DrawDays(ref e, rectangle);
+
+			DrawHourLabels(ref e, rectangle);
+
+			DrawDayHeaders(ref e, rectangle);
+        }
+
+		private void DrawDays(ref PaintEventArgs e, Rectangle rectangle)
+		{
+			Rectangle rect = rectangle;
+			rect.X += hourLabelWidth + hourLabelIndent;
+			rect.Y += this.HeaderHeight;
+			rect.Width -= (hourLabelWidth + hourLabelIndent);
+
+
+			if (e.ClipRectangle.IntersectsWith(rect) == false)
+				return;
+
+			int dayWidth = rect.Width / daysToShow;
+
+			#region " Multi Day Appointments "
+			AppointmentList longAppointments = (AppointmentList)cachedAppointments[-1];
+
+			AppointmentList drawnLongApps = new AppointmentList();
+
+			AppointmentView view;
+
+			int y = dayHeadersHeight;
+			bool intersect = false;
+
+			List<int> layers = new List<int>();
+			if (longAppointments != null)
+			{
+
+				foreach (Appointment appointment in longAppointments)
+				{
+					appointment.Layer = 0;
+
+					if (drawnLongApps.Count != 0)
+					{
+						foreach (Appointment app in drawnLongApps)
+							if (!layers.Contains(app.Layer))
+								layers.Add(app.Layer);
+
+						foreach (int lay in layers)
+						{
+							foreach (Appointment app in drawnLongApps)
+							{
+								if (app.Layer == lay)
+									if (appointment.StartDate.Date >= app.EndDate.Date || appointment.EndDate.Date <= app.StartDate.Date)
+										intersect = false;
+									else
+									{
+										intersect = true;
+										break;
+									}
+								appointment.Layer = lay;
+							}
+
+							if (!intersect)
+								break;
+						}
+
+						if (intersect)
+							appointment.Layer = layers.Count;
+					}
+
+					drawnLongApps.Add(appointment); // changed by Gimlei
+				}
+
+				foreach (Appointment app in drawnLongApps)
+					if (!layers.Contains(app.Layer))
+						layers.Add(app.Layer);
+
+				allDayEventsHeaderHeight = layers.Count * (horizontalAppointmentHeight + 5) + 5;
+
+				Rectangle backRectangle = rect;
+				backRectangle.Y = y;
+				backRectangle.Height = allDayEventsHeaderHeight;
+
+				renderer.DrawAllDayBackground(e.Graphics, backRectangle);
+
+				foreach (Appointment appointment in longAppointments)
+				{
+					Rectangle appointmenRect = rect;
+					int spanDays = appointment.EndDate.Subtract(appointment.StartDate).Days;
+
+					if (appointment.EndDate.Day != appointment.StartDate.Day && appointment.EndDate.TimeOfDay < appointment.StartDate.TimeOfDay)
+						spanDays += 1;
+
+					appointmenRect.Width = dayWidth * spanDays - 5;
+					appointmenRect.Height = horizontalAppointmentHeight;
+					appointmenRect.X += (appointment.StartDate.Subtract(startDate).Days) * dayWidth; // changed by Gimlei
+					appointmenRect.Y = y + appointment.Layer * (horizontalAppointmentHeight + 5) + 5; // changed by Gimlei
+
+					view = new AppointmentView();
+					view.Rectangle = appointmenRect;
+					view.Appointment = appointment;
+
+					longappointmentViews[appointment] = view;
+
+					Rectangle gripRect = appointmenRect;
+					gripRect.Width = appointmentGripWidth;
+
+					renderer.DrawAppointment(e.Graphics, appointmenRect, appointment, appointment == selectedAppointment, gripRect, EnableShadows, EnableRoundedCorners);
+
+				}
+			}
+			#endregion
+
+			DateTime time = startDate;
+			Rectangle rectangle2 = rect;
+			rectangle2.Width = dayWidth;
+			rectangle2.Y += allDayEventsHeaderHeight;
+			rectangle2.Height -= allDayEventsHeaderHeight;
+
+			appointmentViews.Clear();
+			layers.Clear();
+
+			for (int day = 0; day < daysToShow; day++)
+			{
+				DrawDay(ref e, rectangle2, time);
+
+				rectangle2.X += dayWidth;
+
+				time = time.AddDays(1);
+			}
+		}
+
+		private void DrawHourLabels(ref PaintEventArgs e, Rectangle rectangle)
+        {
+			Rectangle rect = rectangle;
+			rect.Y += this.HeaderHeight;
+
+            e.Graphics.SetClip(rect);
+
+			int hourlabelheight = (int)AppointmentDuration * AppointmentSlotHeight;
+
+            for (int m_Hour = 0; m_Hour < 24; m_Hour++)
+            {
+                Rectangle hourRectangle = rect;
+
+                hourRectangle.Y = rect.Y + (m_Hour * 2 * appointmentSlotHeight) - scrollbar.Value;
+                hourRectangle.X += hourLabelIndent;
+                hourRectangle.Width = hourLabelWidth;
+				hourRectangle.Height = hourlabelheight;
+
+                if (hourRectangle.Y > this.HeaderHeight / 2)
+                    renderer.DrawHourLabel(e.Graphics, hourRectangle, m_Hour, this.AmPmDisplay, EnableTimeIndicator);
+            }
+
+            e.Graphics.ResetClip();
+        }
+
+		private void DrawDayHeaders(ref PaintEventArgs e, Rectangle rectangle)
+        {
+			Rectangle rect = rectangle;
+			rect.X += hourLabelWidth + hourLabelIndent;
+			rect.Width -= (hourLabelWidth + hourLabelIndent);
+			rect.Height = dayHeadersHeight;
+
+			if (e.ClipRectangle.IntersectsWith(rect) == false)
+				return;
+
+            int dayWidth = rect.Width / daysToShow;
+
+            //one day header rectangle
+            Rectangle dayHeaderRectangle = new Rectangle(rect.Left, rect.Top, dayWidth, rect.Height);
+            DateTime headerDate = startDate;
+
+            for (int day = 0; day < daysToShow; day++)
+            {
+                renderer.DrawDayHeader(e.Graphics, dayHeaderRectangle, headerDate);
+
+                dayHeaderRectangle.X += dayWidth;
+                headerDate = headerDate.AddDays(1);
+            }
+			Rectangle scrollrect = rectangle;
+			if (this.AllowScroll == false)
+			{
+				scrollrect.X = rect.Width + hourLabelWidth + hourLabelIndent;
+				scrollrect.Width = VScrollBarWith;
+				using (SolidBrush backBrush = new SolidBrush(renderer.BackColor))
+					e.Graphics.FillRectangle(backBrush, scrollrect);
+			}
+        }
+
+        private void DrawDay(ref PaintEventArgs e, Rectangle rect, DateTime time)
+        {
+            Rectangle workingHoursRectangle = GetHourRangeRectangle(workStart, workEnd, rect);
+
+            if (workingHoursRectangle.Y < this.HeaderHeight)
+            {
+                // Fix : http://www.codeproject.com/cs/miscctrl/Calendardayview.asp?forumid=232232&select=1904152&df=100#xx1904152xx
+                
+                workingHoursRectangle.Height -= this.HeaderHeight - workingHoursRectangle.Y;
+                workingHoursRectangle.Y = this.HeaderHeight;
+            }
+
+            if (!((time.DayOfWeek == DayOfWeek.Saturday) || (time.DayOfWeek == DayOfWeek.Sunday))) //weekends off -> no working hours
+                renderer.DrawHourRange(e.Graphics, workingHoursRectangle, false, false);
+
+            if ((selection == SelectionType.DateRange) && (time.Day == selectionStart.Day))
+            {
+                Rectangle selectionRectangle = GetHourRangeRectangle(selectionStart, selectionEnd, rect);
+                if (selectionRectangle.Top + 1 > this.HeaderHeight)
+                renderer.DrawHourRange(e.Graphics, selectionRectangle, false, true);
+            }
+
+            e.Graphics.SetClip(rect);
+
+            for (int hour = 0; hour < 24 * 2; hour++)
+            {
+                int y = rect.Top + (hour * appointmentSlotHeight) - scrollbar.Value;
+
+				using (Pen pen = new Pen(((hour % 2) == 0 ? renderer.HalfHourSeperatorColor : renderer.HourSeperatorColor)))
+                    e.Graphics.DrawLine(pen, rect.Left, y, rect.Right, y);
+
+                if (y > rect.Bottom)
+                    break;
+            }
+
+            renderer.DrawDayGripper(e.Graphics, rect, dayGripWidth);
+
+            e.Graphics.ResetClip();
+
+            AppointmentList appointments = (AppointmentList)cachedAppointments[time.Day];
+
+            if (appointments != null)
+            {
+                List<string> groups = new List<string>();
+
+                foreach (Appointment app in appointments)
+                    if (!groups.Contains(app.Group))
+                        groups.Add(app.Group);
+
+                Rectangle rect2 = rect;
+                rect2.Width = rect2.Width / groups.Count;
+
+                //groups.Sort();
+
+                foreach (string group in groups)
+                {
+                    DrawAppointments(ref e, rect2, time, group);
+
+                    rect2.X += rect2.Width;
+                }
+            }
+        }
+
+        private void DrawAppointments(ref PaintEventArgs e, Rectangle rect, DateTime time, string group)
+        {
+            DateTime timeStart = time.Date;
+            DateTime timeEnd = timeStart.AddHours(24);
+            timeEnd = timeEnd.AddSeconds(-1);
+
+            AppointmentList appointments = (AppointmentList)cachedAppointments[time.Day];
+
+            if (appointments != null)
+            {
+                HalfHourLayout[] layout = GetMaxParalelAppointments(appointments);
+                
+                List<Appointment> drawnItems = new List<Appointment>();
+
+                for (int halfHour = 0; halfHour < 24 * 2; halfHour++)
+                {
+                    HalfHourLayout hourLayout = layout[halfHour];
+
+                    if ((hourLayout != null) && (hourLayout.Count > 0))
+                    {
+                        for (int appIndex = 0; appIndex < hourLayout.Count; appIndex++)
+                        {
+                            Appointment appointment = hourLayout.Appointments[appIndex];
+
+                            if (appointment.Group != group)
+                                continue;
+
+                            if (drawnItems.IndexOf(appointment) < 0)
+                            {
+                                Rectangle appRect = rect;
+                                int appointmentWidth;
+                                AppointmentView view;
+
+                                appointmentWidth = rect.Width / appointment.conflictCount;
+
+								int lastX = 0;
+
+                                foreach (Appointment app in hourLayout.Appointments)
+                                {
+                                    if ((app != null) && (app.Group == appointment.Group) && (appointmentViews.ContainsKey(app)))
+                                    {
+                                        view = appointmentViews[app];
+
+                                        if (lastX < view.Rectangle.X)
+                                            lastX = view.Rectangle.X;
+                                    }
+                                }
+
+                                if ((lastX + (appointmentWidth * 2)) > (rect.X + rect.Width))
+                                    lastX = 0;
+
+                                appRect.Width = appointmentWidth - 5;
+
+                                if (lastX > 0)
+                                    appRect.X = lastX + appointmentWidth;
+
+                                DateTime appstart = appointment.StartDate;
+                                DateTime append = appointment.EndDate;
+
+                                // Draw the appts boxes depending on the height display mode                           
+                                // If small appts are to be drawn in half-hour blocks
+                                if (this.AppointmentHeightMode == AppHeightDrawMode.FullHalfHourBlocksShort && appointment.EndDate.Subtract(appointment.StartDate).TotalMinutes < 30)
+                                {
+                                    // Round the start/end time to the last/next halfhour
+                                    appstart = appointment.StartDate.AddMinutes(-appointment.StartDate.Minute);
+                                    append = appointment.EndDate.AddMinutes(30 - appointment.EndDate.Minute);
+                                    
+                                    // Make sure we've rounded it to the correct halfhour :)
+                                    if (appointment.StartDate.Minute >= 30)
+                                        appstart = appstart.AddMinutes(30);
+                                    if (appointment.EndDate.Minute > 30)
+                                        append = append.AddMinutes(30);
+                                }
+
+                                // This is basically the same as previous mode, but for all appts
+                                else if (this.AppointmentHeightMode == AppHeightDrawMode.FullHalfHourBlocksAll)
+                                {
+                                    appstart = appointment.StartDate.AddMinutes(-appointment.StartDate.Minute);
+                                    if (appointment.EndDate.Minute != 0 && appointment.EndDate.Minute != 30)
+                                        append = appointment.EndDate.AddMinutes(30 - appointment.EndDate.Minute);
+                                    else
+                                        append = appointment.EndDate;
+
+                                    if (appointment.StartDate.Minute >= 30)
+                                        appstart = appstart.AddMinutes(30);
+                                    if (appointment.EndDate.Minute > 30)
+                                        append = append.AddMinutes(30);
+                                }
+
+                                // Based on previous code
+                                else if (this.AppointmentHeightMode == AppHeightDrawMode.EndHalfHourBlocksShort && appointment.EndDate.Subtract(appointment.StartDate).TotalMinutes < 30)
+                                {
+                                    // Round the end time to the next halfhour
+                                    append = appointment.EndDate.AddMinutes(30 - appointment.EndDate.Minute);
+
+                                    // Make sure we've rounded it to the correct halfhour :)
+                                    if (appointment.EndDate.Minute > 30)
+                                        append = append.AddMinutes(30);
+                                }
+
+                                else if (this.AppointmentHeightMode == AppHeightDrawMode.EndHalfHourBlocksAll)
+                                {
+                                    // Round the end time to the next halfhour
+                                    if (appointment.EndDate.Minute != 0 && appointment.EndDate.Minute != 30)
+                                        append = appointment.EndDate.AddMinutes(30 - appointment.EndDate.Minute);
+                                    else
+                                        append = appointment.EndDate;
+                                    // Make sure we've rounded it to the correct halfhour :)
+                                    if (appointment.EndDate.Minute > 30)
+                                        append = append.AddMinutes(30);
+                                }
+
+                                appRect = GetHourRangeRectangle(appstart, append, appRect);
+
+                                view = new AppointmentView();
+                                view.Rectangle = appRect;
+                                view.Appointment = appointment;
+
+                                appointmentViews[appointment] = view;
+
+                                e.Graphics.SetClip(rect);
+
+                                if (this.DrawAllAppBorder)
+                                    appointment.DrawBorder = true;
+
+                                // Procedure for gripper rectangle is always the same
+								Rectangle gripRect = appRect;
+                                gripRect.Width = appointmentGripWidth;
+                                
+                                renderer.DrawAppointment(e.Graphics, appRect, appointment, appointment == selectedAppointment, gripRect, this.EnableShadows, this.enableRoundCorners);
+
+                                e.Graphics.ResetClip();
+
+                                drawnItems.Add(appointment);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        private static HalfHourLayout[] GetMaxParalelAppointments(List<Appointment> appointments)
+        {
+            HalfHourLayout[] appLayouts = new HalfHourLayout[24 * 2];
+
+            foreach (Appointment appointment in appointments)
+            {
+                appointment.conflictCount = 1;
+            }
+
+            foreach (Appointment appointment in appointments)
+            {
+                int firstHalfHour = appointment.StartDate.Hour * 2 + (appointment.StartDate.Minute / 30);
+                int lastHalfHour = appointment.EndDate.Hour * 2 + (appointment.EndDate.Minute / 30);
+
+                // Added to allow small parts been displayed
+                if (lastHalfHour == firstHalfHour)
+                {
+                    if (lastHalfHour < 24 * 2)
+                        lastHalfHour++;
+                    else
+                        firstHalfHour--;
+                }
+
+                for (int halfHour = firstHalfHour; halfHour < lastHalfHour; halfHour++)
+                {
+                    HalfHourLayout layout = appLayouts[halfHour];
+
+                    if (layout == null)
+                    {
+                        layout = new HalfHourLayout();
+                        layout.Appointments = new Appointment[20];
+                        appLayouts[halfHour] = layout;
+                    }
+
+                    layout.Appointments[layout.Count] = appointment;
+
+                    layout.Count++;
+
+                    List<string> groups = new List<string>();
+
+                    foreach (Appointment app2 in layout.Appointments)
+                    {
+                        if ((app2 != null) && (!groups.Contains(app2.Group)))
+                            groups.Add(app2.Group);
+                    }
+
+                    layout.Groups = groups;
+
+                    // update conflicts
+                    foreach (Appointment app2 in layout.Appointments)
+                    {
+                        if ((app2 != null) && (app2.Group == appointment.Group))
+                            if (app2.conflictCount < layout.Count)
+                                app2.conflictCount = layout.Count - (layout.Groups.Count - 1);
+                    }
+                }
+            }
+
+            return appLayouts;
+        }
+        #endregion
+
+        #region " Internal Utility Classes "
+
+        internal class HalfHourLayout
+        {
+            public int Count;
+            public List<string> Groups;
+            public Appointment[] Appointments;
+        }
+
+        internal class AppointmentView
+        {
+            public Appointment Appointment;
+            public Rectangle Rectangle;
+        }
+
+        internal class AppointmentList : List<Appointment>
+        {
+        }
+
+        #endregion
+
+        #region " Events "
+        public event EventHandler<EventArgs> OnSelectionChanged;
+		public event EventHandler<ResolveAppointmentsEventArgs> OnResolveAppointments;
+		public event EventHandler<NewAppointmentEventArgs> OnNewAppointment;
+        public event EventHandler<AppointmentEventArgs> OnAppointmentMove;
+
+		internal void RaiseNewAppointment()
+		{
+			NewAppointmentEventArgs args = new NewAppointmentEventArgs(selectedAppointment.Subject, selectedAppointment.StartDate, selectedAppointment.EndDate);
+
+			if (OnNewAppointment != null)
+			{
+				OnNewAppointment(this, args);
+			}
+
+			selectedAppointment = null;
+			selectedAppointmentIsNew = false;
+
+			Invalidate();
+		}
+
+		internal void RaiseSelectionChanged(EventArgs e)
+		{
+			if (OnSelectionChanged != null)
+				OnSelectionChanged(this, e);
+		}
+
+		internal void RaiseAppointmentMove(AppointmentEventArgs e)
+		{
+			if (OnAppointmentMove != null)
+				OnAppointmentMove(this, e);
+		}
+        #endregion
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/HeuristicLab.Calendar-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/HeuristicLab.Calendar-3.3.csproj	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/HeuristicLab.Calendar-3.3.csproj	(revision 4340)
@@ -0,0 +1,173 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{D17A4D6A-4CAA-4470-8A19-F42463C021FD}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Calendar</RootNamespace>
+    <AssemblyName>HeuristicLab.Calendar-3.3</AssemblyName>
+    <SccProjectName>
+    </SccProjectName>
+    <SccLocalPath>
+    </SccLocalPath>
+    <SccAuxPath>
+    </SccAuxPath>
+    <SccProvider>
+    </SccProvider>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <PlatformTarget>x86</PlatformTarget>
+    <OutputPath>bin\Debug\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <PlatformTarget>x86</PlatformTarget>
+    <OutputPath>bin\x86\Release\</OutputPath>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Appointment\AppointmentSlot.cs" />
+    <Compile Include="Appointment\AppointmentSlotDuration.cs" />
+    <Compile Include="Appointment\iAppointment.cs" />
+    <Compile Include="HeuristicLabCalendarPlugin.cs" />
+    <Compile Include="Properties\CalendarResources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>CalendarResources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="CalendarStorage\iCalendarStorage.cs" />
+    <Compile Include="Renderer\AbstractRenderer.cs" />
+    <Compile Include="Appointment\Appointment.cs">
+    </Compile>
+    <Compile Include="Appointment\AppointmentEventArgs.cs" />
+    <Compile Include="Appointment\AppointmentHieghtDrawMode.cs" />
+    <Compile Include="DayView.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="ViewTools\DrawTool.cs" />
+    <Compile Include="ViewTools\ITool.cs" />
+    <Compile Include="Appointment\NewAppointmentEvent.cs" />
+    <Compile Include="Renderer\Office12Renderer.cs" />
+    <Compile Include="Renderer\Office11Renderer.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Appointment\ResolveAppointmentsEvent.cs" />
+    <Compile Include="ViewTools\SelectionType.cs" />
+    <Compile Include="ViewTools\SelectionTool.cs" />
+    <Service Include="{94E38DFF-614B-4cbd-B67C-F211BB35CE8B}" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Properties\CalendarResources.resx">
+      <Generator>PublicResXFileCodeGenerator</Generator>
+      <LastGenOutput>CalendarResources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="Resources\LockedAppointment.png" />
+    <Content Include="Resources\recurring.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/HeuristicLab.Calendar-3.3.csproj.user
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/HeuristicLab.Calendar-3.3.csproj.user	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/HeuristicLab.Calendar-3.3.csproj.user	(revision 4340)
@@ -0,0 +1,14 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <PublishUrlHistory />
+    <InstallUrlHistory />
+    <SupportUrlHistory />
+    <UpdateUrlHistory />
+    <BootstrapperUrlHistory />
+    <ErrorReportUrlHistory />
+    <FallbackCulture>en-US</FallbackCulture>
+    <VerifyUploadedFiles>false</VerifyUploadedFiles>
+    <ProjectView>ShowAllFiles</ProjectView>
+  </PropertyGroup>
+</Project>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/HeuristicLabCalendarPlugin.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/HeuristicLabCalendarPlugin.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/HeuristicLabCalendarPlugin.cs	(revision 4340)
@@ -0,0 +1,30 @@
+#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 HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Calendar {
+  [Plugin("HeuristicLab.Calendar", "3.3")]
+  [PluginFile("HeuristicLab.Calendar-3.3.dll", PluginFileType.Assembly)]
+  public class HeuristicLabCalendarPlugin : PluginBase {
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/AssemblyInfo.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/AssemblyInfo.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/AssemblyInfo.cs	(revision 4340)
@@ -0,0 +1,60 @@
+#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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+using System.Security;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Calendar")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("Copyright © Moreum 2005")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AllowPartiallyTrustedCallers]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("B6BA196A-F2E3-4de2-AE8A-02D4995F8B57")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.4337")]
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/AssemblyInfo.frame	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/AssemblyInfo.frame	(revision 4340)
@@ -0,0 +1,60 @@
+#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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+using System.Security;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Calendar")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("Copyright © Moreum 2005")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AllowPartiallyTrustedCallers]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("B6BA196A-F2E3-4de2-AE8A-02D4995F8B57")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/CalendarResources.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/CalendarResources.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/CalendarResources.Designer.cs	(revision 4340)
@@ -0,0 +1,77 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Calendar.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    public class CalendarResources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal CalendarResources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        public static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HeuristicLab.Calendar.Properties.CalendarResources", typeof(CalendarResources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        public static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        public static System.Drawing.Bitmap LockedAppointment {
+            get {
+                object obj = ResourceManager.GetObject("LockedAppointment", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        public static System.Drawing.Bitmap recurring {
+            get {
+                object obj = ResourceManager.GetObject("recurring", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/CalendarResources.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/CalendarResources.resx	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Properties/CalendarResources.resx	(revision 4340)
@@ -0,0 +1,127 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="LockedAppointment" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\resources\lockedappointment.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="recurring" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\resources\recurring.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+</root>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Renderer/AbstractRenderer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Renderer/AbstractRenderer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Renderer/AbstractRenderer.cs	(revision 4340)
@@ -0,0 +1,227 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using System.Drawing.Drawing2D;
+using System.Drawing;
+
+namespace HeuristicLab.Calendar
+{
+    public abstract class AbstractRenderer : IDisposable
+    {
+        ~AbstractRenderer()
+        {
+            Dispose(false);
+        }
+
+        public void Dispose()
+        {
+            Dispose(true);
+            GC.SuppressFinalize(this);
+        }
+
+        protected virtual void Dispose(bool mainThread)
+        {
+            if (hourFont != null)
+                hourFont.Dispose();
+
+            if (minuteFont != null)
+                minuteFont.Dispose();
+        }
+
+        public virtual Color AllDayEventsBackColor
+        {
+            get
+            {
+                return InterpolateColors(this.BackColor, Color.Black, 0.5f);
+            }
+        }
+
+        public virtual Font BaseFont
+        {
+            get
+            {
+                return Control.DefaultFont;
+            }
+        }
+
+        public virtual Color HourSeperatorColor
+        {
+            get
+            {
+                return System.Drawing.Color.FromArgb(234, 208, 152);
+            }
+        }
+
+        public virtual Color HalfHourSeperatorColor
+        {
+            get
+            {
+                return System.Drawing.Color.FromArgb(243, 228, 177);
+            }
+        }
+
+        public virtual Color HourColor
+        {
+            get
+            {
+                return System.Drawing.Color.FromArgb(255, 244, 188);
+            }
+        }
+
+        public virtual Color WorkingHourColor
+        {
+            get
+            {
+                return System.Drawing.Color.FromArgb(255, 255, 213);
+            }
+        }
+
+        public virtual Color BackColor
+        {
+            get
+            {
+                return SystemColors.Control;
+            }
+        }
+
+        public virtual Color SelectionColor
+        {
+            get
+            {
+                return SystemColors.Highlight;
+            }
+        }
+
+        private Font hourFont;
+
+        public virtual Font HourFont
+        {
+            get
+            {
+                if (hourFont == null)
+                {
+                    hourFont = new Font(BaseFont.FontFamily, 14, FontStyle.Regular);
+                }
+
+                return hourFont;
+            }
+        }
+
+        private Font minuteFont;
+
+        public virtual Font MinuteFont
+        {
+            get
+            {
+                if (minuteFont == null)
+                {
+                    minuteFont = new Font(BaseFont.FontFamily, 8, FontStyle.Regular);
+                }
+
+                return minuteFont;
+            }
+        }
+
+        public abstract void DrawHourLabel(Graphics g, Rectangle rect, int hour, bool ampm);
+
+		public abstract void DrawHourLabel(Graphics g, Rectangle rect, int hour, bool ampm, bool timeindicator);
+
+        public abstract void DrawDayHeader(Graphics g, Rectangle rect, DateTime date);
+
+        public abstract void DrawDayBackground(Graphics g, Rectangle rect);
+
+        public virtual void DrawHourRange(Graphics g, Rectangle rect, bool drawBorder, bool hilight)
+        {
+            if (g == null)
+                throw new ArgumentNullException("g");
+
+            using (SolidBrush brush = new SolidBrush(hilight ? this.SelectionColor : this.WorkingHourColor))
+            {
+                g.FillRectangle(brush, rect);
+            }
+
+            if (drawBorder)
+                g.DrawRectangle(SystemPens.WindowFrame, rect);
+        }
+
+        public virtual void DrawDayGripper(Graphics g, Rectangle rect, int gripWidth)
+        {
+            if (g == null)
+                throw new ArgumentNullException("g");
+
+            using (Brush m_Brush = new SolidBrush(Color.White))
+                g.FillRectangle(m_Brush, rect.Left, rect.Top - 1, gripWidth, rect.Height);
+
+            using (Pen m_Pen = new Pen(Color.Black))
+                g.DrawRectangle(m_Pen, rect.Left, rect.Top - 1, gripWidth, rect.Height);
+        }
+
+        public abstract void DrawAppointment(Graphics g, Rectangle rect, Appointment appointment, bool isSelected, Rectangle gripRect);
+
+		public abstract void DrawAppointment(Graphics g, Rectangle rect, Appointment appointment, bool isSelected, Rectangle gripRect, bool enableShadows, bool useroundedCorners);
+
+        public void DrawAllDayBackground(Graphics g, Rectangle rect)
+        {
+            if (g == null)
+                throw new ArgumentNullException("g");
+
+            using (Brush brush = new SolidBrush(InterpolateColors(this.BackColor, Color.Black, 0.5f)))
+                g.FillRectangle(brush, rect);
+        }
+
+        public static Color InterpolateColors(Color color1, Color color2, float percentage)
+        {
+            int num1 = ((int)color1.R);
+            int num2 = ((int)color1.G);
+            int num3 = ((int)color1.B);
+            int num4 = ((int)color2.R);
+            int num5 = ((int)color2.G);
+            int num6 = ((int)color2.B);
+            byte num7 = Convert.ToByte(((float)(((float)num1) + (((float)(num4 - num1)) * percentage))));
+            byte num8 = Convert.ToByte(((float)(((float)num2) + (((float)(num5 - num2)) * percentage))));
+            byte num9 = Convert.ToByte(((float)(((float)num3) + (((float)(num6 - num3)) * percentage))));
+            return Color.FromArgb(num7, num8, num9);
+        }
+
+		public static GraphicsPath CreateRoundRectangle(Rectangle rectangle)
+		{
+			int radius = 8;
+
+			GraphicsPath path = new GraphicsPath();
+			int l = rectangle.Left;
+			int t = rectangle.Top;
+			int w = rectangle.Width;
+			int h = rectangle.Height;
+			int d = radius << 1;
+			path.AddArc(l, t, d, d, 180, 90); // topleft
+			path.AddLine(l + radius, t, l + w - radius, t); // top
+			path.AddArc(l + w - d, t, d, d, 270, 90); // topright
+			path.AddLine(l + w, t + radius, l + w, t + h - radius); // right
+			path.AddArc(l + w - d, t + h - d, d, d, 0, 90); // bottomright
+			path.AddLine(l + w - radius, t + h, l + radius, t + h); // bottom
+			path.AddArc(l, t + h - d, d, d, 90, 90); // bottomleft
+			path.AddLine(l, t + h - radius, l, t + radius); // left
+			path.CloseFigure();
+			return path;
+		}
+
+		public static GraphicsPath CreateGripRectangle(Rectangle rectangle)
+		{
+			int radius = rectangle.Width;
+
+			GraphicsPath path = new GraphicsPath();
+			int l = rectangle.Left;
+			int t = rectangle.Top;
+			int w = rectangle.Width;
+			int h = rectangle.Height;
+			int d = radius << 1;
+			path.AddArc(l, t, d, d, 180, 90); // topleft
+			path.AddLine(l + w, t + radius, l + w, t + h - radius); // right
+			path.AddArc(l, t + h - d, d, d, 90, 90); // bottomleft
+			path.AddLine(l, t + h - radius, l, t + radius); // left
+			path.CloseFigure();
+			return path;
+		}
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Renderer/Office11Renderer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Renderer/Office11Renderer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Renderer/Office11Renderer.cs	(revision 4340)
@@ -0,0 +1,155 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using System.Drawing;
+
+namespace HeuristicLab.Calendar
+{
+    public class Office11Renderer : AbstractRenderer
+    {
+        protected override void Dispose(bool mainThread)
+        {
+            base.Dispose(mainThread);
+
+            if (minuteFont != null)
+                minuteFont.Dispose();
+        }
+
+        private Font minuteFont;
+
+        public override Font MinuteFont
+        {
+            get
+            {
+                if (minuteFont == null)
+                    minuteFont = new Font(BaseFont, FontStyle.Italic);
+
+                return minuteFont;
+            }
+        }
+
+		public override void DrawHourLabel(System.Drawing.Graphics g, System.Drawing.Rectangle rect, int hour, bool ampm)
+		{
+			DrawHourLabel(g, rect, hour, ampm, false);
+		}
+
+		public override void DrawHourLabel(Graphics g, Rectangle rect, int hour, bool ampm, bool timeindicator)
+        {
+            if (g == null)
+                throw new ArgumentNullException("g");
+
+            Color m_Color = ControlPaint.LightLight(SystemColors.WindowFrame);
+            m_Color = ControlPaint.Light(m_Color);
+
+            using (Pen m_Pen = new Pen(m_Color))
+                g.DrawLine(m_Pen, rect.Left, rect.Y, rect.Width, rect.Y);
+
+            g.DrawString(hour.ToString("##00", System.Globalization.CultureInfo.InvariantCulture), HourFont, SystemBrushes.ControlText, rect);
+
+            rect.X += 27;
+
+            g.DrawString("00", MinuteFont, SystemBrushes.ControlText, rect);
+        }
+
+        public override void DrawDayHeader(Graphics g, Rectangle rect, DateTime date)
+        {
+            if (g == null)
+                throw new ArgumentNullException("g");
+
+            using (StringFormat format = new StringFormat())
+            {
+                format.Alignment = StringAlignment.Center;
+                format.FormatFlags = StringFormatFlags.NoWrap;
+                format.LineAlignment = StringAlignment.Center;
+
+                ControlPaint.DrawButton(g, rect, ButtonState.Inactive);
+                ControlPaint.DrawBorder3D(g, rect, Border3DStyle.Etched);
+
+                g.DrawString(
+                    System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetDayName(date.DayOfWeek),
+                    BaseFont,
+                    SystemBrushes.WindowText,
+                    rect,
+                    format
+                    );
+            }
+        }
+
+        public override void DrawDayBackground(Graphics g, Rectangle rect)
+        {
+            if (g == null)
+                throw new ArgumentNullException("g");
+
+            using (Brush m_Brush = new SolidBrush(this.HourColor))
+                g.FillRectangle(m_Brush, rect);
+        }
+
+        public override void DrawAppointment(Graphics g, Rectangle rect, Appointment appointment, bool isSelected, Rectangle gripRect)
+        {
+			DrawAppointment(g, rect, appointment, isSelected, gripRect, true, false);
+        }
+
+		public override void DrawAppointment(Graphics g, Rectangle rect, Appointment appointment, bool isSelected, Rectangle gripRect, bool enableShadows, bool useroundedCorners)
+		{
+			if (appointment == null)
+				throw new ArgumentNullException("appointment");
+
+			if (g == null)
+				throw new ArgumentNullException("g");
+
+			if (rect.Width != 0 && rect.Height != 0)
+				using (StringFormat format = new StringFormat())
+				{
+					format.Alignment = StringAlignment.Near;
+					format.LineAlignment = StringAlignment.Near;
+
+					if ((appointment.Locked) && isSelected)
+					{
+						// Draw back
+						using (Brush m_Brush = new System.Drawing.Drawing2D.HatchBrush(System.Drawing.Drawing2D.HatchStyle.Wave, Color.LightGray, appointment.Color))
+							g.FillRectangle(m_Brush, rect);
+					}
+					else
+					{
+						// Draw back
+						using (SolidBrush m_Brush = new SolidBrush(appointment.Color))
+							g.FillRectangle(m_Brush, rect);
+					}
+
+					if (isSelected)
+					{
+						using (Pen m_Pen = new Pen(appointment.BorderColor, 4))
+							g.DrawRectangle(m_Pen, rect);
+
+						Rectangle m_BorderRectangle = rect;
+
+						m_BorderRectangle.Inflate(2, 2);
+
+						using (Pen m_Pen = new Pen(SystemColors.WindowFrame, 1))
+							g.DrawRectangle(m_Pen, m_BorderRectangle);
+
+						m_BorderRectangle.Inflate(-4, -4);
+
+						using (Pen m_Pen = new Pen(SystemColors.WindowFrame, 1))
+							g.DrawRectangle(m_Pen, m_BorderRectangle);
+					}
+					else
+					{
+						// Draw gripper
+						gripRect.Width += 1;
+
+						using (SolidBrush m_Brush = new SolidBrush(appointment.BorderColor))
+							g.FillRectangle(m_Brush, gripRect);
+
+						using (Pen m_Pen = new Pen(SystemColors.WindowFrame, 1))
+							g.DrawRectangle(m_Pen, rect);
+					}
+
+					rect.X += gripRect.Width;
+					g.DrawString(appointment.Subject, this.BaseFont, SystemBrushes.WindowText, rect, format);
+				}
+		}
+    }
+
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Renderer/Office12Renderer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Renderer/Office12Renderer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/Renderer/Office12Renderer.cs	(revision 4340)
@@ -0,0 +1,411 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Drawing.Text;
+
+namespace HeuristicLab.Calendar
+{
+    public class Office12Renderer : AbstractRenderer
+    {
+        protected override void Dispose(bool mainThread)
+        {
+            base.Dispose(mainThread);
+
+            if (baseFont != null)
+                baseFont.Dispose();
+        }
+
+        Font baseFont;
+
+        public override Font BaseFont
+        {
+            get
+            {
+                if (baseFont == null)
+                {
+                    baseFont = new Font("Segoe UI", 8, FontStyle.Regular);
+                }
+
+                return baseFont;
+            }
+        }
+
+        public override Color HourColor
+        {
+            get
+            {
+                return System.Drawing.Color.FromArgb(230, 237, 247);
+            }
+        }
+
+        public override Color HalfHourSeperatorColor
+        {
+            get
+            {
+                return System.Drawing.Color.FromArgb(165, 191, 225);
+            }
+        }
+
+        public override Color HourSeperatorColor
+        {
+            get
+            {
+                return System.Drawing.Color.FromArgb(213, 215, 241);
+            }
+        }
+
+        public override Color WorkingHourColor
+        {
+            get
+            {
+                return System.Drawing.Color.FromArgb(255, 255, 255);
+            }
+        }
+
+        public override System.Drawing.Color BackColor
+        {
+            get
+            {
+                return Color.FromArgb(213, 228, 242);
+            }
+        }
+
+        public override Color SelectionColor
+        {
+            get
+            {
+                return System.Drawing.Color.FromArgb(41, 76, 122);
+            }
+        }
+
+		public override void DrawHourLabel(System.Drawing.Graphics g, System.Drawing.Rectangle rect, int hour, bool ampm)
+		{
+			DrawHourLabel(g, rect, hour, ampm, false);
+		}
+
+		public override void DrawHourLabel(Graphics g, Rectangle rect, int hour, bool ampm, bool timeindicator)
+		{
+			if (g == null)
+				throw new ArgumentNullException("g");
+
+			int orgHour = hour;
+			Color color = Color.FromArgb(101, 147, 207);
+
+			//Draw Divider Line
+			using (Pen pen = new Pen(color))
+				g.DrawLine(pen, rect.Left, rect.Y, rect.Width, rect.Y);
+
+			string ampmtime;
+			if (ampm)
+			{
+				ampmtime = (hour < 12) ? "AM" : "PM";
+
+				if (hour != 12)
+					hour = hour % 12;
+			}
+			else
+				ampmtime = "00";
+			
+			using (SolidBrush brush = new SolidBrush(color))
+			{
+				g.DrawString(hour.ToString("##00", System.Globalization.CultureInfo.InvariantCulture), HourFont, brush, rect);
+				rect.X += 27;
+				g.DrawString(ampmtime, MinuteFont, brush, rect);
+			}
+
+			DateTime dtnow = DateTime.Now;
+			if (timeindicator && orgHour == dtnow.Hour)
+			{
+				int tioffset = 5;
+				Rectangle rectIndicator = rect;
+				rectIndicator.Width = rect.Width - tioffset;
+				rectIndicator.Height = tioffset;
+				rectIndicator.Y = (rect.Height / 60) * dtnow.Minute;
+				rectIndicator.X = tioffset;
+				using (LinearGradientBrush lgb = new LinearGradientBrush(rectIndicator, Color.FromArgb(247, 207, 114), Color.FromArgb(251, 230, 148), LinearGradientMode.Vertical))
+					g.FillRectangle(lgb, rectIndicator);
+			}
+		}
+
+        public override void DrawDayHeader(System.Drawing.Graphics g, System.Drawing.Rectangle rect, DateTime date)
+        {
+            if (g == null)
+                throw new ArgumentNullException("g");
+
+            using (StringFormat format = new StringFormat())
+            {
+                format.Alignment = StringAlignment.Center;
+                format.FormatFlags = StringFormatFlags.NoWrap;
+                format.LineAlignment = StringAlignment.Center;
+
+                using (StringFormat formatdd = new StringFormat())
+                {
+                    formatdd.Alignment = StringAlignment.Near;
+                    formatdd.FormatFlags = StringFormatFlags.NoWrap;
+                    formatdd.LineAlignment = StringAlignment.Center;
+
+                    using (SolidBrush brush = new SolidBrush(this.BackColor))
+                        g.FillRectangle(brush, rect);
+
+                    using (Pen aPen = new Pen(Color.FromArgb(205, 219, 238)))
+                        g.DrawLine(aPen, rect.Left, rect.Top + (int)rect.Height / 2, rect.Right, rect.Top + (int)rect.Height / 2);
+
+                    using (Pen aPen = new Pen(Color.FromArgb(141, 174, 217)))
+                        g.DrawRectangle(aPen, rect);
+
+                    Rectangle topPart = new Rectangle(rect.Left + 1, rect.Top + 1, rect.Width - 2, (int)(rect.Height / 2) - 1);
+                    Rectangle lowPart = new Rectangle(rect.Left + 1, rect.Top + (int)(rect.Height / 2) + 1, rect.Width - 1, (int)(rect.Height / 2) - 1);
+
+                    using (LinearGradientBrush aGB = new LinearGradientBrush(topPart, Color.FromArgb(228, 236, 246), Color.FromArgb(214, 226, 241), LinearGradientMode.Vertical))
+                        g.FillRectangle(aGB, topPart);
+
+                    using (LinearGradientBrush aGB = new LinearGradientBrush(lowPart, Color.FromArgb(194, 212, 235), Color.FromArgb(208, 222, 239), LinearGradientMode.Vertical))
+                        g.FillRectangle(aGB, lowPart);
+
+                    if (date.Date.Equals(DateTime.Now.Date))
+                    {
+                        topPart.Inflate((int)(-topPart.Width / 4 + 1), 1); //top left orange area
+                        topPart.Offset(rect.Left - topPart.Left + 1, 1);
+                        topPart.Inflate(1, 0);
+                        using (LinearGradientBrush aGB = new LinearGradientBrush(topPart, Color.FromArgb(247, 207, 114), Color.FromArgb(251, 230, 148), LinearGradientMode.Horizontal))
+                        {
+                            topPart.Inflate(-1, 0);
+                            g.FillRectangle(aGB, topPart);
+                        }
+
+                        topPart.Offset(rect.Right - topPart.Right, 0);        //top right orange
+                        topPart.Inflate(1, 0);
+                        using (LinearGradientBrush aGB = new LinearGradientBrush(topPart, Color.FromArgb(251, 230, 148), Color.FromArgb(247, 207, 114), LinearGradientMode.Horizontal))
+                        {
+                            topPart.Inflate(-1, 0);
+                            g.FillRectangle(aGB, topPart);
+                        }
+
+                        using (Pen aPen = new Pen(Color.FromArgb(128, 240, 154, 30))) //center line
+                            g.DrawLine(aPen, rect.Left, topPart.Bottom - 1, rect.Right, topPart.Bottom - 1);
+
+                        topPart.Inflate(0, -1);
+                        topPart.Offset(0, topPart.Height + 1); //lower right
+                        using (LinearGradientBrush aGB = new LinearGradientBrush(topPart, Color.FromArgb(240, 157, 33), Color.FromArgb(250, 226, 142), LinearGradientMode.BackwardDiagonal))
+                            g.FillRectangle(aGB, topPart);
+
+                        topPart.Offset(rect.Left - topPart.Left + 1, 0); //lower left
+                        using (LinearGradientBrush aGB = new LinearGradientBrush(topPart, Color.FromArgb(240, 157, 33), Color.FromArgb(250, 226, 142), LinearGradientMode.ForwardDiagonal))
+                            g.FillRectangle(aGB, topPart);
+                        using (Pen aPen = new Pen(Color.FromArgb(238, 147, 17)))
+                            g.DrawRectangle(aPen, rect);
+                    }
+
+                    g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
+
+                    //get short dayabbr. if narrow dayrect
+                    string sTodaysName = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetDayName(date.DayOfWeek);
+                    if (rect.Width < 105)
+                        sTodaysName = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetAbbreviatedDayName(date.DayOfWeek);
+
+                    rect.Offset(2, 1);
+
+                    using (Font fntDay = new Font("Segoe UI", 8))
+                        g.DrawString(sTodaysName, fntDay, SystemBrushes.WindowText, rect, format);
+
+                    rect.Offset(-2, -1);
+
+                    using (Font fntDayDate = new Font("Segoe UI", 9, FontStyle.Bold))
+                        g.DrawString(date.ToString(" d"), fntDayDate, SystemBrushes.WindowText, rect, formatdd);
+                }
+            }
+        }
+
+        public override void DrawDayBackground(System.Drawing.Graphics g, System.Drawing.Rectangle rect)
+        {
+
+        }
+
+		public override void DrawAppointment(System.Drawing.Graphics g, System.Drawing.Rectangle rect, Appointment appointment, bool isSelected, System.Drawing.Rectangle gripRect)
+		{
+			DrawAppointment(g, rect, appointment, isSelected, gripRect, true, false);
+		}
+        
+		public override void DrawAppointment(System.Drawing.Graphics g, System.Drawing.Rectangle rect, Appointment appointment, bool isSelected, System.Drawing.Rectangle gripRect, bool enableShadows, bool useroundedCorners)
+        {
+            if (appointment == null)
+                throw new ArgumentNullException("appointment");
+
+            if (g == null)
+                throw new ArgumentNullException("g");
+
+			if (rect.Width == 0 || rect.Height == 0)
+				return;
+
+			float _ShadowDistance = 6f;
+
+			#region " Adjust Appointment Rectangle based on the Size of the Grip Rectangle "
+			rect.X += gripRect.Width;
+			rect.Width -= gripRect.Width;
+			gripRect.X += gripRect.Width;
+			#endregion
+
+			#region " Gradient Colors "
+			Color start = InterpolateColors(appointment.Color, Color.White, 0.4f);
+			Color end = InterpolateColors(appointment.Color, Color.FromArgb(191, 210, 234), 0.7f);
+			//start = Color.FromArgb(230, start);
+			//end = Color.FromArgb(180, end);
+			#endregion
+
+			GraphicsPath gp = null;
+			try
+			{
+				#region " Create Graphics Path "
+				if (useroundedCorners)
+				{
+					gp = CreateRoundRectangle(rect);
+				}
+				else
+				{
+					gp = new GraphicsPath();
+					gp.AddRectangle(rect);
+				}
+				#endregion
+
+				#region " Shadows "
+				if (enableShadows)
+				{
+					Matrix _Matrix = new Matrix();
+					_Matrix.Translate(_ShadowDistance, _ShadowDistance);
+					gp.Transform(_Matrix);
+					using (PathGradientBrush _Brush = new PathGradientBrush(gp))
+					{
+						// set the wrapmode so that the colors will layer themselves
+						// from the outer edge in
+						_Brush.WrapMode = WrapMode.Clamp;
+						
+						// Create a color blend to manage our colors and positions and
+						// since we need 3 colors set the default length to 3
+						ColorBlend _ColorBlend = new ColorBlend(3);
+
+						// here is the important part of the shadow making process, remember
+						// the clamp mode on the colorblend object layers the colors from
+						// the outside to the center so we want our transparent color first
+						// followed by the actual shadow color. Set the shadow color to a 
+						// slightly transparent DimGray, I find that it works best.
+						_ColorBlend.Colors = new Color[] { Color.Transparent, Color.FromArgb(180, Color.DimGray), Color.FromArgb(180, Color.DimGray) };
+
+						// our color blend will control the distance of each color layer
+						// we want to set our transparent color to 0 indicating that the 
+						// transparent color should be the outer most color drawn, then
+						// our Dimgray color at about 10% of the distance from the edge
+						_ColorBlend.Positions = new float[] { 0f, .1f, 1f };
+						
+						// assign the color blend to the pathgradientbrush
+						_Brush.InterpolationColors = _ColorBlend;
+						
+						// fill the shadow with our pathgradientbrush
+						g.FillPath(_Brush, gp);
+					}
+
+					// Draw shadow lines
+					//int xLeft = rect.X + 6;
+					//int xRight = rect.Right + 1;
+					//int yTop = rect.Y + 1;
+					//int yButton = rect.Bottom + 1;
+
+					//for (int i = 0; i < 5; i++)
+					//{
+					//    using (Pen shadow_Pen = new Pen(Color.FromArgb(70 - 12 * i, Color.Black)))
+					//    {
+					//        g.DrawLine(shadow_Pen, xLeft + i, yButton + i, xRight + i - 1, yButton + i); //horisontal lines
+					//        g.DrawLine(shadow_Pen, xRight + i, yTop + i, xRight + i, yButton + i); //vertical
+					//    }
+					//}
+
+					//Move the GraphicsPath Back to the original Location
+					_Matrix.Translate(_ShadowDistance * -2, _ShadowDistance * -2);
+					gp.Transform(_Matrix);
+				}
+				#endregion
+
+				#region " Draw Background "
+					using (LinearGradientBrush aGB = new LinearGradientBrush(rect, start, end, LinearGradientMode.Vertical))
+						g.FillPath(aGB, gp);
+				#endregion
+
+				#region " Selection Border "
+				if (isSelected)
+				{
+					using (Pen m_Pen = new Pen(appointment.BorderColor, 2))
+						g.DrawPath(m_Pen, gp);
+				}
+				#endregion
+
+				#region " Appointment Grip "
+				gripRect.Width += 1;
+
+				GraphicsPath grippath = null;
+				try
+				{
+					if (useroundedCorners)
+					{
+						grippath = CreateGripRectangle(gripRect);
+					}
+					else
+					{
+						grippath = new GraphicsPath();
+						grippath.AddRectangle(gripRect);
+					}
+					using (SolidBrush aGB = new SolidBrush(appointment.BorderColor))
+						g.FillPath(aGB, grippath);
+				}
+				finally
+				{
+					grippath.Dispose();
+				}
+
+				#endregion
+
+				#region " Appointment Border
+				if (appointment.DrawBorder)
+					using (Pen m_Pen = new Pen(appointment.BorderColor, 1))
+						g.DrawPath(m_Pen, gp);
+				#endregion
+
+				#region " Draw Recurring Icon "
+				if (appointment.Recurring || appointment.Locked)
+				{
+					Rectangle iconrec = rect;
+					iconrec.Width = 16;
+					iconrec.Height = 16;
+
+					iconrec.X = rect.Right - 18;
+					iconrec.Y = rect.Bottom - 18;
+					Image icon = (appointment.Recurring) ? Properties.CalendarResources.recurring : null;
+          if (icon != null) {
+            g.DrawImage(icon, iconrec);
+            icon.Dispose();
+          }
+				}
+				#endregion
+
+			}
+			finally
+			{
+				gp.Dispose();
+			}
+			
+			#region " Draw Text "
+			using (StringFormat format = new StringFormat())
+			{
+				format.Alignment = StringAlignment.Near;
+				format.LineAlignment = StringAlignment.Near;
+				// draw appointment text
+
+				rect.X += gripRect.Width;
+				g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
+				g.DrawString(appointment.Subject, this.BaseFont, SystemBrushes.WindowText, rect, format);
+				g.TextRenderingHint = TextRenderingHint.SystemDefault;
+			}
+			#endregion
+		}
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/ViewTools/DrawTool.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/ViewTools/DrawTool.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/ViewTools/DrawTool.cs	(revision 4340)
@@ -0,0 +1,93 @@
+
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Calendar
+{
+    public class DrawTool : ITool
+    {
+        DateTime m_SelectionStart;
+        bool m_SelectionStarted;
+
+        public void Reset()
+        {
+            m_SelectionStarted = false;
+        }
+
+        public void MouseMove(MouseEventArgs e)
+        {
+            if (e == null)
+                throw new ArgumentNullException("e");
+
+            if (e.Button == MouseButtons.Left)
+            {
+                if (m_SelectionStarted)
+                {
+                    DateTime m_Time = m_DayView.GetTimeAt(e.X, e.Y);
+                    m_Time = m_Time.AddMinutes(30);
+
+                    if (m_Time < m_SelectionStart)
+                    {
+                        m_DayView.SelectionStart = m_Time;
+                        m_DayView.SelectionEnd = m_SelectionStart;
+                    }
+                    else
+                    {
+                        m_DayView.SelectionEnd = m_Time;
+                    }
+
+                    m_DayView.Invalidate();
+                }
+            }
+        }
+
+        public void MouseUp(MouseEventArgs e)
+        {
+            if (e == null)
+                throw new ArgumentNullException("e");
+
+            if (e.Button == MouseButtons.Left)
+            {
+                m_DayView.Capture = false;
+                m_SelectionStarted = false;
+
+                m_DayView.RaiseSelectionChanged(EventArgs.Empty);
+
+                if (Complete != null)
+                    Complete(this, EventArgs.Empty);
+            }
+        }
+
+        public void MouseDown(MouseEventArgs e)
+        {
+            if (e == null)
+                throw new ArgumentNullException("e");
+
+            if (e.Button == MouseButtons.Left)
+            {
+                m_SelectionStart = m_DayView.GetTimeAt(e.X, e.Y);
+
+                m_DayView.SelectionStart = m_SelectionStart;
+                m_DayView.SelectionEnd = m_SelectionStart.AddMinutes(30);
+
+                m_SelectionStarted = true;
+
+                m_DayView.Invalidate();
+                m_DayView.Capture = true;
+            }
+        }
+
+        private DayView m_DayView;
+
+        public DayView DayView
+        {
+            get { return m_DayView; }
+            set { m_DayView = value; }
+        }
+
+        public event EventHandler Complete;
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/ViewTools/ITool.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/ViewTools/ITool.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/ViewTools/ITool.cs	(revision 4340)
@@ -0,0 +1,24 @@
+
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Calendar
+{
+    public interface ITool
+    {
+        DayView DayView
+        {
+            get;
+            set;
+        }
+
+        void Reset();
+
+        void MouseMove( MouseEventArgs e );
+        void MouseUp( MouseEventArgs e );
+        void MouseDown( MouseEventArgs e );
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/ViewTools/SelectionTool.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/ViewTools/SelectionTool.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/ViewTools/SelectionTool.cs	(revision 4340)
@@ -0,0 +1,289 @@
+
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+
+namespace HeuristicLab.Calendar
+{
+    public class SelectionTool : ITool
+    {
+        private DayView dayView;
+
+        public DayView DayView
+        {
+            get
+            {
+                return dayView;
+            }
+            set
+            {
+                dayView = value;
+            }
+        }
+
+        private DateTime startDate;
+        private TimeSpan length;
+        private Mode mode;
+        private TimeSpan delta;
+
+        public void Reset()
+        {
+            length = TimeSpan.Zero;
+            delta = TimeSpan.Zero;
+        }
+
+        public void MouseMove(System.Windows.Forms.MouseEventArgs e)
+        {
+            if (e == null)
+                throw new ArgumentNullException("e");
+
+            Appointment selection = dayView.SelectedAppointment;
+            Rectangle viewrect = dayView.GetTrueRectangle();
+            Rectangle fdrect = dayView.GetFullDayApptsRectangle();
+
+            if (viewrect.Contains(e.Location) || fdrect.Contains(e.Location))
+            {
+                if ((selection != null) && (!selection.Locked))
+                {
+                    switch (e.Button)
+                    {
+                    case System.Windows.Forms.MouseButtons.Left:
+
+                        // Get time at mouse position
+                        DateTime m_Date = dayView.GetTimeAt(e.X, e.Y);
+
+                        switch (mode)
+                        {
+                            case Mode.Move:
+
+                                    // This works for regular (i.e. non full-day or multi-day appointments)
+
+                                    if (!selection.AllDayEvent && viewrect.Contains(e.Location))
+                                    {
+                                // add delta value
+                                m_Date = m_Date.Add(delta);
+
+                                if (length == TimeSpan.Zero)
+                                {
+                                    startDate = selection.StartDate;
+                                    length = selection.EndDate - startDate;
+                                }
+                                else
+                                {
+                                    DateTime m_EndDate = m_Date.Add(length);
+
+                                            if (m_EndDate.Day == m_Date.Day)
+                                            {
+                                                selection.StartDate = m_Date;
+                                                selection.EndDate = m_EndDate;
+                                                dayView.Invalidate();
+                                                dayView.RaiseAppointmentMove(new AppointmentEventArgs(selection));
+                                            }
+                                        }
+                                    }
+                                    else
+                                    {
+                                        if (fdrect.Contains(e.Location))
+                                        {
+                                            m_Date = m_Date.Add(delta);
+
+                                            int m_DateDiff = m_Date.Subtract(selection.StartDate).Days;
+
+                                            if (m_DateDiff != 0)
+                                            {
+                                                if (selection.StartDate.AddDays(m_DateDiff) > dayView.StartDate)
+                                                {
+                                                    selection.StartDate = selection.StartDate.AddDays(m_DateDiff);
+                                                    selection.EndDate = selection.EndDate.AddDays(m_DateDiff);
+                                                    dayView.Invalidate();
+                                                    dayView.RaiseAppointmentMove(new AppointmentEventArgs(selection));
+                                                }
+                                            }
+                                        }
+                                    }
+
+                                    break;
+
+                                case Mode.ResizeBottom:
+
+                                    if (m_Date > selection.StartDate)
+                                    {
+                                        if (selection.EndDate.Day == m_Date.Day)
+                                        {
+                                            selection.EndDate = m_Date;
+                                            dayView.Invalidate();
+                                            dayView.RaiseAppointmentMove(new AppointmentEventArgs(selection));
+                                        }
+                                    }
+
+                                    break;
+
+                                case Mode.ResizeTop:
+
+                                    if (m_Date < selection.EndDate)
+                                    {
+                                        if (selection.StartDate.Day == m_Date.Day)
+                                        {
+                                            selection.StartDate = m_Date;
+                                            dayView.Invalidate();
+                                            dayView.RaiseAppointmentMove(new AppointmentEventArgs(selection));
+                                        }
+                                    }
+                                    break;
+
+                                case Mode.ResizeLeft:
+                                    if (m_Date.Date < selection.EndDate.Date)
+                                    {
+                                        selection.StartDate = m_Date.Date;
+                                        dayView.Invalidate();
+                                        dayView.RaiseAppointmentMove(new AppointmentEventArgs(selection));
+                                    }
+                                    break;
+
+                                case Mode.ResizeRight:
+                                    if (m_Date.Date >= selection.StartDate.Date)
+                                    {
+                                        selection.EndDate = m_Date.Date.AddDays(1);
+                                        dayView.Invalidate();
+                                        dayView.RaiseAppointmentMove(new AppointmentEventArgs(selection));
+                                    }
+                                    break;
+                            }
+
+                            break;
+
+                        default:
+
+                            Mode tmpNode = GetMode(e);
+
+                            switch (tmpNode)
+                            {
+                                case Mode.Move:
+                                    dayView.Cursor = System.Windows.Forms.Cursors.Default;
+                                    break;
+                                case Mode.ResizeBottom:
+                                case Mode.ResizeTop:
+                                    if (!selection.AllDayEvent)
+                                        dayView.Cursor = System.Windows.Forms.Cursors.SizeNS;
+                                    break;
+                                case Mode.ResizeLeft: // changed by Gimlei
+                                case Mode.ResizeRight:
+                                    if (selection.AllDayEvent)
+                                        DayView.Cursor = System.Windows.Forms.Cursors.SizeWE;
+                                    break;
+                            }
+
+                            break;
+                    }
+                }
+            }
+        }
+
+        private Mode GetMode(System.Windows.Forms.MouseEventArgs e)
+        {
+            DayView.AppointmentView view = null;
+            Boolean gotview = false;
+
+            if (dayView.SelectedAppointment == null)
+                return Mode.None;
+
+            if (dayView.appointmentViews.ContainsKey(dayView.SelectedAppointment))
+            {
+                view = dayView.appointmentViews[dayView.SelectedAppointment];
+                gotview = true;
+            }
+
+            else if (dayView.longappointmentViews.ContainsKey(dayView.SelectedAppointment))
+            {
+                view = dayView.longappointmentViews[dayView.SelectedAppointment];
+                gotview = true;
+            }
+
+            if (gotview)
+            {
+                Rectangle topRect = view.Rectangle;
+                Rectangle bottomRect = view.Rectangle;
+                Rectangle leftRect = view.Rectangle;
+                Rectangle rightRect = view.Rectangle;
+
+                bottomRect.Y = bottomRect.Bottom - 5;
+                bottomRect.Height = 5;
+                topRect.Height = 5;
+                leftRect.Width = 5;
+                rightRect.X += rightRect.Width - 5;
+                rightRect.Width = 5;
+
+                if (topRect.Contains(e.Location))
+                    return Mode.ResizeTop;
+                else if (bottomRect.Contains(e.Location))
+                    return Mode.ResizeBottom;
+                else if (rightRect.Contains(e.Location)) // changed by Gimlei
+                    return Mode.ResizeRight;
+                else if (leftRect.Contains(e.Location))
+                    return Mode.ResizeLeft;
+                else
+                    return Mode.Move;
+            }
+
+            return Mode.None;
+        }
+
+        public void MouseUp(System.Windows.Forms.MouseEventArgs e)
+        {
+            if (e == null)
+                throw new ArgumentNullException("e");
+
+            if (e.Button == System.Windows.Forms.MouseButtons.Left)
+            {
+                if (Complete != null)
+                    Complete(this, EventArgs.Empty);
+            }
+
+            dayView.RaiseSelectionChanged(EventArgs.Empty);
+
+            mode = Mode.Move;
+
+            delta = TimeSpan.Zero;
+        }
+
+        public void MouseDown(System.Windows.Forms.MouseEventArgs e)
+        {
+            if (dayView.SelectedAppointmentIsNew)
+            {
+                dayView.RaiseNewAppointment();
+            }
+
+            if (dayView.CurrentlyEditing)
+                dayView.FinishEditing(false);
+
+            mode = GetMode(e);
+
+            if (dayView.SelectedAppointment != null)
+            {
+                DateTime downPos = dayView.GetTimeAt(e.X, e.Y);
+                // Calculate delta time between selection and clicked point
+                delta = dayView.SelectedAppointment.StartDate - downPos;
+            }
+            else
+            {
+                delta = TimeSpan.Zero;
+            }
+
+            length = TimeSpan.Zero;
+        }
+
+        public event EventHandler Complete;
+
+        enum Mode
+        {
+            ResizeTop,
+            ResizeBottom,
+            ResizeLeft,
+            ResizeRight,
+            Move,
+            None
+        }
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/ViewTools/SelectionType.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/ViewTools/SelectionType.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Calendar/3.3/ViewTools/SelectionType.cs	(revision 4340)
@@ -0,0 +1,15 @@
+
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Calendar
+{
+    public enum SelectionType
+    {
+        DateRange,
+        Appointment,
+        None
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/DataAdapterBase.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/DataAdapterBase.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/DataAdapterBase.cs	(revision 4340)
@@ -0,0 +1,302 @@
+﻿#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.Data;
+using System.Collections.Generic;
+using System.Text;
+using System.Linq;
+using System.Threading;
+using HeuristicLab.DataAccess.Interfaces;
+
+namespace HeuristicLab.DataAccess.ADOHelper {
+  public abstract class DataAdapterBase<AdapterT, ObjT, RowT>
+    where AdapterT : new()
+    where RowT : System.Data.DataRow
+    where ObjT : IPersistableObject, new() {
+
+    private ISession session;
+
+    private ITableAdapterWrapper<AdapterT, ObjT, RowT> dataAdapter;
+
+    protected DataAdapterBase(
+      ITableAdapterWrapper<AdapterT, ObjT, RowT> dataAdapter) {
+      this.dataAdapter = dataAdapter;
+    }
+
+    protected AdapterT Adapter {
+      get {
+        return dataAdapter.TransactionalAdapter;
+      }
+    }
+
+    protected ITableAdapterWrapper<AdapterT, ObjT, RowT> DataAdapterWrapper {
+      get {
+        return dataAdapter;
+      }
+    }
+
+    public ISession Session {
+      get {
+        return this.session;
+      }
+
+      set {
+        if (!(value is Session))
+          throw new Exception("Can only bind to ADO session");
+
+        this.session = value;
+        this.dataAdapter.Session = value as Session;
+      }
+    }
+
+    public object InnerAdapter {
+      get {
+        return this.Adapter;
+      }
+    }
+
+    #region Abstract methods
+    protected abstract RowT ConvertObj(ObjT obj, RowT row);
+
+    protected abstract ObjT ConvertRow(RowT row, ObjT obj);
+    #endregion
+
+    protected delegate IEnumerable<RowT> Selector();
+    protected delegate object TransactionalAction();
+
+    protected ObjT Convert(RowT row, ObjT obj) {
+      try {
+        obj = ConvertRow(row, obj);
+        return obj;
+      }
+      catch (DeletedRowInaccessibleException) {
+        return default(ObjT);
+      }
+      catch (RowNotInTableException) {
+        return default(ObjT);
+      }
+    }
+
+    protected RowT FindSingleRow(Selector selector) {
+      RowT row = default(RowT);
+
+      IEnumerable<RowT> found =
+        selector();
+
+      if (found.Count<RowT>() == 1)
+        row = found.First<RowT>();
+
+      return row;
+    }
+
+    protected ObjT FindSingle(Selector selector) {
+      return 
+        (ObjT)doInTransaction(
+         delegate() {
+          RowT row = FindSingleRow(selector);
+
+          ObjT result;
+          if (row != null) {
+            ObjT obj = new ObjT();
+            obj = Convert(row, obj);
+
+            result = obj;
+          } else {
+            result = default(ObjT);
+          }
+
+          return result;
+        });
+    }
+
+    private ICollection<ObjT> FindMultiple(Selector selector, 
+      int from, int size) {
+      return (ICollection<ObjT>)doInTransaction(
+        delegate() {
+          IEnumerable<RowT> found =
+            selector();
+
+          if (from > 0 && size > 0)
+            found = found.Skip<RowT>(from).Take<RowT>(size);
+
+          IList<ObjT> result =
+            new List<ObjT>();
+
+          foreach (RowT row in found) {
+            ObjT obj = new ObjT();
+            obj = Convert(row, obj);
+            if (obj != null)
+              result.Add(obj);
+          }
+
+          return result;
+        });   
+    }
+
+    protected ICollection<ObjT> FindMultiple(Selector selector) {
+      return FindMultiple(
+        selector, 0, -1);
+    }
+
+    protected virtual RowT GetRowById(Guid id) {
+      return FindSingleRow(
+        delegate() {
+          return dataAdapter.FindById(id);
+        });
+    }
+
+    protected object doInTransaction(TransactionalAction action) {
+      ITransaction trans =
+        session.GetCurrentTransaction();
+      bool transactionExists = trans != null;
+      if (!transactionExists) {
+        trans = session.BeginTransaction();
+      }
+
+      try {
+        object result = action();
+
+        if (!transactionExists && trans != null) {
+            trans.Commit();
+        }
+
+        return result;
+      }
+      catch (Exception e) {
+        if (!transactionExists && trans != null) {
+          trans.Rollback();
+        }
+
+        throw e;
+      }
+    }
+
+    protected virtual void doUpdate(ObjT obj) {
+      if (obj != null) {
+        RowT row = null;
+
+        if (obj.Id != Guid.Empty) {
+          row = GetRowById(obj.Id);
+        } else {
+          obj.Id = Guid.NewGuid();
+        }
+
+        if (row == null) {
+          row = dataAdapter.InsertNewRow(obj);
+        }
+
+        ConvertObj(obj, row);
+        dataAdapter.UpdateRow(row);
+      }
+    }
+
+    public void Update(ObjT obj) {
+      try {
+        doInTransaction(
+          delegate() {
+            doUpdate(obj);
+            return true;
+          });        
+      }
+      catch (DBConcurrencyException ex) {
+        DataRow row = ex.Row;
+
+        RowT current = GetRowById(obj.Id);
+        if (current != null) {
+          //find out changes
+          for (int i = 0; i < row.ItemArray.Length; i++) {            
+            if (!row[i, DataRowVersion.Current].Equals(
+                 row[i, DataRowVersion.Original])) {
+              current[i] = row[i];
+            }
+          }
+
+          ConvertRow(current, obj);
+          //try updating again
+          Update(obj);
+        }
+        //otherwise: row was deleted in the meantime - nothing to do
+      }
+    }
+
+    public virtual ObjT GetById(Guid id) {
+      return FindSingle(delegate() {
+        return dataAdapter.FindById(id);
+      });
+    }
+
+    public virtual ICollection<ObjT> GetAll() {
+      return new List<ObjT>(
+        FindMultiple(
+          new Selector(dataAdapter.FindAll)));
+    }
+
+    public virtual ICollection<ObjT> GetAll(int from, int size) {
+      //note - this base implementation is inefficient,
+      //consider overriding the implementation 
+      //in derived adapters (based on a query (SQL LIMIT))
+      return new List<ObjT>(
+        FindMultiple(
+          new Selector(dataAdapter.FindAll), 
+          from, size));
+    }
+
+    protected virtual bool doDelete(ObjT obj) {
+      bool success = false;
+
+      if (obj != null) {
+        RowT row =
+          GetRowById(obj.Id);
+
+        if (row != null) {
+          row.Delete();
+          dataAdapter.UpdateRow(row);
+
+          success = true;
+        }
+      }
+
+      return success;
+    }
+
+    public bool Delete(ObjT obj) {
+      try {
+        return (bool)doInTransaction(
+          delegate() {
+            return doDelete(obj);
+          });
+      }
+      catch (DBConcurrencyException) {
+        RowT current = GetRowById(obj.Id);
+        if (current != null) {
+          ConvertRow(current, obj);
+          //try deleting again
+          return Delete(obj);
+        } else {
+          //row has already been deleted
+          return false;
+        }
+      }
+    }
+  }
+}
+
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/DatabaseOptions.txt
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/DatabaseOptions.txt	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/DatabaseOptions.txt	(revision 4340)
@@ -0,0 +1,5 @@
+﻿optimistic locking should be enabled in order
+to avoid deadlocking:
+
+ALTER DATABASE [HeuristicLab.Databasename]
+   SET READ_COMMITTED_SNAPSHOT ON;
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/HeuristicLab.DataAccess.ADOHelper-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/HeuristicLab.DataAccess.ADOHelper-3.3.csproj	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/HeuristicLab.DataAccess.ADOHelper-3.3.csproj	(revision 4340)
@@ -0,0 +1,176 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{5CDACE54-5FB2-4344-A21C-963F63CB7C2B}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.DataAccess.ADOHelper</RootNamespace>
+    <AssemblyName>HeuristicLab.DataAccess.ADOHelper-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <StartupObject>
+    </StartupObject>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="VarBinaryStream.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="HeuristicLabDataAccessADOHelperPlugin.cs" />
+    <Compile Include="DataAdapterBase.cs" />
+    <Compile Include="TableAdapterWrapperBase.cs" />
+    <Compile Include="ITableAdapterWrapper.cs" />
+    <Compile Include="ManyToManyRelation.cs" />
+    <Compile Include="ManyToManyRelationHelper.cs" />
+    <Compile Include="Session.cs" />
+    <Compile Include="SessionFactory.cs" />
+    <Compile Include="Transaction.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.XML" />
+  </ItemGroup>
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <ItemGroup>
+    <Content Include="DatabaseOptions.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.DataAccess\3.3\HeuristicLab.DataAccess-3.3.csproj">
+      <Project>{9076697B-C151-46CD-95BC-1D059492B478}</Project>
+      <Name>HeuristicLab.DataAccess-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+</Project>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/HeuristicLabDataAccessADOHelperPlugin.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/HeuristicLabDataAccessADOHelperPlugin.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/HeuristicLabDataAccessADOHelperPlugin.cs	(revision 4340)
@@ -0,0 +1,35 @@
+﻿#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.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.DataAccess.ADOHelper {
+  [Plugin("HeuristicLab.DataAccess.ADOHelper", "3.3")]
+  [PluginFile("HeuristicLab.DataAccess.ADOHelper-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.DataAccess", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  public class HeuristicLabDataAccessADOHelperPlugin : PluginBase {
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/ITableAdapterWrapper.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/ITableAdapterWrapper.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/ITableAdapterWrapper.cs	(revision 4340)
@@ -0,0 +1,46 @@
+﻿#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.DataAccess.Interfaces;
+using System.Data.Common;
+
+namespace HeuristicLab.DataAccess.ADOHelper {
+  public interface ITableAdapterWrapper<AdapterT, ObjT, RowT>
+   where AdapterT : new()
+   where ObjT : new()
+   where RowT : System.Data.DataRow {
+    void UpdateRow(RowT row);
+
+    RowT InsertNewRow(ObjT obj);
+
+    IEnumerable<RowT> FindById(Guid id);
+
+    IEnumerable<RowT> FindAll();
+
+    AdapterT TransactionalAdapter { get; }
+
+    Session Session { set; }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/ManyToManyRelation.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/ManyToManyRelation.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/ManyToManyRelation.cs	(revision 4340)
@@ -0,0 +1,27 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.DataAccess.Interfaces;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.DataAccess.ADOHelper {
+  [StorableClass]
+  public class ManyToManyRelation: PersistableObject {
+    [Storable]
+    public Guid Id2 { get; set; }
+    [Storable]
+    public IList<object> AdditionalAttributes { get; set; }
+
+    public ManyToManyRelation() {}
+
+    public ManyToManyRelation(bool deserializing) : base(deserializing) { }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      ManyToManyRelation clone = (ManyToManyRelation) base.Clone(cloner);
+      clone.Id2 = this.Id2;
+      clone.AdditionalAttributes = new List<object>(this.AdditionalAttributes);
+      return clone;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/ManyToManyRelationHelper.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/ManyToManyRelationHelper.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/ManyToManyRelationHelper.cs	(revision 4340)
@@ -0,0 +1,107 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.DataAccess.ADOHelper {
+  public class ManyToManyRelationHelper<AdapterT, RowT>
+    where AdapterT : new()
+    where RowT : System.Data.DataRow
+    {
+    ITableAdapterWrapper<AdapterT, ManyToManyRelation, RowT> tableAdapterWrapper;
+
+    private int childIndex;
+
+    public ManyToManyRelationHelper(
+      ITableAdapterWrapper<AdapterT, ManyToManyRelation, RowT> tableAdapterWrapper, 
+      int childIndex) {
+      this.tableAdapterWrapper = tableAdapterWrapper;
+      this.childIndex = childIndex;
+    }
+
+    public Session Session {
+      set {
+        tableAdapterWrapper.Session = value;
+      }
+    }
+
+    public void UpdateRelationships(Guid objectA,
+      IList<Guid> relationships) {
+      UpdateRelationships(objectA, relationships, null);
+    }
+
+    public void UpdateRelationships(Guid objectA, 
+      IList<Guid> relationships,
+      IList<object> additionalAttributes) {
+      //firstly check for created references
+      IList<Guid> existing =
+        this.GetRelationships(objectA); 
+
+      foreach (Guid relationship in relationships) {
+        if (!existing.Contains(relationship)) {
+          ManyToManyRelation rel = 
+            new ManyToManyRelation();
+          rel.Id = objectA;
+          rel.Id2 = relationship;
+          if(additionalAttributes != null)
+            rel.AdditionalAttributes = 
+              new List<object>(additionalAttributes);
+          
+          RowT inserted = 
+            tableAdapterWrapper.InsertNewRow(rel);
+
+          tableAdapterWrapper.UpdateRow(inserted);
+        }
+      }
+
+      //secondly check for deleted references
+      ICollection<Guid> deleted =
+        new List<Guid>();
+
+      foreach (Guid relationship in existing) {
+        if(!relationships.Contains(relationship)) {
+          deleted.Add(relationship);
+        }
+      }
+
+      foreach (Guid relationship in deleted) {
+        RowT toDelete =
+          FindRow(objectA, relationship);
+        if (toDelete != null) {
+          toDelete.Delete();
+          tableAdapterWrapper.UpdateRow(toDelete);
+        }
+      }
+    }
+
+    public IList<Guid> GetRelationships(Guid objectA) {
+      IList<Guid> result =
+        new List<Guid>();
+
+      IEnumerable<RowT> rows = 
+        tableAdapterWrapper.FindById(objectA);
+
+      foreach(RowT row in rows) {
+        result.Add((Guid)row[childIndex]);
+      }
+
+      return result;
+    }
+
+    private RowT FindRow(Guid objectA, Guid objectB) {
+      IEnumerable<RowT> rows =
+       tableAdapterWrapper.FindById(objectA);
+
+      RowT found = null;
+
+      foreach (RowT row in rows) {
+        if (row[childIndex].Equals(objectB)) {
+          found = row;
+          break;
+        }
+      }
+
+      return found;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/Properties/AssemblyInfo.frame	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/Properties/AssemblyInfo.frame	(revision 4340)
@@ -0,0 +1,58 @@
+#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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.DataAccess.ADOHelper")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("99D769C4-55B0-4f2a-81B4-11763DCD7A03")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/Session.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/Session.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/Session.cs	(revision 4340)
@@ -0,0 +1,164 @@
+﻿#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.DataAccess.Interfaces;
+using HeuristicLab.PluginInfrastructure;
+using System.Data.Common;
+using System.Threading;
+
+namespace HeuristicLab.DataAccess.ADOHelper {
+  public class Session: ISession {
+    private SessionFactory factory;
+
+    private Transaction transaction;
+
+    private DbConnection connection;
+
+    private Thread ownerThread;
+
+    private int usageCounter = 0;
+
+    private IDictionary<Guid, object> adapters =
+      new Dictionary<Guid, object>();
+
+    public Session(SessionFactory factory) {
+      this.factory = factory;
+      this.ownerThread = Thread.CurrentThread;
+      this.usageCounter = 0;
+    }
+
+    public void CheckThread() {
+      if (!Thread.CurrentThread.Equals(ownerThread)) {
+        throw new Exception("Session is owned by another thread");
+      }
+    }
+
+    public DbConnection Connection {
+      get {
+        if (connection == null) {
+          connection = factory.CreateConnection();
+        }
+
+        return connection;
+      }
+    }
+
+    public void DetachTrasaction() {
+      this.transaction = null;
+    }
+
+    public void IncrementUsageCounter() {
+      this.usageCounter++;
+    }
+
+    #region ISession Members
+    public ISessionFactory Factory {
+      get {
+        return this.factory;
+      }
+    }
+
+    public ITransaction BeginTransaction(TransactionIsolationLevel isolationLevel) {
+      CheckThread();
+
+      if (transaction == null) {
+        transaction = new Transaction(this, isolationLevel);
+        transaction.Connection = Connection;
+      }
+
+      transaction.IncrementUsageCounter();
+
+      return transaction;
+    }
+
+    public ITransaction BeginTransaction() {
+      return BeginTransaction(TransactionIsolationLevel.Default);
+    }
+
+    public ITransaction GetCurrentTransaction() {
+      CheckThread();
+
+      return transaction;
+    }
+
+    public IDataAdapter<ObjT> GetDataAdapter<ObjT>()
+      where ObjT : IPersistableObject {
+      CheckThread();
+
+      Guid adapterId = typeof(IDataAdapter<ObjT>).GUID;
+
+      if (!adapters.ContainsKey(adapterId)) {
+        IDataAdapter<ObjT> adapter =
+          ApplicationManager.Manager.GetInstances<IDataAdapter<ObjT>>().First();
+
+        adapter.Session = this;
+
+        adapters.Add(adapterId, adapter);
+      }
+
+      return adapters[adapterId] as IDataAdapter<ObjT>;
+    }
+
+    public T GetDataAdapter<ObjT, T>()
+      where ObjT : IPersistableObject
+      where T : class, IDataAdapter<ObjT>
+    {
+      CheckThread();
+
+      Guid adapterId = typeof(T).GUID;
+
+      if (!adapters.ContainsKey(adapterId)) {
+        T adapter =
+          ApplicationManager.Manager.GetInstances<T>().First();
+
+        adapter.Session = this;
+
+        adapters.Add(adapterId, adapter);
+      }
+
+      return adapters[adapterId] as T;
+    }
+
+    public void EndSession() {
+      this.usageCounter--;
+
+      if (usageCounter <= 0) {
+        CheckThread();
+
+        if (transaction != null) {
+          transaction.Rollback();
+          transaction = null;
+        }
+        if (connection.State == System.Data.ConnectionState.Open) {
+          connection.Close();
+          connection = null;
+        }
+        factory.EndSession(this);
+      }
+    }
+
+    #endregion
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/SessionFactory.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/SessionFactory.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/SessionFactory.cs	(revision 4340)
@@ -0,0 +1,122 @@
+﻿#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.DataAccess.Interfaces;
+using System.Threading;
+using System.Timers;
+using System.Data.Common;
+
+namespace HeuristicLab.DataAccess.ADOHelper {
+  public class SessionFactory: ISessionFactory {
+    private IDictionary<Thread, Session> sessions =
+      new Dictionary<Thread, Session>();
+
+    public Type DbConnectionType { get;  set; }
+    private String dbConnectionString;
+    public String DbConnectionString { 
+        get {
+            return dbConnectionString;
+        }
+        set {
+            this.dbConnectionString = value;
+            Console.WriteLine("connection set! "+ value);
+        }
+    }
+
+    public SessionFactory() {
+      System.Timers.Timer timer =
+        new System.Timers.Timer();
+
+      TimeSpan interval =
+        new TimeSpan(0, 1, 0);
+
+      timer.Interval = interval.TotalMilliseconds;
+      timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
+      timer.Start();
+    }
+
+    void timer_Elapsed(object sender, ElapsedEventArgs e) {
+      lock (this) {
+        ICollection<Thread> toBeRemoved =
+          new List<Thread>();
+
+        foreach (Thread t in sessions.Keys) {
+          if (t.ThreadState == ThreadState.Stopped) {
+            toBeRemoved.Add(t);
+          }
+        }
+
+        foreach (Thread t in toBeRemoved) {
+          sessions.Remove(t);
+        }
+      }
+    }
+
+    public DbConnection CreateConnection() {
+      DbConnection conn = 
+        Activator.CreateInstance(DbConnectionType) as DbConnection;
+
+      conn.ConnectionString = DbConnectionString;
+
+      return conn;
+    }
+
+    #region ISessionFactory Members
+
+    public ISession GetSessionForCurrentThread() {
+      lock (this) {
+        Thread current = Thread.CurrentThread;
+
+        if (!sessions.ContainsKey(current)) {
+          sessions[current] =
+            new Session(this);
+        }
+
+        sessions[current].IncrementUsageCounter();
+
+        return sessions[current];
+      }
+    }
+
+    public void EndSession(ISession session) {
+      lock (this) {
+        ICollection<Thread> toBeRemoved =
+          new List<Thread>();
+
+        foreach(Thread t in sessions.Keys) {
+          if(sessions[t].Equals(session)) {
+            toBeRemoved.Add(t);
+          }
+        }
+
+        foreach (Thread t in toBeRemoved) {
+          sessions.Remove(t);
+        }
+      }
+    }
+
+    #endregion
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/TableAdapterWrapperBase.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/TableAdapterWrapperBase.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/TableAdapterWrapperBase.cs	(revision 4340)
@@ -0,0 +1,84 @@
+﻿#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.DataAccess.Interfaces;
+using System.Data.Common;
+
+namespace HeuristicLab.DataAccess.ADOHelper {
+  public abstract class TableAdapterWrapperBase<AdapterT, ObjT, RowT>:
+    ITableAdapterWrapper<AdapterT, ObjT, RowT>
+    where AdapterT : new()
+    where ObjT : new()
+    where RowT : System.Data.DataRow {
+    protected AdapterT adapter =
+      new AdapterT();
+
+    private Session session;
+    
+    #region IDataAdapterWrapper<AdapterT,ObjT,RowT> Members
+
+    public AdapterT TransactionalAdapter {
+      get {
+        if (session == null)
+          throw new Exception("No session set!");
+
+        ITransaction trans =
+          session.GetCurrentTransaction();
+        if (trans != null)
+          SetTransaction(trans.InnerTransaction as DbTransaction);
+        else
+          SetTransaction(null);
+
+        return this.adapter; 
+      }
+    }
+
+    public Session Session {
+      protected get {
+        return this.session;
+      }
+
+      set { 
+        this.session = value;
+
+        SetConnection(value.Connection); 
+      }
+    }
+
+    public abstract void UpdateRow(RowT row);
+
+    public abstract RowT InsertNewRow(ObjT obj);
+
+    public abstract IEnumerable<RowT> FindById(Guid id);
+
+    public abstract IEnumerable<RowT> FindAll();
+
+    protected abstract void SetConnection(DbConnection connection);
+
+    protected abstract void SetTransaction(DbTransaction transaction);
+
+    #endregion
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/Transaction.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/Transaction.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/Transaction.cs	(revision 4340)
@@ -0,0 +1,125 @@
+﻿#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.DataAccess.Interfaces;
+using System.Data;
+using System.Data.Common;
+
+namespace HeuristicLab.DataAccess.ADOHelper {
+  class Transaction: ITransaction {
+    private DbTransaction transaction;
+
+    private Session session;
+
+    private int usageCounter = 0;
+
+    private TransactionIsolationLevel isolationLevel;
+
+    public Transaction(Session session, TransactionIsolationLevel isolationLevel) {
+      this.session = session;
+      this.isolationLevel = isolationLevel;
+    }
+
+    public void IncrementUsageCounter() {
+      this.usageCounter++;
+    }
+
+    public DbConnection Connection {
+      set {
+        if (value != null &&
+          (transaction == null ||
+           !(transaction.Connection != null &&
+             transaction.Connection.Equals(value)))) {
+          if (value.State != System.Data.ConnectionState.Open)
+            value.Open();
+
+          if (isolationLevel == TransactionIsolationLevel.Default)
+            transaction = value.BeginTransaction(IsolationLevel.ReadCommitted);
+          else if (isolationLevel == TransactionIsolationLevel.ReadUncommitted)
+            transaction = value.BeginTransaction(IsolationLevel.ReadUncommitted);
+          else if (isolationLevel == TransactionIsolationLevel.ReadCommitted)
+            transaction = value.BeginTransaction(IsolationLevel.ReadCommitted);
+          else if (isolationLevel == TransactionIsolationLevel.RepeatableRead)
+            transaction = value.BeginTransaction(IsolationLevel.RepeatableRead);
+          else if (isolationLevel == TransactionIsolationLevel.Serializable)
+            transaction = value.BeginTransaction(IsolationLevel.Serializable);
+          else
+            transaction = value.BeginTransaction(IsolationLevel.ReadCommitted);
+        }
+      }
+    }
+
+    #region ITransaction Members
+    public void Commit() {
+      this.session.CheckThread();
+
+      usageCounter--;
+
+      if (transaction != null && usageCounter <= 0) {
+        DbConnection conn =
+          transaction.Connection;
+
+        transaction.Commit();
+
+        transaction = null;
+        session.DetachTrasaction();
+
+        if (conn != null && 
+            conn.State == System.Data.ConnectionState.Open)
+          conn.Close();
+      }
+    }
+
+    public void Rollback() {
+      this.session.CheckThread();
+
+      usageCounter = 0;
+
+      if (transaction != null) {
+        DbConnection conn =
+            transaction.Connection;
+
+        transaction.Rollback();
+
+        transaction = null;
+        session.DetachTrasaction();
+
+        if (conn != null &&
+            conn.State == System.Data.ConnectionState.Open)
+          conn.Close();
+      }
+    }
+
+    public object InnerTransaction {
+      get {
+        this.session.CheckThread();
+
+        return transaction;
+      }
+    }
+
+    #endregion
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/VarBinaryStream.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/VarBinaryStream.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess.ADOHelper/3.3/VarBinaryStream.cs	(revision 4340)
@@ -0,0 +1,288 @@
+/* Based on: 
+ *   http://www.eggheadcafe.com/conversation.aspx?messageid=29988910&threadid=29988841
+ * */
+
+using System;
+using System.IO;
+using System.Data.SqlClient;
+using System.Data;
+
+namespace HeuristicLab.DataAccess.ADOHelper {
+  /// <summary>
+  /// The VarBinaryStream class inherits from Stream. It uses a
+  /// VarBinarySource class to execute the actual TSQL.
+  /// </summary>
+  public class VarBinaryStream : Stream, IDisposable {
+    private long _position;
+    private readonly VarBinarySource _source;
+
+    public VarBinaryStream(VarBinarySource source) {
+      _position = 0;
+      _source = source;
+    }
+
+    public override bool CanRead {
+      get { return true; }
+    }
+
+    public override bool CanSeek {
+      get { return true; }
+    }
+
+    public override bool CanWrite {
+      get { return true; }
+    }
+
+    public override long Length {
+      get { return _source.Length; }
+    }
+
+    public override long Position {
+      get { return _position; }
+      set { this.Seek(value, SeekOrigin.Begin); }
+    }
+
+    public override void Flush() { }
+
+    public override long Seek(long offset, SeekOrigin origin) {
+      switch (origin) {
+        case SeekOrigin.Begin: {
+            if ((offset < 0) && (offset > this.Length))
+              throw new ArgumentException("Invalid seek origin.");
+            _position = offset;
+            break;
+          }
+        case SeekOrigin.End: {
+            if ((offset > 0) && (offset < -this.Length))
+              throw new ArgumentException("Invalid seek origin.");
+            _position = this.Length - offset;
+            break;
+          }
+        case SeekOrigin.Current: {
+            if ((_position + offset > this.Length))
+              throw new ArgumentException("Invalid seek origin.");
+            _position = _position + offset;
+            break;
+          }
+        default: {
+            throw new ArgumentOutOfRangeException("origin");
+          }
+      }
+      return _position;
+    }
+
+    public override void SetLength(long value) {
+      throw new NotSupportedException();
+    }
+
+    public override int Read(byte[] buffer, int offset, int count) {
+      if (buffer == null)
+        throw new ArgumentNullException("buffer");
+      if (offset < 0)
+        throw new ArgumentOutOfRangeException("offset");
+      if (count < 0)
+        throw new ArgumentOutOfRangeException("count");
+      if (buffer.Length - offset < count)
+        throw new ArgumentException("Offset and length were out of bounds for the array");
+
+      byte[] data = _source.Read(Position, count);
+      if (data == null)
+        return 0;
+
+      Buffer.BlockCopy(data, 0, buffer, offset, data.Length);
+      _position += data.Length;
+      return data.Length;
+    }
+
+    public override void Write(byte[] buffer, int offset, int count) {
+      if (buffer == null)
+        throw new ArgumentNullException("buffer");
+      if (offset < 0)
+        throw new ArgumentOutOfRangeException("offset");
+      if (count < 0)
+        throw new ArgumentOutOfRangeException("count");
+      if (buffer.Length - offset < count)
+        throw new ArgumentException("Offset and length were out of bounds for the array");
+
+      byte[] data = GetWriteBuffer(buffer, count, offset);
+      _source.Write(data, _position, count);
+      _position += count;
+    }
+
+    private static byte[] GetWriteBuffer(byte[] buffer, int count, int
+    offset) {
+      if (buffer.Length == count)
+        return buffer;
+      byte[] data = new byte[count];
+      Buffer.BlockCopy(buffer, offset, data, 0, count);
+      return data;
+    }
+
+    public override void Close() {
+      _source.Close();
+    }
+
+    protected override void Dispose(bool disposing) {
+      if (!disposing) {
+        if (_source != null) {
+          _source.Close();
+          _source.Dispose();
+        }
+      }
+      base.Dispose(disposing);
+    }
+  }
+
+
+  /// <summary>
+  /// The VarBinarySource class constructs the TSQL used
+  /// to read to / write from the VARBINARY(MAX) column.
+  /// IT is currently specialised for a table with a single
+  /// int column for a PK, but this can be easily generalised
+  /// for compound keys.
+  /// </summary>
+  public class VarBinarySource : IDisposable {
+    private SqlCommand _readCommand;
+    private SqlCommand _writeCommand;
+    private SqlConnection _connection;
+    private SqlTransaction _transaction;
+    private bool _ownedTransaction = false;
+    private bool _ownedConnection = false;
+    private readonly long _length;
+
+    public VarBinarySource(SqlConnection connection, 
+      SqlTransaction transaction,
+      string table, string
+    dataColumn, string keyColumn, Guid key) {
+      _connection = connection;
+
+      if (_connection.State == ConnectionState.Closed) {
+        _connection.Open();
+        _ownedConnection = true;
+
+        _transaction =
+          _connection.BeginTransaction(
+          IsolationLevel.RepeatableRead)
+            as SqlTransaction;
+        _ownedTransaction = true;
+      } else {
+        _ownedConnection = false;
+
+        if (transaction != null) {
+          _transaction = transaction;
+
+          _ownedTransaction = false;
+        } else {
+          _transaction =
+            _connection.BeginTransaction(
+          IsolationLevel.ReadCommitted)
+            as SqlTransaction;
+
+          _ownedTransaction = true;
+        }
+      }
+
+      _length = GetLength(connection,  table, dataColumn, keyColumn, key);
+      _readCommand = CreateReadCommand(connection, table, dataColumn,
+      keyColumn, key);
+      _writeCommand = CreateWriteCommand(connection, table, dataColumn,
+      keyColumn, key);
+    }
+
+    public long Length {
+      get { return _length; }
+    }
+
+    private static SqlCommand CreateReadCommand(SqlConnection connection,
+    string table, string dataColumn, string keyColumn,
+    Guid key) {
+      SqlCommand readCommand = connection.CreateCommand();
+      readCommand.CommandText = string.Format(@"
+select substring({0}, @offset, @length)
+from {1}
+where {2} = @key", dataColumn, table, keyColumn);
+      readCommand.Parameters.Add("@key", SqlDbType.UniqueIdentifier).Value = key;
+      readCommand.Parameters.Add("@offset", SqlDbType.BigInt);
+      readCommand.Parameters.Add("@length", SqlDbType.BigInt);
+      return readCommand;
+    }
+
+    private static SqlCommand CreateWriteCommand(SqlConnection connection,
+    string table, string dataColumn, string keyColumn,
+    Guid key) {
+      SqlCommand writecommand = connection.CreateCommand();
+      writecommand.CommandText = string.Format(@"
+update {0}
+set {1}.write(@buffer, @offset, @length)
+where {2} = @key", table, dataColumn, keyColumn);
+      writecommand.Parameters.Add("@key", SqlDbType.UniqueIdentifier).Value = key;
+      writecommand.Parameters.Add("@offset", SqlDbType.BigInt);
+      writecommand.Parameters.Add("@length", SqlDbType.BigInt);
+      writecommand.Parameters.Add("@buffer", SqlDbType.VarBinary);
+      return writecommand;
+    }
+
+    private long GetLength(SqlConnection connection,
+      string table,
+    string dataColumn, string keyColumn,
+    Guid key) {
+      using (SqlCommand command = connection.CreateCommand()) {
+        command.Transaction = _transaction;
+
+        SqlParameter length = command.Parameters.Add("@length",
+        SqlDbType.BigInt);
+        length.Direction = ParameterDirection.Output;
+
+        command.CommandText = string.Format(@"
+select @length = cast(datalength({0}) as bigint)
+from {1}
+where {2} = @key", dataColumn, table, keyColumn);
+        command.Parameters.Add("@key", SqlDbType.UniqueIdentifier).Value = key;
+        command.ExecuteNonQuery();
+        return length.Value == DBNull.Value ? 0 : (long)length.Value;
+      }
+    }
+
+    public byte[] Read(long offset, long length) {
+      _readCommand.Transaction = _transaction;
+
+      // substring is 1-based.
+      _readCommand.Parameters["@offset"].Value = offset + 1;
+      _readCommand.Parameters["@length"].Value = length;
+      return (byte[])_readCommand.ExecuteScalar();
+    }
+
+    public void Write(byte[] buffer, long offset, long length) {
+      _writeCommand.Transaction = _transaction;
+      
+      _writeCommand.Parameters["@buffer"].Value = buffer;
+      _writeCommand.Parameters["@offset"].Value = offset;
+      _writeCommand.Parameters["@length"].Value = length;
+      _writeCommand.ExecuteNonQuery();
+    }
+
+    public void Close() {
+      if (_transaction != null) {
+        if(_ownedTransaction)
+          _transaction.Commit();
+        _transaction = null;
+      }
+
+      if (_connection != null) {
+        if (_ownedConnection)
+          _connection.Close();
+        _connection = null;
+      }
+    }
+
+    public void Dispose() {
+      if (_readCommand != null) {
+        _readCommand.Dispose();
+      }
+      if (_writeCommand != null) {
+        _writeCommand.Dispose();
+      }
+    }
+  }
+}
+
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/HeuristicLab.DataAccess-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/HeuristicLab.DataAccess-3.3.csproj	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/HeuristicLab.DataAccess-3.3.csproj	(revision 4340)
@@ -0,0 +1,174 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{9076697B-C151-46CD-95BC-1D059492B478}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.DataAccess</RootNamespace>
+    <AssemblyName>HeuristicLab.DataAccess-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <StartupObject>
+    </StartupObject>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <ItemGroup>
+    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Interfaces\IPolymorphicDataAdapter.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="HeuristicLabDataAccessPlugin.cs" />
+    <Compile Include="Interfaces\ISession.cs" />
+    <Compile Include="Interfaces\ISessionFactory.cs" />
+    <Compile Include="Interfaces\ITransaction.cs" />
+    <Compile Include="Interfaces\ITransactionManager.cs" />
+    <Compile Include="PersistableObject.cs" />
+    <Compile Include="Interfaces\IDataAdapter.cs" />
+    <Compile Include="Interfaces\IPersistableObject.cs" />
+  </ItemGroup>
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+</Project>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/HeuristicLabDataAccessPlugin.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/HeuristicLabDataAccessPlugin.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/HeuristicLabDataAccessPlugin.cs	(revision 4340)
@@ -0,0 +1,34 @@
+﻿#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.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.DataAccess {
+  [Plugin("HeuristicLab.DataAccess", "3.3")]
+  [PluginFile("HeuristicLab.DataAccess-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  public class HeuristicLabDataAccessPlugin : PluginBase {
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/Interfaces/IDataAdapter.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/Interfaces/IDataAdapter.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/Interfaces/IDataAdapter.cs	(revision 4340)
@@ -0,0 +1,66 @@
+﻿#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.Text;
+
+namespace HeuristicLab.DataAccess.Interfaces {
+  public interface IDataAdapter<ObjT>
+    where ObjT: IPersistableObject
+  {
+    /// <summary>
+    /// Save or update the object
+    /// </summary>
+    /// <param name="user"></param>
+    void Update(ObjT obj);
+
+    /// <summary>
+    /// Get the object with the specified ID
+    /// </summary>
+    /// <param name="userId"></param>
+    /// <returns></returns>
+    ObjT GetById(Guid id);
+
+    /// <summary>
+    /// Get all objects
+    /// </summary>
+    /// <returns></returns>
+    ICollection<ObjT> GetAll();
+
+    /// <summary>
+    /// Get all objects (paged)
+    /// </summary>
+    /// <returns></returns>
+    ICollection<ObjT> GetAll(int from, int size);
+
+    /// <summary>
+    /// Deletes the object
+    /// </summary>
+    /// <param name="user"></param>
+    bool Delete(ObjT obj);
+
+    /// <summary>
+    /// sets the session
+    /// </summary>
+    ISession Session { set; }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/Interfaces/IPersistableObject.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/Interfaces/IPersistableObject.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/Interfaces/IPersistableObject.cs	(revision 4340)
@@ -0,0 +1,30 @@
+﻿#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.Text;
+
+namespace HeuristicLab.DataAccess.Interfaces {
+  public interface IPersistableObject {
+    Guid Id { get; set;  }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/Interfaces/IPolymorphicDataAdapter.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/Interfaces/IPolymorphicDataAdapter.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/Interfaces/IPolymorphicDataAdapter.cs	(revision 4340)
@@ -0,0 +1,49 @@
+﻿#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.Text;
+
+namespace HeuristicLab.DataAccess.Interfaces {
+  public interface IPolymorphicDataAdapter<ObjT>: IDataAdapter<ObjT>
+    where ObjT: IPersistableObject
+  {
+    /// <summary>
+    /// Save or update the object
+    /// </summary>
+    /// <param name="user"></param>
+    void UpdatePolymorphic(ObjT obj);
+
+    /// <summary>
+    /// Get the object with the specified ID
+    /// </summary>
+    /// <param name="userId"></param>
+    /// <returns></returns>
+    ObjT GetByIdPolymorphic(Guid id);
+
+    /// <summary>
+    /// Deletes the object
+    /// </summary>
+    /// <param name="user"></param>
+    bool DeletePolymorphic(ObjT obj);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/Interfaces/ISession.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/Interfaces/ISession.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/Interfaces/ISession.cs	(revision 4340)
@@ -0,0 +1,49 @@
+﻿#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.Text;
+
+namespace HeuristicLab.DataAccess.Interfaces {
+  public enum TransactionIsolationLevel {
+    Default, ReadUncommitted, ReadCommitted, RepeatableRead, Serializable
+  };
+
+  public interface ISession {
+    ISessionFactory Factory { get; }
+
+    ITransaction BeginTransaction(TransactionIsolationLevel isolationLevel);
+
+    ITransaction BeginTransaction();
+
+    ITransaction GetCurrentTransaction();
+
+    IDataAdapter<ObjT> GetDataAdapter<ObjT>()
+      where ObjT : IPersistableObject;
+
+    T GetDataAdapter<ObjT, T>()
+      where ObjT : IPersistableObject
+      where T : class, IDataAdapter<ObjT>;
+
+    void EndSession();
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/Interfaces/ISessionFactory.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/Interfaces/ISessionFactory.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/Interfaces/ISessionFactory.cs	(revision 4340)
@@ -0,0 +1,33 @@
+﻿#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.Text;
+
+namespace HeuristicLab.DataAccess.Interfaces {
+  public interface ISessionFactory {
+    ISession GetSessionForCurrentThread();
+
+    Type DbConnectionType { set; }
+    String DbConnectionString { set; }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/Interfaces/ITransaction.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/Interfaces/ITransaction.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/Interfaces/ITransaction.cs	(revision 4340)
@@ -0,0 +1,33 @@
+﻿#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.Text;
+
+namespace HeuristicLab.DataAccess.Interfaces {
+  public interface ITransaction {
+    void Commit();
+    void Rollback();
+
+    object InnerTransaction { get; }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/Interfaces/ITransactionManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/Interfaces/ITransactionManager.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/Interfaces/ITransactionManager.cs	(revision 4340)
@@ -0,0 +1,31 @@
+﻿#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.Text;
+
+namespace HeuristicLab.DataAccess.Interfaces {
+  public interface ITransactionManager {
+    ITransaction BeginTransaction();
+    ITransaction GetTransactionForCurrentThread(); 
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/PersistableObject.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/PersistableObject.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/PersistableObject.cs	(revision 4340)
@@ -0,0 +1,71 @@
+﻿#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.Text;
+using System.Runtime.Serialization;
+using HeuristicLab.DataAccess.Interfaces;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.DataAccess {
+  [StorableClass]
+  [DataContract]
+  [Serializable]
+  public class PersistableObject: IPersistableObject, IDeepCloneable {
+
+    public PersistableObject() { }
+
+    public PersistableObject(bool deserializing) { }
+
+    [Storable]
+    [DataMember]
+    public Guid Id { get; set; }
+
+    public override bool Equals(object obj) {
+      if (obj is IPersistableObject)
+        return this.Id.Equals(
+          (obj as IPersistableObject).Id);
+      else
+        return base.Equals(obj);
+    }
+
+    public override string ToString() {
+      return Id.ToString();
+    }
+
+    public override int GetHashCode() {
+      return this.Id.GetHashCode();
+    }
+
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      PersistableObject clone = (PersistableObject)Activator.CreateInstance(this.GetType(), true);
+      cloner.RegisterClonedObject(this, clone);
+      clone.Id = this.Id;
+      return clone;
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/Properties/AssemblyInfo.frame	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.DataAccess/3.3/Properties/AssemblyInfo.frame	(revision 4340)
@@ -0,0 +1,58 @@
+#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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.DataAccess")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("EC1415CC-94EF-4786-9811-41881787FF4E")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive 3.3.sln
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive 3.3.sln	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive 3.3.sln	(revision 4340)
@@ -0,0 +1,410 @@
+﻿
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Server.Core-3.3", "HeuristicLab.Hive.Server.Core\3.3\HeuristicLab.Hive.Server.Core-3.3.csproj", "{898B31CF-81DC-453B-AEB3-BDF83197A7EE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive-3.3", "HeuristicLab.Hive\3.3\HeuristicLab.Hive-3.3.csproj", "{C92AAC8C-4D88-449C-ABA5-2B935D769842}"
+	ProjectSection(ProjectDependencies) = postProject
+		{CDAD2510-299C-4FA2-B351-9D71A5AF20B7} = {CDAD2510-299C-4FA2-B351-9D71A5AF20B7}
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE} = {AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}
+		{4D5A2A16-66C2-431D-9AA3-BD3041E64B84} = {4D5A2A16-66C2-431D-9AA3-BD3041E64B84}
+		{21187322-52DD-4243-80A4-A85F0263E63B} = {21187322-52DD-4243-80A4-A85F0263E63B}
+		{A84C0A25-13D0-40A6-924F-53556D9691DC} = {A84C0A25-13D0-40A6-924F-53556D9691DC}
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F} = {A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}
+		{89F4BC52-C174-481E-9BD2-3814171020E8} = {89F4BC52-C174-481E-9BD2-3814171020E8}
+		{5CDACE54-5FB2-4344-A21C-963F63CB7C2B} = {5CDACE54-5FB2-4344-A21C-963F63CB7C2B}
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E} = {8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}
+		{1605256A-1CB3-44AB-AAFF-577093EE5789} = {1605256A-1CB3-44AB-AAFF-577093EE5789}
+		{D17A4D6A-4CAA-4470-8A19-F42463C021FD} = {D17A4D6A-4CAA-4470-8A19-F42463C021FD}
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119} = {42A1D075-6C12-4DD9-B0C2-C6F5210A8119}
+		{9076697B-C151-46CD-95BC-1D059492B478} = {9076697B-C151-46CD-95BC-1D059492B478}
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A} = {5010BD86-23B7-4F8C-888A-76D21AD5266A}
+		{4F15BEA2-F494-4584-A0E5-6BA85377B313} = {4F15BEA2-F494-4584-A0E5-6BA85377B313}
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE} = {898B31CF-81DC-453B-AEB3-BDF83197A7EE}
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8} = {134F93D7-E7C8-4ECD-9923-7F63259A60D8}
+		{A4499DDD-D1B8-414F-98F6-903C2C71BEB0} = {A4499DDD-D1B8-414F-98F6-903C2C71BEB0}
+	EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{02A1B491-BFBA-407C-BE63-0227871E7B5C}"
+	ProjectSection(SolutionItems) = preProject
+		ConfigMerger.exe = ConfigMerger.exe
+		HeuristicLab 3.3.vsmdi = HeuristicLab 3.3.vsmdi
+		LocalTestRun.testrunconfig = LocalTestRun.testrunconfig
+		PreBuildEvent.cmd = PreBuildEvent.cmd
+	EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.DataAccess.ADOHelper-3.3", "HeuristicLab.DataAccess.ADOHelper\3.3\HeuristicLab.DataAccess.ADOHelper-3.3.csproj", "{5CDACE54-5FB2-4344-A21C-963F63CB7C2B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Contracts-3.3", "HeuristicLab.Hive.Contracts\3.3\HeuristicLab.Hive.Contracts-3.3.csproj", "{134F93D7-E7C8-4ECD-9923-7F63259A60D8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Server-3.3", "HeuristicLab.Hive.Server\3.3\HeuristicLab.Hive.Server-3.3.csproj", "{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Server.Console-3.3", "HeuristicLab.Hive.Server.Console\3.3\HeuristicLab.Hive.Server.Console-3.3.csproj", "{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Server.DataAccess-3.3", "HeuristicLab.Hive.Server.DataAccess\3.3\HeuristicLab.Hive.Server.DataAccess-3.3.csproj", "{4D5A2A16-66C2-431D-9AA3-BD3041E64B84}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Server.LINQDataAccess-3.3", "HeuristicLab.Hive.Server.LINQDataAccess\3.3\HeuristicLab.Hive.Server.LINQDataAccess-3.3.csproj", "{A4499DDD-D1B8-414F-98F6-903C2C71BEB0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.DataAccess-3.3", "HeuristicLab.DataAccess\3.3\HeuristicLab.DataAccess-3.3.csproj", "{9076697B-C151-46CD-95BC-1D059492B478}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.JobBase-3.3", "HeuristicLab.Hive.JobBase\3.3\HeuristicLab.Hive.JobBase-3.3.csproj", "{21187322-52DD-4243-80A4-A85F0263E63B}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HeuristicLab.Hive.Slave", "HeuristicLab.Hive.Slave", "{DC8C63A5-7B57-4B3A-A74A-6F42C7DD1668}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HeuristicLab.Hive.Server", "HeuristicLab.Hive.Server", "{E7D8EFDA-B0CB-4B62-8EAE-2CF473F14D74}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HeuristicLab.Hive", "HeuristicLab.Hive", "{84899895-AC52-4053-8A91-61753EF8E0A8}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HeuristicLab", "HeuristicLab", "{BD1DE6F6-A188-4D1F-9681-BA7104818370}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Calendar-3.3", "HeuristicLab.Calendar\3.3\HeuristicLab.Calendar-3.3.csproj", "{D17A4D6A-4CAA-4470-8A19-F42463C021FD}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Experiment-3.3", "HeuristicLab.Hive.Experiment\3.3\HeuristicLab.Hive.Experiment-3.3.csproj", "{A84C0A25-13D0-40A6-924F-53556D9691DC}"
+	ProjectSection(ProjectDependencies) = postProject
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE} = {898B31CF-81DC-453B-AEB3-BDF83197A7EE}
+	EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Experiment.Views-3.3", "HeuristicLab.Hive.Experiment.Views\3.3\HeuristicLab.Hive.Experiment.Views-3.3.csproj", "{4F15BEA2-F494-4584-A0E5-6BA85377B313}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Tracing-3.3", "HeuristicLab.Hive.Tracing\3.3\HeuristicLab.Hive.Tracing-3.3.csproj", "{CDAD2510-299C-4FA2-B351-9D71A5AF20B7}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Slave.Common-3.3", "HeuristicLab.Hive.Slave.Common\3.3\HeuristicLab.Hive.Slave.Common-3.3.csproj", "{89F4BC52-C174-481E-9BD2-3814171020E8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Slave.Communication-3.3", "HeuristicLab.Hive.Slave.Communication\3.3\HeuristicLab.Hive.Slave.Communication-3.3.csproj", "{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}"
+	ProjectSection(ProjectDependencies) = postProject
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE} = {898B31CF-81DC-453B-AEB3-BDF83197A7EE}
+	EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Slave.Console-3.3", "HeuristicLab.Hive.Slave.Console\3.3\HeuristicLab.Hive.Slave.Console-3.3.csproj", "{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}"
+	ProjectSection(ProjectDependencies) = postProject
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A} = {5010BD86-23B7-4F8C-888A-76D21AD5266A}
+	EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Slave.Core-3.3", "HeuristicLab.Hive.Slave.Core\3.3\HeuristicLab.Hive.Slave.Core-3.3.csproj", "{5010BD86-23B7-4F8C-888A-76D21AD5266A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Slave.ExecutionEngine-3.3", "HeuristicLab.Hive.Slave.ExecutionEngine\3.3\HeuristicLab.Hive.Slave.ExecutionEngine-3.3.csproj", "{1605256A-1CB3-44AB-AAFF-577093EE5789}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Debug|Mixed Platforms = Debug|Mixed Platforms
+		Debug|x64 = Debug|x64
+		Debug|x86 = Debug|x86
+		Release|Any CPU = Release|Any CPU
+		Release|Mixed Platforms = Release|Mixed Platforms
+		Release|x64 = Release|x64
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Debug|Mixed Platforms.Build.0 = Debug|x64
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Debug|x64.ActiveCfg = Debug|x64
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Debug|x64.Build.0 = Debug|x64
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Debug|x86.ActiveCfg = Debug|x86
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Debug|x86.Build.0 = Debug|x86
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Release|Any CPU.Build.0 = Release|Any CPU
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Release|Mixed Platforms.Build.0 = Release|x64
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Release|x64.ActiveCfg = Release|x64
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Release|x64.Build.0 = Release|x64
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Release|x86.ActiveCfg = Release|x86
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Release|x86.Build.0 = Release|x86
+		{C92AAC8C-4D88-449C-ABA5-2B935D769842}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{C92AAC8C-4D88-449C-ABA5-2B935D769842}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C92AAC8C-4D88-449C-ABA5-2B935D769842}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{C92AAC8C-4D88-449C-ABA5-2B935D769842}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{C92AAC8C-4D88-449C-ABA5-2B935D769842}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{C92AAC8C-4D88-449C-ABA5-2B935D769842}.Debug|x86.ActiveCfg = Debug|x86
+		{C92AAC8C-4D88-449C-ABA5-2B935D769842}.Debug|x86.Build.0 = Debug|x86
+		{C92AAC8C-4D88-449C-ABA5-2B935D769842}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{C92AAC8C-4D88-449C-ABA5-2B935D769842}.Release|Any CPU.Build.0 = Release|Any CPU
+		{C92AAC8C-4D88-449C-ABA5-2B935D769842}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{C92AAC8C-4D88-449C-ABA5-2B935D769842}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{C92AAC8C-4D88-449C-ABA5-2B935D769842}.Release|x64.ActiveCfg = Release|Any CPU
+		{C92AAC8C-4D88-449C-ABA5-2B935D769842}.Release|x86.ActiveCfg = Release|Any CPU
+		{5CDACE54-5FB2-4344-A21C-963F63CB7C2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{5CDACE54-5FB2-4344-A21C-963F63CB7C2B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{5CDACE54-5FB2-4344-A21C-963F63CB7C2B}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{5CDACE54-5FB2-4344-A21C-963F63CB7C2B}.Debug|Mixed Platforms.Build.0 = Debug|x64
+		{5CDACE54-5FB2-4344-A21C-963F63CB7C2B}.Debug|x64.ActiveCfg = Debug|x64
+		{5CDACE54-5FB2-4344-A21C-963F63CB7C2B}.Debug|x64.Build.0 = Debug|x64
+		{5CDACE54-5FB2-4344-A21C-963F63CB7C2B}.Debug|x86.ActiveCfg = Debug|x86
+		{5CDACE54-5FB2-4344-A21C-963F63CB7C2B}.Debug|x86.Build.0 = Debug|x86
+		{5CDACE54-5FB2-4344-A21C-963F63CB7C2B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{5CDACE54-5FB2-4344-A21C-963F63CB7C2B}.Release|Any CPU.Build.0 = Release|Any CPU
+		{5CDACE54-5FB2-4344-A21C-963F63CB7C2B}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{5CDACE54-5FB2-4344-A21C-963F63CB7C2B}.Release|Mixed Platforms.Build.0 = Release|x64
+		{5CDACE54-5FB2-4344-A21C-963F63CB7C2B}.Release|x64.ActiveCfg = Release|x64
+		{5CDACE54-5FB2-4344-A21C-963F63CB7C2B}.Release|x64.Build.0 = Release|x64
+		{5CDACE54-5FB2-4344-A21C-963F63CB7C2B}.Release|x86.ActiveCfg = Release|x86
+		{5CDACE54-5FB2-4344-A21C-963F63CB7C2B}.Release|x86.Build.0 = Release|x86
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Debug|Mixed Platforms.Build.0 = Debug|x64
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Debug|x64.ActiveCfg = Debug|x64
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Debug|x64.Build.0 = Debug|x64
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Debug|x86.ActiveCfg = Debug|x86
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Debug|x86.Build.0 = Debug|x86
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Release|Any CPU.Build.0 = Release|Any CPU
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Release|Mixed Platforms.Build.0 = Release|x64
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Release|x64.ActiveCfg = Release|x64
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Release|x64.Build.0 = Release|x64
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Release|x86.ActiveCfg = Release|x86
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Release|x86.Build.0 = Release|x86
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Debug|Mixed Platforms.Build.0 = Debug|x64
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Debug|x64.ActiveCfg = Debug|x64
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Debug|x64.Build.0 = Debug|x64
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Debug|x86.ActiveCfg = Debug|x86
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Debug|x86.Build.0 = Debug|x86
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Release|Mixed Platforms.Build.0 = Release|x64
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Release|x64.ActiveCfg = Release|x64
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Release|x64.Build.0 = Release|x64
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Release|x86.ActiveCfg = Release|x86
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Release|x86.Build.0 = Release|x86
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Debug|x64.ActiveCfg = Debug|x64
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Debug|x64.Build.0 = Debug|x64
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Debug|x86.ActiveCfg = Debug|x86
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Debug|x86.Build.0 = Debug|x86
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Release|Any CPU.Build.0 = Release|Any CPU
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Release|Mixed Platforms.ActiveCfg = Release|x86
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Release|x64.ActiveCfg = Release|x64
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Release|x64.Build.0 = Release|x64
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Release|x86.ActiveCfg = Release|x86
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Release|x86.Build.0 = Release|x86
+		{4D5A2A16-66C2-431D-9AA3-BD3041E64B84}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4D5A2A16-66C2-431D-9AA3-BD3041E64B84}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4D5A2A16-66C2-431D-9AA3-BD3041E64B84}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{4D5A2A16-66C2-431D-9AA3-BD3041E64B84}.Debug|Mixed Platforms.Build.0 = Debug|x64
+		{4D5A2A16-66C2-431D-9AA3-BD3041E64B84}.Debug|x64.ActiveCfg = Debug|x64
+		{4D5A2A16-66C2-431D-9AA3-BD3041E64B84}.Debug|x64.Build.0 = Debug|x64
+		{4D5A2A16-66C2-431D-9AA3-BD3041E64B84}.Debug|x86.ActiveCfg = Debug|x86
+		{4D5A2A16-66C2-431D-9AA3-BD3041E64B84}.Debug|x86.Build.0 = Debug|x86
+		{4D5A2A16-66C2-431D-9AA3-BD3041E64B84}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{4D5A2A16-66C2-431D-9AA3-BD3041E64B84}.Release|Any CPU.Build.0 = Release|Any CPU
+		{4D5A2A16-66C2-431D-9AA3-BD3041E64B84}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{4D5A2A16-66C2-431D-9AA3-BD3041E64B84}.Release|Mixed Platforms.Build.0 = Release|x64
+		{4D5A2A16-66C2-431D-9AA3-BD3041E64B84}.Release|x64.ActiveCfg = Release|x64
+		{4D5A2A16-66C2-431D-9AA3-BD3041E64B84}.Release|x64.Build.0 = Release|x64
+		{4D5A2A16-66C2-431D-9AA3-BD3041E64B84}.Release|x86.ActiveCfg = Release|x86
+		{4D5A2A16-66C2-431D-9AA3-BD3041E64B84}.Release|x86.Build.0 = Release|x86
+		{A4499DDD-D1B8-414F-98F6-903C2C71BEB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A4499DDD-D1B8-414F-98F6-903C2C71BEB0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A4499DDD-D1B8-414F-98F6-903C2C71BEB0}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{A4499DDD-D1B8-414F-98F6-903C2C71BEB0}.Debug|Mixed Platforms.Build.0 = Debug|x64
+		{A4499DDD-D1B8-414F-98F6-903C2C71BEB0}.Debug|x64.ActiveCfg = Debug|x64
+		{A4499DDD-D1B8-414F-98F6-903C2C71BEB0}.Debug|x64.Build.0 = Debug|x64
+		{A4499DDD-D1B8-414F-98F6-903C2C71BEB0}.Debug|x86.ActiveCfg = Debug|x86
+		{A4499DDD-D1B8-414F-98F6-903C2C71BEB0}.Debug|x86.Build.0 = Debug|x86
+		{A4499DDD-D1B8-414F-98F6-903C2C71BEB0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A4499DDD-D1B8-414F-98F6-903C2C71BEB0}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A4499DDD-D1B8-414F-98F6-903C2C71BEB0}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{A4499DDD-D1B8-414F-98F6-903C2C71BEB0}.Release|Mixed Platforms.Build.0 = Release|x64
+		{A4499DDD-D1B8-414F-98F6-903C2C71BEB0}.Release|x64.ActiveCfg = Release|x64
+		{A4499DDD-D1B8-414F-98F6-903C2C71BEB0}.Release|x64.Build.0 = Release|x64
+		{A4499DDD-D1B8-414F-98F6-903C2C71BEB0}.Release|x86.ActiveCfg = Release|x86
+		{A4499DDD-D1B8-414F-98F6-903C2C71BEB0}.Release|x86.Build.0 = Release|x86
+		{9076697B-C151-46CD-95BC-1D059492B478}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{9076697B-C151-46CD-95BC-1D059492B478}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{9076697B-C151-46CD-95BC-1D059492B478}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{9076697B-C151-46CD-95BC-1D059492B478}.Debug|Mixed Platforms.Build.0 = Debug|x64
+		{9076697B-C151-46CD-95BC-1D059492B478}.Debug|x64.ActiveCfg = Debug|x64
+		{9076697B-C151-46CD-95BC-1D059492B478}.Debug|x64.Build.0 = Debug|x64
+		{9076697B-C151-46CD-95BC-1D059492B478}.Debug|x86.ActiveCfg = Debug|x86
+		{9076697B-C151-46CD-95BC-1D059492B478}.Debug|x86.Build.0 = Debug|x86
+		{9076697B-C151-46CD-95BC-1D059492B478}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{9076697B-C151-46CD-95BC-1D059492B478}.Release|Any CPU.Build.0 = Release|Any CPU
+		{9076697B-C151-46CD-95BC-1D059492B478}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{9076697B-C151-46CD-95BC-1D059492B478}.Release|Mixed Platforms.Build.0 = Release|x64
+		{9076697B-C151-46CD-95BC-1D059492B478}.Release|x64.ActiveCfg = Release|x64
+		{9076697B-C151-46CD-95BC-1D059492B478}.Release|x64.Build.0 = Release|x64
+		{9076697B-C151-46CD-95BC-1D059492B478}.Release|x86.ActiveCfg = Release|x86
+		{9076697B-C151-46CD-95BC-1D059492B478}.Release|x86.Build.0 = Release|x86
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Debug|Mixed Platforms.Build.0 = Debug|x64
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Debug|x64.ActiveCfg = Debug|x64
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Debug|x64.Build.0 = Debug|x64
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Debug|x86.ActiveCfg = Debug|x86
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Debug|x86.Build.0 = Debug|x86
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Release|Any CPU.Build.0 = Release|Any CPU
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Release|Mixed Platforms.Build.0 = Release|x64
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Release|x64.ActiveCfg = Release|x64
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Release|x64.Build.0 = Release|x64
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Release|x86.ActiveCfg = Release|x86
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Release|x86.Build.0 = Release|x86
+		{D17A4D6A-4CAA-4470-8A19-F42463C021FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D17A4D6A-4CAA-4470-8A19-F42463C021FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D17A4D6A-4CAA-4470-8A19-F42463C021FD}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{D17A4D6A-4CAA-4470-8A19-F42463C021FD}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{D17A4D6A-4CAA-4470-8A19-F42463C021FD}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{D17A4D6A-4CAA-4470-8A19-F42463C021FD}.Debug|x86.ActiveCfg = Debug|x86
+		{D17A4D6A-4CAA-4470-8A19-F42463C021FD}.Debug|x86.Build.0 = Debug|x86
+		{D17A4D6A-4CAA-4470-8A19-F42463C021FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D17A4D6A-4CAA-4470-8A19-F42463C021FD}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D17A4D6A-4CAA-4470-8A19-F42463C021FD}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{D17A4D6A-4CAA-4470-8A19-F42463C021FD}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{D17A4D6A-4CAA-4470-8A19-F42463C021FD}.Release|x64.ActiveCfg = Release|Any CPU
+		{D17A4D6A-4CAA-4470-8A19-F42463C021FD}.Release|x86.ActiveCfg = Release|Any CPU
+		{A84C0A25-13D0-40A6-924F-53556D9691DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A84C0A25-13D0-40A6-924F-53556D9691DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A84C0A25-13D0-40A6-924F-53556D9691DC}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+		{A84C0A25-13D0-40A6-924F-53556D9691DC}.Debug|Mixed Platforms.Build.0 = Debug|x86
+		{A84C0A25-13D0-40A6-924F-53556D9691DC}.Debug|x64.ActiveCfg = Debug|x86
+		{A84C0A25-13D0-40A6-924F-53556D9691DC}.Debug|x86.ActiveCfg = Debug|x86
+		{A84C0A25-13D0-40A6-924F-53556D9691DC}.Debug|x86.Build.0 = Debug|x86
+		{A84C0A25-13D0-40A6-924F-53556D9691DC}.Release|Any CPU.ActiveCfg = Release|x86
+		{A84C0A25-13D0-40A6-924F-53556D9691DC}.Release|Mixed Platforms.ActiveCfg = Release|x86
+		{A84C0A25-13D0-40A6-924F-53556D9691DC}.Release|Mixed Platforms.Build.0 = Release|x86
+		{A84C0A25-13D0-40A6-924F-53556D9691DC}.Release|x64.ActiveCfg = Release|x86
+		{A84C0A25-13D0-40A6-924F-53556D9691DC}.Release|x86.ActiveCfg = Release|x86
+		{A84C0A25-13D0-40A6-924F-53556D9691DC}.Release|x86.Build.0 = Release|x86
+		{4F15BEA2-F494-4584-A0E5-6BA85377B313}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4F15BEA2-F494-4584-A0E5-6BA85377B313}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4F15BEA2-F494-4584-A0E5-6BA85377B313}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+		{4F15BEA2-F494-4584-A0E5-6BA85377B313}.Debug|Mixed Platforms.Build.0 = Debug|x86
+		{4F15BEA2-F494-4584-A0E5-6BA85377B313}.Debug|x64.ActiveCfg = Debug|x86
+		{4F15BEA2-F494-4584-A0E5-6BA85377B313}.Debug|x86.ActiveCfg = Debug|x86
+		{4F15BEA2-F494-4584-A0E5-6BA85377B313}.Debug|x86.Build.0 = Debug|x86
+		{4F15BEA2-F494-4584-A0E5-6BA85377B313}.Release|Any CPU.ActiveCfg = Release|x86
+		{4F15BEA2-F494-4584-A0E5-6BA85377B313}.Release|Mixed Platforms.ActiveCfg = Release|x86
+		{4F15BEA2-F494-4584-A0E5-6BA85377B313}.Release|Mixed Platforms.Build.0 = Release|x86
+		{4F15BEA2-F494-4584-A0E5-6BA85377B313}.Release|x64.ActiveCfg = Release|x86
+		{4F15BEA2-F494-4584-A0E5-6BA85377B313}.Release|x86.ActiveCfg = Release|x86
+		{4F15BEA2-F494-4584-A0E5-6BA85377B313}.Release|x86.Build.0 = Release|x86
+		{CDAD2510-299C-4FA2-B351-9D71A5AF20B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{CDAD2510-299C-4FA2-B351-9D71A5AF20B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{CDAD2510-299C-4FA2-B351-9D71A5AF20B7}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{CDAD2510-299C-4FA2-B351-9D71A5AF20B7}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{CDAD2510-299C-4FA2-B351-9D71A5AF20B7}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{CDAD2510-299C-4FA2-B351-9D71A5AF20B7}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{CDAD2510-299C-4FA2-B351-9D71A5AF20B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{CDAD2510-299C-4FA2-B351-9D71A5AF20B7}.Release|Any CPU.Build.0 = Release|Any CPU
+		{CDAD2510-299C-4FA2-B351-9D71A5AF20B7}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{CDAD2510-299C-4FA2-B351-9D71A5AF20B7}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{CDAD2510-299C-4FA2-B351-9D71A5AF20B7}.Release|x64.ActiveCfg = Release|Any CPU
+		{CDAD2510-299C-4FA2-B351-9D71A5AF20B7}.Release|x86.ActiveCfg = Release|Any CPU
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Debug|Mixed Platforms.Build.0 = Debug|x64
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Debug|x64.ActiveCfg = Debug|x64
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Debug|x64.Build.0 = Debug|x64
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Debug|x86.ActiveCfg = Debug|x86
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Debug|x86.Build.0 = Debug|x86
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Release|Any CPU.Build.0 = Release|Any CPU
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Release|Mixed Platforms.Build.0 = Release|x64
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Release|x64.ActiveCfg = Release|x64
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Release|x64.Build.0 = Release|x64
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Release|x86.ActiveCfg = Release|x86
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Release|x86.Build.0 = Release|x86
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Debug|Mixed Platforms.Build.0 = Debug|x64
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Debug|x64.ActiveCfg = Debug|x64
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Debug|x64.Build.0 = Debug|x64
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Debug|x86.ActiveCfg = Debug|x86
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Debug|x86.Build.0 = Debug|x86
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Release|Any CPU.Build.0 = Release|Any CPU
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Release|Mixed Platforms.Build.0 = Release|x64
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Release|x64.ActiveCfg = Release|x64
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Release|x64.Build.0 = Release|x64
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Release|x86.ActiveCfg = Release|x86
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Release|x86.Build.0 = Release|x86
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Debug|Mixed Platforms.Build.0 = Debug|x64
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Debug|x64.ActiveCfg = Debug|x64
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Debug|x64.Build.0 = Debug|x64
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Debug|x86.ActiveCfg = Debug|x86
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Debug|x86.Build.0 = Debug|x86
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Release|Mixed Platforms.Build.0 = Release|x64
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Release|x64.ActiveCfg = Release|x64
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Release|x64.Build.0 = Release|x64
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Release|x86.ActiveCfg = Release|x86
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Release|x86.Build.0 = Release|x86
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Debug|Mixed Platforms.Build.0 = Debug|x64
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Debug|x64.ActiveCfg = Debug|x64
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Debug|x64.Build.0 = Debug|x64
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Debug|x86.ActiveCfg = Debug|x86
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Debug|x86.Build.0 = Debug|x86
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Release|Mixed Platforms.Build.0 = Release|x64
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Release|x64.ActiveCfg = Release|x64
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Release|x64.Build.0 = Release|x64
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Release|x86.ActiveCfg = Release|x86
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Release|x86.Build.0 = Release|x86
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Debug|Mixed Platforms.ActiveCfg = Debug|x64
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Debug|Mixed Platforms.Build.0 = Debug|x64
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Debug|x64.ActiveCfg = Debug|x64
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Debug|x64.Build.0 = Debug|x64
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Debug|x86.ActiveCfg = Debug|x86
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Debug|x86.Build.0 = Debug|x86
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Release|Any CPU.Build.0 = Release|Any CPU
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Release|Mixed Platforms.ActiveCfg = Release|x64
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Release|Mixed Platforms.Build.0 = Release|x64
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Release|x64.ActiveCfg = Release|x64
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Release|x64.Build.0 = Release|x64
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Release|x86.ActiveCfg = Release|x86
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Release|x86.Build.0 = Release|x86
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(NestedProjects) = preSolution
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F} = {E7D8EFDA-B0CB-4B62-8EAE-2CF473F14D74}
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119} = {E7D8EFDA-B0CB-4B62-8EAE-2CF473F14D74}
+		{4D5A2A16-66C2-431D-9AA3-BD3041E64B84} = {E7D8EFDA-B0CB-4B62-8EAE-2CF473F14D74}
+		{A4499DDD-D1B8-414F-98F6-903C2C71BEB0} = {E7D8EFDA-B0CB-4B62-8EAE-2CF473F14D74}
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE} = {E7D8EFDA-B0CB-4B62-8EAE-2CF473F14D74}
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8} = {84899895-AC52-4053-8A91-61753EF8E0A8}
+		{21187322-52DD-4243-80A4-A85F0263E63B} = {84899895-AC52-4053-8A91-61753EF8E0A8}
+		{C92AAC8C-4D88-449C-ABA5-2B935D769842} = {84899895-AC52-4053-8A91-61753EF8E0A8}
+		{A84C0A25-13D0-40A6-924F-53556D9691DC} = {84899895-AC52-4053-8A91-61753EF8E0A8}
+		{4F15BEA2-F494-4584-A0E5-6BA85377B313} = {84899895-AC52-4053-8A91-61753EF8E0A8}
+		{CDAD2510-299C-4FA2-B351-9D71A5AF20B7} = {84899895-AC52-4053-8A91-61753EF8E0A8}
+		{9076697B-C151-46CD-95BC-1D059492B478} = {BD1DE6F6-A188-4D1F-9681-BA7104818370}
+		{5CDACE54-5FB2-4344-A21C-963F63CB7C2B} = {BD1DE6F6-A188-4D1F-9681-BA7104818370}
+		{D17A4D6A-4CAA-4470-8A19-F42463C021FD} = {BD1DE6F6-A188-4D1F-9681-BA7104818370}
+		{89F4BC52-C174-481E-9BD2-3814171020E8} = {DC8C63A5-7B57-4B3A-A74A-6F42C7DD1668}
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE} = {DC8C63A5-7B57-4B3A-A74A-6F42C7DD1668}
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E} = {DC8C63A5-7B57-4B3A-A74A-6F42C7DD1668}
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A} = {DC8C63A5-7B57-4B3A-A74A-6F42C7DD1668}
+		{1605256A-1CB3-44AB-AAFF-577093EE5789} = {DC8C63A5-7B57-4B3A-A74A-6F42C7DD1668}
+	EndGlobalSection
+EndGlobal
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ApplicationConstants.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ApplicationConstants.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ApplicationConstants.cs	(revision 4340)
@@ -0,0 +1,42 @@
+﻿#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 System.Data;
+
+namespace HeuristicLab.Hive.Contracts {
+  public class ApplicationConstants {
+
+    public static System.Data.IsolationLevel ISOLATION_LEVEL = IsolationLevel.ReadUncommitted;
+
+    /// <summary>
+    /// ReadUncommitted to minimize deadlocks. 
+    /// </summary>
+    public static System.Transactions.IsolationLevel ISOLATION_LEVEL_SCOPE = System.Transactions.IsolationLevel.ReadUncommitted;
+
+    public static int HEARTBEAT_MAX_DIF = 120; // value in seconds
+    
+    public static int JOB_TIME_TO_LIVE = 5;
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/AppointmentDto.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/AppointmentDto.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/AppointmentDto.cs	(revision 4340)
@@ -0,0 +1,44 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+using HeuristicLab.DataAccess;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+  
+  [StorableClass]
+  [DataContract]
+  public class AppointmentDto: PersistableObject {
+    [Storable]
+    [DataMember]
+    public DateTime StartDate { get; set; }
+    [Storable]
+    [DataMember]
+    public DateTime EndDate { get; set; }
+    [Storable]
+    [DataMember]
+    public bool AllDayEvent { get; set; }
+    [Storable]
+    [DataMember]
+    public bool Recurring { get; set; }
+    [Storable]
+    [DataMember]
+    public Guid RecurringId { get; set; }
+    [Storable]
+    [DataMember]
+    public Guid ResourceId { get; set; }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      AppointmentDto clone = (AppointmentDto)base.Clone(cloner);
+      clone.AllDayEvent = this.AllDayEvent;
+      clone.EndDate = this.EndDate;
+      clone.Recurring = this.Recurring;
+      clone.RecurringId = this.RecurringId;
+      clone.ResourceId = this.ResourceId;
+      clone.StartDate = this.StartDate;
+      return clone;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/CachedHivePluginInfoDto.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/CachedHivePluginInfoDto.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/CachedHivePluginInfoDto.cs	(revision 4340)
@@ -0,0 +1,55 @@
+﻿#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.Text;
+using System.Linq;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using System.Runtime.Serialization;
+using HeuristicLab.PluginInfrastructure.Manager;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.PluginInfrastructure {
+  [StorableClass]
+  [DataContract]
+  [Serializable]
+  public class CachedHivePluginInfoDto : HivePluginInfoDto {
+    
+    /// <summary>
+    /// stores the plugin files in a list of byte arrays
+    /// </summary>
+    [Storable]
+    [DataMember]
+    public List<HivePluginFile> PluginFiles { get; set; }
+
+    public CachedHivePluginInfoDto() {
+      PluginFiles = new List<HivePluginFile>();
+    }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      CachedHivePluginInfoDto clone = (CachedHivePluginInfoDto) base.Clone(cloner);
+      clone.PluginFiles = (from p in this.PluginFiles
+                          select (HivePluginFile)cloner.Clone(p)).ToList();
+      return clone;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/CalendarState.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/CalendarState.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/CalendarState.cs	(revision 4340)
@@ -0,0 +1,14 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+  public enum CalendarState {
+    Fetch,
+    ForceFetch,
+    Fetching,
+    Fetched,
+    NotAllowedToFetch
+  };
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HeartBeatData.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HeartBeatData.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HeartBeatData.cs	(revision 4340)
@@ -0,0 +1,51 @@
+﻿#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 System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  [DataContract]
+  public class HeartBeatData {
+    [DataMember]
+    public Guid SlaveId { get; set; }
+    [DataMember]
+    public int FreeMemory { get; set; }
+    [DataMember]
+    public int FreeCores { get; set; }
+    [DataMember]
+    public Dictionary<Guid, double> JobProgress { get; set; } // TODO: define Type 
+    [DataMember]
+    public bool IsAllowedToCalculate { get; set; } // this is true if slave is allowed to work according to calendar
+
+    public override string ToString() {
+      String val = "SlaveId: " + SlaveId + ", FreeCores: " + FreeCores;
+      foreach (KeyValuePair<Guid, double> kvp in JobProgress) {
+        val += "\nId" + kvp.Key + " Progress " + kvp.Value;
+      }
+      return val;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HivePluginFile.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HivePluginFile.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HivePluginFile.cs	(revision 4340)
@@ -0,0 +1,41 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+  [StorableClass]
+  [Serializable]
+  [DataContract]
+  public class HivePluginFile : IDeepCloneable {
+    [Storable]
+    [DataMember]
+    public byte[] BinaryFile { get; set; }
+    [Storable]
+    [DataMember]
+    public String Name { get; set; }  
+
+    public HivePluginFile(byte[] binaryFile, String name) {
+      BinaryFile = binaryFile;
+      Name = name;
+    }
+
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      HivePluginFile clone = (HivePluginFile)Activator.CreateInstance(this.GetType(), true);
+      cloner.RegisterClonedObject(this, clone);
+      clone.Name = this.Name;
+      if (this.BinaryFile != null) {
+        clone.BinaryFile = new byte[this.BinaryFile.Length];
+        Array.Copy(this.BinaryFile, clone.BinaryFile, this.BinaryFile.Length);
+      }
+      return clone;
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HivePluginInfoDto.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HivePluginInfoDto.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HivePluginInfoDto.cs	(revision 4340)
@@ -0,0 +1,74 @@
+﻿#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 System.Runtime.Serialization;
+using HeuristicLab.DataAccess;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+  [StorableClass]
+  [DataContract]
+  [Serializable]
+  public class HivePluginInfoDto : PersistableObject {
+    [Storable]
+    [DataMember]
+    public String Name { get; set; }
+
+    [DataMember]
+    public Version Version { get; set; }
+
+    // helper-variable to be able to persist version
+    [Storable]
+    private string storableVersion;
+
+    [Storable]
+    [DataMember]
+    public Boolean Update { get; set; }
+
+    public HivePluginInfoDto() { }
+
+    public HivePluginInfoDto(bool deserializing) : base(deserializing) { }
+
+    [StorableHook(HookType.BeforeSerialization)]
+    private void BeforeSerialization() {
+      this.storableVersion = Version.ToString();
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      this.Version = new Version(storableVersion);
+    }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      HivePluginInfoDto clone = (HivePluginInfoDto) base.Clone(cloner);
+      clone.Name = this.Name;
+      clone.Version = (Version)this.Version.Clone();
+      clone.Update = this.Update;
+      return clone;
+    }
+
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobDto.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobDto.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobDto.cs	(revision 4340)
@@ -0,0 +1,117 @@
+﻿#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 System.Runtime.Serialization;
+using HeuristicLab.Common;
+using HeuristicLab.DataAccess;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  [StorableClass]
+  [DataContract]
+  [Serializable]
+  public class JobDto : PersistableObject {
+    [Storable]
+    [DataMember]
+    public JobState State { get; set; }
+    [Storable]
+    [DataMember]
+    public string UserId { get; set; }
+    [Storable]
+    [DataMember]
+    public SlaveDto Slave { get; set; }
+    [Storable]
+    [DataMember]
+    public JobDto ParentJob { get; set; }
+    [Storable]
+    [DataMember]
+    public double? Percentage { get; set; }
+    [Storable]
+    [DataMember]
+    public String Exception { get; set; }
+    [Storable]
+    [DataMember]
+    public DateTime? DateCreated { get; set; }
+    [Storable]
+    [DataMember]
+    public DateTime? DateCalculated { get; set; }
+    [Storable]
+    [DataMember]
+    public DateTime? DateFinished { get; set; }
+    [Storable]
+    [DataMember]
+    public int Priority { get; set; }
+    [Storable]
+    [DataMember]
+    public int CoresNeeded { get; set; }
+    [Storable]
+    [DataMember]
+    public int MemoryNeeded { get; set; }
+    [Storable]
+    [DataMember]
+    public List<HivePluginInfoDto> PluginsNeeded { get; set; }
+    [Storable]
+    [DataMember]
+    public List<Guid> AssignedResourceIds { get; set; }
+    [Storable]
+    [DataMember]
+    public ProjectDto Project { get; set; }
+
+    public override string ToString() {
+      return base.ToString() + "State: " + State + ", [Ressource : " + Slave + " ] , DateCreated: " + DateCreated + ", DateCalculated: " + DateCalculated +
+        "Priority: " + Priority + ", CoresNeeded: " + CoresNeeded + "AssignedResources: " + AssignedResourceIds;
+    }
+
+    public JobDto() {
+      PluginsNeeded = new List<HivePluginInfoDto>();
+      AssignedResourceIds = new List<Guid>();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      JobDto clone = (JobDto)base.Clone(cloner);
+      clone.Id = this.Id;
+      clone.AssignedResourceIds = new List<Guid>(this.AssignedResourceIds);
+      clone.Slave = (SlaveDto)cloner.Clone(this.Slave);
+      clone.CoresNeeded = this.CoresNeeded;
+      clone.DateCalculated = this.DateCalculated;
+      clone.DateCreated = this.DateCreated;
+      clone.DateFinished = this.DateFinished;
+      clone.Exception = this.Exception;
+      clone.Id = this.Id;
+      clone.MemoryNeeded = this.MemoryNeeded;
+      clone.ParentJob = (JobDto)cloner.Clone(this.ParentJob);
+      clone.Percentage = this.Percentage;
+      clone.PluginsNeeded = (from p in this.PluginsNeeded
+                             select (HivePluginInfoDto)cloner.Clone(p)).ToList();
+      clone.Priority = this.Priority;
+      clone.Project = (ProjectDto)cloner.Clone(this.Project);
+      clone.State = this.State;
+      clone.UserId = this.UserId;
+      return clone;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobResult.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobResult.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobResult.cs	(revision 4340)
@@ -0,0 +1,72 @@
+﻿#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 System.Runtime.Serialization;
+using HeuristicLab.DataAccess;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  // [chn] Where are those JobResults used? would it make sense to use it instead of JobDto for querying Job-Status? Probably yes
+  // ask gradinger
+  [StorableClass]
+  [DataContract]
+  [Serializable]
+  public class JobResult : PersistableObject {
+    [Storable]
+    [DataMember]
+    public Guid JobId { get; set; }
+    [Storable]
+    [DataMember]
+    public Guid SlaveId { get; set; }
+    [Storable]
+    [DataMember]
+    public JobState State { get; set; }
+    [Storable]
+    [DataMember]
+    public double? Percentage { get; set; }
+    [Storable]
+    [DataMember]
+    public String Exception { get; set; }
+    [Storable]
+    [DataMember]
+    public DateTime? DateCalculated { get; set; }
+    [Storable]
+    [DataMember]
+    public DateTime? DateFinished { get; set; }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      JobResult clone = (JobResult) base.Clone(cloner);
+      clone.SlaveId = this.SlaveId;
+      clone.DateCalculated = this.DateCalculated;
+      clone.DateFinished = this.DateFinished;
+      clone.Exception = this.Exception;
+      clone.JobId = this.JobId;
+      clone.Percentage = this.Percentage;
+      clone.State = this.State;
+      return clone;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobResultList.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobResultList.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobResultList.cs	(revision 4340)
@@ -0,0 +1,30 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Common;
+using HeuristicLab.Collections;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+  public class JobResultList : ObservableList<JobResult>, IDeepCloneable {
+    public JobResultList() { }
+    public JobResultList(IEnumerable<JobResult> collection) {
+      this.list = new List<JobResult>(collection);
+    }
+
+    [StorableConstructor]
+    protected JobResultList(bool deserializing) : base(deserializing) { }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      JobResultList clone = (JobResultList)Activator.CreateInstance(this.GetType());
+      cloner.RegisterClonedObject(this, clone);
+      clone.list = (this.Select(x => (JobResult)cloner.Clone(x))).ToList();
+      return clone;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobState.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobState.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/JobState.cs	(revision 4340)
@@ -0,0 +1,17 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+  public enum JobState {
+    Calculating,
+    Offline,
+    Finished,
+    Aborted,
+    SnapshotRequested,
+    SnapshotSent,
+    Pending,
+    Failed
+  };
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ProjectDto.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ProjectDto.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ProjectDto.cs	(revision 4340)
@@ -0,0 +1,46 @@
+﻿#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 System.Runtime.Serialization;
+using HeuristicLab.DataAccess;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+  [StorableClass]
+  [DataContract]
+  [Serializable]
+  public class ProjectDto : PersistableObject {
+    [Storable]
+    [DataMember]
+    public String Name { get; set; }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      ProjectDto clone = (ProjectDto) base.Clone(cloner);
+      clone.Name = this.Name;
+      return clone;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ResourceDto.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ResourceDto.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/ResourceDto.cs	(revision 4340)
@@ -0,0 +1,50 @@
+﻿#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 System.Runtime.Serialization;
+using HeuristicLab.DataAccess;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+  [StorableClass]
+  [DataContract]
+  [Serializable]
+  public class ResourceDto : PersistableObject, IDeepCloneable {
+    [Storable]
+    [DataMember]
+    public string Name { get; set; }
+
+    public override string ToString() {
+      return Id + " " + Name;
+    }
+
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      ResourceDto clone = (ResourceDto)base.Clone(cloner);
+      clone.Name = this.Name;
+      return clone;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SerializedJob.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SerializedJob.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SerializedJob.cs	(revision 4340)
@@ -0,0 +1,55 @@
+﻿#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 System.Runtime.Serialization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+  [StorableClass]
+  [DataContract]
+  [Serializable]
+  public class SerializedJob : IDeepCloneable {
+    [Storable]
+    [DataMember]
+    public JobDto JobInfo { get; set; }
+    [Storable]
+    [DataMember]
+    public byte[] SerializedJobData { get; set; }
+
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      SerializedJob clone = (SerializedJob)Activator.CreateInstance(this.GetType(), true);
+      cloner.RegisterClonedObject(this, clone);
+      clone.JobInfo = (JobDto)cloner.Clone(this.JobInfo);
+      clone.SerializedJobData = new byte[this.SerializedJobData.Length];
+      Array.Copy(this.SerializedJobData, clone.SerializedJobData, this.SerializedJobData.Length);
+      return clone;
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SerializedJobResult.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SerializedJobResult.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SerializedJobResult.cs	(revision 4340)
@@ -0,0 +1,55 @@
+﻿   #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 System.Runtime.Serialization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+  [StorableClass]
+  [DataContract]
+  [Serializable]
+  public class SerializedJobResult : IDeepCloneable {
+    [Storable]
+    [DataMember]
+    public JobResult JobResult { get; set; }
+    [Storable]
+    [DataMember]
+    public byte[] SerializedJobResultData { get; set; }
+
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      SerializedJobResult clone = (SerializedJobResult)Activator.CreateInstance(this.GetType(), true);
+      cloner.RegisterClonedObject(this, clone);
+      clone.JobResult = (JobResult)cloner.Clone(this.JobResult);
+      clone.SerializedJobResultData = new byte[this.SerializedJobResultData.Length];
+      Array.Copy(this.SerializedJobResultData, clone.SerializedJobResultData, this.SerializedJobResultData.Length);
+      return clone;
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveConfigDto.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveConfigDto.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveConfigDto.cs	(revision 4340)
@@ -0,0 +1,50 @@
+﻿#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 System.Runtime.Serialization;
+using HeuristicLab.DataAccess;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+  [StorableClass]
+  [DataContract]
+  [Serializable]
+  public class SlaveConfigDto : PersistableObject, IDeepCloneable {
+    [Storable]
+    [DataMember]
+    public String UpDownTimeCalendar { get; set; }
+    [Storable]
+    [DataMember]
+    public int? HeartBeatIntervall { get; set; }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      SlaveConfigDto clone = (SlaveConfigDto)base.Clone(cloner);
+      clone.UpDownTimeCalendar = this.UpDownTimeCalendar;
+      clone.HeartBeatIntervall = this.HeartBeatIntervall;
+      return clone;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveDto.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveDto.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveDto.cs	(revision 4340)
@@ -0,0 +1,85 @@
+#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 System.Runtime.Serialization;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+  [StorableClass]
+  [DataContract]
+  [Serializable]
+  public class SlaveDto : ResourceDto {
+    [Storable]
+    [DataMember]
+    public int NrOfCores { get; set; }
+    [Storable]
+    [DataMember]
+    public int NrOfFreeCores { get; set; }
+    [Storable]
+    [DataMember]
+    public int? CpuSpeedPerCore { get; set; }
+    [Storable]
+    [DataMember]
+    public int Memory { get; set; }
+    [Storable]
+    [DataMember]
+    public int FreeMemory { get; set; }
+    [Storable]
+    [DataMember]
+    public DateTime? Login { get; set; }
+    [Storable]
+    [DataMember]
+    public SlaveState State { get; set; }
+    [Storable]
+    [DataMember]
+    public CalendarState CalendarSyncStatus { get; set; }
+    [Storable]
+    [DataMember]
+    public SlaveConfigDto Config { get; set; }
+    [Storable]
+    [DataMember]
+    public bool IsAllowedToCalculate { get; set; }
+
+    public override string ToString() {
+      return base.ToString() + ", NrOfCores: " + NrOfCores + ", NrOfFreeCores " + NrOfFreeCores + ", Login: " + Login + ", State: " + State;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      SlaveDto clone = (SlaveDto)base.Clone(cloner);
+      clone.CalendarSyncStatus = this.CalendarSyncStatus;
+      clone.Config = (SlaveConfigDto)cloner.Clone(this.Config);
+      clone.CpuSpeedPerCore = this.CpuSpeedPerCore;
+      clone.FreeMemory = this.FreeMemory;
+      clone.Login = this.Login;
+      clone.Memory = this.Memory;
+      clone.NrOfCores = this.NrOfCores;
+      clone.NrOfFreeCores = this.NrOfFreeCores;
+      clone.State = this.State;
+      clone.IsAllowedToCalculate = this.IsAllowedToCalculate;
+      return clone;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveGroupDto.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveGroupDto.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveGroupDto.cs	(revision 4340)
@@ -0,0 +1,49 @@
+﻿#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 System.Runtime.Serialization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  [StorableClass]
+  [DataContract]
+  public class SlaveGroupDto : ResourceDto {
+    [Storable]
+    [DataMember]
+    public List<ResourceDto> Resources { get; set; }
+
+    public SlaveGroupDto() {
+      Resources = new List<ResourceDto>();
+    }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      SlaveGroupDto clone = (SlaveGroupDto) base.Clone(cloner);
+      clone.Resources = (from r in this.Resources
+                        select (ResourceDto)cloner.Clone(r)).ToList();
+      return clone;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveGroupDtoList.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveGroupDtoList.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveGroupDtoList.cs	(revision 4340)
@@ -0,0 +1,33 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+  [CollectionDataContract]
+  public class SlaveGroupDtoList : ObservableList<SlaveGroupDto>, IDeepCloneable {
+
+    public SlaveGroupDtoList() { }
+    public SlaveGroupDtoList(IEnumerable<SlaveGroupDto> collection) {
+      this.list = new List<SlaveGroupDto>(collection);
+    }
+
+    [StorableConstructor]
+    protected SlaveGroupDtoList(bool deserializing) : base(deserializing) { }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      SlaveGroupDtoList clone = (SlaveGroupDtoList)Activator.CreateInstance(this.GetType());
+      cloner.RegisterClonedObject(this, clone);
+      clone.list = (this.Select(x => (SlaveGroupDto)cloner.Clone(x))).ToList();
+      return clone;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveState.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveState.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/SlaveState.cs	(revision 4340)
@@ -0,0 +1,13 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+  public enum SlaveState {
+    NullState,
+    Idle,
+    Calculating,
+    Offline
+  };
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/UpTimeStatisticsDto.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/UpTimeStatisticsDto.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/UpTimeStatisticsDto.cs	(revision 4340)
@@ -0,0 +1,53 @@
+#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 System.Runtime.Serialization;
+using HeuristicLab.DataAccess;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  [StorableClass]
+  [DataContract]
+  public class UpTimeStatisticsDto : PersistableObject {
+    [Storable]
+    [DataMember]
+    public SlaveDto Slave { get; set; }
+    [Storable]
+    [DataMember]
+    public DateTime Login { get; set; }
+    [Storable]
+    [DataMember]
+    public DateTime Logout { get; set; }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      UpTimeStatisticsDto clone = (UpTimeStatisticsDto) base.Clone(cloner);
+      clone.Slave = (SlaveDto)cloner.Clone(this.Slave);
+      clone.Login = this.Login;
+      clone.Logout = this.Logout;
+      return clone;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HeuristicLab.Hive.Contracts-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HeuristicLab.Hive.Contracts-3.3.csproj	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HeuristicLab.Hive.Contracts-3.3.csproj	(revision 4340)
@@ -0,0 +1,187 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Contracts</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Contracts-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Collections-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Collections-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Tracing-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Tracing-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Transactions" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ApplicationConstants.cs" />
+    <Compile Include="BusinessObjects\AppointmentDto.cs" />
+    <Compile Include="BusinessObjects\CachedHivePluginInfoDto.cs" />
+    <Compile Include="BusinessObjects\CalendarState.cs" />
+    <Compile Include="BusinessObjects\SlaveGroupDto.cs" />
+    <Compile Include="BusinessObjects\HivePluginFile.cs" />
+    <Compile Include="BusinessObjects\JobResultList.cs" />
+    <Compile Include="BusinessObjects\JobState.cs" />
+    <Compile Include="BusinessObjects\ResourceDto.cs" />
+    <Compile Include="BusinessObjects\SerializedJob.cs" />
+    <Compile Include="BusinessObjects\ProjectDto.cs" />
+    <Compile Include="BusinessObjects\HivePluginInfoDto.cs" />
+    <Compile Include="BusinessObjects\HeartBeatData.cs" />
+    <Compile Include="BusinessObjects\JobDto.cs" />
+    <Compile Include="BusinessObjects\JobResult.cs" />
+    <Compile Include="BusinessObjects\SerializedJobResult.cs" />
+    <Compile Include="BusinessObjects\SlaveState.cs" />
+    <Compile Include="BusinessObjects\UpTimeStatisticsDto.cs" />
+    <Compile Include="BusinessObjects\SlaveDto.cs" />
+    <Compile Include="BusinessObjects\SlaveConfigDto.cs" />
+    <Compile Include="BusinessObjects\SlaveGroupDtoList.cs" />
+    <Compile Include="RecurrentEvent.cs" />
+    <Compile Include="ResponseObjects\ResponseCalendar.cs" />
+    <Compile Include="MultiStream.cs" />
+    <Compile Include="Interfaces\ISlaveFacade.cs" />
+    <Compile Include="Interfaces\IClientFacade.cs" />
+    <Compile Include="ResponseObjects\ResponseObject.cs" />
+    <Compile Include="Interfaces\ISlaveManager.cs" />
+    <Compile Include="Interfaces\IJobManager.cs" />
+    <Compile Include="Interfaces\ILifecycleManager.cs" />
+    <Compile Include="Interfaces\IServerConsoleFacade.cs" />
+    <Compile Include="MessageContainer.cs" />
+    <Compile Include="HeuristicLabHiveContractsPlugin.cs" />
+    <Compile Include="Interfaces\ISlaveCommunicator.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ResponseObjects\Response.cs" />
+    <Compile Include="ResponseObjects\ResponseHeartBeat.cs" />
+    <Compile Include="ResponseObjects\ResponseList.cs" />
+    <Compile Include="ResponseObjects\ResponseResultReceived.cs" />
+    <Compile Include="ResponseStatus.cs" />
+    <Compile Include="HiveRoles.cs" />
+    <Compile Include="StreamedObject.cs" />
+    <Compile Include="WcfSettings.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.DataAccess\3.3\HeuristicLab.DataAccess-3.3.csproj">
+      <Project>{9076697B-C151-46CD-95BC-1D059492B478}</Project>
+      <Name>HeuristicLab.DataAccess-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HeuristicLabHiveContractsPlugin.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HeuristicLabHiveContractsPlugin.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HeuristicLabHiveContractsPlugin.cs	(revision 4340)
@@ -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.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Server {
+  [Plugin("HeuristicLab.Hive.Contracts", "3.3")]
+  [PluginFile("HeuristicLab.Hive.Contracts-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.DataAccess", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  [PluginDependency("HeuristicLab.Tracing", "3.3")]
+  public class HeuristicLabHiveContractsPlugin : PluginBase {
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HiveRoles.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HiveRoles.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HiveRoles.cs	(revision 4340)
@@ -0,0 +1,12 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Contracts {
+  public static class HiveRoles {
+    public const string Administrator = "Hive.Administrator";
+    public const string Slave = "Hive.Slave";
+    public const string Client = "Hive.Client";
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HiveServerMessages.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HiveServerMessages.resx	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HiveServerMessages.resx	(revision 4340)
@@ -0,0 +1,240 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Client.GetAllClientGroups" xml:space="preserve">
+    <value>All ClientGroups returned</value>
+  </data>
+  <data name="Client.GetAllClients" xml:space="preserve">
+    <value>All Clients returned</value>
+  </data>
+  <data name="Communicator.HeardbeatReceived" xml:space="preserve">
+    <value>Heartbeat received</value>
+  </data>
+  <data name="Communicator.JobPulled" xml:space="preserve">
+    <value>Job sent</value>
+  </data>
+  <data name="Communicator.JobResultReceived" xml:space="preserve">
+    <value>JobResult received, thanks for calculating</value>
+  </data>
+  <data name="Communicator.LoginClientNotRegistered" xml:space="preserve">
+    <value>Sorry this client was not registered yet</value>
+  </data>
+  <data name="Communicator.LoginSuccess" xml:space="preserve">
+    <value>The Login was successfull</value>
+  </data>
+  <data name="Communicator.LogoutSuccess" xml:space="preserve">
+    <value>You where logged out successfully. Good bye</value>
+  </data>
+  <data name="Communicator.LogoutUserAllreadyOnline" xml:space="preserve">
+    <value>A User with this GUID is allready logged in</value>
+  </data>
+  <data name="UserRole.AllUserGroupsReturned" xml:space="preserve">
+    <value>All UserGroups returned</value>
+  </data>
+  <data name="UserRole.GetAllUsers" xml:space="preserve">
+    <value>All Users returned</value>
+  </data>
+  <data name="UserRole.PermissionOwnerAdded" xml:space="preserve">
+    <value>PermissionOwner successfully added</value>
+  </data>
+  <data name="UserRole.PermissionOwnerDoesntExist" xml:space="preserve">
+    <value>PermissionOwner doesnt exist</value>
+  </data>
+  <data name="UserRole.PermissionOwnerRemoved" xml:space="preserve">
+    <value>PermissionOwner successfully removed</value>
+  </data>
+  <data name="UserRole.UserDoesntExist" xml:space="preserve">
+    <value>Sorry, but this user doesn't exist</value>
+  </data>
+  <data name="UserRole.UserExistsAllready" xml:space="preserve">
+    <value>Sorry, but a user with this name exists allready in database</value>
+  </data>
+  <data name="UserRole.UserGroupAdded" xml:space="preserve">
+    <value>UserGroup successfully added to database</value>
+  </data>
+  <data name="UserRole.UsergroupExistsAllready" xml:space="preserve">
+    <value>The UserGroup exists allready</value>
+  </data>
+  <data name="UserRole.UserRemoved" xml:space="preserve">
+    <value>User sucessfully removed from database</value>
+  </data>
+  <data name="UserRole.UserSuccessfullyAdded" xml:space="preserve">
+    <value>User successfully added to database</value>
+  </data>
+  <data name="Client.ClientGroupAdded" xml:space="preserve">
+    <value>ClientGroup successfully added</value>
+  </data>
+  <data name="Client.ClientGroupDoesntExist" xml:space="preserve">
+    <value>The specified ClientGroup doesn't exist</value>
+  </data>
+  <data name="Client.IdMustNotBeSet" xml:space="preserve">
+    <value>In this context the id must not be set</value>
+  </data>
+  <data name="Client.ResourceAddedToGroup" xml:space="preserve">
+    <value>Resource successfully added to ClientGroup</value>
+  </data>
+  <data name="Client.ResourceRemoved" xml:space="preserve">
+    <value>Resource successfully removed from ClientGroup</value>
+  </data>
+  <data name="UserRole.IdMustNotBeSet" xml:space="preserve">
+    <value>In this context the id must not be set</value>
+  </data>
+  <data name="Job.AllJobs" xml:space="preserve">
+    <value>All Jobs returned</value>
+  </data>
+  <data name="Job.IdMustNotBeSet" xml:space="preserve">
+    <value>Id must not be set in this context</value>
+  </data>
+  <data name="Job.JobAdded" xml:space="preserve">
+    <value>Job successfully added to database</value>
+  </data>
+  <data name="Job.JobNull" xml:space="preserve">
+    <value>The job you sent was null</value>
+  </data>
+  <data name="Job.JobRemoved" xml:space="preserve">
+    <value>Job successfully removed</value>
+  </data>
+  <data name="JobDoesntExist" xml:space="preserve">
+    <value>The specified job doesn't exist</value>
+  </data>
+  <data name="UserRole.UsernameExistsAllready" xml:space="preserve">
+    <value>A user with this username exists allready</value>
+  </data>
+  <data name="Communicator.IdMustNotBeSet" xml:space="preserve">
+    <value>The id must not be set in this context</value>
+  </data>
+  <data name="Communicator.NoJobWithThisId" xml:space="preserve">
+    <value>There exists no job with this id</value>
+  </data>
+  <data name="Job.JobStateMustBeOffline" xml:space="preserve">
+    <value>The state of the job must be offline</value>
+  </data>
+  <data name="Communicator.UserNotLoggedIn" xml:space="preserve">
+    <value>User is not logged in, you must login before sending Heartbeats</value>
+  </data>
+  <data name="Communicator.JobIsNotBeenigCalculated" xml:space="preserve">
+    <value>There is no client registered to calculate this job</value>
+  </data>
+  <data name="Communicator.WrongClientForJob" xml:space="preserve">
+    <value>This client is not registered to calculate this job</value>
+  </data>
+  <data name="Job.JobResultSent" xml:space="preserve">
+    <value>Job Result sent successfully</value>
+  </data>
+</root>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IClientFacade.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IClientFacade.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IClientFacade.cs	(revision 4340)
@@ -0,0 +1,48 @@
+﻿#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 System.ServiceModel;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+
+namespace HeuristicLab.Hive.Contracts.Interfaces {
+  [ServiceContract]
+  public interface IClientFacade {
+    [OperationContract]
+    ResponseObject<JobDto> AddJob(SerializedJob job);
+    [OperationContract]
+    ResponseObject<JobDto> AddJobWithGroupStrings(SerializedJob jobObj, IEnumerable<string> groups);
+    [OperationContract]
+    Response RequestSnapshot(Guid jobId);
+    [OperationContract]
+    ResponseObject<SerializedJob> GetLastSerializedResult(Guid jobId, bool requested, bool snapshot);
+    [OperationContract]
+    Response AbortJob(Guid jobId);
+    [OperationContract]
+    ResponseObject<JobDto> GetJobById(Guid jobId);
+    [OperationContract]
+    ResponseObject<JobResultList> GetJobResults(IEnumerable<Guid> jobIds);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IJobManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IJobManager.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IJobManager.cs	(revision 4340)
@@ -0,0 +1,88 @@
+﻿#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 System.ServiceModel;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+
+namespace HeuristicLab.Hive.Contracts.Interfaces {
+  /// <summary>
+  /// This is the facade for the Job Manager used by the Management Console
+  /// </summary>
+  [ServiceContract]
+  public interface IJobManager {
+
+    [OperationContract]
+    ResponseList<JobDto> GetAllJobsWithFilter(JobState jobState, int offset, int count);
+
+    [OperationContract]
+    ResponseList<JobDto> GetAllJobs();
+
+    [OperationContract]
+    ResponseObject<JobDto> GetJobById(Guid jobId);
+
+    [OperationContract]
+    ResponseObject<JobDto> GetJobByIdWithDetails(Guid jobId);
+
+    [OperationContract]
+    ResponseObject<JobDto> AddNewJob(SerializedJob job);
+
+    //[OperationContract]
+    //Response RemoveJob(Guid jobId);
+
+    //[OperationContract]
+    //ResponseObject<JobDto> GetLastJobResultOf(Guid jobId);
+
+    [OperationContract]
+    ResponseObject<SerializedJob> GetLastSerializedResult(Guid jobId, bool requested, bool snapshot);
+
+    [OperationContract]
+    ResponseObject<JobResultList> GetJobResults(IEnumerable<Guid> jobIds);
+
+    [OperationContract]
+    Response RequestSnapshot(Guid jobId);
+
+    [OperationContract]
+    Response AbortJob(Guid jobId);
+
+    [OperationContract]
+    ResponseList<ProjectDto> GetAllProjects();
+
+    [OperationContract]
+    Response CreateProject(ProjectDto project);
+
+    [OperationContract]
+    Response ChangeProject(ProjectDto project);
+
+    [OperationContract]
+    Response DeleteProject(Guid projectId);
+
+    [OperationContract]
+    ResponseList<JobDto> GetJobsByProject(Guid projectId);
+
+    [OperationContract]
+    ResponseObject<JobDto> AddJobWithGroupStrings(SerializedJob job, IEnumerable<string> resources);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ILifecycleManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ILifecycleManager.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ILifecycleManager.cs	(revision 4340)
@@ -0,0 +1,58 @@
+﻿#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.DataAccess.Interfaces;
+
+namespace HeuristicLab.Hive.Contracts.Interfaces {    
+  /// <summary>
+  /// Manages the lifecycle of the application
+  /// </summary>
+  public interface ILifecycleManager {    
+    /// <summary>
+    /// Initializes the application
+    /// </summary>
+    void Init();
+
+    /// <summary>
+    /// The server heartbeat
+    /// </summary>
+    void RegisterHeartbeat(EventHandler handler);
+
+    /// <summary>
+    /// The startup event
+    /// </summary>
+    void RegisterStartup(EventHandler handler);
+
+    /// <summary>
+    /// The shutdown event
+    /// </summary>
+    void RegisterShutdown(EventHandler handler);
+
+    /// <summary>
+    /// Shuts the application down
+    /// </summary>
+    void Shutdown();
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IServerConsoleFacade.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IServerConsoleFacade.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IServerConsoleFacade.cs	(revision 4340)
@@ -0,0 +1,43 @@
+﻿#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 System.ServiceModel;
+using System.Runtime.Serialization;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+
+namespace HeuristicLab.Hive.Contracts.Interfaces {
+  /// <summary>
+  /// Facade for the server management console
+  /// </summary>
+  [ServiceContract()]
+  public interface IServerConsoleFacade : ISlaveManager, IJobManager {
+    /// <summary>
+    /// Method can be used to check if security credentials are valid, but it does not do anything
+    /// </summary>
+    /// <returns></returns>
+    [OperationContract]
+    Response Login(); 
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ISlaveCommunicator.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ISlaveCommunicator.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ISlaveCommunicator.cs	(revision 4340)
@@ -0,0 +1,72 @@
+#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 System.ServiceModel;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+
+namespace HeuristicLab.Hive.Contracts.Interfaces {
+  /// <summary>
+  /// This is the facade for the client communication
+  /// </summary>
+  [ServiceContract]
+  public interface ISlaveCommunicator {
+
+    /// <summary>
+    /// This method registers the slave and marks it as online
+    /// </summary>
+    [OperationContract]
+    Response Login(SlaveDto slave);
+
+    [OperationContract]
+    ResponseHeartBeat ProcessHeartBeat(HeartBeatData hbData);
+
+    [OperationContract]
+    ResponseObject<JobDto> GetJob(Guid clientId);
+
+    [OperationContract]
+    ResponseResultReceived StoreFinishedJobResult(Guid clientId, Guid jobId, byte[] result, double percentage, string exception);
+
+    [OperationContract]
+    ResponseResultReceived ProcessSnapshot(Guid clientId, Guid jobId, byte[] result, double percentage, string exception);
+
+    [OperationContract]
+    Response Logout(Guid clientId);
+
+    [OperationContract]
+    Response IsJobStillNeeded(Guid jobId);
+
+    [OperationContract]
+    ResponseList<CachedHivePluginInfoDto> GetPlugins(List<HivePluginInfoDto> pluginList);
+
+    [OperationContract]
+    ResponseCalendar GetCalendar(Guid clientId);
+
+    [OperationContract]
+    Response SetCalendarStatus(Guid clientId, CalendarState state);
+
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ISlaveFacade.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ISlaveFacade.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ISlaveFacade.cs	(revision 4340)
@@ -0,0 +1,46 @@
+﻿#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 System.ServiceModel;
+using System.IO;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+
+namespace HeuristicLab.Hive.Contracts.Interfaces {
+  [ServiceContract]
+  public interface ISlaveFacade: ISlaveCommunicator {
+    [OperationContract]
+    Stream GetStreamedJob(Guid clientId);
+
+    [OperationContract]
+    Stream GetStreamedPlugins(List<HivePluginInfoDto> pluginList);
+
+    [OperationContract]
+    ResponseResultReceived StoreFinishedJobResultStreamed(Stream stream);
+
+    [OperationContract]
+    ResponseResultReceived ProcessSnapshotStreamed(Stream stream);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ISlaveManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ISlaveManager.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ISlaveManager.cs	(revision 4340)
@@ -0,0 +1,73 @@
+#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 System.ServiceModel;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+
+namespace HeuristicLab.Hive.Contracts.Interfaces {
+  /// <summary>
+  /// This is the faced for the management console
+  /// </summary>
+  [ServiceContract]
+  public interface ISlaveManager {
+
+    [OperationContract]
+    ResponseList<SlaveDto> GetAllSlaves();
+
+    [OperationContract]
+    [ServiceKnownType(typeof (ResourceDto))]
+    [ServiceKnownType(typeof(SlaveDto))]
+    [ServiceKnownType(typeof(SlaveGroupDto))]
+    ResponseList<SlaveGroupDto> GetAllSlaveGroups();
+
+    [OperationContract]
+    ResponseObject<SlaveGroupDtoList> GetAllGroupsOfResource(Guid resourceId);
+
+    [OperationContract]
+    ResponseObject<SlaveGroupDto> AddSlaveGroup(SlaveGroupDto clientGroup);
+
+    [OperationContract]
+    Response DeleteSlaveGroup(Guid clientGroupId);
+
+    [OperationContract]
+    [ServiceKnownType(typeof(ResourceDto))]
+    [ServiceKnownType(typeof(SlaveDto))]
+    [ServiceKnownType(typeof(SlaveGroupDto))]
+    Response AddResourceToGroup(Guid clientGroupId, ResourceDto resource);
+
+    [OperationContract]
+    Response DeleteResourceFromGroup(Guid clientGroupId, Guid resourceId);
+
+    [OperationContract]
+    ResponseList<UpTimeStatisticsDto> GetAllUpTimeStatistics();
+
+    [OperationContract]
+    ResponseList<AppointmentDto> GetUptimeCalendarForResource(Guid guid);
+
+    [OperationContract]
+    Response SetUptimeCalendarForResource(Guid guid, IEnumerable<AppointmentDto> appointments, bool isForced);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/MessageContainer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/MessageContainer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/MessageContainer.cs	(revision 4340)
@@ -0,0 +1,69 @@
+﻿#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.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Hive.Contracts {
+  /// <summary>
+  /// The MessageContainer is a container class for Messages. Its two parts are:
+  /// the actual message itself and the JobId, refered by the message
+  /// </summary>
+  [StorableClass]
+  [Serializable]
+  public class MessageContainer : IDeepCloneable {
+
+    public enum MessageType { FetchJob, AbortJob, JobAborted, RequestSnapshot, FinishedJob, NoMessage, SnapshotReady, Shutdown, JobFailed, UptimeLimitDisconnect,
+      FetchOrForceFetchCalendar
+    };
+
+    [Storable]
+    public MessageType Message { get; set; }
+    [Storable]
+    public Guid JobId { get; set; }
+
+    public MessageContainer(MessageType message) {
+      Message = message;
+      JobId = Guid.Empty;
+    }
+
+    public MessageContainer(MessageType message, Guid jobId) {
+      Message = message;
+      JobId = jobId;
+    }
+
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      MessageContainer clone = (MessageContainer)Activator.CreateInstance(this.GetType(), true);
+      cloner.RegisterClonedObject(this, clone);
+      clone.Message = this.Message;
+      clone.JobId = this.JobId;
+      return clone;
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/MultiStream.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/MultiStream.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/MultiStream.cs	(revision 4340)
@@ -0,0 +1,115 @@
+/* taken from: 
+ * http://www.clevercomponents.com/articles/article017/multistreamcs.asp
+ * */
+
+using System;
+using System.IO;
+using System.Collections;
+using HeuristicLab.Tracing;
+
+namespace HeuristicLab.Hive.Contracts {
+  public class MultiStream : Stream {
+    ArrayList streamList = new ArrayList();
+    long position = 0;
+    public override bool CanRead {
+      get { return true; }
+    }
+
+    public override bool CanSeek {
+      get { return true; }
+    }
+
+    public override bool CanWrite {
+      get { return false; }
+    }
+
+    public override long Length {
+      get {
+        long result = 0;
+        foreach (Stream stream in streamList) {
+          result += stream.Length;
+        }
+        return result;
+      }
+    }
+
+    public override long Position {
+      get { return position; }
+      set { Seek(value, SeekOrigin.Begin); }
+    }
+
+    public override void Flush() { }
+
+    public override long Seek(long offset, SeekOrigin origin) {
+      long len = Length;
+      switch (origin) {
+        case SeekOrigin.Begin:
+          position = offset;
+          break;
+        case SeekOrigin.Current:
+          position += offset;
+          break;
+        case SeekOrigin.End:
+          position = len - offset;
+          break;
+      }
+      if (position > len) {
+        position = len;
+      } else if (position < 0) {
+        position = 0;
+      }
+      return position;
+    }
+
+    public override void SetLength(long value) { }
+
+    public void AddStream(Stream stream) {
+      streamList.Add(stream);
+    }
+
+    public override int Read(byte[] buffer, int offset, int count) {
+      long len = 0;
+      int result = 0;
+      int buf_pos = offset;
+      int bytesRead;
+      foreach (Stream stream in streamList) {
+        if (position < (len + stream.Length)) {
+          stream.Position = position - len;
+          bytesRead = stream.Read(buffer, buf_pos, count);
+          result += bytesRead;
+          buf_pos += bytesRead;
+          position += bytesRead;
+          if (bytesRead < count) {
+            count -= bytesRead;
+          } else {
+            break;
+          }
+        }
+        len += stream.Length;
+      }
+      return result;
+    }
+
+    public override void Write(byte[] buffer, int offset, int count) {
+    }
+
+    public override void Close() {
+      foreach (Stream s in this.streamList) {
+        s.Close();
+      }
+      
+      base.Close();
+    }
+
+    protected override void Dispose(bool disposing) {
+      //if (!disposing) {
+        foreach (Stream s in this.streamList) {
+          Console.WriteLine("DISPOSING STREAM");
+          s.Dispose();
+        }
+      //}
+      
+      base.Dispose(disposing);
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Properties/AssemblyInfo.frame	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Properties/AssemblyInfo.frame	(revision 4340)
@@ -0,0 +1,60 @@
+#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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+using System.Security;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Hive.Contracts")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AllowPartiallyTrustedCallers]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("B6BA196A-F2E3-4de2-AE8A-02D4995F8B57")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/RecurrentEvent.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/RecurrentEvent.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/RecurrentEvent.cs	(revision 4340)
@@ -0,0 +1,35 @@
+﻿#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;
+
+namespace HeuristicLab.Hive.Slave.Console
+{
+  public class RecurrentEvent
+  {
+    public DateTime DateFrom { get; set; }
+    public DateTime DateTo { get; set; }
+    public bool AllDay { get; set; }
+    public int IncWeeks { get; set; }
+    public HashSet<DayOfWeek> WeekDays { get; set; }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/Response.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/Response.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/Response.cs	(revision 4340)
@@ -0,0 +1,60 @@
+﻿#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 System.Runtime.Serialization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Hive.Contracts.ResponseObjects {
+  /// <summary>
+  /// Server response class
+  /// </summary>
+  [StorableClass]
+  [DataContract]
+  [Serializable]
+  public class Response : IDeepCloneable {
+    [Storable]
+    [DataMember]
+    public ResponseStatus StatusMessage { get; set; }
+
+    public Response() {
+      StatusMessage = ResponseStatus.Ok;
+    }
+
+    [StorableConstructor]
+    protected Response(bool deserializing) { }
+
+    public virtual IDeepCloneable Clone(Cloner cloner) {
+      Response clone = (Response)Activator.CreateInstance(this.GetType(), true);
+      cloner.RegisterClonedObject(this, clone);
+      clone.StatusMessage = this.StatusMessage;
+      return clone;
+    }
+
+    public object Clone() {
+      return Clone(new Cloner());
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseCalendar.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseCalendar.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseCalendar.cs	(revision 4340)
@@ -0,0 +1,29 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Hive.Contracts.ResponseObjects {
+  [StorableClass]
+  [DataContract]
+  [Serializable]
+  public class ResponseCalendar : Response {
+    [Storable]
+    [DataMember]
+    public bool ForceFetch { get; set; }
+    [Storable]
+    [DataMember]
+    public IEnumerable<AppointmentDto> Appointments { get; set; }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      ResponseCalendar clone = (ResponseCalendar) base.Clone(cloner);
+      clone.Appointments = (from a in this.Appointments
+                           select (AppointmentDto)cloner.Clone(a)).ToList();
+      clone.ForceFetch = this.ForceFetch;
+      return clone;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseHeartBeat.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseHeartBeat.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseHeartBeat.cs	(revision 4340)
@@ -0,0 +1,51 @@
+﻿#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 System.Runtime.Serialization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Hive.Contracts.ResponseObjects {
+
+
+  /// <summary>
+  /// Response Heartbeat class
+  /// Return value to hearbeats sent by the client
+  /// </summary>
+  [StorableClass]
+  [DataContract]
+  [Serializable]
+  public class ResponseHeartBeat : Response {
+    [Storable]
+    [DataMember]
+    public List<MessageContainer> ActionRequest { get; set; }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      ResponseHeartBeat clone = (ResponseHeartBeat) base.Clone(cloner);
+      clone.ActionRequest = (from ar in this.ActionRequest
+                            select (MessageContainer) cloner.Clone(ar)).ToList();
+      return clone;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseList.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseList.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseList.cs	(revision 4340)
@@ -0,0 +1,49 @@
+﻿#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 System.Runtime.Serialization;
+using System.ServiceModel;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Hive.Contracts.ResponseObjects {
+  [StorableClass]
+  [DataContract]
+  [Serializable]
+  public class ResponseList<T> : Response 
+    where T : IDeepCloneable {
+    [Storable]
+    [DataMember]
+    public IList<T> List { get; set; }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      ResponseList<T> clone = (ResponseList<T>)base.Clone(cloner);
+      clone.List = (from elem in List
+                   select (T)cloner.Clone(elem)).ToList();
+      return clone;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseObject.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseObject.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseObject.cs	(revision 4340)
@@ -0,0 +1,46 @@
+﻿#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 System.Runtime.Serialization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Hive.Contracts.ResponseObjects {
+  [StorableClass]
+  [DataContract]
+  [Serializable]
+  public class ResponseObject<T> : Response
+    where T : IDeepCloneable {
+    [Storable]
+    [DataMember]
+    public T Obj { get; set; }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      ResponseObject<T> clone = (ResponseObject<T>)base.Clone(cloner);
+      clone.Obj = (T)cloner.Clone(this.Obj);
+      return clone;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseResultReceived.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseResultReceived.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseObjects/ResponseResultReceived.cs	(revision 4340)
@@ -0,0 +1,49 @@
+﻿#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 System.Runtime.Serialization;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Hive.Contracts.ResponseObjects {
+  [StorableClass]
+  [DataContract]
+  [Serializable]
+  public class ResponseResultReceived : Response {
+    [Storable]
+    [DataMember]
+    public Guid JobId { get; set; }
+    [Storable]
+    [DataMember]
+    public bool Finished { get; set; }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      ResponseResultReceived clone = (ResponseResultReceived) base.Clone(cloner);
+      clone.Finished = this.Finished;
+      clone.JobId = this.JobId;
+      return clone;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseStatus.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseStatus.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/ResponseStatus.cs	(revision 4340)
@@ -0,0 +1,67 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Contracts {
+  /// <summary>
+  /// [chn] todo: make names consistent: NotFound, DoesNotExist, NotAvailable, ...
+  /// </summary>
+  public enum ResponseStatus {
+    Ok,
+
+    RequestSnapshot_JobIsNotBeeingCalculated, // ApplicationConstants.RESPONSE_JOB_REQUEST_ALLREADY_SET
+    RequestSnapshot_SnapshotAlreadyRequested, // ApplicationConstants.RESPONSE_JOB_IS_NOT_BEEING_CALCULATED
+
+    GetJobById_JobDoesNotExist, // ApplicationConstants.RESPONSE_JOB_JOB_DOESNT_EXIST
+
+    GetJobByIdWithDetails_JobDoesNotExist, // ApplicationConstants.RESPONSE_JOB_JOB_DOESNT_EXIST
+
+    AddNewJob_JobStateMustBeOffline, // ApplicationConstants.RESPONSE_JOB_JOBSTATE_MUST_BE_OFFLINE
+    AddNewJob_JobIdMustNotBeSet, // ApplicationConstants.RESPONSE_JOB_ID_MUST_NOT_BE_SET
+    AddNewJob_JobNull, // ApplicationConstants.RESPONSE_JOB_JOB_NULL
+
+    RemoveJob_JobDoesNotExist, // ApplicationConstants.RESPONSE_JOB_JOB_DOESNT_EXIST
+
+    GetLastSerializedResult_JobResultNotYetThere, // ApplicationConstants.RESPONSE_JOB_RESULT_NOT_YET_HERE
+
+    AbortJob_JobDoesNotExist, // ApplicationConstants.RESPONSE_JOB_JOB_DOESNT_EXIST
+    AbortJob_AbortAlreadyRequested, // ApplicationConstants.RESPONSE_JOB_ABORT_REQUEST_ALLREADY_SET
+    AbortJob_JobIsNotBeeingCalculated, // ApplicationConstants.RESPONSE_JOB_IS_NOT_BEEING_CALCULATED
+
+    GetCalendar_ResourceNotFound, // ApplicationConstants.RESPONSE_CLIENT_RESOURCE_NOT_FOUND
+    GetCalendar_NoCalendarFound, // ApplicationConstants.RESPONSE_UPTIMECALENDAR_NO_CALENDAR_FOUND
+
+    SetCalendarStatus_ResourceNotFound, // ApplicationConstants.RESPONSE_CLIENT_RESOURCE_NOT_FOUND
+
+    ProcessHeartBeat_UserNotLoggedIn, // ApplicationConstants.RESPONSE_COMMUNICATOR_USER_NOT_LOGGED_IN
+
+    GetJob_NoJobsAvailable, // ApplicationConstants.RESPONSE_COMMUNICATOR_NO_JOBS_LEFT
+
+    ProcessJobResult_JobDoesNotExist, // ApplicationConstants.RESPONSE_COMMUNICATOR_NO_JOB_WITH_THIS_ID
+    ProcessJobResult_JobAborted, // ApplicationConstants.RESPONSE_COMMUNICATOR_JOB_WAS_ABORTED
+    ProcessJobResult_JobIsNotBeeingCalculated, // ApplicationConstants.RESPONSE_COMMUNICATOR_JOB_IS_NOT_BEEING_CALCULATED
+    ProcessJobResult_WrongSlaveForJob, // ApplicationConstants.RESPONSE_COMMUNICATOR_WRONG_CLIENT_FOR_JOB
+    ProcessJobResult_InvalidJobState, // ApplicationConstants.RESPONSE_COMMUNICATOR_WRONG_JOB_STATE
+
+    Login_LoginFaild, // ApplicationConstants.RESPONSE_SERVERCONSOLE_LOGIN_FAILED
+
+    Logout_SlaveNotRegistered, // ApplicationConstants.RESPONSE_COMMUNICATOR_LOGOUT_CLIENT_NOT_REGISTERED
+
+    IsJobStillNeeded_JobDoesNotExist, // ApplicationConstants.RESPONSE_COMMUNICATOR_JOB_DOESNT_EXIST
+    IsJobStillNeeded_JobAlreadyFinished, // ApplicationConstants.RESPONSE_COMMUNICATOR_JOB_ALLREADY_FINISHED
+
+    GetPlugins_PluginsNotAvailable, // ApplicationConstants.RESPONSE_COMMUNICATOR_PLUGINS_NOT_AVAIL
+
+    AddSlaveGroup_SlaveIdMustNotBeSet, // ApplicationConstants.RESPONSE_CLIENT_ID_MUST_NOT_BE_SET
+
+    AddResourceToGroup_SlaveGroupDoesNotExist, // ApplicationConstants.RESPONSE_CLIENT_CLIENTGROUP_DOESNT_EXIST
+
+    DeleteResourceFromGroup_SlaveGroupDoesNotExist, // ApplicationConstants.RESPONSE_CLIENT_CLIENTGROUP_DOESNT_EXIST
+
+    GetAllGroupsOfResource_ResourceNotFound, // ApplicationConstants.RESPONSE_CLIENT_RESOURCE_NOT_FOUND
+
+    DeleteSlaveGroup_SlaveGroupDoesNotExist, // ApplicationConstants.RESPONSE_CLIENT_CLIENTGROUP_DOESNT_EXIST
+
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/StreamedObject.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/StreamedObject.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/StreamedObject.cs	(revision 4340)
@@ -0,0 +1,89 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.IO;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Contracts {
+  [DataContract]
+  public class StreamedObject<T> : Stream {
+    private T encapsulatedObject;
+
+    private Stream stream = 
+      new MemoryStream();
+
+    public StreamedObject(T encapsulatedObject) {
+      this.encapsulatedObject = encapsulatedObject;
+
+      BinaryFormatter formatter = new BinaryFormatter();
+      formatter.Serialize(this.stream, this.encapsulatedObject);
+
+      this.stream.Seek(0, SeekOrigin.Begin);
+    }
+
+    public T EncapsulatedObject {
+      get {
+        return this.encapsulatedObject;
+      }
+    }
+
+    public override bool CanRead {
+      get { return this.stream.CanRead; }
+    }
+
+    public override bool CanSeek {
+      get { throw new NotImplementedException(); }
+    }
+
+    public override bool CanWrite {
+      get { throw new NotImplementedException(); }
+    }
+
+    public override void Flush() {
+      throw new NotImplementedException();
+    }
+
+    public override long Length {
+      get { return this.stream.Length; }
+    }
+
+    public override long Position {
+      get {
+        return this.stream.Position;
+      }
+      set {
+        if(this.stream.Position != value)
+          throw new NotImplementedException();
+      }
+    }
+
+    public override int Read(byte[] buffer, int offset, int count) {
+      int read = this.stream.Read(buffer, offset, count);
+
+      return read;
+    }
+
+    public override long Seek(long offset, SeekOrigin origin) {
+      throw new NotImplementedException();
+    }
+
+    public override void SetLength(long value) {
+      throw new NotImplementedException();
+    }
+
+    public override void Write(byte[] buffer, int offset, int count) {
+      throw new NotImplementedException();
+    }
+
+    public override void Close() {
+      this.stream.Close();
+      base.Close();
+    }
+    protected override void Dispose(bool disposing) {
+      this.stream.Dispose();
+      base.Dispose(disposing);
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/WcfSettings.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/WcfSettings.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/WcfSettings.cs	(revision 4340)
@@ -0,0 +1,153 @@
+﻿//#define USE_MSG_BINDING
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ServiceModel.Channels;
+using System.ServiceModel;
+using System.Security.Cryptography.X509Certificates;
+using System.Net;
+using System.ServiceModel.Description;
+
+namespace HeuristicLab.Hive.Contracts {
+  public static class WcfSettings {
+    public const string SlaveServiceName = "SlaveService";
+    public const string ServerConsoleServiceName = "ServerConsoleService";
+    public const string ClientServiceName = "ClientService";
+    public const string ClientStreamedServiceName = "ClientServiceStreamed";
+
+    public const int DefaultPort = 9000;
+    
+    /// <summary>
+    /// Gets a pre-defined binding using TCP for secure transport.
+    /// </summary>
+    /// <returns>A binding type of <see cref="NetTcpBinding"/></returns>
+    public static Binding GetBinding() {
+#if USE_MSG_BINDING
+      NetTcpBinding binding = new NetTcpBinding(SecurityMode.Message);
+#else
+      NetTcpBinding binding = new NetTcpBinding();
+#endif
+      binding.MaxBufferSize = int.MaxValue;
+      binding.MaxReceivedMessageSize = int.MaxValue;
+      binding.ReaderQuotas.MaxArrayLength = int.MaxValue;
+      binding.ReaderQuotas.MaxStringContentLength = int.MaxValue;
+      binding.CloseTimeout = new TimeSpan(0, 5, 0);
+      binding.ReceiveTimeout = new TimeSpan(0, 5, 0);
+      binding.SendTimeout = new TimeSpan(0, 5, 0);
+      return binding;
+    }
+
+    public static Binding GetStreamedBinding() {
+#if USE_MSG_BINDING
+      NetTcpBinding binding = new NetTcpBinding(SecurityMode.Message);
+#else
+      NetTcpBinding binding = new NetTcpBinding();
+#endif
+      binding.TransferMode = TransferMode.Streamed;
+      binding.MaxReceivedMessageSize = int.MaxValue;
+      binding.ReaderQuotas.MaxArrayLength = int.MaxValue;
+      binding.ReaderQuotas.MaxStringContentLength = int.MaxValue;
+      binding.CloseTimeout = new TimeSpan(0, 5, 0);
+      binding.ReceiveTimeout = new TimeSpan(0, 5, 0);
+      binding.SendTimeout = new TimeSpan(0, 5, 0);
+      //Disabling security mode, for the moment
+      binding.Security.Mode = SecurityMode.None;
+      
+      return binding;
+    }
+
+//    /// <summary>
+//    /// Defines the used certificate for authentification located in a certification store.
+//    /// </summary>
+//    /// <param name="svchost">A service for which this certificate is applicable.</param>
+//    public static void SetServiceCertificate(ServiceHost svchost) {
+//#if USE_MSG_BINDING
+//      svchost.Credentials.ServiceCertificate.SetCertificate(
+//        StoreLocation.LocalMachine,
+//        StoreName.My,
+//        X509FindType.FindBySubjectName,
+//        SERVERCERT);
+//#endif
+//    }
+
+    /// <summary>
+    /// Gets the currently active IP address.
+    /// <remarks>If more than one IP connections is active, the first one will be used.</remarks>
+    /// </summary>
+    /// <returns></returns>
+    public static IPAddress GetActiveIP() {
+      return System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpConnections()[0].LocalEndPoint.Address;
+    }
+
+    /// <summary>
+    /// Gets the default port used for HIVE services.
+    /// </summary>
+    /// <returns></returns>
+    public static int GetDefaultPort() {
+      return DefaultPort;
+    }
+    
+    /// <summary>
+    /// This method changes the endpoint-address while preserving the identity-certificate defined in the config file
+    /// </summary>
+    public static void SetEndpointAddress(ServiceEndpoint endpoint, string hostAddress) {
+      EndpointAddressBuilder builder = new EndpointAddressBuilder(endpoint.Address);
+      UriBuilder uriBuilder = new UriBuilder(builder.Uri);
+      uriBuilder.Host = hostAddress;
+      builder.Uri = uriBuilder.Uri;
+      endpoint.Address = builder.ToEndpointAddress();
+    }
+
+    /// <summary>
+    /// Securely disposes a WCF client proxy object
+    /// </summary>
+    /// <param name="obj"></param>
+    public static void DisposeWcfClient(ICommunicationObject obj) {
+      if (obj != null) {
+        if (obj.State != CommunicationState.Faulted &&
+            obj.State != CommunicationState.Closed) {
+          try { obj.Close(); }
+          catch (CommunicationObjectFaultedException) { obj.Abort(); }
+          catch (TimeoutException) { obj.Abort(); }
+          catch (Exception) {
+            obj.Abort();
+            throw;
+          }
+        } else
+          obj.Abort();
+      }
+    }
+
+  }
+
+  /// <summary>
+  /// This class verifies the certificate defined by <see cref="SetServerCertificate"></see> method. Normally,
+  /// the verification process is managed by the underlying operating system.
+  /// </summary>
+  /// <remarks>
+  /// WARNUNG: Dieser Code wird nur für Testzertifikate benötigt, wie sie beispielsweise von makecert erstellt werden.
+  /// Sie sollten diesen Code nicht in einer Produktionsumgebung verwenden.
+  /// </remarks>
+  /*
+  public class PermissiveCertificatePolicy {
+    string subjectName;
+    static PermissiveCertificatePolicy currentPolicy;
+    PermissiveCertificatePolicy(string subjectName) {
+      this.subjectName = subjectName;
+      ServicePointManager.ServerCertificateValidationCallback +=
+          new System.Net.Security.RemoteCertificateValidationCallback(RemoteCertValidate);
+    }
+
+    public static void Enact(string subjectName) {
+      currentPolicy = new PermissiveCertificatePolicy(subjectName);
+    }
+
+    bool RemoteCertValidate(object sender, X509Certificate cert, X509Chain chain, System.Net.Security.SslPolicyErrors error) {
+      if (cert.Subject == subjectName) {
+        return true;
+      }
+      return false;
+    }
+  }             */
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/ControlExtensions.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/ControlExtensions.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/ControlExtensions.cs	(revision 4340)
@@ -0,0 +1,17 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Hive.Experiment.Views {
+  public static class ControlExtensions {
+    public static void InvokeIfRequired(this Control c, Action<Control> action) {
+      if (c.InvokeRequired) {
+        c.Invoke((Action)(() => action(c)));
+      } else {
+        action(c);
+      }
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HeuristicLab.Hive.Experiment.Views-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HeuristicLab.Hive.Experiment.Views-3.3.csproj	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HeuristicLab.Hive.Experiment.Views-3.3.csproj	(revision 4340)
@@ -0,0 +1,183 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{4F15BEA2-F494-4584-A0E5-6BA85377B313}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Experiment.Views</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Experiment.Views-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <PlatformTarget>x86</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <OutputPath>bin\Debug\</OutputPath>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <OutputPath>bin\Release\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup>
+    <StartupObject />
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Collections-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Collections-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Common.Resources-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core.Views-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Core.Views-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Data-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.MainForm-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm.WindowsForms-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.MainForm.WindowsForms-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Operators.Views-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Operators.Views-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Optimization-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization.Views-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Optimization.Views-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ControlExtensions.cs" />
+    <Compile Include="HeuristicLabHiveExperimentViewsPlugin.cs" />
+    <Compile Include="HiveExperimentView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="HiveExperimentView.Designer.cs">
+      <DependentUpon>HiveExperimentView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="JobItemListView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="JobItemListView.Designer.cs">
+      <DependentUpon>JobItemListView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="JobItemView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="JobItemView.Designer.cs">
+      <DependentUpon>JobItemView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.DataAccess\3.3\HeuristicLab.DataAccess-3.3.csproj">
+      <Project>{9076697B-C151-46CD-95BC-1D059492B478}</Project>
+      <Name>HeuristicLab.DataAccess-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Contracts\3.3\HeuristicLab.Hive.Contracts-3.3.csproj">
+      <Project>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</Project>
+      <Name>HeuristicLab.Hive.Contracts-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Experiment\3.3\HeuristicLab.Hive.Experiment-3.3.csproj">
+      <Project>{A84C0A25-13D0-40A6-924F-53556D9691DC}</Project>
+      <Name>HeuristicLab.Hive.Experiment-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.JobBase\3.3\HeuristicLab.Hive.JobBase-3.3.csproj">
+      <Project>{21187322-52DD-4243-80A4-A85F0263E63B}</Project>
+      <Name>HeuristicLab.Hive.JobBase-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="HiveExperimentView.resx">
+      <DependentUpon>HiveExperimentView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="JobItemView.resx">
+      <DependentUpon>JobItemView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HeuristicLabHiveExperimentViewsPlugin.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HeuristicLabHiveExperimentViewsPlugin.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HeuristicLabHiveExperimentViewsPlugin.cs	(revision 4340)
@@ -0,0 +1,49 @@
+#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.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Experiment.Views {
+  [Plugin("HeuristicLab.Hive.Experiment.Views", "3.3")]
+  [PluginFile("HeuristicLab.Hive.Experiment.Views-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Core.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.DataAccess", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.Contracts", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.Experiment", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.JobBase", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
+  [PluginDependency("HeuristicLab.Operators.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  public class HeuristicLabHiveExperimentViewsPlugin : PluginBase {
+
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.Designer.cs	(revision 4340)
@@ -0,0 +1,443 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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
+
+namespace HeuristicLab.Hive.Experiment.Views {
+  partial class HiveExperimentView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HiveExperimentView));
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.experimentTabPage = new System.Windows.Forms.TabPage();
+      this.openExperimentButton = new System.Windows.Forms.Button();
+      this.newExperimentButton = new System.Windows.Forms.Button();
+      this.experimentNamedItemView = new HeuristicLab.Core.Views.NamedItemView();
+      this.viewExperimentButton = new System.Windows.Forms.Button();
+      this.hiveStatusTabPage = new System.Windows.Forms.TabPage();
+      this.jobListView = new HeuristicLab.Hive.Experiment.Views.JobItemListView();
+      this.runsTabPage = new System.Windows.Forms.TabPage();
+      this.runCollectionView = new HeuristicLab.Optimization.Views.RunCollectionView();
+      this.logTabPage = new System.Windows.Forms.TabPage();
+      this.logView = new HeuristicLab.Core.Views.LogView();
+      this.startButton = new System.Windows.Forms.Button();
+      this.stopButton = new System.Windows.Forms.Button();
+      this.resetButton = new System.Windows.Forms.Button();
+      this.executionTimeLabel = new System.Windows.Forms.Label();
+      this.executionTimeTextBox = new System.Windows.Forms.TextBox();
+      this.pauseButton = new System.Windows.Forms.Button();
+      this.ServerIpLabel = new System.Windows.Forms.Label();
+      this.resourceIdsLabel = new System.Windows.Forms.Label();
+      this.serverIpTextBox = new System.Windows.Forms.TextBox();
+      this.resourceIdsTextBox = new System.Windows.Forms.TextBox();
+      this.disconnectButton = new System.Windows.Forms.Button();
+      this.reconnectButton = new System.Windows.Forms.Button();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.tabControl.SuspendLayout();
+      this.experimentTabPage.SuspendLayout();
+      this.hiveStatusTabPage.SuspendLayout();
+      this.runsTabPage.SuspendLayout();
+      this.logTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      this.nameTextBox.Size = new System.Drawing.Size(663, 20);
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Size = new System.Drawing.Size(663, 20);
+      // 
+      // tabControl
+      // 
+      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.tabControl.Controls.Add(this.experimentTabPage);
+      this.tabControl.Controls.Add(this.hiveStatusTabPage);
+      this.tabControl.Controls.Add(this.runsTabPage);
+      this.tabControl.Controls.Add(this.logTabPage);
+      this.tabControl.Location = new System.Drawing.Point(0, 99);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(735, 395);
+      this.tabControl.TabIndex = 4;
+      // 
+      // experimentTabPage
+      // 
+      this.experimentTabPage.Controls.Add(this.openExperimentButton);
+      this.experimentTabPage.Controls.Add(this.newExperimentButton);
+      this.experimentTabPage.Controls.Add(this.experimentNamedItemView);
+      this.experimentTabPage.Controls.Add(this.viewExperimentButton);
+      this.experimentTabPage.Location = new System.Drawing.Point(4, 22);
+      this.experimentTabPage.Name = "experimentTabPage";
+      this.experimentTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.experimentTabPage.Size = new System.Drawing.Size(727, 369);
+      this.experimentTabPage.TabIndex = 1;
+      this.experimentTabPage.Text = "Experiment";
+      this.experimentTabPage.UseVisualStyleBackColor = true;
+      // 
+      // openExperimentButton
+      // 
+      this.openExperimentButton.Image = ((System.Drawing.Image)(resources.GetObject("openExperimentButton.Image")));
+      this.openExperimentButton.Location = new System.Drawing.Point(36, 6);
+      this.openExperimentButton.Name = "openExperimentButton";
+      this.openExperimentButton.Size = new System.Drawing.Size(24, 24);
+      this.openExperimentButton.TabIndex = 5;
+      this.toolTip.SetToolTip(this.openExperimentButton, "Open Experiment");
+      this.openExperimentButton.UseVisualStyleBackColor = true;
+      this.openExperimentButton.Click += new System.EventHandler(this.openExperimentButton_Click);
+      // 
+      // newExperimentButton
+      // 
+      this.newExperimentButton.Image = ((System.Drawing.Image)(resources.GetObject("newExperimentButton.Image")));
+      this.newExperimentButton.Location = new System.Drawing.Point(6, 6);
+      this.newExperimentButton.Name = "newExperimentButton";
+      this.newExperimentButton.Size = new System.Drawing.Size(24, 24);
+      this.newExperimentButton.TabIndex = 4;
+      this.toolTip.SetToolTip(this.newExperimentButton, "New Experiment");
+      this.newExperimentButton.UseVisualStyleBackColor = true;
+      this.newExperimentButton.Click += new System.EventHandler(this.newExperimentButton_Click);
+      // 
+      // experimentNamedItemView
+      // 
+      this.experimentNamedItemView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.experimentNamedItemView.Caption = "NamedItem View";
+      this.experimentNamedItemView.Content = null;
+      this.experimentNamedItemView.Location = new System.Drawing.Point(3, 36);
+      this.experimentNamedItemView.Name = "experimentNamedItemView";
+      this.experimentNamedItemView.ReadOnly = false;
+      this.experimentNamedItemView.Size = new System.Drawing.Size(721, 52);
+      this.experimentNamedItemView.TabIndex = 3;
+      // 
+      // viewExperimentButton
+      // 
+      this.viewExperimentButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.viewExperimentButton.Location = new System.Drawing.Point(0, 94);
+      this.viewExperimentButton.Name = "viewExperimentButton";
+      this.viewExperimentButton.Size = new System.Drawing.Size(727, 23);
+      this.viewExperimentButton.TabIndex = 1;
+      this.viewExperimentButton.Text = "&Show Experiment";
+      this.viewExperimentButton.UseVisualStyleBackColor = true;
+      this.viewExperimentButton.Click += new System.EventHandler(this.showExperimentButton_Click);
+      // 
+      // hiveStatusTabPage
+      // 
+      this.hiveStatusTabPage.Controls.Add(this.jobListView);
+      this.hiveStatusTabPage.Location = new System.Drawing.Point(4, 22);
+      this.hiveStatusTabPage.Name = "hiveStatusTabPage";
+      this.hiveStatusTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.hiveStatusTabPage.Size = new System.Drawing.Size(727, 369);
+      this.hiveStatusTabPage.TabIndex = 2;
+      this.hiveStatusTabPage.Text = "HiveStatus";
+      this.hiveStatusTabPage.UseVisualStyleBackColor = true;
+      // 
+      // jobListView
+      // 
+      this.jobListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.jobListView.Caption = "JobList View";
+      this.jobListView.Content = null;
+      this.jobListView.Location = new System.Drawing.Point(3, 6);
+      this.jobListView.Name = "jobListView";
+      this.jobListView.ReadOnly = false;
+      this.jobListView.Size = new System.Drawing.Size(721, 360);
+      this.jobListView.TabIndex = 0;
+      // 
+      // runsTabPage
+      // 
+      this.runsTabPage.Controls.Add(this.runCollectionView);
+      this.runsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.runsTabPage.Name = "runsTabPage";
+      this.runsTabPage.Size = new System.Drawing.Size(727, 369);
+      this.runsTabPage.TabIndex = 4;
+      this.runsTabPage.Text = "Runs";
+      this.runsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // runCollectionView
+      // 
+      this.runCollectionView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.runCollectionView.Caption = "RunCollection View";
+      this.runCollectionView.Content = null;
+      this.runCollectionView.Location = new System.Drawing.Point(0, 3);
+      this.runCollectionView.Name = "runCollectionView";
+      this.runCollectionView.ReadOnly = false;
+      this.runCollectionView.Size = new System.Drawing.Size(727, 366);
+      this.runCollectionView.TabIndex = 0;
+      // 
+      // logTabPage
+      // 
+      this.logTabPage.Controls.Add(this.logView);
+      this.logTabPage.Location = new System.Drawing.Point(4, 22);
+      this.logTabPage.Name = "logTabPage";
+      this.logTabPage.Size = new System.Drawing.Size(727, 369);
+      this.logTabPage.TabIndex = 3;
+      this.logTabPage.Text = "Log";
+      this.logTabPage.UseVisualStyleBackColor = true;
+      // 
+      // logView
+      // 
+      this.logView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.logView.Caption = "Log View";
+      this.logView.Content = null;
+      this.logView.Location = new System.Drawing.Point(3, 4);
+      this.logView.Name = "logView";
+      this.logView.ReadOnly = false;
+      this.logView.Size = new System.Drawing.Size(721, 362);
+      this.logView.TabIndex = 0;
+      // 
+      // startButton
+      // 
+      this.startButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.startButton.Image = ((System.Drawing.Image)(resources.GetObject("startButton.Image")));
+      this.startButton.Location = new System.Drawing.Point(0, 500);
+      this.startButton.Name = "startButton";
+      this.startButton.Size = new System.Drawing.Size(24, 24);
+      this.startButton.TabIndex = 5;
+      this.toolTip.SetToolTip(this.startButton, "Start/Resume Experiment");
+      this.startButton.UseVisualStyleBackColor = true;
+      this.startButton.Click += new System.EventHandler(this.startButton_Click);
+      // 
+      // stopButton
+      // 
+      this.stopButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.stopButton.Image = ((System.Drawing.Image)(resources.GetObject("stopButton.Image")));
+      this.stopButton.Location = new System.Drawing.Point(60, 500);
+      this.stopButton.Name = "stopButton";
+      this.stopButton.Size = new System.Drawing.Size(24, 24);
+      this.stopButton.TabIndex = 7;
+      this.toolTip.SetToolTip(this.stopButton, "Stop Experiment");
+      this.stopButton.UseVisualStyleBackColor = true;
+      this.stopButton.Click += new System.EventHandler(this.stopButton_Click);
+      // 
+      // resetButton
+      // 
+      this.resetButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.resetButton.Enabled = false;
+      this.resetButton.Image = ((System.Drawing.Image)(resources.GetObject("resetButton.Image")));
+      this.resetButton.Location = new System.Drawing.Point(90, 500);
+      this.resetButton.Name = "resetButton";
+      this.resetButton.Size = new System.Drawing.Size(24, 24);
+      this.resetButton.TabIndex = 8;
+      this.toolTip.SetToolTip(this.resetButton, "Reset Experiment");
+      this.resetButton.UseVisualStyleBackColor = true;
+      this.resetButton.Click += new System.EventHandler(this.resetButton_Click);
+      // 
+      // executionTimeLabel
+      // 
+      this.executionTimeLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.executionTimeLabel.AutoSize = true;
+      this.executionTimeLabel.Location = new System.Drawing.Point(509, 507);
+      this.executionTimeLabel.Name = "executionTimeLabel";
+      this.executionTimeLabel.Size = new System.Drawing.Size(83, 13);
+      this.executionTimeLabel.TabIndex = 9;
+      this.executionTimeLabel.Text = "&Execution Time:";
+      // 
+      // executionTimeTextBox
+      // 
+      this.executionTimeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.executionTimeTextBox.Location = new System.Drawing.Point(598, 504);
+      this.executionTimeTextBox.Name = "executionTimeTextBox";
+      this.executionTimeTextBox.ReadOnly = true;
+      this.executionTimeTextBox.Size = new System.Drawing.Size(137, 20);
+      this.executionTimeTextBox.TabIndex = 10;
+      // 
+      // pauseButton
+      // 
+      this.pauseButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.pauseButton.Enabled = false;
+      this.pauseButton.Image = ((System.Drawing.Image)(resources.GetObject("pauseButton.Image")));
+      this.pauseButton.Location = new System.Drawing.Point(30, 500);
+      this.pauseButton.Name = "pauseButton";
+      this.pauseButton.Size = new System.Drawing.Size(24, 24);
+      this.pauseButton.TabIndex = 6;
+      this.toolTip.SetToolTip(this.pauseButton, "Pause Experiment");
+      this.pauseButton.UseVisualStyleBackColor = true;
+      this.pauseButton.Click += new System.EventHandler(this.pauseButton_Click);
+      // 
+      // ServerUrlLabel
+      // 
+      this.ServerIpLabel.AutoSize = true;
+      this.ServerIpLabel.Location = new System.Drawing.Point(1, 53);
+      this.ServerIpLabel.Name = "ServerIpLabel";
+      this.ServerIpLabel.Size = new System.Drawing.Size(51, 13);
+      this.ServerIpLabel.TabIndex = 11;
+      this.ServerIpLabel.Text = "ServerIp";
+      // 
+      // resourceIdsLabel
+      // 
+      this.resourceIdsLabel.AutoSize = true;
+      this.resourceIdsLabel.Location = new System.Drawing.Point(3, 76);
+      this.resourceIdsLabel.Name = "resourceIdsLabel";
+      this.resourceIdsLabel.Size = new System.Drawing.Size(67, 13);
+      this.resourceIdsLabel.TabIndex = 12;
+      this.resourceIdsLabel.Text = "ResourceIds";
+      // 
+      // serverUrlTextBox
+      // 
+      this.serverIpTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.serverIpTextBox.Location = new System.Drawing.Point(72, 50);
+      this.serverIpTextBox.Name = "serverIpTextBox";
+      this.serverIpTextBox.Size = new System.Drawing.Size(663, 20);
+      this.serverIpTextBox.TabIndex = 13;
+      this.serverIpTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.serverUrlTextBox_Validating);
+      this.serverIpTextBox.Validated += new System.EventHandler(this.serverUrlTextBox_Validated);
+      // 
+      // resourceIdsTextBox
+      // 
+      this.resourceIdsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.resourceIdsTextBox.Location = new System.Drawing.Point(72, 73);
+      this.resourceIdsTextBox.Name = "resourceIdsTextBox";
+      this.resourceIdsTextBox.Size = new System.Drawing.Size(663, 20);
+      this.resourceIdsTextBox.TabIndex = 14;
+      this.resourceIdsTextBox.Validated += new System.EventHandler(this.resourceIdsTextBox_Validated);
+      // 
+      // disconnectButton
+      // 
+      this.disconnectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.disconnectButton.Enabled = false;
+      this.disconnectButton.Location = new System.Drawing.Point(131, 500);
+      this.disconnectButton.Name = "disconnectButton";
+      this.disconnectButton.Size = new System.Drawing.Size(120, 24);
+      this.disconnectButton.TabIndex = 15;
+      this.disconnectButton.Text = "Disconnect from Hive";
+      this.toolTip.SetToolTip(this.disconnectButton, "Disconnect from Hive (Jobs will be continue to be calculated)");
+      this.disconnectButton.UseVisualStyleBackColor = true;
+      this.disconnectButton.Click += new System.EventHandler(this.disconnectButton_Click);
+      // 
+      // reconnectButton
+      // 
+      this.reconnectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.reconnectButton.Enabled = false;
+      this.reconnectButton.Location = new System.Drawing.Point(257, 500);
+      this.reconnectButton.Name = "reconnectButton";
+      this.reconnectButton.Size = new System.Drawing.Size(77, 24);
+      this.reconnectButton.TabIndex = 16;
+      this.reconnectButton.Text = "Reconnect";
+      this.toolTip.SetToolTip(this.reconnectButton, "Reconnect to Hive");
+      this.reconnectButton.UseVisualStyleBackColor = true;
+      this.reconnectButton.Click += new System.EventHandler(this.reconnectButton_Click);
+      // 
+      // HiveExperimentView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.resourceIdsTextBox);
+      this.Controls.Add(this.serverIpTextBox);
+      this.Controls.Add(this.resourceIdsLabel);
+      this.Controls.Add(this.tabControl);
+      this.Controls.Add(this.disconnectButton);
+      this.Controls.Add(this.startButton);
+      this.Controls.Add(this.executionTimeTextBox);
+      this.Controls.Add(this.executionTimeLabel);
+      this.Controls.Add(this.ServerIpLabel);
+      this.Controls.Add(this.pauseButton);
+      this.Controls.Add(this.stopButton);
+      this.Controls.Add(this.resetButton);
+      this.Controls.Add(this.reconnectButton);
+      this.Name = "HiveExperimentView";
+      this.Size = new System.Drawing.Size(735, 524);
+      this.Controls.SetChildIndex(this.reconnectButton, 0);
+      this.Controls.SetChildIndex(this.resetButton, 0);
+      this.Controls.SetChildIndex(this.stopButton, 0);
+      this.Controls.SetChildIndex(this.pauseButton, 0);
+      this.Controls.SetChildIndex(this.ServerIpLabel, 0);
+      this.Controls.SetChildIndex(this.executionTimeLabel, 0);
+      this.Controls.SetChildIndex(this.executionTimeTextBox, 0);
+      this.Controls.SetChildIndex(this.startButton, 0);
+      this.Controls.SetChildIndex(this.disconnectButton, 0);
+      this.Controls.SetChildIndex(this.tabControl, 0);
+      this.Controls.SetChildIndex(this.resourceIdsLabel, 0);
+      this.Controls.SetChildIndex(this.serverIpTextBox, 0);
+      this.Controls.SetChildIndex(this.resourceIdsTextBox, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.descriptionLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.descriptionTextBox, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.tabControl.ResumeLayout(false);
+      this.experimentTabPage.ResumeLayout(false);
+      this.hiveStatusTabPage.ResumeLayout(false);
+      this.runsTabPage.ResumeLayout(false);
+      this.logTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+    #endregion
+
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage experimentTabPage;
+    private System.Windows.Forms.Button startButton;
+    private System.Windows.Forms.Button stopButton;
+    private System.Windows.Forms.Button resetButton;
+    private System.Windows.Forms.Label executionTimeLabel;
+    private System.Windows.Forms.TextBox executionTimeTextBox;
+    private System.Windows.Forms.Button pauseButton;
+    private System.Windows.Forms.TabPage hiveStatusTabPage;
+    private System.Windows.Forms.Label ServerIpLabel;
+    private System.Windows.Forms.Label resourceIdsLabel;
+    private System.Windows.Forms.TextBox serverIpTextBox;
+    private System.Windows.Forms.TextBox resourceIdsTextBox;
+    private System.Windows.Forms.Button viewExperimentButton;
+    private Core.Views.NamedItemView experimentNamedItemView;
+    private System.Windows.Forms.TabPage logTabPage;
+    private Core.Views.LogView logView;
+    private JobItemListView jobListView;
+    private System.Windows.Forms.Button disconnectButton;
+    private System.Windows.Forms.Button reconnectButton;
+    protected System.Windows.Forms.Button openExperimentButton;
+    protected System.Windows.Forms.Button newExperimentButton;
+    private System.Windows.Forms.TabPage runsTabPage;
+    private Optimization.Views.RunCollectionView runCollectionView;
+
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.cs	(revision 4340)
@@ -0,0 +1,266 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Optimization;
+using HeuristicLab.Optimization.Views;
+using HeuristicLab.Hive.Experiment.Properties;
+
+namespace HeuristicLab.Hive.Experiment.Views {
+  /// <summary>
+  /// The base class for visual representations of items.
+  /// </summary>
+  [View("Experiment View")]
+  [Content(typeof(HiveExperiment), true)]
+  public sealed partial class HiveExperimentView : NamedItemView {
+    public new HiveExperiment Content {
+      get { return (HiveExperiment)base.Content; }
+      set { base.Content = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ItemBaseView"/>.
+    /// </summary>
+    public HiveExperimentView() {
+      InitializeComponent();
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.ExceptionOccurred -= new EventHandler<EventArgs<Exception>>(Content_ExceptionOccurred);
+      Content.ExecutionStateChanged -= new EventHandler(Content_ExecutionStateChanged);
+      Content.ExecutionTimeChanged -= new EventHandler(Content_ExecutionTimeChanged);
+      Content.Prepared -= new EventHandler(Content_Prepared);
+      Content.Started -= new EventHandler(Content_Started);
+      Content.Paused -= new EventHandler(Content_Paused);
+      Content.Stopped -= new EventHandler(Content_Stopped);
+      Content.ExperimentChanged -= new EventHandler(Content_ExperimentChanged);
+      Content.IsResultsPollingChanged -= new EventHandler(Content_IsResultsPollingChanged);
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(Content_ExceptionOccurred);
+      Content.ExecutionStateChanged += new EventHandler(Content_ExecutionStateChanged);
+      Content.ExecutionTimeChanged += new EventHandler(Content_ExecutionTimeChanged);
+      Content.Prepared += new EventHandler(Content_Prepared);
+      Content.Started += new EventHandler(Content_Started);
+      Content.Paused += new EventHandler(Content_Paused);
+      Content.Stopped += new EventHandler(Content_Stopped);
+      Content.IsResultsPollingChanged += new EventHandler(Content_IsResultsPollingChanged);
+      Content.ExperimentChanged += new EventHandler(Content_ExperimentChanged);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        executionTimeTextBox.Text = string.Empty;
+      } else {
+        executionTimeTextBox.Text = Content.ExecutionTime.ToString();
+        resourceIdsTextBox.Text = Content.ResourceIds;
+        serverIpTextBox.Text = Settings.Default.HiveServerIp;
+        experimentNamedItemView.Content = Content.Experiment;
+        logView.Content = Content.Log;
+        jobListView.Content = Content.JobItems;
+        Content_ExperimentChanged(this, EventArgs.Empty);
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      executionTimeTextBox.Enabled = Content != null;
+      if (Content != null) {
+        viewExperimentButton.Enabled = Content.Experiment != null;
+        experimentNamedItemView.Locked = Content.Experiment == null;
+      }
+      SetEnabledStateOfExecutableButtons();
+    }
+
+    protected override void OnClosed(FormClosedEventArgs e) {
+      if ((Content != null) && (Content.ExecutionState == ExecutionState.Started)) Content.Stop();
+      base.OnClosed(e);
+    }
+
+    private void Content_ExperimentChanged(object sender, EventArgs e) {
+      experimentNamedItemView.Content = Content.Experiment;
+      if (Content.Experiment != null) {
+        runCollectionView.Content = Content.Experiment.Runs;
+        if (Content.ExecutionState == ExecutionState.Stopped) {
+          Content.Prepare();
+        }
+      }
+      SetEnabledStateOfControls();
+    }
+
+    #region Content Events
+    private void Content_ExecutionStateChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ExecutionStateChanged), sender, e);
+      else
+        SetEnabledStateOfExecutableButtons();
+    }
+    private void Content_Prepared(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_Prepared), sender, e);
+      else {
+        nameTextBox.Enabled = descriptionTextBox.Enabled = true;
+        Locked = false;
+        SetEnabledStateOfExecutableButtons();
+      }
+    }
+    private void Content_Started(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_Started), sender, e);
+      else {
+        nameTextBox.Enabled = descriptionTextBox.Enabled = false;
+        SetEnabledStateOfExecutableButtons();
+      }
+    }
+    private void Content_Paused(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_Paused), sender, e);
+      else {
+        nameTextBox.Enabled = descriptionTextBox.Enabled = true;
+        SetEnabledStateOfExecutableButtons();
+      }
+    }
+    private void Content_Stopped(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_Stopped), sender, e);
+      else {
+        nameTextBox.Enabled = descriptionTextBox.Enabled = true;
+        Locked = false;
+        SetEnabledStateOfExecutableButtons();
+      }
+    }
+    private void Content_ExecutionTimeChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ExecutionTimeChanged), sender, e);
+      else
+        executionTimeTextBox.Text = Content.ExecutionTime.ToString();
+    }
+    private void Content_ExceptionOccurred(object sender, EventArgs<Exception> e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler<EventArgs<Exception>>(Content_ExceptionOccurred), sender, e);
+      else
+        ErrorHandling.ShowErrorDialog(this, e.Value);
+    }
+    private void Content_IsResultsPollingChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_IsResultsPollingChanged), sender, e);
+      else {
+        SetEnabledStateOfControls();
+      }
+    }
+    #endregion
+
+    #region Control events
+    private void startButton_Click(object sender, EventArgs e) {
+      Content.Start();
+    }
+    private void pauseButton_Click(object sender, EventArgs e) {
+      Content.Pause();
+    }
+    private void stopButton_Click(object sender, EventArgs e) {
+      Content.Stop();
+    }
+    private void resetButton_Click(object sender, EventArgs e) {
+      Content.Prepare();
+    }
+
+    private void serverUrlTextBox_Validating(object sender, System.ComponentModel.CancelEventArgs e) {
+      if (string.IsNullOrEmpty(serverIpTextBox.Text)) {
+        e.Cancel = true;
+        errorProvider.SetError(serverIpTextBox, "ServerUrl cannot be empty");
+        serverIpTextBox.SelectAll();
+        return;
+      }
+      Settings.Default.HiveServerIp = serverIpTextBox.Text;
+    }
+
+    private void serverUrlTextBox_Validated(object sender, EventArgs e) {
+      errorProvider.SetError(serverIpTextBox, string.Empty);
+    }
+
+    private void resourceIdsTextBox_Validated(object sender, EventArgs e) {
+      Content.ResourceIds = resourceIdsTextBox.Text;
+    }
+
+    private void newExperimentButton_Click(object sender, EventArgs e) {
+      Content.Experiment = new HeuristicLab.Optimization.Experiment();
+    }
+
+    private void openExperimentButton_Click(object sender, EventArgs e) {
+      OpenFileDialog openFileDialog = new OpenFileDialog();
+      openFileDialog.Title = "Open Experimenter";
+      openFileDialog.FileName = "Item";
+      openFileDialog.Multiselect = false;
+      openFileDialog.DefaultExt = "hl";
+      openFileDialog.Filter = "HeuristicLab Files|*.hl|All Files|*.*";
+
+      if (openFileDialog.ShowDialog() == DialogResult.OK) {
+        Content.Experiment = (HeuristicLab.Optimization.Experiment)ContentManager.Load(openFileDialog.FileName);
+      }
+    }
+
+    private void showExperimentButton_Click(object sender, EventArgs e) {
+      MainFormManager.MainForm.ShowContent(Content.Experiment);
+    }
+
+    private void disconnectButton_Click(object sender, EventArgs e) {
+      if (Content != null) {
+        Content.StopResultPolling();
+        SetEnabledStateOfControls();
+      }
+    }
+
+    private void reconnectButton_Click(object sender, EventArgs e) {
+      if (Content != null) {
+        Content.StartResultPolling();
+        SetEnabledStateOfControls();
+      }
+    }
+    #endregion
+
+    #region Helpers
+    private void SetEnabledStateOfExecutableButtons() {
+      if (Content == null) {
+        startButton.Enabled = pauseButton.Enabled = stopButton.Enabled = resetButton.Enabled = reconnectButton.Enabled = disconnectButton.Enabled = false;
+      } else {
+        startButton.Enabled = Content.ExecutionState == ExecutionState.Prepared;
+        pauseButton.Enabled = false; // disabled for now
+        stopButton.Enabled = Content.ExecutionState == ExecutionState.Started && Content.IsPollingResults;
+        resetButton.Enabled = Content.ExecutionState != ExecutionState.Started;
+        reconnectButton.Enabled = (Content.ExecutionState == ExecutionState.Started) && !Content.IsPollingResults;
+        disconnectButton.Enabled = (Content.ExecutionState == ExecutionState.Started) && Content.IsPollingResults;
+
+        this.Locked = Content.ExecutionState == ExecutionState.Started && Content.IsPollingResults;
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.resx	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/HiveExperimentView.resx	(revision 4340)
@@ -0,0 +1,205 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>102, 17</value>
+  </metadata>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="openExperimentButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALDAAA
+        CwwBP0AiyAAAAn9JREFUOE+lk2tI01EYxhf0oU8WqVEIRpaIBWJgSPUhROmippS3QkkTylsXDMW8ts3b
+        1G06daVibuqaOq0sxbBCKBSJ0PJCialZUFSKqaGSt1//TbIsww8deOBwznl+5zkv71kHiP5rGAFrKb1Q
+        5ypR6bmaVU6m2kCiXJv007Om2XgwJEaNT4QiyDi/GF9mKRVgsWkav+CYQkR1utwAQfypphqZ4l/JIhOL
+        jvtGKfCOyDMB6O/WMjNea9L3MT1zIxoM5QrqdWnS1SA+kUq8w1V4hhUgqq1QMj1WtcK88KmIud5oqsqy
+        qCzOQFMopSQvhRvyBApkcQLzV91E1docpr9ol29eFMz0J0Bv2Kr6C3CrVMa3jyWm2EZzc12OSQ8M2TTo
+        ZdytzMCgSUVfIqFcfY2bqiSKlQmoc+JNaUSVJRlMvsvHGHuoVUx9lZKFIQkMp63UW2FtMBH6YuBVFF01
+        /lwO9aoQadSpTAxkwXs596oVtD+ULx36/Qkvg6HDl/k2D2YeufCmwoELZ45MCIA9olKVmK+vJQy3JVOv
+        l7M4KIae8CVAV6hgPMV8uxczLYeZbDrIaN1eJBG2nHazyDN1cZEymdHueG7rcuh8KiTpixYA56AziMVn
+        J5h9coyp5kOM1TvxudqejvRNBHrY4GRnZmcCqLMT6GlJ4Y4uGwZS4IUQ97kfs62eTD12YbzBmRGDAx+0
+        u+iVmyMO24njbqvG5VbOz4yjtjyL3vuRdOSKltUuX0+LbAON0o3UJFmiibPi+pXtBLrvWHR2tHZfBuSm
+        xZIrPk9mfAiJlwKMleWsvxsnj+7H9YAD+xxssbexwnqbBVs2m7HV3GxlI631E9fa/wGRpaRpa3TTbQAA
+        AABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="newExperimentButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALDAAA
+        CwwBP0AiyAAAAaJJREFUOE+Nkk1LAkEYx5egU9Sla9AX6NKhLlH3IujSoXtBn0EI+gB5qVBIKyIMtEDo
+        BUIhK6qDSUj4gqYloilmvqa5rrr/Zlx3dkU0B/48z87O/zfzPDMcAE7SOg8sB2AkqYdIXIoAK4LyX17X
+        HiVzYPhC0NBUB1yR6Jfy5lx59rQXRAKEhl6Y4YhMnXOSmUDywRlYHV5YbG6YLp1UW2pgEyBoSdARbdNP
+        OszSSQxEZnkO2D+7w/TCWhtEOoGfqyE5KmKnVf/HIHBLcn4SiI21oGQPkw32J68M0VKvBKgvulgJdEey
+        O+sJNhlg9/i6aZalAEpz98xwQADhAaWJ2GOAWr0BCpFBCoCeIjOxgdCIHlYCiI8DGQ1QMjKzKIooVwSk
+        MuUmYGp+lf5rlcDeArhD6wMzqZOqUEe2UEE0WegNMFgcHYB6Q0SxXEUiXcJbNNsboD+xdwAqfA3p3C8i
+        n3l4QuneAFqfetDG5X94xFJFBCIZuHzJ/gHqxoVjObwGv/DojvcPUDfO9/4NpyeBm+dofwD5vrvFrtco
+        3zFd8J/oO/gDpYIVhUFyWDsAAAAASUVORK5CYII=
+</value>
+  </data>
+  <data name="startButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAQAA
+        CwEBNnBPWwAAALZJREFUOE9j/P//PwNFAGQAOi7bn+2GTRybGIZmkKKEGRH/iTUEpwGWZfpEGYLVgKgp
+        Qf833Fr8nxhDsBoQPMEbZDtRhmA1wKfLGWwACEctCsDrEqwGODZb/M/YEAvWbNus/1+nWOG/RBo3iFZD
+        jwmsBpjX6KFo5k9gwaoZnIawxa1eqTLcZnyacRqgki8FdjYhzTgNkM4QJEozTgNEkjlx+pmoQMQW2rjy
+        BtZAJDYj4fQCKQYAAPmEmBfWSTCRAAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="stopButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAQAA
+        CwEBNnBPWwAAAXJJREFUOE+tkj1IQmEYhWsoaIi2xmhpiYSgKFoiCMLJJYSEJiEI0mgIyqjA6vaLUKIU
+        iZlJKKUoWEbZDzVYCYlQYVxcNDIoRND8ud7idD83C27g7YNvPM8573nfcgBlgh4BCPmCxIX0Qtx/ATTu
+        Lyy78ph3ZKC2pTBlSWB86w2jhleMrD9jWB9N/jQsSkDEj5FPPERZ+J7yOL5j4PYzsPsYGL1piKR7nL64
+        syIAcaZfWPhptiC0XeWw4clgzZ3CgiWMBskOP4DEvo+wOAkw2L3IQccJKVsSE6Z3KDRB1PVs8gPIzDch
+        Fo5rzvkoi8V9Io5DqYtBOnaO2k4tP4AU5g0yMJ/lsOr6gMqUwKA2BtlcGOKhA9S0rfADSNvOWwa6wzSm
+        LXEo9JyYoiFRBdA9YEdVM8UPIKvaPk1h1hyCUhOAbPKSc3aiS25Fe58BFU1qfgDZc4fcg5Z+Fxp7ragX
+        GwtzV7cuoVI08zeglKv831MuJcE3MLnHrIkIZqEAAAAASUVORK5CYII=
+</value>
+  </data>
+  <data name="resetButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAQAA
+        CwEBNnBPWwAAAYNJREFUOE9j/P//PwNFAGQAJZgizWDXI9veu/nvfxhuW/vtf+OKz/9rF7//XzHv1f+S
+        2c//F0x//L901mOgFoSrUQzo2vDr/6aT3/6vPPTl/4I9n/5ffvDzf+/ad/+bl74BG5I3/cV/3dBVuA0A
+        2bri4Jf/83Z9+n/ryS+Qwv8NS978L5378n/O1Of/k3qf/Vf1W4TbAJCT5+z49P/hyx9gzSBQMvvl/6wp
+        z/8n9D79H9b6+L+c2yzcBoD8e/PRZ7hmZMaxy2/+e9U+/C9mNwm3ASB/Ni978//UlZdwvdGdT/4HNj0C
+        8x1K7//nN+vGbQAopMuBhuRMe/5/55G7YE0BDY/+u1U9ALPN8u7+5zRoxW0AKJqygf5NBPo3vO3x/znr
+        Lvx3rbj/36b4HtgAvYxb/1l1GnEbAIrjuJ6n/0NbHv33qXv436n8/n/rwnv/TbLvgA1QTyLCAMukbf9B
+        2Dhmw3+t4OX/FTzmggOO16TzP5tuE34XAC0hOWmTrAHdEooNAABnu83WrybVqwAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="pauseButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAQAA
+        CwEBNnBPWwAAAMZJREFUOE9j/P//PwNFAGQAJZgizWDXU2I7VgN6N//937Xh1/+8qY8+gRSg89EtxHAB
+        SPPVh3/+64auAqr9z4DOJ2hA29pv/289/f1f1W8R2AB0PkEDGld8/n/54e//cm6zwAag8wkaULv4/f8T
+        13//F7ObBDYAnU/QgIp5r/7vvvDzP79ZN9gAdD5BA0pmP/+//uTP/5wGrWAD0PkEDSiY/vj/gj2f/7Pq
+        NIINQOcTNAAU/2y6TXAD0PkEDSA1ZVI/KZPqAgBmE8VVB/UQsAAAAABJRU5ErkJggg==
+</value>
+  </data>
+</root>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemListView.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemListView.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemListView.Designer.cs	(revision 4340)
@@ -0,0 +1,32 @@
+﻿namespace HeuristicLab.Hive.Experiment.Views {
+  partial class JobItemListView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemListView.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemListView.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemListView.cs	(revision 4340)
@@ -0,0 +1,39 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.Core;
+using HeuristicLab.MainForm;
+using HeuristicLab.Optimization;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Experiment.Views {
+  [View("JobItemList View")]
+  [Content(typeof(JobItemList), true)]
+  [Content(typeof(IItemList<JobItem>), false)]
+  public partial class JobItemListView : ItemListView<JobItem> {
+
+    public JobItemListView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Jobs";
+      this.viewHost.ReadOnly = true;
+    }
+
+    protected override JobItem CreateItem() {
+      return null;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      this.addButton.Enabled = false;
+      this.moveDownButton.Enabled = false;
+      this.moveUpButton.Enabled = false;
+      this.removeButton.Enabled = false;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemView.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemView.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemView.Designer.cs	(revision 4340)
@@ -0,0 +1,513 @@
+﻿namespace HeuristicLab.Hive.Experiment.Views {
+  partial class JobItemView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.stateLabel = new System.Windows.Forms.Label();
+      this.userIdLabel = new System.Windows.Forms.Label();
+      this.stateTextBox = new System.Windows.Forms.TextBox();
+      this.userIdTextBox = new System.Windows.Forms.TextBox();
+      this.percentageTextBox = new System.Windows.Forms.TextBox();
+      this.dateCreatedTextBox = new System.Windows.Forms.TextBox();
+      this.dateFinishedTextBox = new System.Windows.Forms.TextBox();
+      this.priorityTextBox = new System.Windows.Forms.TextBox();
+      this.coresNeededTextBox = new System.Windows.Forms.TextBox();
+      this.memoryNeededTextBox = new System.Windows.Forms.TextBox();
+      this.exceptionTextBox = new System.Windows.Forms.TextBox();
+      this.projectTextBox = new System.Windows.Forms.TextBox();
+      this.percentageLabel = new System.Windows.Forms.Label();
+      this.dateCreatedLabel = new System.Windows.Forms.Label();
+      this.dateFinishedLabel = new System.Windows.Forms.Label();
+      this.priorityLabel = new System.Windows.Forms.Label();
+      this.coresNeededLabel = new System.Windows.Forms.Label();
+      this.memoryNeededLabel = new System.Windows.Forms.Label();
+      this.exceptionLabel = new System.Windows.Forms.Label();
+      this.projectLabel = new System.Windows.Forms.Label();
+      this.snapshotGroupBox = new System.Windows.Forms.GroupBox();
+      this.requestSnapshotButton = new System.Windows.Forms.Button();
+      this.openSnapshotButton = new System.Windows.Forms.Button();
+      this.snapshotTimeText = new System.Windows.Forms.TextBox();
+      this.snapshotStatusText = new System.Windows.Forms.TextBox();
+      this.snapshotTimeLabel = new System.Windows.Forms.Label();
+      this.snapshotStatusLabel = new System.Windows.Forms.Label();
+      this.dateCalculatedText = new System.Windows.Forms.TextBox();
+      this.dateCalculatedLabel = new System.Windows.Forms.Label();
+      this.jobStatusGroupBox = new System.Windows.Forms.GroupBox();
+      this.percentageProgressBar = new System.Windows.Forms.ProgressBar();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.detailsTabPage = new System.Windows.Forms.TabPage();
+      this.jobIdLabel = new System.Windows.Forms.Label();
+      this.jobIdTextBox = new System.Windows.Forms.TextBox();
+      this.logTabPage = new System.Windows.Forms.TabPage();
+      this.logView = new HeuristicLab.Core.Views.LogView();
+      this.snapshotGroupBox.SuspendLayout();
+      this.jobStatusGroupBox.SuspendLayout();
+      this.tabControl.SuspendLayout();
+      this.detailsTabPage.SuspendLayout();
+      this.logTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // stateLabel
+      // 
+      this.stateLabel.AutoSize = true;
+      this.stateLabel.Location = new System.Drawing.Point(7, 19);
+      this.stateLabel.Name = "stateLabel";
+      this.stateLabel.Size = new System.Drawing.Size(35, 13);
+      this.stateLabel.TabIndex = 0;
+      this.stateLabel.Text = "State:";
+      // 
+      // userIdLabel
+      // 
+      this.userIdLabel.AutoSize = true;
+      this.userIdLabel.Location = new System.Drawing.Point(3, 28);
+      this.userIdLabel.Name = "userIdLabel";
+      this.userIdLabel.Size = new System.Drawing.Size(41, 13);
+      this.userIdLabel.TabIndex = 1;
+      this.userIdLabel.Text = "UserId:";
+      // 
+      // stateTextBox
+      // 
+      this.stateTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.stateTextBox.Location = new System.Drawing.Point(95, 19);
+      this.stateTextBox.Name = "stateTextBox";
+      this.stateTextBox.Size = new System.Drawing.Size(509, 20);
+      this.stateTextBox.TabIndex = 2;
+      // 
+      // userIdTextBox
+      // 
+      this.userIdTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.userIdTextBox.Location = new System.Drawing.Point(91, 28);
+      this.userIdTextBox.Name = "userIdTextBox";
+      this.userIdTextBox.Size = new System.Drawing.Size(525, 20);
+      this.userIdTextBox.TabIndex = 3;
+      // 
+      // percentageTextBox
+      // 
+      this.percentageTextBox.Location = new System.Drawing.Point(95, 41);
+      this.percentageTextBox.Name = "percentageTextBox";
+      this.percentageTextBox.Size = new System.Drawing.Size(52, 20);
+      this.percentageTextBox.TabIndex = 4;
+      // 
+      // dateCreatedTextBox
+      // 
+      this.dateCreatedTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dateCreatedTextBox.Location = new System.Drawing.Point(95, 63);
+      this.dateCreatedTextBox.Name = "dateCreatedTextBox";
+      this.dateCreatedTextBox.Size = new System.Drawing.Size(509, 20);
+      this.dateCreatedTextBox.TabIndex = 5;
+      // 
+      // dateFinishedTextBox
+      // 
+      this.dateFinishedTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dateFinishedTextBox.Location = new System.Drawing.Point(95, 107);
+      this.dateFinishedTextBox.Name = "dateFinishedTextBox";
+      this.dateFinishedTextBox.Size = new System.Drawing.Size(509, 20);
+      this.dateFinishedTextBox.TabIndex = 6;
+      // 
+      // priorityTextBox
+      // 
+      this.priorityTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.priorityTextBox.Location = new System.Drawing.Point(91, 50);
+      this.priorityTextBox.Name = "priorityTextBox";
+      this.priorityTextBox.Size = new System.Drawing.Size(525, 20);
+      this.priorityTextBox.TabIndex = 7;
+      // 
+      // coresNeededTextBox
+      // 
+      this.coresNeededTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.coresNeededTextBox.Location = new System.Drawing.Point(91, 72);
+      this.coresNeededTextBox.Name = "coresNeededTextBox";
+      this.coresNeededTextBox.Size = new System.Drawing.Size(525, 20);
+      this.coresNeededTextBox.TabIndex = 8;
+      // 
+      // memoryNeededTextBox
+      // 
+      this.memoryNeededTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.memoryNeededTextBox.Location = new System.Drawing.Point(91, 94);
+      this.memoryNeededTextBox.Name = "memoryNeededTextBox";
+      this.memoryNeededTextBox.Size = new System.Drawing.Size(525, 20);
+      this.memoryNeededTextBox.TabIndex = 9;
+      // 
+      // exceptionTextBox
+      // 
+      this.exceptionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.exceptionTextBox.Location = new System.Drawing.Point(95, 129);
+      this.exceptionTextBox.Name = "exceptionTextBox";
+      this.exceptionTextBox.Size = new System.Drawing.Size(509, 20);
+      this.exceptionTextBox.TabIndex = 10;
+      // 
+      // projectTextBox
+      // 
+      this.projectTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.projectTextBox.Location = new System.Drawing.Point(91, 116);
+      this.projectTextBox.Name = "projectTextBox";
+      this.projectTextBox.Size = new System.Drawing.Size(525, 20);
+      this.projectTextBox.TabIndex = 11;
+      // 
+      // percentageLabel
+      // 
+      this.percentageLabel.AutoSize = true;
+      this.percentageLabel.Location = new System.Drawing.Point(7, 41);
+      this.percentageLabel.Name = "percentageLabel";
+      this.percentageLabel.Size = new System.Drawing.Size(65, 13);
+      this.percentageLabel.TabIndex = 13;
+      this.percentageLabel.Text = "Percentage:";
+      // 
+      // dateCreatedLabel
+      // 
+      this.dateCreatedLabel.AutoSize = true;
+      this.dateCreatedLabel.Location = new System.Drawing.Point(7, 63);
+      this.dateCreatedLabel.Name = "dateCreatedLabel";
+      this.dateCreatedLabel.Size = new System.Drawing.Size(70, 13);
+      this.dateCreatedLabel.TabIndex = 14;
+      this.dateCreatedLabel.Text = "DateCreated:";
+      // 
+      // dateFinishedLabel
+      // 
+      this.dateFinishedLabel.AutoSize = true;
+      this.dateFinishedLabel.Location = new System.Drawing.Point(7, 107);
+      this.dateFinishedLabel.Name = "dateFinishedLabel";
+      this.dateFinishedLabel.Size = new System.Drawing.Size(72, 13);
+      this.dateFinishedLabel.TabIndex = 15;
+      this.dateFinishedLabel.Text = "DateFinished:";
+      // 
+      // priorityLabel
+      // 
+      this.priorityLabel.AutoSize = true;
+      this.priorityLabel.Location = new System.Drawing.Point(3, 50);
+      this.priorityLabel.Name = "priorityLabel";
+      this.priorityLabel.Size = new System.Drawing.Size(41, 13);
+      this.priorityLabel.TabIndex = 16;
+      this.priorityLabel.Text = "Priority:";
+      // 
+      // coresNeededLabel
+      // 
+      this.coresNeededLabel.AutoSize = true;
+      this.coresNeededLabel.Location = new System.Drawing.Point(3, 72);
+      this.coresNeededLabel.Name = "coresNeededLabel";
+      this.coresNeededLabel.Size = new System.Drawing.Size(75, 13);
+      this.coresNeededLabel.TabIndex = 17;
+      this.coresNeededLabel.Text = "CoresNeeded:";
+      // 
+      // memoryNeededLabel
+      // 
+      this.memoryNeededLabel.AutoSize = true;
+      this.memoryNeededLabel.Location = new System.Drawing.Point(3, 94);
+      this.memoryNeededLabel.Name = "memoryNeededLabel";
+      this.memoryNeededLabel.Size = new System.Drawing.Size(85, 13);
+      this.memoryNeededLabel.TabIndex = 18;
+      this.memoryNeededLabel.Text = "MemoryNeeded:";
+      // 
+      // exceptionLabel
+      // 
+      this.exceptionLabel.AutoSize = true;
+      this.exceptionLabel.Location = new System.Drawing.Point(7, 129);
+      this.exceptionLabel.Name = "exceptionLabel";
+      this.exceptionLabel.Size = new System.Drawing.Size(57, 13);
+      this.exceptionLabel.TabIndex = 19;
+      this.exceptionLabel.Text = "Exception:";
+      // 
+      // projectLabel
+      // 
+      this.projectLabel.AutoSize = true;
+      this.projectLabel.Location = new System.Drawing.Point(3, 116);
+      this.projectLabel.Name = "projectLabel";
+      this.projectLabel.Size = new System.Drawing.Size(43, 13);
+      this.projectLabel.TabIndex = 20;
+      this.projectLabel.Text = "Project:";
+      // 
+      // snapshotGroupBox
+      // 
+      this.snapshotGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.snapshotGroupBox.Controls.Add(this.requestSnapshotButton);
+      this.snapshotGroupBox.Controls.Add(this.openSnapshotButton);
+      this.snapshotGroupBox.Controls.Add(this.snapshotTimeText);
+      this.snapshotGroupBox.Controls.Add(this.snapshotStatusText);
+      this.snapshotGroupBox.Controls.Add(this.snapshotTimeLabel);
+      this.snapshotGroupBox.Controls.Add(this.snapshotStatusLabel);
+      this.snapshotGroupBox.Location = new System.Drawing.Point(6, 310);
+      this.snapshotGroupBox.Name = "snapshotGroupBox";
+      this.snapshotGroupBox.Size = new System.Drawing.Size(610, 100);
+      this.snapshotGroupBox.TabIndex = 21;
+      this.snapshotGroupBox.TabStop = false;
+      this.snapshotGroupBox.Text = "Latest Snapshot";
+      this.snapshotGroupBox.Visible = false;
+      // 
+      // requestSnapshotButton
+      // 
+      this.requestSnapshotButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.requestSnapshotButton.Location = new System.Drawing.Point(384, 67);
+      this.requestSnapshotButton.Name = "requestSnapshotButton";
+      this.requestSnapshotButton.Size = new System.Drawing.Size(107, 26);
+      this.requestSnapshotButton.TabIndex = 26;
+      this.requestSnapshotButton.Text = "Request Snapshot";
+      this.requestSnapshotButton.UseVisualStyleBackColor = true;
+      this.requestSnapshotButton.Click += new System.EventHandler(this.requestSnapshotButton_Click);
+      // 
+      // openSnapshotButton
+      // 
+      this.openSnapshotButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.openSnapshotButton.Location = new System.Drawing.Point(497, 67);
+      this.openSnapshotButton.Name = "openSnapshotButton";
+      this.openSnapshotButton.Size = new System.Drawing.Size(107, 26);
+      this.openSnapshotButton.TabIndex = 25;
+      this.openSnapshotButton.Text = "Open Snapshot";
+      this.openSnapshotButton.UseVisualStyleBackColor = true;
+      this.openSnapshotButton.Click += new System.EventHandler(this.openSnapshotButton_Click);
+      // 
+      // snapshotTimeText
+      // 
+      this.snapshotTimeText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.snapshotTimeText.Location = new System.Drawing.Point(45, 41);
+      this.snapshotTimeText.Name = "snapshotTimeText";
+      this.snapshotTimeText.Size = new System.Drawing.Size(559, 20);
+      this.snapshotTimeText.TabIndex = 24;
+      // 
+      // snapshotStatusText
+      // 
+      this.snapshotStatusText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.snapshotStatusText.Location = new System.Drawing.Point(45, 19);
+      this.snapshotStatusText.Name = "snapshotStatusText";
+      this.snapshotStatusText.Size = new System.Drawing.Size(559, 20);
+      this.snapshotStatusText.TabIndex = 23;
+      // 
+      // snapshotTimeLabel
+      // 
+      this.snapshotTimeLabel.AutoSize = true;
+      this.snapshotTimeLabel.Location = new System.Drawing.Point(6, 41);
+      this.snapshotTimeLabel.Name = "snapshotTimeLabel";
+      this.snapshotTimeLabel.Size = new System.Drawing.Size(33, 13);
+      this.snapshotTimeLabel.TabIndex = 22;
+      this.snapshotTimeLabel.Text = "Time:";
+      // 
+      // snapshotStatusLabel
+      // 
+      this.snapshotStatusLabel.AutoSize = true;
+      this.snapshotStatusLabel.Location = new System.Drawing.Point(6, 19);
+      this.snapshotStatusLabel.Name = "snapshotStatusLabel";
+      this.snapshotStatusLabel.Size = new System.Drawing.Size(40, 13);
+      this.snapshotStatusLabel.TabIndex = 21;
+      this.snapshotStatusLabel.Text = "Status:";
+      // 
+      // dateCalculatedText
+      // 
+      this.dateCalculatedText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dateCalculatedText.Location = new System.Drawing.Point(95, 85);
+      this.dateCalculatedText.Name = "dateCalculatedText";
+      this.dateCalculatedText.Size = new System.Drawing.Size(509, 20);
+      this.dateCalculatedText.TabIndex = 22;
+      // 
+      // dateCalculatedLabel
+      // 
+      this.dateCalculatedLabel.AutoSize = true;
+      this.dateCalculatedLabel.Location = new System.Drawing.Point(7, 85);
+      this.dateCalculatedLabel.Name = "dateCalculatedLabel";
+      this.dateCalculatedLabel.Size = new System.Drawing.Size(83, 13);
+      this.dateCalculatedLabel.TabIndex = 23;
+      this.dateCalculatedLabel.Text = "DateCalculated:";
+      // 
+      // jobStatusGroupBox
+      // 
+      this.jobStatusGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.jobStatusGroupBox.Controls.Add(this.percentageProgressBar);
+      this.jobStatusGroupBox.Controls.Add(this.stateTextBox);
+      this.jobStatusGroupBox.Controls.Add(this.dateCalculatedLabel);
+      this.jobStatusGroupBox.Controls.Add(this.stateLabel);
+      this.jobStatusGroupBox.Controls.Add(this.dateCalculatedText);
+      this.jobStatusGroupBox.Controls.Add(this.dateFinishedTextBox);
+      this.jobStatusGroupBox.Controls.Add(this.percentageTextBox);
+      this.jobStatusGroupBox.Controls.Add(this.dateCreatedTextBox);
+      this.jobStatusGroupBox.Controls.Add(this.percentageLabel);
+      this.jobStatusGroupBox.Controls.Add(this.exceptionLabel);
+      this.jobStatusGroupBox.Controls.Add(this.dateCreatedLabel);
+      this.jobStatusGroupBox.Controls.Add(this.dateFinishedLabel);
+      this.jobStatusGroupBox.Controls.Add(this.exceptionTextBox);
+      this.jobStatusGroupBox.Location = new System.Drawing.Point(6, 142);
+      this.jobStatusGroupBox.Name = "jobStatusGroupBox";
+      this.jobStatusGroupBox.Size = new System.Drawing.Size(610, 162);
+      this.jobStatusGroupBox.TabIndex = 24;
+      this.jobStatusGroupBox.TabStop = false;
+      this.jobStatusGroupBox.Text = "Job Status";
+      // 
+      // percentageProgressBar
+      // 
+      this.percentageProgressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.percentageProgressBar.Location = new System.Drawing.Point(153, 41);
+      this.percentageProgressBar.Name = "percentageProgressBar";
+      this.percentageProgressBar.Size = new System.Drawing.Size(451, 20);
+      this.percentageProgressBar.TabIndex = 25;
+      // 
+      // tabControl
+      // 
+      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.tabControl.Controls.Add(this.detailsTabPage);
+      this.tabControl.Controls.Add(this.logTabPage);
+      this.tabControl.Location = new System.Drawing.Point(3, 3);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(627, 518);
+      this.tabControl.TabIndex = 25;
+      // 
+      // detailsTabPage
+      // 
+      this.detailsTabPage.Controls.Add(this.jobIdLabel);
+      this.detailsTabPage.Controls.Add(this.jobIdTextBox);
+      this.detailsTabPage.Controls.Add(this.userIdLabel);
+      this.detailsTabPage.Controls.Add(this.jobStatusGroupBox);
+      this.detailsTabPage.Controls.Add(this.userIdTextBox);
+      this.detailsTabPage.Controls.Add(this.snapshotGroupBox);
+      this.detailsTabPage.Controls.Add(this.priorityTextBox);
+      this.detailsTabPage.Controls.Add(this.projectLabel);
+      this.detailsTabPage.Controls.Add(this.coresNeededTextBox);
+      this.detailsTabPage.Controls.Add(this.memoryNeededTextBox);
+      this.detailsTabPage.Controls.Add(this.memoryNeededLabel);
+      this.detailsTabPage.Controls.Add(this.coresNeededLabel);
+      this.detailsTabPage.Controls.Add(this.projectTextBox);
+      this.detailsTabPage.Controls.Add(this.priorityLabel);
+      this.detailsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.detailsTabPage.Name = "detailsTabPage";
+      this.detailsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.detailsTabPage.Size = new System.Drawing.Size(619, 492);
+      this.detailsTabPage.TabIndex = 0;
+      this.detailsTabPage.Text = "Details";
+      this.detailsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // jobIdLabel
+      // 
+      this.jobIdLabel.AutoSize = true;
+      this.jobIdLabel.Location = new System.Drawing.Point(3, 6);
+      this.jobIdLabel.Name = "jobIdLabel";
+      this.jobIdLabel.Size = new System.Drawing.Size(36, 13);
+      this.jobIdLabel.TabIndex = 25;
+      this.jobIdLabel.Text = "JobId:";
+      // 
+      // jobIdTextBox
+      // 
+      this.jobIdTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.jobIdTextBox.Location = new System.Drawing.Point(91, 6);
+      this.jobIdTextBox.Name = "jobIdTextBox";
+      this.jobIdTextBox.Size = new System.Drawing.Size(525, 20);
+      this.jobIdTextBox.TabIndex = 26;
+      // 
+      // logTabPage
+      // 
+      this.logTabPage.Controls.Add(this.logView);
+      this.logTabPage.Location = new System.Drawing.Point(4, 22);
+      this.logTabPage.Name = "logTabPage";
+      this.logTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.logTabPage.Size = new System.Drawing.Size(619, 492);
+      this.logTabPage.TabIndex = 1;
+      this.logTabPage.Text = "Log";
+      this.logTabPage.UseVisualStyleBackColor = true;
+      // 
+      // logView
+      // 
+      this.logView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.logView.Caption = "Log View";
+      this.logView.Content = null;
+      this.logView.Location = new System.Drawing.Point(3, 3);
+      this.logView.Name = "logView";
+      this.logView.ReadOnly = false;
+      this.logView.Size = new System.Drawing.Size(536, 447);
+      this.logView.TabIndex = 0;
+      // 
+      // JobItemView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl);
+      this.Name = "JobItemView";
+      this.Size = new System.Drawing.Size(633, 524);
+      this.snapshotGroupBox.ResumeLayout(false);
+      this.snapshotGroupBox.PerformLayout();
+      this.jobStatusGroupBox.ResumeLayout(false);
+      this.jobStatusGroupBox.PerformLayout();
+      this.tabControl.ResumeLayout(false);
+      this.detailsTabPage.ResumeLayout(false);
+      this.detailsTabPage.PerformLayout();
+      this.logTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label stateLabel;
+    private System.Windows.Forms.Label userIdLabel;
+    private System.Windows.Forms.TextBox stateTextBox;
+    private System.Windows.Forms.TextBox userIdTextBox;
+    private System.Windows.Forms.TextBox percentageTextBox;
+    private System.Windows.Forms.TextBox dateCreatedTextBox;
+    private System.Windows.Forms.TextBox dateFinishedTextBox;
+    private System.Windows.Forms.TextBox priorityTextBox;
+    private System.Windows.Forms.TextBox coresNeededTextBox;
+    private System.Windows.Forms.TextBox memoryNeededTextBox;
+    private System.Windows.Forms.TextBox exceptionTextBox;
+    private System.Windows.Forms.TextBox projectTextBox;
+    private System.Windows.Forms.Label percentageLabel;
+    private System.Windows.Forms.Label dateCreatedLabel;
+    private System.Windows.Forms.Label dateFinishedLabel;
+    private System.Windows.Forms.Label priorityLabel;
+    private System.Windows.Forms.Label coresNeededLabel;
+    private System.Windows.Forms.Label memoryNeededLabel;
+    private System.Windows.Forms.Label exceptionLabel;
+    private System.Windows.Forms.Label projectLabel;
+    private System.Windows.Forms.GroupBox snapshotGroupBox;
+    private System.Windows.Forms.Button openSnapshotButton;
+    private System.Windows.Forms.TextBox snapshotTimeText;
+    private System.Windows.Forms.TextBox snapshotStatusText;
+    private System.Windows.Forms.Label snapshotTimeLabel;
+    private System.Windows.Forms.Label snapshotStatusLabel;
+    private System.Windows.Forms.TextBox dateCalculatedText;
+    private System.Windows.Forms.Label dateCalculatedLabel;
+    private System.Windows.Forms.GroupBox jobStatusGroupBox;
+    private System.Windows.Forms.ProgressBar percentageProgressBar;
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage detailsTabPage;
+    private System.Windows.Forms.TabPage logTabPage;
+    private Core.Views.LogView logView;
+    private System.Windows.Forms.Button requestSnapshotButton;
+    private System.Windows.Forms.Label jobIdLabel;
+    private System.Windows.Forms.TextBox jobIdTextBox;
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemView.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemView.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemView.cs	(revision 4340)
@@ -0,0 +1,142 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.Hive.JobBase;
+using HeuristicLab.Persistence.Default.Xml;
+using System.IO;
+
+namespace HeuristicLab.Hive.Experiment.Views {
+  [View("JobItem View")]
+  [Content(typeof(JobItem), true)]
+  public partial class JobItemView : ItemView {
+    public new JobItem Content {
+      get { return (JobItem)base.Content; }
+      set {
+        if (base.Content != value) {
+          base.Content = value;
+        }
+      }
+    }
+
+    public JobItemView() {
+      InitializeComponent();
+      this.ReadOnly = true;
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content != null) {
+        logView.Content = Content.Log;
+        Content_JobDtoChanged(this, EventArgs.Empty);
+        Content_JobStateChanged(this, EventArgs.Empty);
+        if (Content.LatestSnapshot != null) {
+          snapshotStatusText.InvokeIfRequired(c => c.Text = Content.LatestSnapshot.StatusMessage.ToString());
+          snapshotTimeText.InvokeIfRequired(c => { c.Text = Content.LatestSnapshotTime.ToString(); });
+        }
+      }
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.LatestSnapshotChanged += new EventHandler(Content_LatestSnapshotChanged);
+      Content.JobDtoChanged += new EventHandler(Content_JobDtoChanged);
+      Content.JobStateChanged += new EventHandler(Content_JobStateChanged);
+      Content.SnapshotRequestedStateChanged += new EventHandler(Content_SnapshotRequestedStateChanged);
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.LatestSnapshotChanged -= new EventHandler(Content_LatestSnapshotChanged);
+      Content.JobDtoChanged -= new EventHandler(Content_JobDtoChanged);
+      Content.JobStateChanged -= new EventHandler(Content_JobStateChanged);
+      Content.SnapshotRequestedStateChanged -= new EventHandler(Content_SnapshotRequestedStateChanged);
+      base.DeregisterContentEvents();
+    }
+
+    private void Content_JobDtoChanged(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(Content_JobDtoChanged), sender, e);
+      } else {
+        this.jobIdTextBox.Text = Content.JobDto.Id.ToString();
+        this.dateCreatedTextBox.Text = Content.JobDto.DateCreated.ToString();
+        this.priorityTextBox.Text = Content.JobDto.Priority.ToString();
+        this.coresNeededTextBox.Text = Content.JobDto.CoresNeeded.ToString();
+        this.memoryNeededTextBox.Text = Content.JobDto.MemoryNeeded.ToString();
+        this.projectTextBox.Text = Content.JobDto.Project != null ? Content.JobDto.Project.Name : "-";
+      }
+    }
+
+    private void Content_JobStateChanged(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(Content_JobStateChanged), sender, e);
+      } else {
+        this.stateTextBox.Text = Content.State.ToString();
+        this.percentageTextBox.Text = (Content.Percentage * 100).ToString() + "%";
+        this.percentageProgressBar.Value = Convert.ToInt32(Content.Percentage * percentageProgressBar.Maximum);
+        this.dateCalculatedText.Text = Content.DateCalculated.ToString();
+        this.dateFinishedTextBox.Text = Content.DateFinished.ToString();
+        this.exceptionTextBox.Text = Content.Exception;
+      }
+    }
+
+    void Content_LatestSnapshotChanged(object sender, EventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new EventHandler(Content_LatestSnapshotChanged), sender, e);
+      } else {
+        if (Content.LatestSnapshot != null) {
+          snapshotStatusText.Text = Content.LatestSnapshot.StatusMessage.ToString();
+          snapshotTimeText.Text = Content.LatestSnapshotTime.ToString();
+        } else {
+          snapshotStatusText.Text = "";
+          snapshotTimeText.Text = "";
+        }
+        SetEnabledStateOfControls();
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      if (InvokeRequired) {
+        this.InvokeIfRequired(c => { SetEnabledStateOfControls(); });
+      } else {
+        base.SetEnabledStateOfControls();
+        if (Content != null) {
+          openSnapshotButton.Enabled = Content.LatestSnapshot != null && Content.SnapshotRequestedState == SnapshotRequestedState.Idle;
+          requestSnapshotButton.Enabled = Content.SnapshotRequestedState == SnapshotRequestedState.Idle;
+        }
+        this.jobIdTextBox.ReadOnly = this.ReadOnly;
+        this.stateTextBox.ReadOnly = this.ReadOnly;
+        this.userIdTextBox.ReadOnly = this.ReadOnly;
+        this.percentageTextBox.ReadOnly = this.ReadOnly;
+        this.dateCreatedTextBox.ReadOnly = this.ReadOnly;
+        this.dateCalculatedText.ReadOnly = this.ReadOnly;
+        this.dateFinishedTextBox.ReadOnly = this.ReadOnly;
+        this.priorityTextBox.ReadOnly = this.ReadOnly;
+        this.coresNeededTextBox.ReadOnly = this.ReadOnly;
+        this.memoryNeededTextBox.ReadOnly = this.ReadOnly;
+        this.exceptionTextBox.ReadOnly = this.ReadOnly;
+        this.projectTextBox.ReadOnly = this.ReadOnly;
+        this.snapshotStatusText.ReadOnly = this.ReadOnly;
+        this.snapshotTimeText.ReadOnly = this.ReadOnly;
+      }
+    }
+
+    private void openSnapshotButton_Click(object sender, EventArgs e) {
+      OptimizerJob job = XmlParser.Deserialize<OptimizerJob>(new MemoryStream(Content.LatestSnapshot.Obj.SerializedJobData));
+      MainFormManager.MainForm.ShowContent(job.Optimizer);
+    }
+
+    private void requestSnapshotButton_Click(object sender, EventArgs e) {
+      this.Content.RequestSnapshot();
+    }
+
+    private void Content_SnapshotRequestedStateChanged(object sender, EventArgs e) {
+      SetEnabledStateOfControls();
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemView.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemView.resx	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/JobItemView.resx	(revision 4340)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/Properties/AssemblyInfo.frame	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/Properties/AssemblyInfo.frame	(revision 4340)
@@ -0,0 +1,58 @@
+#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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+using System.Security;
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Hive.Experiment.Views")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AllowPartiallyTrustedCallers]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("9721605F-C79D-434a-8E42-C0A384477D53")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/Properties/Resources.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/Properties/Resources.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/Properties/Resources.Designer.cs	(revision 4340)
@@ -0,0 +1,63 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Experiment.Views.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HeuristicLab.Hive.Experiment.Views.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/Properties/Resources.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/Properties/Resources.resx	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment.Views/3.3/Properties/Resources.resx	(revision 4340)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HeuristicLab.Hive.Experiment-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HeuristicLab.Hive.Experiment-3.3.csproj	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HeuristicLab.Hive.Experiment-3.3.csproj	(revision 4340)
@@ -0,0 +1,153 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{A84C0A25-13D0-40A6-924F-53556D9691DC}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Experiment</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Experiment-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <PlatformTarget>x86</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <StartupObject />
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <OutputPath>bin\Debug\</OutputPath>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <OutputPath>bin\Release\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Collections-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Collections-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Common.Resources-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Data-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Optimization-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Tracing-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Tracing-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Serialization" />
+    <Reference Include="System.ServiceModel" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="JobItemList.cs" />
+    <Compile Include="JobItem.cs" />
+    <Compile Include="OptimizerJob.cs" />
+    <Compile Include="HeuristicLabHiveExperimentPlugin.cs" />
+    <Compile Include="HiveExperiment.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+      <DependentUpon>Settings.settings</DependentUpon>
+    </Compile>
+    <Compile Include="ServiceLocator.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="Properties\Settings.settings">
+      <Generator>PublicSettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <None Include="Tools\RecreateServiceConfig.bat" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.DataAccess\3.3\HeuristicLab.DataAccess-3.3.csproj">
+      <Project>{9076697B-C151-46CD-95BC-1D059492B478}</Project>
+      <Name>HeuristicLab.DataAccess-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Contracts\3.3\HeuristicLab.Hive.Contracts-3.3.csproj">
+      <Project>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</Project>
+      <Name>HeuristicLab.Hive.Contracts-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.JobBase\3.3\HeuristicLab.Hive.JobBase-3.3.csproj">
+      <Project>{21187322-52DD-4243-80A4-A85F0263E63B}</Project>
+      <Name>HeuristicLab.Hive.JobBase-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadata Include="Service References\" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HeuristicLabHiveExperimentPlugin.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HeuristicLabHiveExperimentPlugin.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HeuristicLabHiveExperimentPlugin.cs	(revision 4340)
@@ -0,0 +1,47 @@
+#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.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Experiment {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Hive.Engine plugin.
+  /// </summary>
+  [Plugin("HeuristicLab.Hive.Experiment", "3.3")]
+  [PluginFile("HeuristicLab.Hive.Experiment-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.DataAccess", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.Contracts", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.JobBase", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  [PluginDependency("HeuristicLab.Tracing", "3.3")]
+  public class HeuristicLabHiveExperimentPlugin : PluginBase {
+
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperiment.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperiment.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/HiveExperiment.cs	(revision 4340)
@@ -0,0 +1,969 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Optimization;
+using System.Drawing;
+using HeuristicLab.Collections;
+using System.Collections.Generic;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using System.IO;
+using HeuristicLab.Persistence.Default.Xml;
+using HeuristicLab.PluginInfrastructure;
+using System.Reflection;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts;
+using System.Threading;
+using HeuristicLab.Tracing;
+using HeuristicLab.Hive.JobBase;
+using System.Diagnostics;
+using System.Collections;
+using System.ServiceModel;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+using HeuristicLab.Hive.Experiment.Properties;
+
+namespace HeuristicLab.Hive.Experiment {
+  /// <summary>
+  /// An experiment which contains multiple batch runs of algorithms.
+  /// </summary>
+  [Item(itemName, itemDescription)]
+  [Creatable("Testing & Analysis")]
+  [StorableClass]
+  public class HiveExperiment : NamedItem, IExecutable {
+    private const string itemName = "Hive Experiment";
+    private const string itemDescription = "A runner for a single experiment, which's algorithms are executed in the Hive.";
+    private const int resultPollingIntervalMs = 5000;
+    private const int snapshotPollingIntervalMs = 1000;
+    private const int maxSnapshotRetries = 20;
+    private object locker = new object();
+
+    private System.Timers.Timer timer;
+    private bool pausePending, stopPending;
+    private bool sendingJobsFinished = false;
+
+    // ensure that only 2 threads can fetch jobresults simultaniously
+    private Semaphore fetchJobSemaphore = new Semaphore(2, 2);
+
+    private static object pendingOptimizerMappingsLocker = new object();
+
+    private bool stopResultsPollingPending = false;
+
+    private Thread resultPollingThread;
+
+    private bool isPollingResults;
+    public bool IsPollingResults {
+      get { return isPollingResults; }
+      private set {
+        if (isPollingResults != value) {
+          isPollingResults = value;
+          OnIsPollingResultsChanged();
+        }
+      }
+    }
+
+    public IEnumerable<string> ResourceGroups {
+      get {
+        if (!string.IsNullOrEmpty(resourceIds)) {
+          return resourceIds.Split(';');
+        } else {
+          return new List<string>();
+        }
+      }
+    }
+
+    #region Storable Properties
+    [Storable]
+    private DateTime lastUpdateTime;
+
+    /// <summary>
+    /// Mapping from JobId to an optimizer.
+    /// Stores all pending optimizers. If an optimizer is finished it is removed from this collection
+    /// </summary>
+    [Storable]
+    private IDictionary<Guid, IOptimizer> pendingOptimizersByJobId = new Dictionary<Guid, IOptimizer>();
+
+    /// <summary>
+    /// Stores a mapping from the child-optimizer to the parent optimizer.
+    /// Needed to replace a finished optimizer in the optimizer-tree.
+    /// Only pending optmizers are stored.
+    /// </summary>
+    [Storable]
+    private IDictionary<IOptimizer, IOptimizer> parentOptimizersByPendingOptimizer = new Dictionary<IOptimizer, IOptimizer>();
+
+    [Storable]
+    private JobItemList jobItems;
+    public JobItemList JobItems {
+      get { return jobItems; }
+    }
+
+    [Storable]
+    private string resourceIds;
+    public string ResourceIds {
+      get { return resourceIds; }
+      set {
+        if (resourceIds != value) {
+          resourceIds = value;
+          OnResourceIdsChanged();
+        }
+      }
+    }
+
+    [Storable]
+    private HeuristicLab.Optimization.Experiment experiment;
+    public HeuristicLab.Optimization.Experiment Experiment {
+      get { return experiment; }
+      set {
+        if (experiment != value) {
+          experiment = value;
+          OnExperimentChanged();
+        }
+      }
+    }
+
+    [Storable]
+    private ILog log;
+    public ILog Log {
+      get { return log; }
+    }
+
+    [Storable]
+    private Core.ExecutionState executionState;
+    public ExecutionState ExecutionState {
+      get { return executionState; }
+      private set {
+        if (executionState != value) {
+          executionState = value;
+          OnExecutionStateChanged();
+        }
+      }
+    }
+
+    [Storable]
+    private TimeSpan executionTime;
+    public TimeSpan ExecutionTime {
+      get { return executionTime; }
+      private set {
+        if (executionTime != value) {
+          executionTime = value;
+          OnExecutionTimeChanged();
+        }
+      }
+    }
+    #endregion
+
+    [StorableConstructor]
+    public HiveExperiment(bool deserializing)
+      : base(deserializing) {
+    }
+
+    public HiveExperiment()
+      : base(itemName, itemDescription) {
+      this.ResourceIds = HeuristicLab.Hive.Experiment.Properties.Settings.Default.ResourceIds;
+      this.log = new Log();
+      pausePending = stopPending = false;
+      jobItems = new JobItemList();
+      isPollingResults = false;
+      RegisterJobItemListEvents();
+      InitTimer();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      LogMessage("I am beeing cloned");
+      HiveExperiment clone = (HiveExperiment)base.Clone(cloner);
+      clone.resourceIds = this.resourceIds;
+      clone.experiment = (HeuristicLab.Optimization.Experiment)cloner.Clone(experiment);
+      clone.executionState = this.executionState;
+      clone.executionTime = this.executionTime;
+      clone.pendingOptimizersByJobId = new Dictionary<Guid, IOptimizer>();
+
+      lock (pendingOptimizerMappingsLocker) {
+        foreach (var pair in this.pendingOptimizersByJobId)
+          clone.pendingOptimizersByJobId[pair.Key] = (IOptimizer)cloner.Clone(pair.Value);
+
+        foreach (var pair in this.parentOptimizersByPendingOptimizer)
+          clone.parentOptimizersByPendingOptimizer[(IOptimizer)cloner.Clone(pair.Key)] = (IOptimizer)cloner.Clone(pair.Value);
+      }
+      clone.log = (ILog)cloner.Clone(log);
+      clone.stopPending = this.stopPending;
+      clone.pausePending = this.pausePending;
+      clone.jobItems.AddRange((JobItemList)cloner.Clone(jobItems));
+      clone.lastUpdateTime = this.lastUpdateTime;
+      clone.isPollingResults = this.isPollingResults;
+      return clone;
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      InitTimer();
+      this.IsPollingResults = false;
+      this.stopResultsPollingPending = false;
+      RegisterJobItemListEvents();
+      LogMessage("I was deserialized.");
+    }
+
+    #region Execution Time Timer
+    private void InitTimer() {
+      timer = new System.Timers.Timer(100);
+      timer.AutoReset = true;
+      timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
+    }
+
+    private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
+      DateTime now = DateTime.Now;
+      ExecutionTime += now - lastUpdateTime;
+      lastUpdateTime = now;
+    }
+    #endregion
+
+    #region IExecutable Methods
+    public void Pause() {
+      throw new NotSupportedException();
+    }
+
+    public void Prepare() {
+      if (experiment != null) {
+        StopResultPolling();
+        lock (pendingOptimizerMappingsLocker) {
+          pendingOptimizersByJobId.Clear();
+          parentOptimizersByPendingOptimizer.Clear();
+        }
+        lock (jobItems) {
+          jobItems.Clear();
+        }
+        experiment.Prepare();
+        this.ExecutionState = Core.ExecutionState.Prepared;
+        OnPrepared();
+      }
+    }
+
+    public void Start() {
+      sendingJobsFinished = false;
+      OnStarted();
+      ExecutionTime = new TimeSpan();
+      lastUpdateTime = DateTime.Now;
+      this.ExecutionState = Core.ExecutionState.Started;
+      StartResultPolling();
+
+      Thread t = new Thread(() => {
+        IClientFacade clientFacade = CreateStreamedClientFacade();
+
+        try {
+          pendingOptimizersByJobId = new Dictionary<Guid, IOptimizer>();
+
+          LogMessage("Extracting jobs from Experiment");
+          parentOptimizersByPendingOptimizer = GetOptimizers(true);
+          LogMessage("Extraction of jobs from Experiment finished");
+
+          IEnumerable<string> groups = ResourceGroups;
+          lock (pendingOptimizerMappingsLocker) {
+            foreach (IOptimizer optimizer in parentOptimizersByPendingOptimizer.Keys) {
+              SerializedJob serializedJob = CreateSerializedJob(optimizer);
+              ResponseObject<JobDto> response = clientFacade.AddJobWithGroupStrings(serializedJob, groups);
+              pendingOptimizersByJobId.Add(response.Obj.Id, optimizer);
+
+              JobItem jobItem = new JobItem() {
+                JobDto = response.Obj,
+                LatestSnapshot = null,
+                Optimizer = optimizer
+              };
+              lock (jobItems) {
+                jobItems.Add(jobItem);
+              }
+              LogMessage(jobItem.JobDto.Id, "Job sent to Hive");
+            }
+          }
+        }
+        catch (Exception e) {
+          LogMessage("Error: Starting HiveExperiment failed: " + e.Message);
+          this.ExecutionState = Core.ExecutionState.Stopped;
+          OnStopped();
+        }
+        finally {
+          ServiceLocator.DisposeClientFacade(clientFacade);
+        }
+
+        sendingJobsFinished = true;
+      });
+      t.Start();
+    }
+
+    public void Stop() {
+      this.ExecutionState = Core.ExecutionState.Stopped;
+      foreach (JobItem jobItem in jobItems) {
+        AbortJob(jobItem.JobDto.Id);
+      }
+      OnStopped();
+    }
+    #endregion
+
+    #region Optimizier Management
+    /// <summary>
+    /// Returns all optimizers in the current Experiment
+    /// </summary>
+    /// <param name="flatout">if false only top level optimizers are returned, if true the optimizer-tree is flatted</param>
+    /// <returns></returns>
+    private IDictionary<IOptimizer, IOptimizer> GetOptimizers(bool flatout) {
+      if (!flatout) {
+        var optimizers = new Dictionary<IOptimizer, IOptimizer>();
+        foreach (IOptimizer opt in experiment.Optimizers) {
+          optimizers.Add(experiment, opt);
+        }
+        return optimizers;
+      } else {
+        return FlatOptimizerTree(null, experiment, "");
+      }
+    }
+
+    /// <summary>
+    /// Recursively iterates all IOptimizers in the optimizer-tree and returns them.
+    /// 
+    /// [chn] this could be implemented more cleanly if Experiment and BatchRun would implement an interface like:
+    /// interface IParallelizable {
+    ///   IEnumerable&lt;IOptimizer&gt; GetOptimizers();
+    /// }
+    /// </summary>
+    /// <returns>a dictionary mapping from the parent optimizer to the child optimizer</returns>
+    private IDictionary<IOptimizer, IOptimizer> FlatOptimizerTree(IOptimizer parent, IOptimizer optimizer, string prepend) {
+      IDictionary<IOptimizer, IOptimizer> optimizers = new Dictionary<IOptimizer, IOptimizer>();
+      if (optimizer is HeuristicLab.Optimization.Experiment) {
+        HeuristicLab.Optimization.Experiment experiment = optimizer as HeuristicLab.Optimization.Experiment;
+        if (this.experiment != experiment) {
+          prepend += experiment.Name + "/"; // don't prepend for top-level optimizers
+        }
+        foreach (IOptimizer opt in experiment.Optimizers) {
+          AddRange(optimizers, FlatOptimizerTree(experiment, opt, prepend));
+        }
+      } else if (optimizer is BatchRun) {
+        BatchRun batchRun = optimizer as BatchRun;
+        prepend += batchRun.Name + "/";
+        for (int i = 0; i < batchRun.Repetitions; i++) {
+          IOptimizer opt = (IOptimizer)batchRun.Algorithm.Clone();
+          opt.Name += " [" + i + "]";
+          IDictionary<IOptimizer, IOptimizer> batchOptimizers = FlatOptimizerTree(batchRun, opt, prepend);
+          AddRange(optimizers, batchOptimizers);
+        }
+      } else if (optimizer is EngineAlgorithm) {
+        optimizer.Name = prepend + optimizer.Name;
+        optimizers.Add(optimizer, parent);
+        LogMessage("Optimizer extracted: " + optimizer.Name);
+      } else {
+        Logger.Warn("Optimizer of type " + optimizers.GetType().ToString() + " unknown");
+        optimizer.Name = prepend + optimizer.Name;
+        optimizers.Add(optimizer, parent);
+        LogMessage("Optimizer extracted: " + optimizer.Name);
+      }
+      return optimizers;
+    }
+
+    private void ReplaceOptimizer(IOptimizer parentOptimizer, IOptimizer originalOptimizer, IOptimizer newOptimizer) {
+      lock (locker) {
+        if (parentOptimizer is HeuristicLab.Optimization.Experiment) {
+          HeuristicLab.Optimization.Experiment exp = (HeuristicLab.Optimization.Experiment)parentOptimizer;
+          int originalOptimizerIndex = exp.Optimizers.IndexOf(originalOptimizer);
+          exp.Optimizers[originalOptimizerIndex] = newOptimizer;
+        } else if (parentOptimizer is BatchRun) {
+          BatchRun batchRun = (BatchRun)parentOptimizer;
+          if (newOptimizer is IAlgorithm) {
+            batchRun.Runs.Add(new Run(newOptimizer.Name, (IAlgorithm)newOptimizer));
+          } else {
+            throw new NotSupportedException("Only IAlgorithm types supported");
+          }
+        } else {
+          throw new NotSupportedException("Invalid parentOptimizer");
+        }
+      }
+    }
+
+    private bool NoMorePendingOptimizers() {
+      lock (pendingOptimizerMappingsLocker) {
+        return pendingOptimizersByJobId.Count == 0;
+      }
+    }
+
+    /// <summary>
+    /// Removes optimizers from
+    ///  - parentOptimizersByPendingOptimizer
+    ///  - pendingOptimizersByJobId
+    /// </summary>
+    /// <param name="jobId"></param>
+    private void DisposeOptimizerMappings(Guid jobId) {
+      LogMessage(jobId, "Disposing Optimizer Mappings");
+      lock (pendingOptimizerMappingsLocker) {
+        parentOptimizersByPendingOptimizer.Remove(pendingOptimizersByJobId[jobId]);
+        pendingOptimizersByJobId.Remove(jobId);
+      }
+    }
+
+    #endregion
+
+    #region Job Management
+    /// <summary>
+    /// Updates all JobItems with the results
+    /// </summary>
+    /// <param name="jobResultList"></param>
+    private void UpdateJobItems(JobResultList jobResultList) {
+      // use a Dict to avoid quadratic runtime complexity
+      IDictionary<Guid, JobResult> jobResultDict = jobResultList.ToDictionary(job => job.JobId);
+      lock (jobItems) {
+        foreach (JobItem jobItem in JobItems) {
+          if (jobResultDict.ContainsKey(jobItem.JobDto.Id)) {
+            jobItem.JobResult = jobResultDict[jobItem.JobDto.Id];
+          }
+        }
+      }
+    }
+
+    private void JobItem_JobStateChanged(object sender, EventArgs e) {
+      JobItem jobItem = (JobItem)sender;
+
+      Thread t = new Thread(() => {
+        try {
+          if (jobItem.State == JobState.Finished) {
+            FetchAndUpdateJob(jobItem.JobDto.Id);
+            DisposeOptimizerMappings(jobItem.JobDto.Id);
+          } else if (jobItem.State == JobState.Failed) {
+            DisposeOptimizerMappings(jobItem.JobDto.Id);
+          }
+
+          if (NoMorePendingOptimizers()) {
+            StopResultPolling();
+            this.ExecutionState = Core.ExecutionState.Stopped;
+            OnStopped();
+          }
+        }
+        catch (Exception ex) {
+          Logger.Error("JobItem_JobStateChanged failed badly: " + ex.Message);
+          LogMessage("JobItem_JobStateChanged failed badly: " + ex.Message);
+        }
+      });
+      t.Start();
+    }
+
+    /// <summary>
+    /// Fetches the finished job from the server and updates the jobItem
+    /// </summary>
+    private void FetchAndUpdateJob(Guid jobId) {
+      bool tryagain = false;
+      LogMessage(jobId, "FetchAndUpdateJob started");
+      if (fetchJobSemaphore.WaitOne(new TimeSpan(0, 2, 0))) {
+        IClientFacade clientFacade = null;
+        try {
+          clientFacade = CreateStreamedClientFacade();
+          IOptimizer originalOptimizer;
+          originalOptimizer = pendingOptimizersByJobId[jobId];
+
+          ResponseObject<SerializedJob> jobResponse = clientFacade.GetLastSerializedResult(jobId, false, false);
+          IJob restoredObject = XmlParser.Deserialize<IJob>(new MemoryStream(jobResponse.Obj.SerializedJobData));
+          IOptimizer restoredOptimizer = ((OptimizerJob)restoredObject).Optimizer;
+          ReplaceOptimizer(parentOptimizersByPendingOptimizer[originalOptimizer], originalOptimizer, restoredOptimizer);
+          LogMessage(jobId, "FetchAndUpdateJob ended");
+        }
+        catch (Exception e) {
+          LogMessage(jobId, "FetchAndUpdateJob failed: " + e.Message + ". Will try again!");
+          tryagain = true;
+        }
+        finally {
+          ServiceLocator.DisposeClientFacade(clientFacade);
+          fetchJobSemaphore.Release();
+        }
+      } else {
+        LogMessage(jobId, "FetchAndUpdateJob timed out. Will try again!");
+        tryagain = true;
+      }
+
+      if (tryagain) {
+        FetchAndUpdateJob(jobId);
+      }
+    }
+
+    private void UpdateJobItem(JobDto jobDto) {
+      JobItem jobItem = jobItems.Single(x => x.JobDto.Id == jobDto.Id);
+      jobItem.JobDto = jobDto;
+    }
+
+    public void AbortJob(Guid jobId) {
+      IClientFacade clientFacade = CreateClientFacade();
+      Response response = clientFacade.AbortJob(jobId);
+      LogMessage(jobId, "Aborting Job: " + response.StatusMessage);
+    }
+
+    private SerializedJob CreateSerializedJob(IOptimizer optimizer) {
+      IJob job = new OptimizerJob() {
+        Optimizer = optimizer
+      };
+
+      // serialize job
+      MemoryStream memStream = new MemoryStream();
+      XmlGenerator.Serialize(job, memStream);
+      byte[] jobByteArray = memStream.ToArray();
+      memStream.Dispose();
+
+      // find out which which plugins are needed for the given object
+      List<HivePluginInfoDto> pluginsNeeded = (
+        from p in GetDeclaringPlugins(job.GetType())
+        select new HivePluginInfoDto() {
+          Name = p.Name,
+          Version = p.Version
+        }).ToList();
+
+      JobDto jobDto = new JobDto() {
+        CoresNeeded = 1, // [chn] how to determine real cores needed?
+        PluginsNeeded = pluginsNeeded,
+        State = JobState.Offline,
+        MemoryNeeded = 0
+      };
+
+      SerializedJob serializedJob = new SerializedJob() {
+        JobInfo = jobDto,
+        SerializedJobData = jobByteArray
+      };
+
+      return serializedJob;
+    }
+
+    private JobItem GetJobItemById(Guid jobId) {
+      return jobItems.Single(x => x.JobDto.Id == jobId);
+    }
+    #endregion
+
+    #region Result Polling
+    public void StartResultPolling() {
+      this.stopResultsPollingPending = false;
+      this.IsPollingResults = true;
+      resultPollingThread = CreateResultPollingThread();
+      if (resultPollingThread.ThreadState != System.Threading.ThreadState.Running)
+        resultPollingThread.Start();
+    }
+
+    public void StopResultPolling() {
+      this.stopResultsPollingPending = true;
+      if (resultPollingThread != null && resultPollingThread.ThreadState == System.Threading.ThreadState.WaitSleepJoin) {
+        resultPollingThread.Interrupt();
+      }
+      this.stopResultsPollingPending = false;
+    }
+
+    private Thread CreateResultPollingThread() {
+      return new Thread(() => {
+        try {
+          do {
+            IClientFacade clientFacade = CreateStreamedClientFacade();
+            IEnumerable<Guid> jobIdsToQuery = from job in JobItems
+                                              where job.State != JobState.Finished &&
+                                              job.State != JobState.Failed
+                                              select job.JobDto.Id;
+            if (jobIdsToQuery.Count() > 0) {
+              LogMessage("Polling results for " + jobIdsToQuery.Count() + " jobs");
+              try {
+                ResponseObject<JobResultList> response = clientFacade.GetJobResults(jobIdsToQuery);
+                if (response.StatusMessage == ResponseStatus.Ok) {
+                  JobResultList jobItemList = response.Obj;
+                  UpdateJobItems(jobItemList);
+
+                  LogMessage("Polling successfully finished");
+                } else {
+                  throw new Exception(response.StatusMessage.ToString());
+                }
+              }
+              catch (Exception e) {
+                LogMessage("Polling results failed: " + e.Message);
+              }
+              finally {
+                ServiceLocator.DisposeClientFacade(clientFacade);
+              }
+              Thread.Sleep(resultPollingIntervalMs);
+            } else {
+              if (sendingJobsFinished) {
+                // all the jobs have been sent to hive, but non are to query any more (all finished or failed)
+                this.stopResultsPollingPending = true;
+              }
+            }
+          } while (!this.stopResultsPollingPending);
+        }
+        catch (ThreadInterruptedException exception) {
+          // thread has been interuppted
+        }
+        catch (Exception e) {
+          LogMessage("Result Polling Thread failed badly: " + e.Message);
+          Logger.Error("Result Polling Thread failed badly: " + e.Message);
+        }
+        finally {
+          this.IsPollingResults = false;
+        }
+      });
+    }
+
+    #endregion
+
+    #region Snapshots
+
+    private void UpdateSnapshot(ResponseObject<SerializedJob> response) {
+      JobItem jobItem = jobItems.Single(x => x.JobDto.Id == response.Obj.JobInfo.Id);
+      jobItem.LatestSnapshot = response;
+    }
+
+    public void RequestSnapshot(Guid jobId) {
+      Thread t = new Thread(() => {
+        IClientFacade clientFacade = null;
+        try {
+          clientFacade = CreateStreamedClientFacade();
+
+          ResponseObject<SerializedJob> response;
+          int retryCount = 0;
+
+          Response snapShotResponse = clientFacade.RequestSnapshot(jobId);
+          if (snapShotResponse.StatusMessage == ResponseStatus.RequestSnapshot_JobIsNotBeeingCalculated) {
+            // job already finished
+            Logger.Debug("HiveExperiment: Abort - GetLastResult(false)");
+            response = clientFacade.GetLastSerializedResult(jobId, false, false);
+            Logger.Debug("HiveExperiment: Abort - Server: " + response.StatusMessage);
+          } else {
+            // server sent snapshot request to client
+            // poll until snapshot is ready
+            do {
+              Thread.Sleep(snapshotPollingIntervalMs);
+              Logger.Debug("HiveExperiment: Abort - GetLastResult(true)");
+              response = clientFacade.GetLastSerializedResult(jobId, false, true);
+              Logger.Debug("HiveExperiment: Abort - Server: " + response.StatusMessage);
+              retryCount++;
+              // loop while
+              // 1. problem with communication with server
+              // 2. job result not yet ready
+            } while (
+              (retryCount < maxSnapshotRetries) && (
+              response.StatusMessage == ResponseStatus.GetLastSerializedResult_JobResultNotYetThere)
+              );
+          }
+          if (response.StatusMessage == ResponseStatus.Ok) {
+            LogMessage(jobId, "Snapshot polling successfull for job " + jobId);
+            UpdateSnapshot(response);
+          } else {
+            LogMessage(jobId, "Error: Polling of Snapshot failed for job " + jobId + ": " + response.StatusMessage);
+          }
+        }
+        catch (Exception e) {
+          LogMessage("RequestSnapshot Thread failed badly: " + e.Message);
+          Logger.Error("RequestSnapshot Thread failed badly: " + e.Message);
+        }
+        finally {
+          ServiceLocator.DisposeClientFacade(clientFacade);
+        }
+      });
+      t.Start();
+    }
+
+    void JobItem_SnapshotRequestedStateChanged(object sender, EventArgs e) {
+      JobItem jobItem = (JobItem)sender;
+      if (jobItem.SnapshotRequestedState == SnapshotRequestedState.Requested) {
+        RequestSnapshot(jobItem.JobDto.Id);
+      }
+    }
+
+    #endregion
+
+    #region Required Plugin Search
+    /// <summary>
+    /// Returns a list of plugins in which the type itself and all members 
+    /// of the type are declared. Objectgraph is searched recursively.
+    /// </summary>
+    private IEnumerable<IPluginDescription> GetDeclaringPlugins(Type type) {
+      HashSet<Type> types = new HashSet<Type>();
+      FindTypes(type, types, "HeuristicLab.");
+      return GetDeclaringPlugins(types);
+    }
+
+    /// <summary>
+    /// Returns the plugins (including dependencies) in which the given types are declared
+    /// </summary>
+    private IEnumerable<IPluginDescription> GetDeclaringPlugins(IEnumerable<Type> types) {
+      HashSet<IPluginDescription> plugins = new HashSet<IPluginDescription>();
+      foreach (Type t in types) {
+        FindDeclaringPlugins(ApplicationManager.Manager.GetDeclaringPlugin(t), plugins);
+      }
+      return plugins;
+    }
+
+    /// <summary>
+    /// Finds the dependencies of the given plugin and adds it to the plugins hashset.
+    /// Also searches the dependencies recursively.
+    /// </summary>
+    private void FindDeclaringPlugins(IPluginDescription plugin, HashSet<IPluginDescription> plugins) {
+      if (!plugins.Contains(plugin)) {
+        plugins.Add(plugin);
+        foreach (IPluginDescription dependency in plugin.Dependencies) {
+          FindDeclaringPlugins(dependency, plugins);
+        }
+      }
+    }
+
+    /// <summary>
+    /// Recursively finds all types used in type which are in a namespace which starts with namespaceStart
+    /// Be aware that search is not performed on attributes
+    /// </summary>
+    /// <param name="type">the type to be searched</param>
+    /// <param name="types">found types will be stored there, needed in order to avoid duplicates</param>
+    /// <param name="namespaceStart">only types from namespaces which start with this will be searched and added</param>
+    private void FindTypes(Type type, HashSet<Type> types, string namespaceStart) {
+      if (!types.Contains(type) && type.Namespace.StartsWith(namespaceStart)) {
+        types.Add(type);
+
+        // constructors
+        foreach (ConstructorInfo info in type.GetConstructors()) {
+          foreach (ParameterInfo paramInfo in info.GetParameters()) {
+            FindTypes(paramInfo.ParameterType, types, namespaceStart);
+          }
+        }
+
+        // interfaces
+        foreach (Type t in type.GetInterfaces()) {
+          FindTypes(t, types, namespaceStart);
+        }
+
+        // events
+        foreach (EventInfo info in type.GetEvents()) {
+          FindTypes(info.EventHandlerType, types, namespaceStart);
+          FindTypes(info.DeclaringType, types, namespaceStart);
+        }
+
+        // properties
+        foreach (PropertyInfo info in type.GetProperties()) {
+          FindTypes(info.PropertyType, types, namespaceStart);
+        }
+
+        // fields
+        foreach (FieldInfo info in type.GetFields()) {
+          FindTypes(info.FieldType, types, namespaceStart);
+        }
+
+        // methods
+        foreach (MethodInfo info in type.GetMethods()) {
+          foreach (ParameterInfo paramInfo in info.GetParameters()) {
+            FindTypes(paramInfo.ParameterType, types, namespaceStart);
+          }
+          FindTypes(info.ReturnType, types, namespaceStart);
+        }
+      }
+    }
+    #endregion
+
+    #region Eventhandler
+
+    public event EventHandler ExecutionTimeChanged;
+    private void OnExecutionTimeChanged() {
+      EventHandler handler = ExecutionTimeChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ExecutionStateChanged;
+    private void OnExecutionStateChanged() {
+      LogMessage("ExecutionState changed to " + executionState.ToString());
+      EventHandler handler = ExecutionStateChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler<EventArgs<Exception>> ExceptionOccurred;
+
+    public event EventHandler Started;
+    private void OnStarted() {
+      LogMessage("Started");
+      timer.Start();
+      EventHandler handler = Started;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler Stopped;
+    private void OnStopped() {
+      timer.Stop();
+      LogMessage("Stopped");
+      EventHandler handler = Stopped;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler Paused;
+    private void OnPaused() {
+      timer.Stop();
+      LogMessage("Paused");
+      EventHandler handler = Paused;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler Prepared;
+    protected virtual void OnPrepared() {
+      LogMessage("Prepared");
+      EventHandler handler = Prepared;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ResourceIdsChanged;
+    protected virtual void OnResourceIdsChanged() {
+      EventHandler handler = ResourceIdsChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ExperimentChanged;
+    protected virtual void OnExperimentChanged() {
+      LogMessage("Experiment changed");
+      EventHandler handler = ExperimentChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler ServerUrlChanged;
+    protected virtual void OnServerUrlChanged() {
+      EventHandler handler = ServerUrlChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler IsResultsPollingChanged;
+    private void OnIsPollingResultsChanged() {
+      if (this.IsPollingResults) {
+        LogMessage("Results Polling Started");
+        timer.Start();
+      } else {
+        LogMessage("Results Polling Stopped");
+        timer.Stop();
+      }
+      EventHandler handler = IsResultsPollingChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    private void RegisterJobItemListEvents() {
+      jobItems.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<JobItem>>(jobItems_CollectionReset);
+      jobItems.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<JobItem>>(jobItems_ItemsAdded);
+      jobItems.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<JobItem>>(jobItems_ItemsRemoved);
+      jobItems.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedItem<JobItem>>(jobItems_ItemsReplaced);
+      foreach (JobItem jobItem in jobItems) {
+        RegisterJobItemEvents(jobItem);
+      }
+    }
+
+    private void DeregisterJobItemListEvents() {
+      jobItems.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<JobItem>>(jobItems_CollectionReset);
+      jobItems.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<JobItem>>(jobItems_ItemsAdded);
+      jobItems.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<JobItem>>(jobItems_ItemsRemoved);
+      jobItems.ItemsReplaced -= new CollectionItemsChangedEventHandler<IndexedItem<JobItem>>(jobItems_ItemsReplaced);
+      foreach (JobItem jobItem in jobItems) {
+        DeregisterJobItemEvents(jobItem);
+      }
+    }
+
+    void jobItems_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<JobItem>> e) {
+      UpdateJobItemEvents(e);
+    }
+
+    private void UpdateJobItemEvents(CollectionItemsChangedEventArgs<IndexedItem<JobItem>> e) {
+      if (e.OldItems != null) {
+        foreach (var item in e.OldItems) {
+          DeregisterJobItemEvents(item.Value);
+        }
+      }
+      if (e.Items != null) {
+        foreach (var item in e.Items) {
+          RegisterJobItemEvents(item.Value);
+        }
+      }
+    }
+
+    private void RegisterJobItemEvents(JobItem jobItem) {
+      jobItem.SnapshotRequestedStateChanged += new EventHandler(JobItem_SnapshotRequestedStateChanged);
+      jobItem.JobStateChanged += new EventHandler(JobItem_JobStateChanged);
+    }
+
+    private void DeregisterJobItemEvents(JobItem jobItem) {
+      jobItem.SnapshotRequestedStateChanged -= new EventHandler(JobItem_SnapshotRequestedStateChanged);
+      jobItem.JobStateChanged -= new EventHandler(JobItem_JobStateChanged);
+    }
+
+    void jobItems_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<JobItem>> e) {
+      UpdateJobItemEvents(e);
+    }
+
+    void jobItems_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<JobItem>> e) {
+      UpdateJobItemEvents(e);
+    }
+
+    void jobItems_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<JobItem>> e) {
+      foreach (var item in e.OldItems) {
+        item.Value.JobStateChanged -= new EventHandler(JobItem_JobStateChanged);
+        item.Value.SnapshotRequestedStateChanged -= new EventHandler(JobItem_SnapshotRequestedStateChanged);
+      }
+    }
+    #endregion
+
+    #region Helper Functions
+    private IClientFacade CreateClientFacade() {
+      IClientFacade clientFacade = null;
+      do {
+        try {
+          //clientFacade = ServiceLocator.CreateClientFacade(string.Format("http://{0}:{1}/{2}", Settings.Default.HiveServerIp, Settings.Default.HiveServerPort, WcfSettings.ClientServiceName));
+          clientFacade = ServiceLocator.CreateClientFacade(Settings.Default.HiveServerIp);
+
+        }
+        catch (EndpointNotFoundException exception) {
+          LogMessage("Could not connect to Server: " + exception.Message + ". Will try again in " + (resultPollingIntervalMs / 1000) + " sec.");
+          Thread.Sleep(resultPollingIntervalMs);
+        }
+      } while (clientFacade == null && this.ExecutionState != Core.ExecutionState.Stopped);
+      return clientFacade;
+    }
+
+    private IClientFacade CreateStreamedClientFacade() {
+      IClientFacade clientFacade = null;
+      do {
+        try {
+          //clientFacade = ServiceLocator.CreateStreamedClientFacade(string.Format("http://{0}:{1}/{2}", Settings.Default.HiveServerIp, Settings.Default.HiveServerPort, WcfSettings.ClientStreamedServiceName));
+          clientFacade = ServiceLocator.CreateStreamedClientFacade(Settings.Default.HiveServerIp);
+        }
+        catch (EndpointNotFoundException exception) {
+          LogMessage("Could not connect to Server: " + exception.Message + ". Will try again in " + (resultPollingIntervalMs / 1000) + " sec.");
+          Thread.Sleep(resultPollingIntervalMs);
+        }
+      } while (clientFacade == null && this.ExecutionState != Core.ExecutionState.Stopped);
+      return clientFacade;
+    }
+
+    private void AddRange(IDictionary<IOptimizer, IOptimizer> optimizers, IDictionary<IOptimizer, IOptimizer> childs) {
+      foreach (KeyValuePair<IOptimizer, IOptimizer> kvp in childs) {
+        optimizers.Add(kvp);
+      }
+    }
+
+    #endregion
+
+    #region Logging
+    private void LogMessage(string message) {
+      // HeuristicLab.Log is not Thread-Safe, so lock on every call
+      lock (locker) {
+        log.LogMessage(message);
+      }
+    }
+
+    private void LogMessage(Guid jobId, string message) {
+      GetJobItemById(jobId).LogMessage(message);
+      LogMessage(message + " (jobId: " + jobId + ")");
+    }
+
+    #endregion
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/JobItem.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/JobItem.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/JobItem.cs	(revision 4340)
@@ -0,0 +1,193 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+using System.Drawing;
+using HeuristicLab.Common;
+using System.Diagnostics;
+using HeuristicLab.Optimization;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+
+namespace HeuristicLab.Hive.Experiment {
+  public enum SnapshotRequestedState { Idle, Requested }
+
+  [StorableClass]
+  public class JobItem : Item {
+    private static object locker = new object();
+
+    public override Image ItemImage {
+      get {
+        if (State == JobState.Offline) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutablePrepared;
+        else if (State == JobState.Calculating) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStarted;
+        else if (State == JobState.Aborted) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStopped;
+        else if (State == JobState.Failed) return HeuristicLab.Common.Resources.VS2008ImageLibrary.Error;
+        else if (State == JobState.Finished) return HeuristicLab.Common.Resources.VS2008ImageLibrary.ExecutableStopped;
+        else return HeuristicLab.Common.Resources.VS2008ImageLibrary.Event;
+      }
+    }
+
+    [Storable]
+    private JobDto jobDto;
+    /// <summary>
+    /// Some static information about the job. Don't use State-Information out of there
+    /// </summary>
+    public JobDto JobDto {
+      get { return jobDto; }
+      set {
+        if (jobDto != value) {
+          jobDto = value;
+          OnJobDtoChanged();
+          OnToStringChanged();
+          OnItemImageChanged();
+        }
+      }
+    }
+
+    [Storable]
+    private JobResult jobResult;
+    public JobResult JobResult {
+      private get { return jobResult; }
+      set {
+        if (jobResult != value) {
+          jobResult = value;
+          OnJobStateChanged();
+          OnToStringChanged();
+          OnItemImageChanged();
+        }
+      }
+    }
+
+    public JobState State {
+      get { return jobResult != null ? JobResult.State : JobDto.State; }
+    }
+
+    public double? Percentage {
+      get { return jobResult != null ? JobResult.Percentage : JobDto.Percentage; }
+    }
+
+    public string Exception {
+      get { return jobResult != null ? JobResult.Exception : JobDto.Exception; }
+    }
+
+    public DateTime? DateCalculated {
+      get { return jobResult != null ? JobResult.DateCalculated : JobDto.DateCalculated; }
+    }
+
+    public DateTime? DateFinished {
+      get { return jobResult != null ? JobResult.DateFinished : JobDto.DateFinished; }
+    }
+    
+    [Storable]
+    private ResponseObject<SerializedJob> latestSnapshot;
+    public ResponseObject<SerializedJob> LatestSnapshot {
+      get { return latestSnapshot; }
+      set {
+        if (latestSnapshot != value) {
+          latestSnapshot = value;
+          if (value != null) {
+            latestSnapshotTime = DateTime.Now;
+          }
+          SnapshotRequestedState = Experiment.SnapshotRequestedState.Idle;
+          OnLatestSnapshotChanged();
+        }
+      }
+    }
+
+    [Storable]
+    private DateTime latestSnapshotTime;
+    public DateTime LatestSnapshotTime {
+      get { return latestSnapshotTime; }
+    }
+
+    [Storable]
+    private ILog log;
+    public ILog Log {
+      get { return log; }
+    }
+
+    [Storable]
+    private IOptimizer optimizer;
+    public IOptimizer Optimizer {
+      get { return optimizer; }
+      set { this.optimizer = value; }
+    }
+
+    [Storable]
+    private SnapshotRequestedState snapshotRequestedState;
+    public SnapshotRequestedState SnapshotRequestedState {
+      get { return snapshotRequestedState; }
+      private set {
+        this.snapshotRequestedState = value;
+        OnSnapshotRequestedStateChanged();
+      }
+    }
+
+    public JobItem() {
+      log = new Log();
+    }
+
+    public override string ToString() {
+      if (jobDto != null) {
+        return optimizer.Name;
+      } else {
+        return base.ToString();
+      }
+    }
+
+    public event EventHandler LatestSnapshotChanged;
+    private void OnLatestSnapshotChanged() {
+      LogMessage("LatestSnapshotChanged");
+      EventHandler handler = LatestSnapshotChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler JobDtoChanged;
+    private void OnJobDtoChanged() {
+      LogMessage("JobDtoChanged");
+      EventHandler handler = JobDtoChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public event EventHandler JobStateChanged;
+    private void OnJobStateChanged() {
+      LogMessage("JobStateChanged (State: " + this.State + ", Percentage: " + this.Percentage + ")");
+      EventHandler handler = JobStateChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public void LogMessage(string message) {
+      lock (locker) {
+        log.LogMessage(message);
+      }
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      LogMessage("I am beeing cloned");
+      JobItem clone = (JobItem)base.Clone(cloner);
+      clone.latestSnapshotTime = this.latestSnapshotTime;
+      clone.jobDto = (JobDto)cloner.Clone(this.jobDto);
+      clone.latestSnapshot = (ResponseObject<SerializedJob>)cloner.Clone(this.latestSnapshot);
+      clone.log = (ILog)cloner.Clone(this.log);
+      clone.optimizer = (IOptimizer)cloner.Clone(this.optimizer);
+      clone.jobResult = (JobResult)cloner.Clone(this.jobResult);
+      return clone;
+    }
+
+
+    public event EventHandler SnapshotRequestedStateChanged;
+    private void OnSnapshotRequestedStateChanged() {
+      EventHandler handler = SnapshotRequestedStateChanged;
+      if (handler != null) handler(this, EventArgs.Empty);
+    }
+
+    public void RequestSnapshot() {
+      this.SnapshotRequestedState = Experiment.SnapshotRequestedState.Requested;
+    }
+
+
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/JobItemList.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/JobItemList.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/JobItemList.cs	(revision 4340)
@@ -0,0 +1,22 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Experiment {
+  [Item("JobItem List", "Represents a list of hive jobs.")]
+  [StorableClass]
+  public class JobItemList : ItemList<JobItem> {
+    public JobItemList() : base() { }
+    public JobItemList(int capacity) : base(capacity) { }
+    public JobItemList(IEnumerable<JobItem> collection) : base(collection) { }
+
+    public override Common.IDeepCloneable Clone(Common.Cloner cloner) {
+      JobItemList clone = (JobItemList)base.Clone(cloner);
+      return clone;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/OptimizerJob.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/OptimizerJob.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/OptimizerJob.cs	(revision 4340)
@@ -0,0 +1,105 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.JobBase;
+using HeuristicLab.Optimization;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Hive.Experiment {
+  [StorableClass]
+  public class OptimizerJob : IJob {
+
+    [Storable]
+    private IOptimizer optimizer;
+    public IOptimizer Optimizer {
+      get { return optimizer;  }
+      set {
+        if (optimizer != null && value != optimizer) {
+          DeregisterEvents();
+        }
+        optimizer = value;
+        if (optimizer != null) {
+          RegisterEvents();
+        }
+      }
+    }
+
+    [Storable]
+    private double progress = 0.0;
+
+    public OptimizerJob() {
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      RegisterEvents();
+    }
+
+    #region IJob Members
+
+    public long JobId {
+      get;
+      set;
+    }
+
+    public double Progress {
+      get { return optimizer.ExecutionState == ExecutionState.Stopped ? 1.0 : this.progress; }
+    }
+
+    public ExecutionState ExecutionState {
+      get { return optimizer.ExecutionState; }
+    }
+
+    public void Run() {
+      throw new NotSupportedException();
+    }
+
+    public void Prepare() {
+      optimizer.Prepare();
+    }
+
+    public void Start() {
+      optimizer.Start();
+    }
+
+    public void Stop() {
+      optimizer.Stop();
+    }
+
+    public event EventHandler JobStopped;
+
+    public event EventHandler JobFailed;
+
+    #endregion
+
+    #region Events
+    private void RegisterEvents() {
+      optimizer.Stopped += new EventHandler(optimizer_Stopped);
+      optimizer.ExceptionOccurred += new EventHandler<Common.EventArgs<Exception>>(optimizer_ExceptionOccurred);
+    }
+
+    private void DeregisterEvents() {
+      optimizer.Stopped -= new EventHandler(optimizer_Stopped);
+      optimizer.ExceptionOccurred -= new EventHandler<Common.EventArgs<Exception>>(optimizer_ExceptionOccurred);
+    }
+
+    void optimizer_ExceptionOccurred(object sender, Common.EventArgs<Exception> e) {
+      if (optimizer.ExecutionState != ExecutionState.Stopped) this.progress = 0.0;
+      else this.progress = 1.0;
+      EventHandler handler = JobFailed;
+      if (handler != null) handler(this, e);
+    }
+
+    void optimizer_Stopped(object sender, EventArgs e) {
+      if (optimizer.ExecutionState != ExecutionState.Stopped) this.progress = 0.0;
+      else this.progress = 1.0;
+      EventHandler handler = JobStopped;
+      if (handler != null) handler(this, e);
+    }
+    #endregion
+
+
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Properties/AssemblyInfo.frame	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Properties/AssemblyInfo.frame	(revision 4340)
@@ -0,0 +1,58 @@
+#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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+using System.Security;
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Hive.Experiment")]
+[assembly: AssemblyDescription("HeuristicLab experiment for distributed computation")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AllowPartiallyTrustedCallers]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("9721605F-C79D-434a-8E42-C0A384477D53")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Properties/Settings.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Properties/Settings.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Properties/Settings.Designer.cs	(revision 4340)
@@ -0,0 +1,86 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Experiment.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+    public sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("MyGroup")]
+        public string ResourceIds {
+            get {
+                return ((string)(this["ResourceIds"]));
+            }
+            set {
+                this["ResourceIds"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("localhost")]
+        public string HiveServerIp {
+            get {
+                return ((string)(this["HiveServerIp"]));
+            }
+            set {
+                this["HiveServerIp"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("cneumueller")]
+        public string HiveUsername {
+            get {
+                return ((string)(this["HiveUsername"]));
+            }
+            set {
+                this["HiveUsername"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("cneumueller")]
+        public string HivePassword {
+            get {
+                return ((string)(this["HivePassword"]));
+            }
+            set {
+                this["HivePassword"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("9000")]
+        public string HiveServerPort {
+            get {
+                return ((string)(this["HiveServerPort"]));
+            }
+            set {
+                this["HiveServerPort"] = value;
+            }
+        }
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Properties/Settings.settings
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Properties/Settings.settings	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Properties/Settings.settings	(revision 4340)
@@ -0,0 +1,21 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Hive.Experiment.Properties" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="ResourceIds" Type="System.String" Scope="User">
+      <Value Profile="(Default)">MyGroup</Value>
+    </Setting>
+    <Setting Name="HiveServerIp" Type="System.String" Scope="User">
+      <Value Profile="(Default)">localhost</Value>
+    </Setting>
+    <Setting Name="HiveUsername" Type="System.String" Scope="User">
+      <Value Profile="(Default)">cneumueller</Value>
+    </Setting>
+    <Setting Name="HivePassword" Type="System.String" Scope="User">
+      <Value Profile="(Default)">cneumueller</Value>
+    </Setting>
+    <Setting Name="HiveServerPort" Type="System.String" Scope="User">
+      <Value Profile="(Default)">9000</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/ServiceLocator.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/ServiceLocator.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/ServiceLocator.cs	(revision 4340)
@@ -0,0 +1,59 @@
+﻿#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.Interfaces;
+using System.ServiceModel;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.Experiment.Properties;
+
+namespace HeuristicLab.Hive.Experiment {
+  internal class ServiceLocator {
+    internal static IClientFacade CreateClientFacade(string hostAddress) {
+      ChannelFactory<IClientFacade> factory = new ChannelFactory<IClientFacade>("ClientHttpEndpoint");
+      WcfSettings.SetEndpointAddress(factory.Endpoint, hostAddress);
+
+      factory.Credentials.UserName.UserName = Settings.Default.HiveUsername;
+      factory.Credentials.UserName.Password = Settings.Default.HivePassword;
+
+      IClientFacade client = factory.CreateChannel();
+      return client;
+    }
+
+    internal static IClientFacade CreateStreamedClientFacade(string hostAddress) {
+      ChannelFactory<IClientFacade> factory = new ChannelFactory<IClientFacade>("ClientTcpStreamedEndpoint");
+      WcfSettings.SetEndpointAddress(factory.Endpoint, hostAddress);
+
+      factory.Credentials.UserName.UserName = Settings.Default.HiveUsername;
+      factory.Credentials.UserName.Password = Settings.Default.HivePassword;
+
+      IClientFacade client = factory.CreateChannel();
+      return client;
+    }
+
+    public static void DisposeClientFacade(IClientFacade clientFacade) {
+      WcfSettings.DisposeWcfClient((ICommunicationObject)clientFacade);      
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Tools/RecreateServiceConfig.bat
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Tools/RecreateServiceConfig.bat	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/Tools/RecreateServiceConfig.bat	(revision 4340)
@@ -0,0 +1,7 @@
+REM This tool updates the app.config with the client-config. IP-Adress may need to be adjusted
+REM ClientFacade.cs is also created, but not needed
+
+SvcUtil.exe ^
+      /noLogo ^
+      http://localhost:9000/ClientService?wsdl ^
+      /config:app.config
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/app.config
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/app.config	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Experiment/3.3/app.config	(revision 4340)
@@ -0,0 +1,134 @@
+<?xml version="1.0"?>
+<configuration>
+  <configSections>
+    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
+      <section name="HeuristicLab.Hive.Experiment.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+    </sectionGroup>
+  </configSections>
+  <userSettings>
+    <HeuristicLab.Hive.Experiment.Properties.Settings>
+      <setting name="ResourceIds" serializeAs="String">
+        <value>MyGroup</value>
+      </setting>
+      <setting name="HiveServerIp" serializeAs="String">
+        <value>localhost</value>
+      </setting>
+      <setting name="HiveUsername" serializeAs="String">
+        <value>cneumueller</value>
+      </setting>
+      <setting name="HivePassword" serializeAs="String">
+        <value>cneumueller</value>
+      </setting>
+      <setting name="HiveServerPort" serializeAs="String">
+        <value>9000</value>
+      </setting>
+    </HeuristicLab.Hive.Experiment.Properties.Settings>
+  </userSettings>
+  <system.serviceModel>
+
+    <bindings>
+      <netTcpBinding>
+        <binding name="ClientTcpStreamedEndpoint" closeTimeout="00:01:00"
+            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
+            transactionFlow="false" transferMode="Streamed" transactionProtocol="OleTransactions"
+            hostNameComparisonMode="StrongWildcard"
+            maxBufferPoolSize="104857600" maxBufferSize="104857600"
+            maxReceivedMessageSize="104857600">
+          <readerQuotas maxDepth="32" maxStringContentLength="104857600" maxArrayLength="104857600"
+              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+          <reliableSession ordered="true" inactivityTimeout="00:10:00"
+              enabled="false" />
+          <security mode="TransportWithMessageCredential">
+            <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
+            <message clientCredentialType="UserName" algorithmSuite="Default" />
+          </security>
+        </binding>
+        <binding name="ClientTcpMexEndpoint" closeTimeout="00:01:00"
+            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+            transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
+            hostNameComparisonMode="StrongWildcard"
+            maxBufferPoolSize="524288" maxBufferSize="65536"
+            maxReceivedMessageSize="65536">
+          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+          <reliableSession ordered="true" inactivityTimeout="00:10:00"
+              enabled="false" />
+          <security mode="None">
+            <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
+            <message clientCredentialType="Windows" />
+          </security>
+        </binding>
+      </netTcpBinding>
+      <wsHttpBinding>
+        <binding name="ClientHttpEndpoint" closeTimeout="00:01:00" openTimeout="00:01:00"
+            receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false"
+            transactionFlow="false" hostNameComparisonMode="StrongWildcard"
+            maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
+            messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
+            allowCookies="false">
+          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+          <reliableSession ordered="true" inactivityTimeout="00:10:00"
+              enabled="false" />
+          <security mode="Message">
+            <transport clientCredentialType="Windows" proxyCredentialType="None"
+                realm="" />
+            <message clientCredentialType="UserName" negotiateServiceCredential="true"
+                algorithmSuite="Default" />
+          </security>
+        </binding>
+        <binding name="ClientHttpMexEndpoint" closeTimeout="00:01:00"
+            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+            bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
+            maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
+            messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
+            allowCookies="false">
+          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+          <reliableSession ordered="true" inactivityTimeout="00:10:00"
+              enabled="false" />
+          <security mode="None">
+            <transport clientCredentialType="Windows" proxyCredentialType="None"
+                realm="" />
+            <message clientCredentialType="Windows" negotiateServiceCredential="true" />
+          </security>
+        </binding>
+      </wsHttpBinding>
+    </bindings>
+    <client>
+      <endpoint address="net.tcp://localhost:9001/ClientServiceStreamed" behaviorConfiguration="ClientServiceBehaviour"
+          binding="netTcpBinding" bindingConfiguration="ClientTcpStreamedEndpoint"
+          contract="HeuristicLab.Hive.Contracts.Interfaces.IClientFacade" name="ClientTcpStreamedEndpoint">
+        <identity>
+          <dns value="localhost" />
+        </identity>
+      </endpoint>
+      <endpoint address="net.tcp://localhost:9001/ClientServiceStreamed/mex"
+          binding="netTcpBinding" bindingConfiguration="ClientTcpMexEndpoint"
+          contract="IClientFacade" name="ClientTcpMexEndpoint" />
+      <endpoint address="http://localhost:9000/ClientService" behaviorConfiguration="ClientServiceBehaviour" binding="wsHttpBinding"
+          bindingConfiguration="ClientHttpEndpoint" contract="HeuristicLab.Hive.Contracts.Interfaces.IClientFacade"
+          name="ClientHttpEndpoint">
+        <identity>
+          <certificate encodedValue="AwAAAAEAAAAUAAAAeBLH/0jWrlsW42fIC8VIIdAE6PUgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhDez3CoJIIitEZ5xwVqLJn6MAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMzE1NTg0OFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmOgweB6X4Ss6W2xb2hg1x61cjD2T7SO0ckkzmtqRhC2UWly9dBnonFJmg9RjN0y6l2tZhVzNhq8DgCkn3hPg5GL3XIwYX4PsXwNmeT6i+7s6rGbESuaEMvYOAQJSJ+MTgBvXCwo2g5nFHIBqP4W4aU2eybxP7H4cm1rQpoYHHjQIDAQABo0kwRzBFBgNVHQEEPjA8gBASDhO/IE7Ff7PpkCVF8oUpoRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghDez3CoJIIitEZ5xwVqLJn6MAkGBSsOAwIdBQADgYEAhxAzm3JTV7j51jti5P7izTEs7+8534kQloeAJDwlKolkd4ZMkf0BiexC2Vt1KsnxUjrK0HbbITzazkvkAmKi7dP+4G+3SrWag5lS4NcoPjTQy16T3zC9E6yafRaZp1/pxjC3Ap44qwq4Kjl2mEjeHHsdie/h4loowTqC9FlLbgo=" />
+        </identity>
+      </endpoint>
+      <endpoint address="http://localhost:9000/ClientService/mex" 
+          binding="wsHttpBinding" bindingConfiguration="ClientHttpMexEndpoint"
+          contract="HeuristicLab.Hive.Contracts.Interfaces.IClientFacade" name="ClientHttpMexEndpoint" />
+    </client>
+
+    <behaviors>
+      <endpointBehaviors>
+        <behavior name="ClientServiceBehaviour">
+          <clientCredentials>
+            <serviceCertificate>
+              <authentication certificateValidationMode="None" />
+            </serviceCertificate>
+          </clientCredentials>
+        </behavior>
+      </endpointBehaviors>
+    </behaviors>
+
+  </system.serviceModel>
+</configuration>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/HeuristicLab.Hive.JobBase-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/HeuristicLab.Hive.JobBase-3.3.csproj	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/HeuristicLab.Hive.JobBase-3.3.csproj	(revision 4340)
@@ -0,0 +1,157 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{21187322-52DD-4243-80A4-A85F0263E63B}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.JobBase</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.JobBase-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Interfaces\IJob.cs" />
+    <Compile Include="HeuristicLabHiveJobBasePlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/HeuristicLabHiveJobBasePlugin.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/HeuristicLabHiveJobBasePlugin.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/HeuristicLabHiveJobBasePlugin.cs	(revision 4340)
@@ -0,0 +1,16 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.JobBase {
+  [Plugin("HeuristicLab.Hive.JobBase", "3.3")]
+  [PluginFile("HeuristicLab.Hive.JobBase-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  public class HeuristicLabHiveJobBasePlugin: PluginBase {
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/Interfaces/IJob.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/Interfaces/IJob.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/Interfaces/IJob.cs	(revision 4340)
@@ -0,0 +1,19 @@
+﻿using System;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Hive.JobBase {
+  public interface IJob {
+    long JobId { get; set; }
+    ExecutionState ExecutionState { get; }
+    double Progress { get; }
+
+    void Run();
+    void Prepare();
+    void Start();
+    void Stop();
+
+    event EventHandler JobStopped;
+    event EventHandler JobFailed;
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/JobBase.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/JobBase.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/JobBase.cs	(revision 4340)
@@ -0,0 +1,99 @@
+﻿#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 System.Threading;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Hive.JobBase {
+  [Serializable]
+  [StorableClass]
+  abstract public class JobBase : IJob {
+
+    private Thread thread = null;
+    public event EventHandler JobStopped;
+    public event EventHandler JobFailed;
+    
+    [Storable]
+    public long JobId { get; set; }
+
+    [Storable]
+    public double Progress { get; set; }
+
+    [Storable]
+    public bool Running { get; set; }
+
+    [Storable]
+    protected bool abort = false;    
+
+    abstract public void Run();
+    private void SecureRun() {
+      try {
+        Run();
+      }
+      catch (Exception ex) {
+        if (JobFailed != null)
+          JobFailed(this, new EventArgs());
+      }
+    }
+
+    public void Start() {
+      thread = new Thread(new ThreadStart(Run));      
+      thread.Start();
+      Running = true;
+    }
+
+    public void Stop() {
+      abort = true;        
+    }
+
+    protected void OnJobStopped() {
+      Console.WriteLine("Job has finished");
+      Running = false;
+      if (JobStopped != null)
+        JobStopped(this, new EventArgs());
+    }
+
+    //public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+    //  XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+
+    //  XmlNode progr = document.CreateNode(XmlNodeType.Element, "Progress", null);
+    //  progr.InnerText = Convert.ToString(Progress);
+
+    //  node.AppendChild(progr);
+    //  return node;
+    //}
+    //public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+    //  base.Populate(node, restoredObjects);
+
+    //  XmlNode progr = node.SelectSingleNode("Progress");
+    //  Progress = Convert.ToDouble(progr.InnerText);
+    //}
+
+    public JobBase() {    
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/Properties/AssemblyInfo.frame	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/Properties/AssemblyInfo.frame	(revision 4340)
@@ -0,0 +1,60 @@
+#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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+using System.Security;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Hive.JobBase")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AllowPartiallyTrustedCallers]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("B6BA196A-F2E3-4de2-AE8A-02D4995F8B57")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/TestJob.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/TestJob.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.JobBase/3.3/TestJob.cs	(revision 4340)
@@ -0,0 +1,78 @@
+﻿#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 System.Diagnostics;
+using System.Xml;
+using System.Threading;
+using System.IO;
+using System.Security.Permissions;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Hive.JobBase {
+  [Serializable]
+  [StorableClass]
+  public class TestJob: JobBase {
+
+    [Storable]
+    private int runValue = 0;
+
+    public TestJob() {
+    }
+
+    public override void Run() {
+      int max = 100;
+      while(runValue < max && abort == false) {
+        //for (int y = 0; y < Int32.MaxValue; y++) ;
+        Thread.Sleep(200);   
+        if (abort == true) {            
+          Debug.WriteLine("Job Abort Processing");
+          break;
+        }
+        runValue++;
+        Progress = (double)runValue / max;        
+        Debug.WriteLine("Iteration " + runValue + " done");
+        Debug.WriteLine("Progress " + Progress*100 + " Percent");
+      }      
+      OnJobStopped();
+    }
+
+    //public override System.Xml.XmlNode GetXmlNode(string name, System.Xml.XmlDocument document, IDictionary<Guid, HeuristicLab.Core.IStorable> persistedObjects) {      
+    //  XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+    
+    //  XmlNode startValue = document.CreateNode(XmlNodeType.Element, "StartValue", null);
+    //  startValue.InnerText = Convert.ToString(runValue);
+      
+    //  node.AppendChild(startValue);
+    //  return node;
+    //}
+
+    //public override void Populate(XmlNode node, IDictionary<Guid, HeuristicLab.Core.IStorable> restoredObjects) {
+    //  base.Populate(node, restoredObjects);
+
+    //  XmlNode startValue = node.SelectSingleNode("StartValue");
+    //  runValue = Convert.ToInt32(startValue.InnerText);
+    //}
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddGroup.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddGroup.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddGroup.Designer.cs	(revision 4340)
@@ -0,0 +1,94 @@
+﻿namespace HeuristicLab.Hive.Server.ServerConsole {
+  partial class AddGroup {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.tbName = new System.Windows.Forms.TextBox();
+      this.lblName = new System.Windows.Forms.Label();
+      this.btnClose = new System.Windows.Forms.Button();
+      this.btnAdd = new System.Windows.Forms.Button();
+      this.SuspendLayout();
+      // 
+      // tbName
+      // 
+      this.tbName.Location = new System.Drawing.Point(45, 6);
+      this.tbName.Name = "tbName";
+      this.tbName.Size = new System.Drawing.Size(276, 20);
+      this.tbName.TabIndex = 7;
+      this.tbName.TextChanged += new System.EventHandler(this.tbName_TextChanged);
+      // 
+      // lblName
+      // 
+      this.lblName.AutoSize = true;
+      this.lblName.Location = new System.Drawing.Point(4, 9);
+      this.lblName.Name = "lblName";
+      this.lblName.Size = new System.Drawing.Size(35, 13);
+      this.lblName.TabIndex = 10;
+      this.lblName.Text = "Name";
+      // 
+      // btnClose
+      // 
+      this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+      this.btnClose.Location = new System.Drawing.Point(246, 36);
+      this.btnClose.Name = "btnClose";
+      this.btnClose.Size = new System.Drawing.Size(75, 23);
+      this.btnClose.TabIndex = 9;
+      this.btnClose.Text = "Close";
+      this.btnClose.UseVisualStyleBackColor = true;
+      this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
+      // 
+      // btnAdd
+      // 
+      this.btnAdd.Enabled = false;
+      this.btnAdd.Location = new System.Drawing.Point(7, 36);
+      this.btnAdd.Name = "btnAdd";
+      this.btnAdd.Size = new System.Drawing.Size(75, 23);
+      this.btnAdd.TabIndex = 8;
+      this.btnAdd.Text = "Add";
+      this.btnAdd.UseVisualStyleBackColor = true;
+      this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click);
+      // 
+      // AddGroup
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(337, 70);
+      this.Controls.Add(this.tbName);
+      this.Controls.Add(this.lblName);
+      this.Controls.Add(this.btnClose);
+      this.Controls.Add(this.btnAdd);
+      this.Name = "AddGroup";
+      this.Text = "AddGroup";
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox tbName;
+    private System.Windows.Forms.Label lblName;
+    private System.Windows.Forms.Button btnClose;
+    private System.Windows.Forms.Button btnAdd;
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddGroup.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddGroup.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddGroup.cs	(revision 4340)
@@ -0,0 +1,41 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+
+  public delegate void AddGroupDelegate(string name);
+
+  public partial class AddGroup : Form {
+
+    public event AddGroupDelegate addGroupEvent;
+
+    public AddGroup() {
+      InitializeComponent();
+    }
+
+    private void btnAdd_Click(object sender, EventArgs e) {
+      if (addGroupEvent != null) {
+        addGroupEvent(tbName.Text);
+      }
+      this.Close();
+    }
+
+    private void btnClose_Click(object sender, EventArgs e) {
+      this.Close();
+    }
+
+    private void tbName_TextChanged(object sender, EventArgs e) {
+      if (string.IsNullOrEmpty(tbName.Text)) {
+        btnAdd.Enabled = false;
+      } else {
+        btnAdd.Enabled = true;
+      }
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddGroup.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddGroup.resx	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddGroup.resx	(revision 4340)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddJobForm.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddJobForm.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddJobForm.Designer.cs	(revision 4340)
@@ -0,0 +1,266 @@
+﻿#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
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+  partial class AddJobForm {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.btnAdd = new System.Windows.Forms.Button();
+      this.btnClose = new System.Windows.Forms.Button();
+      this.lblNumJobs = new System.Windows.Forms.Label();
+      this.tbNumJobs = new System.Windows.Forms.TextBox();
+      this.lblError = new System.Windows.Forms.Label();
+      this.lblProject = new System.Windows.Forms.Label();
+      this.cbProject = new System.Windows.Forms.ComboBox();
+      this.cbAllGroups = new System.Windows.Forms.CheckBox();
+      this.gbGroups = new System.Windows.Forms.GroupBox();
+      this.btnRemoveGroup = new System.Windows.Forms.Button();
+      this.btnAddGroup = new System.Windows.Forms.Button();
+      this.lbGroupsIn = new System.Windows.Forms.ListBox();
+      this.lbGroupsOut = new System.Windows.Forms.ListBox();
+      this.ofdLoadJob = new System.Windows.Forms.OpenFileDialog();
+      this.textBox1 = new System.Windows.Forms.TextBox();
+      this.btnLoad = new System.Windows.Forms.Button();
+      this.gbGroups.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // btnAdd
+      // 
+      this.btnAdd.Location = new System.Drawing.Point(6, 249);
+      this.btnAdd.Name = "btnAdd";
+      this.btnAdd.Size = new System.Drawing.Size(75, 23);
+      this.btnAdd.TabIndex = 3;
+      this.btnAdd.Text = "Add";
+      this.btnAdd.UseVisualStyleBackColor = true;
+      this.btnAdd.Click += new System.EventHandler(this.BtnAdd_Click);
+      // 
+      // btnClose
+      // 
+      this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+      this.btnClose.Location = new System.Drawing.Point(291, 249);
+      this.btnClose.Name = "btnClose";
+      this.btnClose.Size = new System.Drawing.Size(75, 23);
+      this.btnClose.TabIndex = 4;
+      this.btnClose.Text = "Close";
+      this.btnClose.UseVisualStyleBackColor = true;
+      this.btnClose.Click += new System.EventHandler(this.BtnClose_Click);
+      // 
+      // lblNumJobs
+      // 
+      this.lblNumJobs.AutoSize = true;
+      this.lblNumJobs.Location = new System.Drawing.Point(12, 9);
+      this.lblNumJobs.Name = "lblNumJobs";
+      this.lblNumJobs.Size = new System.Drawing.Size(78, 13);
+      this.lblNumJobs.TabIndex = 6;
+      this.lblNumJobs.Text = "Number of jobs";
+      // 
+      // tbNumJobs
+      // 
+      this.tbNumJobs.Location = new System.Drawing.Point(117, 6);
+      this.tbNumJobs.Name = "tbNumJobs";
+      this.tbNumJobs.Size = new System.Drawing.Size(243, 20);
+      this.tbNumJobs.TabIndex = 1;
+      this.tbNumJobs.Text = "1";
+      // 
+      // lblError
+      // 
+      this.lblError.AutoSize = true;
+      this.lblError.Location = new System.Drawing.Point(87, 254);
+      this.lblError.Name = "lblError";
+      this.lblError.Size = new System.Drawing.Size(0, 13);
+      this.lblError.TabIndex = 8;
+      // 
+      // lblProject
+      // 
+      this.lblProject.AutoSize = true;
+      this.lblProject.Location = new System.Drawing.Point(12, 39);
+      this.lblProject.Name = "lblProject";
+      this.lblProject.Size = new System.Drawing.Size(59, 13);
+      this.lblProject.TabIndex = 9;
+      this.lblProject.Text = "Job project";
+      // 
+      // cbProject
+      // 
+      this.cbProject.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.cbProject.FormattingEnabled = true;
+      this.cbProject.Location = new System.Drawing.Point(117, 31);
+      this.cbProject.Name = "cbProject";
+      this.cbProject.Size = new System.Drawing.Size(245, 21);
+      this.cbProject.TabIndex = 10;
+      // 
+      // cbAllGroups
+      // 
+      this.cbAllGroups.AutoSize = true;
+      this.cbAllGroups.Checked = true;
+      this.cbAllGroups.CheckState = System.Windows.Forms.CheckState.Checked;
+      this.cbAllGroups.Location = new System.Drawing.Point(15, 90);
+      this.cbAllGroups.Name = "cbAllGroups";
+      this.cbAllGroups.Size = new System.Drawing.Size(91, 17);
+      this.cbAllGroups.TabIndex = 15;
+      this.cbAllGroups.Text = "use all groups";
+      this.cbAllGroups.UseVisualStyleBackColor = true;
+      this.cbAllGroups.CheckedChanged += new System.EventHandler(this.cbAllGroups_CheckedChanged);
+      // 
+      // gbGroups
+      // 
+      this.gbGroups.Controls.Add(this.btnRemoveGroup);
+      this.gbGroups.Controls.Add(this.btnAddGroup);
+      this.gbGroups.Controls.Add(this.lbGroupsIn);
+      this.gbGroups.Controls.Add(this.lbGroupsOut);
+      this.gbGroups.Location = new System.Drawing.Point(10, 115);
+      this.gbGroups.Name = "gbGroups";
+      this.gbGroups.Size = new System.Drawing.Size(357, 128);
+      this.gbGroups.TabIndex = 16;
+      this.gbGroups.TabStop = false;
+      this.gbGroups.Text = "choose groups";
+      // 
+      // btnRemoveGroup
+      // 
+      this.btnRemoveGroup.Enabled = false;
+      this.btnRemoveGroup.Location = new System.Drawing.Point(143, 56);
+      this.btnRemoveGroup.Name = "btnRemoveGroup";
+      this.btnRemoveGroup.Size = new System.Drawing.Size(75, 23);
+      this.btnRemoveGroup.TabIndex = 18;
+      this.btnRemoveGroup.Text = "<< Remove";
+      this.btnRemoveGroup.UseVisualStyleBackColor = true;
+      this.btnRemoveGroup.Click += new System.EventHandler(this.btnRemoveGroup_Click);
+      // 
+      // btnAddGroup
+      // 
+      this.btnAddGroup.Enabled = false;
+      this.btnAddGroup.Location = new System.Drawing.Point(143, 26);
+      this.btnAddGroup.Name = "btnAddGroup";
+      this.btnAddGroup.Size = new System.Drawing.Size(75, 23);
+      this.btnAddGroup.TabIndex = 17;
+      this.btnAddGroup.Text = "Add >>";
+      this.btnAddGroup.UseVisualStyleBackColor = true;
+      this.btnAddGroup.Click += new System.EventHandler(this.btnAddGroup_Click);
+      // 
+      // lbGroupsIn
+      // 
+      this.lbGroupsIn.Enabled = false;
+      this.lbGroupsIn.FormattingEnabled = true;
+      this.lbGroupsIn.Location = new System.Drawing.Point(224, 15);
+      this.lbGroupsIn.Name = "lbGroupsIn";
+      this.lbGroupsIn.Size = new System.Drawing.Size(128, 108);
+      this.lbGroupsIn.TabIndex = 16;
+      this.lbGroupsIn.DoubleClick += new System.EventHandler(this.lbGroupsIn_SelectedIndexChanged);
+      // 
+      // lbGroupsOut
+      // 
+      this.lbGroupsOut.Enabled = false;
+      this.lbGroupsOut.FormattingEnabled = true;
+      this.lbGroupsOut.Location = new System.Drawing.Point(6, 15);
+      this.lbGroupsOut.Name = "lbGroupsOut";
+      this.lbGroupsOut.Size = new System.Drawing.Size(130, 108);
+      this.lbGroupsOut.TabIndex = 15;
+      this.lbGroupsOut.DoubleClick += new System.EventHandler(this.lbGroupsOut_SelectedIndexChanged);
+      // 
+      // ofdLoadJob
+      // 
+      this.ofdLoadJob.FileName = "openFileDialog1";
+      // 
+      // textBox1
+      // 
+      this.textBox1.BackColor = System.Drawing.SystemColors.Window;
+      this.textBox1.Enabled = false;
+      this.textBox1.Location = new System.Drawing.Point(13, 64);
+      this.textBox1.Name = "textBox1";
+      this.textBox1.Size = new System.Drawing.Size(266, 20);
+      this.textBox1.TabIndex = 17;
+      // 
+      // btnLoad
+      // 
+      this.btnLoad.Location = new System.Drawing.Point(285, 63);
+      this.btnLoad.Name = "btnLoad";
+      this.btnLoad.Size = new System.Drawing.Size(75, 23);
+      this.btnLoad.TabIndex = 18;
+      this.btnLoad.Text = "Load Job";
+      this.btnLoad.UseVisualStyleBackColor = true;
+      this.btnLoad.Click += new System.EventHandler(this.btnLoad_Click);
+      // 
+      // AddJobForm
+      // 
+      this.AcceptButton = this.btnAdd;
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.CancelButton = this.btnClose;
+      this.ClientSize = new System.Drawing.Size(372, 280);
+      this.Controls.Add(this.btnLoad);
+      this.Controls.Add(this.textBox1);
+      this.Controls.Add(this.gbGroups);
+      this.Controls.Add(this.cbAllGroups);
+      this.Controls.Add(this.cbProject);
+      this.Controls.Add(this.lblProject);
+      this.Controls.Add(this.lblError);
+      this.Controls.Add(this.tbNumJobs);
+      this.Controls.Add(this.lblNumJobs);
+      this.Controls.Add(this.btnClose);
+      this.Controls.Add(this.btnAdd);
+      this.Name = "AddJobForm";
+      this.Text = "Add Job";
+      this.gbGroups.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button btnAdd;
+    private System.Windows.Forms.Button btnClose;
+    private System.Windows.Forms.Label lblNumJobs;
+    private System.Windows.Forms.TextBox tbNumJobs;
+    private System.Windows.Forms.Label lblError;
+    private System.Windows.Forms.Label lblProject;
+    private System.Windows.Forms.ComboBox cbProject;
+    private System.Windows.Forms.CheckBox cbAllGroups;
+    private System.Windows.Forms.GroupBox gbGroups;
+    private System.Windows.Forms.Button btnRemoveGroup;
+    private System.Windows.Forms.Button btnAddGroup;
+    private System.Windows.Forms.ListBox lbGroupsIn;
+    private System.Windows.Forms.ListBox lbGroupsOut;
+    private System.Windows.Forms.OpenFileDialog ofdLoadJob;
+    private System.Windows.Forms.TextBox textBox1;
+    private System.Windows.Forms.Button btnLoad;
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddJobForm.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddJobForm.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddJobForm.cs	(revision 4340)
@@ -0,0 +1,197 @@
+#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.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.JobBase;
+using HeuristicLab.Core;
+using System.ServiceModel;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+
+  public delegate void addDelegate();
+
+  public partial class AddJobForm : Form {
+
+    public event addDelegate addJobEvent;
+
+    ResponseList<ProjectDto> projects = null;
+    IJobManager jobManager;
+    ISlaveManager slaveManager;
+    ResponseList<SlaveGroupDto> clientGroups;
+
+    Dictionary<Guid, string> clients = null;
+
+    public AddJobForm() {
+      InitializeComponent();
+
+      clients = new Dictionary<Guid, string>();
+      AddJob();
+
+    }
+
+    private void AddJob() {
+      try {
+        jobManager = ServiceLocator.GetJobManager();
+        projects = jobManager.GetAllProjects();
+        slaveManager = ServiceLocator.GetSlaveManager();
+        clientGroups = slaveManager.GetAllSlaveGroups();
+        cbProject.Items.Add("none");
+        cbProject.SelectedIndex = 0;
+        foreach (ProjectDto project in projects.List) {
+          cbProject.Items.Add(project.Name);
+        }
+
+        AddSlaveGroups();
+
+        foreach (KeyValuePair<Guid, string> kvp in clients) {
+          lbGroupsOut.Items.Add(kvp.Value + " (" + kvp.Key + ")");
+        }
+      }
+      catch (FaultException fe) {
+        MessageBox.Show(fe.Message);
+      }
+
+    }
+
+    private void AddSlaveGroups() {
+      foreach (SlaveGroupDto cg in clientGroups.List) {
+        if (cg.Id != Guid.Empty)
+          clients.Add(cg.Id, cg.Name);
+        AddSlaveOrGroup(cg);
+      }
+    }
+
+    private void AddSlaveOrGroup(SlaveGroupDto clientGroup) {
+      foreach (ResourceDto resource in clientGroup.Resources) {
+        if (resource is SlaveGroupDto) {
+          if (resource.Id != Guid.Empty)
+            clients.Add(resource.Id, resource.Name);
+          AddSlaveOrGroup(resource as SlaveGroupDto);
+        }
+      }
+
+    }
+
+    private void BtnAdd_Click(object sender, EventArgs e) {
+      try {
+        lblError.Text = "";
+        int numJobs = Convert.ToInt32(tbNumJobs.Text);
+        if (numJobs > 0) {
+          for (int i = 0; i < numJobs; i++) {
+            JobDto job = new JobDto { State = JobState.Offline, CoresNeeded = 1 };
+
+            // if project selected (0 -> none)
+            if (cbProject.SelectedIndex != 0) {
+              job.Project = projects.List[cbProject.SelectedIndex - 1];
+            }
+
+            if (!cbAllGroups.Checked) {
+              List<Guid> groupsToCalculate = new List<Guid>();
+              foreach (string item in lbGroupsIn.Items) {
+                int start = item.IndexOf("(");
+                int end = item.IndexOf(")");
+                string substring = item.Substring(start + 1, end - start - 1);
+                Guid guid = new Guid(substring);
+                groupsToCalculate.Add(guid);
+              }
+              job.AssignedResourceIds = groupsToCalculate;
+            }
+
+            SerializedJob computableJob = new SerializedJob();
+            computableJob.JobInfo = job;
+
+            // [chn] TODO: persist to zip
+            // computableJob.SerializedJobData = PersistenceManager.SaveToGZip(new TestJob());
+            Response resp = jobManager.AddNewJob(computableJob);
+          }
+          if (addJobEvent != null) {
+            addJobEvent();
+          }
+          this.Close();
+        } else {
+          lblError.Text = "Wrong number of Jobs";
+        }
+
+      }
+      catch {
+        lblError.Text = "There should be a number";
+      }
+    }
+
+    private void BtnClose_Click(object sender, EventArgs e) {
+      this.Close();
+    }
+
+    private void cbAllGroups_CheckedChanged(object sender, EventArgs e) {
+      foreach (Control control in gbGroups.Controls) {
+        control.Enabled = !cbAllGroups.Checked;
+      }
+    }
+
+    private void btnAddGroup_Click(object sender, EventArgs e) {
+      AddGroup();
+    }
+
+    private void btnRemoveGroup_Click(object sender, EventArgs e) {
+      RemoveGroup();
+    }
+
+    private void lbGroupsOut_SelectedIndexChanged(object sender, EventArgs e) {
+      AddGroup();
+    }
+
+    private void lbGroupsIn_SelectedIndexChanged(object sender, EventArgs e) {
+      RemoveGroup();
+    }
+
+    private void AddGroup() {
+      if (lbGroupsOut.SelectedItem != null) {
+        lbGroupsIn.Items.Add(lbGroupsOut.SelectedItem);
+        lbGroupsOut.Items.RemoveAt(lbGroupsOut.SelectedIndex);
+      }
+
+    }
+
+    private void RemoveGroup() {
+      if (lbGroupsIn.SelectedItem != null) {
+        lbGroupsOut.Items.Add(lbGroupsIn.SelectedItem);
+        lbGroupsIn.Items.RemoveAt(lbGroupsIn.SelectedIndex);
+      }
+    }
+
+    private void btnLoad_Click(object sender, EventArgs e) {
+
+    }
+
+
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddJobForm.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddJobForm.resx	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddJobForm.resx	(revision 4340)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="ofdLoadJob.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddProject.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddProject.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddProject.Designer.cs	(revision 4340)
@@ -0,0 +1,96 @@
+﻿namespace HeuristicLab.Hive.Server.ServerConsole {
+  partial class AddProject {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.tbName = new System.Windows.Forms.TextBox();
+      this.lblName = new System.Windows.Forms.Label();
+      this.btnClose = new System.Windows.Forms.Button();
+      this.btnAdd = new System.Windows.Forms.Button();
+      this.SuspendLayout();
+      // 
+      // tbName
+      // 
+      this.tbName.Location = new System.Drawing.Point(45, 6);
+      this.tbName.Name = "tbName";
+      this.tbName.Size = new System.Drawing.Size(276, 20);
+      this.tbName.TabIndex = 7;
+      this.tbName.TextChanged += new System.EventHandler(this.tbName_TextChanged);
+      // 
+      // lblName
+      // 
+      this.lblName.AutoSize = true;
+      this.lblName.Location = new System.Drawing.Point(4, 9);
+      this.lblName.Name = "lblName";
+      this.lblName.Size = new System.Drawing.Size(35, 13);
+      this.lblName.TabIndex = 10;
+      this.lblName.Text = "Name";
+      // 
+      // btnClose
+      // 
+      this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+      this.btnClose.Location = new System.Drawing.Point(246, 36);
+      this.btnClose.Name = "btnClose";
+      this.btnClose.Size = new System.Drawing.Size(75, 23);
+      this.btnClose.TabIndex = 9;
+      this.btnClose.Text = "Close";
+      this.btnClose.UseVisualStyleBackColor = true;
+      this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
+      // 
+      // btnAdd
+      // 
+      this.btnAdd.Enabled = false;
+      this.btnAdd.Location = new System.Drawing.Point(7, 36);
+      this.btnAdd.Name = "btnAdd";
+      this.btnAdd.Size = new System.Drawing.Size(75, 23);
+      this.btnAdd.TabIndex = 8;
+      this.btnAdd.Text = "Add";
+      this.btnAdd.UseVisualStyleBackColor = true;
+      this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click);
+      // 
+      // AddProject
+      // 
+      this.AcceptButton = this.btnAdd;
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.CancelButton = this.btnClose;
+      this.ClientSize = new System.Drawing.Size(337, 70);
+      this.Controls.Add(this.tbName);
+      this.Controls.Add(this.lblName);
+      this.Controls.Add(this.btnClose);
+      this.Controls.Add(this.btnAdd);
+      this.Name = "AddProject";
+      this.Text = "AddProject";
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox tbName;
+    private System.Windows.Forms.Label lblName;
+    private System.Windows.Forms.Button btnClose;
+    private System.Windows.Forms.Button btnAdd;
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddProject.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddProject.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddProject.cs	(revision 4340)
@@ -0,0 +1,41 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+
+  public delegate void AddProjectDelegate(string name);
+
+  public partial class AddProject : Form {
+
+    public event AddProjectDelegate AddProjectEvent;
+
+    public AddProject() {
+      InitializeComponent();
+    }
+
+    private void btnAdd_Click(object sender, EventArgs e) {
+      if (AddProjectEvent != null) {
+        AddProjectEvent(tbName.Text);
+      }
+      this.Close();
+    }
+
+    private void btnClose_Click(object sender, EventArgs e) {
+      this.Close();
+    }
+
+    private void tbName_TextChanged(object sender, EventArgs e) {
+      if (string.IsNullOrEmpty(tbName.Text)) {
+        btnAdd.Enabled = false;
+      } else {
+        btnAdd.Enabled = true;
+      }
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddProject.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddProject.resx	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddProject.resx	(revision 4340)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddUserForm.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddUserForm.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddUserForm.Designer.cs	(revision 4340)
@@ -0,0 +1,159 @@
+﻿#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
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+  partial class AddUserForm {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.lblOne = new System.Windows.Forms.Label();
+      this.lblGroup = new System.Windows.Forms.Label();
+      this.tbOne = new System.Windows.Forms.TextBox();
+      this.cbGroups = new System.Windows.Forms.ComboBox();
+      this.btnAdd = new System.Windows.Forms.Button();
+      this.btnClose = new System.Windows.Forms.Button();
+      this.tbPwd = new System.Windows.Forms.TextBox();
+      this.lblPassword = new System.Windows.Forms.Label();
+      this.SuspendLayout();
+      // 
+      // lblOne
+      // 
+      this.lblOne.AutoSize = true;
+      this.lblOne.Location = new System.Drawing.Point(12, 14);
+      this.lblOne.Name = "lblOne";
+      this.lblOne.Size = new System.Drawing.Size(35, 13);
+      this.lblOne.TabIndex = 0;
+      this.lblOne.Text = "label1";
+      // 
+      // lblGroup
+      // 
+      this.lblGroup.AutoSize = true;
+      this.lblGroup.Location = new System.Drawing.Point(12, 71);
+      this.lblGroup.Name = "lblGroup";
+      this.lblGroup.Size = new System.Drawing.Size(35, 13);
+      this.lblGroup.TabIndex = 1;
+      this.lblGroup.Text = "label2";
+      // 
+      // tbOne
+      // 
+      this.tbOne.Location = new System.Drawing.Point(120, 7);
+      this.tbOne.Name = "tbOne";
+      this.tbOne.Size = new System.Drawing.Size(212, 20);
+      this.tbOne.TabIndex = 1;
+      // 
+      // cbGroups
+      // 
+      this.cbGroups.FormattingEnabled = true;
+      this.cbGroups.Location = new System.Drawing.Point(120, 68);
+      this.cbGroups.Name = "cbGroups";
+      this.cbGroups.Size = new System.Drawing.Size(212, 21);
+      this.cbGroups.TabIndex = 3;
+      // 
+      // btnAdd
+      // 
+      this.btnAdd.Location = new System.Drawing.Point(12, 95);
+      this.btnAdd.Name = "btnAdd";
+      this.btnAdd.Size = new System.Drawing.Size(75, 23);
+      this.btnAdd.TabIndex = 4;
+      this.btnAdd.Text = "Add";
+      this.btnAdd.UseVisualStyleBackColor = true;
+      this.btnAdd.Click += new System.EventHandler(this.BtnAdd_Click);
+      // 
+      // btnClose
+      // 
+      this.btnClose.Location = new System.Drawing.Point(257, 95);
+      this.btnClose.Name = "btnClose";
+      this.btnClose.Size = new System.Drawing.Size(75, 23);
+      this.btnClose.TabIndex = 5;
+      this.btnClose.Text = "Close";
+      this.btnClose.UseVisualStyleBackColor = true;
+      this.btnClose.Click += new System.EventHandler(this.BtnClose_Click);
+      // 
+      // tbPwd
+      // 
+      this.tbPwd.Location = new System.Drawing.Point(120, 37);
+      this.tbPwd.Name = "tbPwd";
+      this.tbPwd.Size = new System.Drawing.Size(212, 20);
+      this.tbPwd.TabIndex = 2;
+      this.tbPwd.UseSystemPasswordChar = true;
+      // 
+      // lblPassword
+      // 
+      this.lblPassword.AutoSize = true;
+      this.lblPassword.Location = new System.Drawing.Point(12, 44);
+      this.lblPassword.Name = "lblPassword";
+      this.lblPassword.Size = new System.Drawing.Size(53, 13);
+      this.lblPassword.TabIndex = 0;
+      this.lblPassword.Text = "Password";
+      // 
+      // AddUserForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.BackColor = System.Drawing.SystemColors.Control;
+      this.ClientSize = new System.Drawing.Size(344, 130);
+      this.Controls.Add(this.tbPwd);
+      this.Controls.Add(this.lblPassword);
+      this.Controls.Add(this.btnClose);
+      this.Controls.Add(this.btnAdd);
+      this.Controls.Add(this.cbGroups);
+      this.Controls.Add(this.tbOne);
+      this.Controls.Add(this.lblGroup);
+      this.Controls.Add(this.lblOne);
+      this.Name = "AddUserForm";
+      this.Text = "AddUserForm";
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label lblOne;
+    private System.Windows.Forms.Label lblGroup;
+    private System.Windows.Forms.TextBox tbOne;
+    private System.Windows.Forms.ComboBox cbGroups;
+    private System.Windows.Forms.Button btnAdd;
+    private System.Windows.Forms.Button btnClose;
+    private System.Windows.Forms.TextBox tbPwd;
+    private System.Windows.Forms.Label lblPassword;
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddUserForm.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddUserForm.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddUserForm.cs	(revision 4340)
@@ -0,0 +1,111 @@
+﻿#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.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+  public partial class AddUserForm : Form {
+
+    public event addDelegate addUserEvent;
+    ResponseList<UserGroup> userGroups = null;
+    IUserRoleManager userRoleManager;
+    bool group;
+
+    public AddUserForm(string addForm, bool group) {
+      this.group = group;
+      InitializeComponent();
+      this.Name = "Add " + addForm;
+
+      lblOne.Text = addForm;
+      if (group) {
+        lblOne.Text += " Group";
+      }
+
+      lblGroup.Text = addForm + " Groups";
+
+      if (addForm == "User") {
+        AddUser();
+      }
+    }
+
+    private void AddUser() {
+     userRoleManager = ServiceLocator.GetUserRoleManager();
+      userGroups = userRoleManager.GetAllUserGroups();
+      cbGroups.Items.Add("none");
+      cbGroups.SelectedIndex = 0;
+      foreach (UserGroup ug in userGroups.List) {
+        cbGroups.Items.Add(ug.Name);
+      }
+    }
+
+    private void BtnAdd_Click(object sender, EventArgs e) {
+      if (!group) {
+        if (tbOne.Text != "") {
+          User u = new User() { Name = tbOne.Text, Password = tbPwd.Text };
+          ResponseObject<User> respUser = userRoleManager.AddNewUser(u);
+          if (respUser.Success == true) {
+            if (cbGroups.SelectedIndex != 0) {
+              u = respUser.Obj;
+              foreach (UserGroup ug in userGroups.List) {
+                if (cbGroups.SelectedItem.ToString().Equals(ug.Name)) {
+                  Response resp = userRoleManager.AddUserToGroup
+                    (ug.Id, u.Id);
+                }
+              }
+            }
+          }
+        }
+      } else {
+        UserGroup ug = new UserGroup { Name = tbOne.Text };
+        ResponseObject<UserGroup> respug = userRoleManager.AddNewUserGroup(ug);
+        if (respug.Success == true) {
+          if (!cbGroups.SelectedText.Equals("none")) {
+            ug = respug.Obj;
+            foreach (UserGroup ugs in userGroups.List) {
+              if (cbGroups.SelectedText.Equals(ugs.Name)) {
+                Response resp = userRoleManager.AddUserGroupToGroup
+                  (ug.Id, ugs.Id);
+              }
+            }
+          }
+        }
+      }
+      if (addUserEvent != null) {
+        addUserEvent();
+      }
+      this.Close();
+    }
+
+    private void BtnClose_Click(object sender, EventArgs e) {
+      this.Close();
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddUserForm.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddUserForm.resx	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddUserForm.resx	(revision 4340)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/CgCalendar.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/CgCalendar.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/CgCalendar.Designer.cs	(revision 4340)
@@ -0,0 +1,260 @@
+﻿namespace HeuristicLab.Hive.Server.ServerConsole {
+  partial class CgCalendar {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      Calendar.DrawTool drawTool1 = new Calendar.DrawTool();
+      this.dvOnline = new Calendar.DayView();
+      this.btnSaveCal = new System.Windows.Forms.Button();
+      this.groupBox1 = new System.Windows.Forms.GroupBox();
+      this.txttimeTo = new System.Windows.Forms.DateTimePicker();
+      this.txttimeFrom = new System.Windows.Forms.DateTimePicker();
+      this.dtpTo = new System.Windows.Forms.DateTimePicker();
+      this.dtpFrom = new System.Windows.Forms.DateTimePicker();
+      this.chbade = new System.Windows.Forms.CheckBox();
+      this.btnRecurrence = new System.Windows.Forms.Button();
+      this.btbDelete = new System.Windows.Forms.Button();
+      this.label2 = new System.Windows.Forms.Label();
+      this.label1 = new System.Windows.Forms.Label();
+      this.btCreate = new System.Windows.Forms.Button();
+      this.mcOnline = new System.Windows.Forms.MonthCalendar();
+      this.btnClearCal = new System.Windows.Forms.Button();
+      this.cbx_forcePush = new System.Windows.Forms.CheckBox();
+      this.groupBox1.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // dvOnline
+      // 
+      drawTool1.DayView = this.dvOnline;
+      this.dvOnline.ActiveTool = drawTool1;
+      this.dvOnline.AmPmDisplay = false;
+      this.dvOnline.AppointmentDuration = Calendar.AppointmentSlotDuration.SixtyMinutes;
+      this.dvOnline.AppointmentHeightMode = Calendar.AppHeightDrawMode.TrueHeightAll;
+      this.dvOnline.DayHeadersHeight = 15;
+      this.dvOnline.DaysToShow = 7;
+      this.dvOnline.DrawAllAppBorder = false;
+      this.dvOnline.EnableDurationDisplay = false;
+      this.dvOnline.EnableRoundedCorners = false;
+      this.dvOnline.EnableShadows = false;
+      this.dvOnline.EnableTimeIndicator = false;
+      this.dvOnline.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F);
+      this.dvOnline.Location = new System.Drawing.Point(18, 185);
+      this.dvOnline.MinHalfHourApp = false;
+      this.dvOnline.Name = "dvOnline";
+      this.dvOnline.SelectionEnd = new System.DateTime(((long)(0)));
+      this.dvOnline.SelectionStart = new System.DateTime(((long)(0)));
+      this.dvOnline.Size = new System.Drawing.Size(823, 354);
+      this.dvOnline.StartDate = new System.DateTime(((long)(0)));
+      this.dvOnline.TabIndex = 42;
+      this.dvOnline.OnSelectionChanged += new System.EventHandler<System.EventArgs>(this.dvOnline_OnSelectionChanged);
+      // 
+      // btnSaveCal
+      // 
+      this.btnSaveCal.Location = new System.Drawing.Point(642, 49);
+      this.btnSaveCal.Name = "btnSaveCal";
+      this.btnSaveCal.Size = new System.Drawing.Size(199, 23);
+      this.btnSaveCal.TabIndex = 45;
+      this.btnSaveCal.Text = "Save Calendar";
+      this.btnSaveCal.UseVisualStyleBackColor = true;
+      this.btnSaveCal.Click += new System.EventHandler(this.btnSaveCal_Click);
+      // 
+      // groupBox1
+      // 
+      this.groupBox1.Controls.Add(this.txttimeTo);
+      this.groupBox1.Controls.Add(this.txttimeFrom);
+      this.groupBox1.Controls.Add(this.dtpTo);
+      this.groupBox1.Controls.Add(this.dtpFrom);
+      this.groupBox1.Controls.Add(this.chbade);
+      this.groupBox1.Controls.Add(this.btnRecurrence);
+      this.groupBox1.Controls.Add(this.btbDelete);
+      this.groupBox1.Controls.Add(this.label2);
+      this.groupBox1.Controls.Add(this.label1);
+      this.groupBox1.Controls.Add(this.btCreate);
+      this.groupBox1.Location = new System.Drawing.Point(382, 13);
+      this.groupBox1.Name = "groupBox1";
+      this.groupBox1.Size = new System.Drawing.Size(254, 161);
+      this.groupBox1.TabIndex = 44;
+      this.groupBox1.TabStop = false;
+      // 
+      // txttimeTo
+      // 
+      this.txttimeTo.CustomFormat = "HH:00";
+      this.txttimeTo.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+      this.txttimeTo.Location = new System.Drawing.Point(164, 45);
+      this.txttimeTo.Name = "txttimeTo";
+      this.txttimeTo.ShowUpDown = true;
+      this.txttimeTo.Size = new System.Drawing.Size(73, 20);
+      this.txttimeTo.TabIndex = 40;
+      // 
+      // txttimeFrom
+      // 
+      this.txttimeFrom.CustomFormat = "HH:00";
+      this.txttimeFrom.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+      this.txttimeFrom.Location = new System.Drawing.Point(164, 12);
+      this.txttimeFrom.Name = "txttimeFrom";
+      this.txttimeFrom.ShowUpDown = true;
+      this.txttimeFrom.Size = new System.Drawing.Size(73, 20);
+      this.txttimeFrom.TabIndex = 39;
+      // 
+      // dtpTo
+      // 
+      this.dtpTo.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+      this.dtpTo.Location = new System.Drawing.Point(72, 45);
+      this.dtpTo.Name = "dtpTo";
+      this.dtpTo.Size = new System.Drawing.Size(89, 20);
+      this.dtpTo.TabIndex = 33;
+      // 
+      // dtpFrom
+      // 
+      this.dtpFrom.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+      this.dtpFrom.Location = new System.Drawing.Point(72, 12);
+      this.dtpFrom.Name = "dtpFrom";
+      this.dtpFrom.Size = new System.Drawing.Size(89, 20);
+      this.dtpFrom.TabIndex = 32;
+      // 
+      // chbade
+      // 
+      this.chbade.AutoSize = true;
+      this.chbade.Location = new System.Drawing.Point(135, 70);
+      this.chbade.Name = "chbade";
+      this.chbade.Size = new System.Drawing.Size(90, 17);
+      this.chbade.TabIndex = 31;
+      this.chbade.Text = "All Day Event";
+      this.chbade.UseVisualStyleBackColor = true;
+      this.chbade.CheckedChanged += new System.EventHandler(this.chbade_CheckedChanged);
+      // 
+      // btnRecurrence
+      // 
+      this.btnRecurrence.Location = new System.Drawing.Point(135, 129);
+      this.btnRecurrence.Name = "btnRecurrence";
+      this.btnRecurrence.Size = new System.Drawing.Size(113, 26);
+      this.btnRecurrence.TabIndex = 30;
+      this.btnRecurrence.Text = "Recurrence";
+      this.btnRecurrence.UseVisualStyleBackColor = true;
+      this.btnRecurrence.Click += new System.EventHandler(this.btnRecurrence_Click);
+      // 
+      // btbDelete
+      // 
+      this.btbDelete.Location = new System.Drawing.Point(8, 129);
+      this.btbDelete.Name = "btbDelete";
+      this.btbDelete.Size = new System.Drawing.Size(114, 26);
+      this.btbDelete.TabIndex = 25;
+      this.btbDelete.Text = "Delete";
+      this.btbDelete.UseVisualStyleBackColor = true;
+      this.btbDelete.Click += new System.EventHandler(this.btbDelete_Click);
+      // 
+      // label2
+      // 
+      this.label2.AutoSize = true;
+      this.label2.Location = new System.Drawing.Point(16, 46);
+      this.label2.Name = "label2";
+      this.label2.Size = new System.Drawing.Size(55, 13);
+      this.label2.TabIndex = 23;
+      this.label2.Text = "End Time:";
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(16, 15);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(58, 13);
+      this.label1.TabIndex = 21;
+      this.label1.Text = "Start Time:";
+      // 
+      // btCreate
+      // 
+      this.btCreate.Location = new System.Drawing.Point(6, 93);
+      this.btCreate.Name = "btCreate";
+      this.btCreate.Size = new System.Drawing.Size(242, 26);
+      this.btCreate.TabIndex = 20;
+      this.btCreate.Text = "Save Appointment";
+      this.btCreate.UseVisualStyleBackColor = true;
+      this.btCreate.Click += new System.EventHandler(this.btCreate_Click);
+      // 
+      // mcOnline
+      // 
+      this.mcOnline.CalendarDimensions = new System.Drawing.Size(2, 1);
+      this.mcOnline.Location = new System.Drawing.Point(18, 18);
+      this.mcOnline.Name = "mcOnline";
+      this.mcOnline.TabIndex = 43;
+      this.mcOnline.DateChanged += new System.Windows.Forms.DateRangeEventHandler(this.mcOnline_DateChanged);
+      // 
+      // btnClearCal
+      // 
+      this.btnClearCal.Location = new System.Drawing.Point(642, 18);
+      this.btnClearCal.Name = "btnClearCal";
+      this.btnClearCal.Size = new System.Drawing.Size(199, 23);
+      this.btnClearCal.TabIndex = 46;
+      this.btnClearCal.Text = "Clear Calendar";
+      this.btnClearCal.UseVisualStyleBackColor = true;
+      this.btnClearCal.Click += new System.EventHandler(this.btnClearCal_Click);
+      // 
+      // cbx_forcePush
+      // 
+      this.cbx_forcePush.AutoSize = true;
+      this.cbx_forcePush.Location = new System.Drawing.Point(642, 78);
+      this.cbx_forcePush.Name = "cbx_forcePush";
+      this.cbx_forcePush.Size = new System.Drawing.Size(80, 17);
+      this.cbx_forcePush.TabIndex = 47;
+      this.cbx_forcePush.Text = "Force Push";
+      this.cbx_forcePush.UseVisualStyleBackColor = true;
+      // 
+      // CgCalendar
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(859, 558);
+      this.Controls.Add(this.cbx_forcePush);
+      this.Controls.Add(this.btnClearCal);
+      this.Controls.Add(this.btnSaveCal);
+      this.Controls.Add(this.groupBox1);
+      this.Controls.Add(this.mcOnline);
+      this.Controls.Add(this.dvOnline);
+      this.Name = "CgCalendar";
+      this.groupBox1.ResumeLayout(false);
+      this.groupBox1.PerformLayout();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button btnSaveCal;
+    private System.Windows.Forms.GroupBox groupBox1;
+    private System.Windows.Forms.DateTimePicker txttimeTo;
+    private System.Windows.Forms.DateTimePicker txttimeFrom;
+    private System.Windows.Forms.DateTimePicker dtpTo;
+    private System.Windows.Forms.DateTimePicker dtpFrom;
+    private System.Windows.Forms.CheckBox chbade;
+    private System.Windows.Forms.Button btnRecurrence;
+    private System.Windows.Forms.Button btbDelete;
+    private System.Windows.Forms.Label label2;
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.Button btCreate;
+    private System.Windows.Forms.MonthCalendar mcOnline;
+    private Calendar.DayView dvOnline;
+    private System.Windows.Forms.Button btnClearCal;
+    private System.Windows.Forms.CheckBox cbx_forcePush;
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/CgCalendar.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/CgCalendar.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/CgCalendar.cs	(revision 4340)
@@ -0,0 +1,297 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Xml.Serialization;
+using HeuristicLab.Calendar;
+using HeuristicLab.Hive.Slave.Console;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+using System.Collections;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+
+  //delegate to write text in the textbox from another process
+  public delegate void AppendTextDelegate(String message);
+
+  //delegate to remove text in the textbox from another process
+  public delegate void RemoveTextDelegate(int newLength, int maxChars);
+
+  //delegate fired, if a dialog is being closed
+  public delegate void OnDialogClosedDelegate(RecurrentEvent e);
+
+  public partial class CgCalendar : Form {
+
+    public Guid ResourceId { get; set; }
+    public string Name { get; set; }
+
+    [XmlArray("Appointments")]
+    [XmlArrayItem("Appointment", typeof(Appointment))]
+    public List<Appointment> onlineTimes = new List<Appointment>();
+
+    public CgCalendar(Guid resourceId, String name) {      
+      Name = name;
+      ResourceId = resourceId;
+      this.Text = Name + "(" + ResourceId + ")";
+      InitializeComponent();
+      InitCalender();
+      UpdateCalendar();
+    }
+
+    private void InitCalender() {
+      dvOnline.StartDate = DateTime.Now;
+      dvOnline.OnNewAppointment += new EventHandler<NewAppointmentEventArgs>(dvOnline_OnNewAppointment);
+      dvOnline.OnResolveAppointments += new EventHandler<ResolveAppointmentsEventArgs>(dvOnline_OnResolveAppointments);
+
+      //get calender from client
+      
+    }
+
+    private void UpdateCalendar() {
+      onlineTimes.Clear();
+      ResponseList<AppointmentDto> response = ServiceLocator.GetSlaveManager().GetUptimeCalendarForResource(ResourceId);
+      if(response.StatusMessage == ResponseStatus.Ok) {
+        foreach (AppointmentDto appointmentDto in response.List) {
+          onlineTimes.Add(new Appointment {
+                                            AllDayEvent = appointmentDto.AllDayEvent,
+                                            EndDate = appointmentDto.EndDate,
+                                            StartDate = appointmentDto.StartDate,
+                                            Recurring = appointmentDto.Recurring,
+                                            
+                                            RecurringId = appointmentDto.RecurringId,
+                                            BorderColor = Color.Red,
+                                            Locked = true,
+                                            Subject = "Online",
+                                          });
+        }
+        dvOnline.Invalidate();
+      }   
+    }
+
+    private bool CreateAppointment() {
+      DateTime from, to;
+
+      if (!string.IsNullOrEmpty(dtpFrom.Text) && !string.IsNullOrEmpty(dtpTo.Text)) {
+        if (chbade.Checked) {
+          //whole day appointment, only dates are visible
+          if (DateTime.TryParse(dtpFrom.Text, out from) && DateTime.TryParse(dtpTo.Text, out to) && from <= to)
+            onlineTimes.Add(CreateAppointment(from, to.AddDays(1), true));
+          else
+            MessageBox.Show("Incorrect date format", "Schedule Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        } else if (!string.IsNullOrEmpty(txttimeFrom.Text) && !string.IsNullOrEmpty(txttimeTo.Text)) {
+          //Timeframe appointment
+          if (DateTime.TryParse(dtpFrom.Text + " " + txttimeFrom.Text, out from) && DateTime.TryParse(dtpTo.Text + " " + txttimeTo.Text, out to) && from < to) {
+            if (from.Date == to.Date)
+              onlineTimes.Add(CreateAppointment(from, to, false));
+            else {
+              //more than 1 day selected
+              while (from.Date != to.Date) {
+                onlineTimes.Add(CreateAppointment(from, new DateTime(from.Year, from.Month, from.Day, to.Hour, to.Minute, 0, 0), false));
+                from = from.AddDays(1);
+              }
+              onlineTimes.Add(CreateAppointment(from, new DateTime(from.Year, from.Month, from.Day, to.Hour, to.Minute, 0, 0), false));
+            }
+          } else
+            MessageBox.Show("Incorrect date format", "Schedule Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        }
+        dvOnline.Invalidate();
+        return true;
+      } else {
+        MessageBox.Show("Error in create appointment, please fill out all textboxes!", "Schedule Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        return false;
+      }
+    }
+
+    private Appointment CreateAppointment(DateTime startDate, DateTime endDate, bool allDay) {
+      Appointment App = new Appointment();
+      App.StartDate = startDate;
+      App.EndDate = endDate;
+      App.AllDayEvent = allDay;
+      App.BorderColor = Color.Red;
+      App.Locked = true;
+      App.Subject = "Online";
+      App.Recurring = false;
+      return App;
+    }
+
+    private Appointment CreateAppointment(DateTime startDate, DateTime endDate, bool allDay, bool recurring, Guid recurringId) {
+      Appointment App = new Appointment();
+      App.StartDate = startDate;
+      App.EndDate = endDate;
+      App.AllDayEvent = allDay;
+      App.BorderColor = Color.Red;
+      App.Locked = true;
+      App.Subject = "Online";
+      App.Recurring = recurring;
+      App.RecurringId = recurringId;
+      return App;
+    }
+
+    private void DeleteAppointment() {
+      onlineTimes.Remove(dvOnline.SelectedAppointment);
+    }
+
+    private void DeleteRecurringAppointment(Guid recurringId) {
+      onlineTimes.RemoveAll(a => a.RecurringId.ToString() == dvOnline.SelectedAppointment.RecurringId.ToString());
+    }
+
+    private void ChangeRecurrenceAppointment(Guid recurringId) {
+      int hourfrom = int.Parse(txttimeFrom.Text.Substring(0, txttimeFrom.Text.IndexOf(':')));
+      int hourTo = int.Parse(txttimeTo.Text.Substring(0, txttimeTo.Text.IndexOf(':')));
+      List<Appointment> recurringAppointments = onlineTimes.Where(appointment => appointment.RecurringId == recurringId).ToList();
+      recurringAppointments.ForEach(appointment => appointment.StartDate = new DateTime(appointment.StartDate.Year, appointment.StartDate.Month, appointment.StartDate.Day, hourfrom, 0, 0));
+      recurringAppointments.ForEach(appointment => appointment.EndDate = new DateTime(appointment.EndDate.Year, appointment.EndDate.Month, appointment.EndDate.Day, hourTo, 0, 0));
+
+      DeleteRecurringAppointment(recurringId);
+      onlineTimes.AddRange(recurringAppointments);
+    }
+
+    public void DialogClosed(RecurrentEvent e) {
+      CreateDailyRecurrenceAppointments(e.DateFrom, e.DateTo, e.AllDay, e.IncWeeks, e.WeekDays);
+    }
+
+    private void CreateDailyRecurrenceAppointments(DateTime dateFrom, DateTime dateTo, bool allDay, int incWeek, HashSet<DayOfWeek> daysOfWeek) {
+      DateTime incDate = dateFrom;
+      Guid guid = Guid.NewGuid();
+
+      while (incDate.Date <= dateTo.Date) {
+        if (daysOfWeek.Contains(incDate.Date.DayOfWeek))
+          onlineTimes.Add(CreateAppointment(incDate, new DateTime(incDate.Year, incDate.Month, incDate.Day, dateTo.Hour, dateTo.Minute, 0), allDay, true, guid));
+        incDate = incDate.AddDays(1);
+      }
+
+      dvOnline.Invalidate();
+    }
+
+    private void btbDelete_Click(object sender, EventArgs e) {
+      Appointment selectedAppointment = dvOnline.SelectedAppointment;
+      if (dvOnline.SelectedAppointment != null) {
+        if (!selectedAppointment.Recurring)
+          DeleteAppointment();
+        else {
+          DialogResult res = MessageBox.Show("Delete all events in this series?", "Delete recurrences", MessageBoxButtons.YesNo);
+          if (res != DialogResult.Yes)
+            DeleteAppointment();
+          else
+            DeleteRecurringAppointment(selectedAppointment.RecurringId);
+        }
+      }
+      dvOnline.Invalidate();
+    }
+
+    private void chbade_CheckedChanged(object sender, EventArgs e) {
+      txttimeFrom.Visible = !chbade.Checked;
+      txttimeTo.Visible = !chbade.Checked;
+    }
+
+    private void dvOnline_OnSelectionChanged(object sender, EventArgs e) {
+      //btCreate.Enabled = true;
+      if (dvOnline.Selection == SelectionType.DateRange) {
+        dtpFrom.Text = dvOnline.SelectionStart.ToShortDateString();
+        dtpTo.Text = dvOnline.SelectionEnd.Date.ToShortDateString();
+        txttimeFrom.Text = dvOnline.SelectionStart.ToShortTimeString();
+        txttimeTo.Text = dvOnline.SelectionEnd.ToShortTimeString();
+
+        btCreate.Text = "Save";
+      }
+
+      if (dvOnline.Selection == SelectionType.Appointment) {
+
+        dtpFrom.Text = dvOnline.SelectedAppointment.StartDate.ToShortDateString();
+        dtpTo.Text = dvOnline.SelectedAppointment.EndDate.ToShortDateString();
+        txttimeFrom.Text = dvOnline.SelectedAppointment.StartDate.ToShortTimeString();
+        txttimeTo.Text = dvOnline.SelectedAppointment.EndDate.ToShortTimeString();
+
+        if (dvOnline.SelectedAppointment.Recurring)
+          //btCreate.Enabled = false;
+          //also change the caption of the save button
+          btCreate.Text = "Save changes";
+      }
+
+      if (dvOnline.Selection == SelectionType.None) {
+        //also change the caption of the save button
+        btCreate.Text = "Save";
+      }
+
+    }
+
+    private void mcOnline_DateChanged(object sender, DateRangeEventArgs e) {
+      dvOnline.StartDate = mcOnline.SelectionStart;
+    }
+
+    private void btCreate_Click(object sender, EventArgs e) {
+      if (dvOnline.Selection != SelectionType.Appointment) {
+        CreateAppointment();
+      } else {
+        //now we want to change an existing appointment
+        if (!dvOnline.SelectedAppointment.Recurring) {
+          if (CreateAppointment())
+            DeleteAppointment();
+        } else {
+          //change recurring appointment
+          //check, if only selected appointment has to change or whole recurrence
+          DialogResult res = MessageBox.Show("Change all events in this series?", "Change recurrences", MessageBoxButtons.YesNo);
+          if (res != DialogResult.Yes) {
+            if (CreateAppointment())
+              DeleteAppointment();
+          } else
+            ChangeRecurrenceAppointment(dvOnline.SelectedAppointment.RecurringId);
+        }
+      }
+      dvOnline.Invalidate();
+    }
+
+    private void btnRecurrence_Click(object sender, EventArgs e) {
+      Recurrence recurrence = new Recurrence();
+      recurrence.dialogClosedDelegate = new OnDialogClosedDelegate(this.DialogClosed);
+      recurrence.Show();
+    }
+
+    private void btnSaveCal_Click(object sender, EventArgs e) {
+      List<AppointmentDto> appointments = new List<AppointmentDto>();
+      foreach(Appointment app in onlineTimes) {
+        AppointmentDto apdto = new AppointmentDto {
+                                                    AllDayEvent = app.AllDayEvent,
+                                                    EndDate = app.EndDate,
+                                                    Recurring = app.Recurring,
+                                                    RecurringId = app.RecurringId,
+                                                    StartDate = app.StartDate
+                                                  };
+        appointments.Add(apdto);
+      }
+      ServiceLocator.GetSlaveManager().SetUptimeCalendarForResource(ResourceId, appointments, cbx_forcePush.Checked);      
+    }
+
+    private void dvOnline_OnResolveAppointments(object sender, ResolveAppointmentsEventArgs e) {
+      List<Appointment> Apps = new List<Appointment>();
+
+      foreach (Appointment m_App in onlineTimes)
+        if ((m_App.StartDate >= e.StartDate) &&
+            (m_App.StartDate <= e.EndDate))
+          Apps.Add(m_App);
+      e.Appointments = Apps;
+    }
+
+    private void dvOnline_OnNewAppointment(object sender, NewAppointmentEventArgs e) {
+      Appointment Appointment = new Appointment();
+
+      Appointment.StartDate = e.StartDate;
+      Appointment.EndDate = e.EndDate;
+
+      onlineTimes.Add(Appointment);
+    }
+
+    private void btnClearCal_Click(object sender, EventArgs e) {
+      onlineTimes.Clear();
+    }
+  }
+}
+    
+  
+    
+
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/CgCalendar.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/CgCalendar.resx	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/CgCalendar.resx	(revision 4340)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Changes.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Changes.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Changes.cs	(revision 4340)
@@ -0,0 +1,19 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+  public enum Change { Create, Update, Delete };
+  public enum Type { Slave, SlaveGroup, Job };
+  public class Changes {
+
+    public Type Types { get; set; }
+
+    public Guid ID { get; set; }
+
+    public Change ChangeType { get; set; }
+
+    public int Position { get; set; }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HeuristicLab.Hive.Server.Console-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HeuristicLab.Hive.Server.Console-3.3.csproj	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HeuristicLab.Hive.Server.Console-3.3.csproj	(revision 4340)
@@ -0,0 +1,285 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Server.ServerConsole</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Server.Console-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <StartupObject>
+    </StartupObject>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Tracing-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Tracing-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.DirectoryServices" />
+    <Reference Include="System.IdentityModel" />
+    <Reference Include="System.Runtime.Serialization" />
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AddGroup.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="AddGroup.Designer.cs">
+      <DependentUpon>AddGroup.cs</DependentUpon>
+    </Compile>
+    <Compile Include="AddJobForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="AddJobForm.Designer.cs">
+      <DependentUpon>AddJobForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="AddProject.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="AddProject.designer.cs">
+      <DependentUpon>AddProject.cs</DependentUpon>
+    </Compile>
+    <Compile Include="CgCalendar.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="CgCalendar.Designer.cs">
+      <DependentUpon>CgCalendar.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Changes.cs" />
+    <Compile Include="HiveServerConsole.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="HiveServerConsole.Designer.cs">
+      <DependentUpon>HiveServerConsole.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HeuristicLabHiveClientConsoleApplication.cs" />
+    <Compile Include="HiveServerManagementConsole.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="HiveServerManagementConsole.Designer.cs">
+      <DependentUpon>HiveServerManagementConsole.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HeuristicLabHiveClientConsolePlugin.cs" />
+    <Compile Include="JobDataFetcher.cs" />
+    <Compile Include="JobListView.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="JobListViewControl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="JobListViewControl.Designer.cs">
+      <DependentUpon>JobListViewControl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LogonDlg.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="LogonDlg.Designer.cs">
+      <DependentUpon>LogonDlg.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="AddGroup.resx">
+      <DependentUpon>AddGroup.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="AddJobForm.resx">
+      <DependentUpon>AddJobForm.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="AddProject.resx">
+      <DependentUpon>AddProject.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="CgCalendar.resx">
+      <DependentUpon>CgCalendar.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="HiveServerConsole.resx">
+      <DependentUpon>HiveServerConsole.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="HiveServerManagementConsole.resx">
+      <DependentUpon>HiveServerManagementConsole.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="JobListView.resx">
+      <DependentUpon>JobListView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="JobListViewControl.resx">
+      <DependentUpon>JobListViewControl.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LogonDlg.resx">
+      <DependentUpon>LogonDlg.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Recurrence.resx">
+      <DependentUpon>Recurrence.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+      <DesignTime>True</DesignTime>
+    </Compile>
+    <None Include="app.config" />
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="Properties\DataSources\HeuristicLab.Hive.Contracts.BusinessObjects.AppointmentDto.datasource" />
+    <None Include="Properties\DataSources\HeuristicLab.Hive.Contracts.BusinessObjects.JobDto.datasource" />
+    <None Include="Properties\DataSources\HeuristicLab.Hive.Contracts.BusinessObjects.JobResult.datasource" />
+    <None Include="Properties\DataSources\HeuristicLab.Hive.Contracts.BusinessObjects.ProjectDto.datasource" />
+    <None Include="Properties\DataSources\HeuristicLab.Hive.Contracts.BusinessObjects.SerializedJob.datasource" />
+    <None Include="Properties\DataSources\HeuristicLab.Hive.Contracts.BusinessObjects.SlaveDto.datasource" />
+    <None Include="Properties\DataSources\HeuristicLab.Hive.Contracts.BusinessObjects.SlaveGroupDto.datasource" />
+    <None Include="Properties\DataSources\HeuristicLab.Hive.Contracts.BusinessObjects.UpTimeStatisticsDto.datasource" />
+    <None Include="Properties\DataSources\HeuristicLab.Hive.Contracts.ResponseObjects.Response.datasource" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <Compile Include="Recurrence.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Recurrence.Designer.cs">
+      <DependentUpon>Recurrence.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ServiceLocator.cs" />
+    <None Include="Tools\RecreateServiceConfig.bat" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Calendar\3.3\HeuristicLab.Calendar-3.3.csproj">
+      <Project>{D17A4D6A-4CAA-4470-8A19-F42463C021FD}</Project>
+      <Name>HeuristicLab.Calendar-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.DataAccess\3.3\HeuristicLab.DataAccess-3.3.csproj">
+      <Project>{9076697B-C151-46CD-95BC-1D059492B478}</Project>
+      <Name>HeuristicLab.DataAccess-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Contracts\3.3\HeuristicLab.Hive.Contracts-3.3.csproj">
+      <Project>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</Project>
+      <Name>HeuristicLab.Hive.Contracts-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.JobBase\3.3\HeuristicLab.Hive.JobBase-3.3.csproj">
+      <Project>{21187322-52DD-4243-80A4-A85F0263E63B}</Project>
+      <Name>HeuristicLab.Hive.JobBase-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadata Include="Service References\" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HeuristicLabHiveClientConsoleApplication.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HeuristicLabHiveClientConsoleApplication.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HeuristicLabHiveClientConsoleApplication.cs	(revision 4340)
@@ -0,0 +1,36 @@
+﻿#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.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+  [Application("Hive Server Console", "Console Application for the Hive Server.")]
+  class HeuristicLabHiveSlaveConsoleApplication : ApplicationBase {
+    public override void Run() {
+      Form mainForm = new HiveServerConsole();
+      Application.Run(mainForm);
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HeuristicLabHiveClientConsolePlugin.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HeuristicLabHiveClientConsolePlugin.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HeuristicLabHiveClientConsolePlugin.cs	(revision 4340)
@@ -0,0 +1,41 @@
+#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.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Grid {
+  [Plugin("HeuristicLab.Hive.Server.Console", "3.3")]
+  [PluginFile("HeuristicLab.Hive.Server.Console-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Calendar", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.DataAccess", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.Contracts", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.JobBase", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  [PluginDependency("HeuristicLab.Tracing", "3.3")]
+  public class HeuristicLabHiveSlaveConsolePlugin : PluginBase {
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerConsole.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerConsole.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerConsole.Designer.cs	(revision 4340)
@@ -0,0 +1,250 @@
+﻿#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
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+  partial class HiveServerConsole {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HiveServerConsole));
+      this.gbConfiguration = new System.Windows.Forms.GroupBox();
+      this.lblPort = new System.Windows.Forms.Label();
+      this.lblIp = new System.Windows.Forms.Label();
+      this.tbPort = new System.Windows.Forms.TextBox();
+      this.tbIp = new System.Windows.Forms.TextBox();
+      this.btnLogin = new System.Windows.Forms.Button();
+      this.gpUser = new System.Windows.Forms.GroupBox();
+      this.tbUserName = new System.Windows.Forms.TextBox();
+      this.lblPwd = new System.Windows.Forms.Label();
+      this.lblUsername = new System.Windows.Forms.Label();
+      this.tbPwd = new System.Windows.Forms.TextBox();
+      this.lblError = new System.Windows.Forms.Label();
+      this.pictureBox1 = new System.Windows.Forms.PictureBox();
+      this.btnCancel = new System.Windows.Forms.Button();
+      this.gbConfiguration.SuspendLayout();
+      this.gpUser.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // gbConfiguration
+      // 
+      this.gbConfiguration.Controls.Add(this.lblPort);
+      this.gbConfiguration.Controls.Add(this.lblIp);
+      this.gbConfiguration.Controls.Add(this.tbPort);
+      this.gbConfiguration.Controls.Add(this.tbIp);
+      this.gbConfiguration.Location = new System.Drawing.Point(188, 100);
+      this.gbConfiguration.Name = "gbConfiguration";
+      this.gbConfiguration.Size = new System.Drawing.Size(283, 82);
+      this.gbConfiguration.TabIndex = 4;
+      this.gbConfiguration.TabStop = false;
+      this.gbConfiguration.Text = "Configuration";
+      // 
+      // lblPort
+      // 
+      this.lblPort.AutoSize = true;
+      this.lblPort.Location = new System.Drawing.Point(16, 54);
+      this.lblPort.Name = "lblPort";
+      this.lblPort.Size = new System.Drawing.Size(26, 13);
+      this.lblPort.TabIndex = 3;
+      this.lblPort.Text = "Port";
+      // 
+      // lblIp
+      // 
+      this.lblIp.AutoSize = true;
+      this.lblIp.Location = new System.Drawing.Point(16, 26);
+      this.lblIp.Name = "lblIp";
+      this.lblIp.Size = new System.Drawing.Size(17, 13);
+      this.lblIp.TabIndex = 2;
+      this.lblIp.Text = "IP";
+      // 
+      // tbPort
+      // 
+      this.tbPort.Location = new System.Drawing.Point(77, 47);
+      this.tbPort.Name = "tbPort";
+      this.tbPort.Size = new System.Drawing.Size(189, 20);
+      this.tbPort.TabIndex = 6;
+      this.tbPort.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.HiveServerConsole_KeyPress);
+      // 
+      // tbIp
+      // 
+      this.tbIp.Location = new System.Drawing.Point(77, 19);
+      this.tbIp.Name = "tbIp";
+      this.tbIp.Size = new System.Drawing.Size(191, 20);
+      this.tbIp.TabIndex = 5;
+      this.tbIp.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.HiveServerConsole_KeyPress);
+      // 
+      // btnLogin
+      // 
+      this.btnLogin.Location = new System.Drawing.Point(355, 193);
+      this.btnLogin.Name = "btnLogin";
+      this.btnLogin.Size = new System.Drawing.Size(116, 23);
+      this.btnLogin.TabIndex = 7;
+      this.btnLogin.Text = "Login";
+      this.btnLogin.UseVisualStyleBackColor = true;
+      this.btnLogin.Click += new System.EventHandler(this.BtnLogin_Click);
+      this.btnLogin.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.HiveServerConsole_KeyPress);
+      // 
+      // gpUser
+      // 
+      this.gpUser.Controls.Add(this.tbUserName);
+      this.gpUser.Controls.Add(this.lblPwd);
+      this.gpUser.Controls.Add(this.lblUsername);
+      this.gpUser.Controls.Add(this.tbPwd);
+      this.gpUser.Location = new System.Drawing.Point(188, 12);
+      this.gpUser.Name = "gpUser";
+      this.gpUser.Size = new System.Drawing.Size(283, 82);
+      this.gpUser.TabIndex = 1;
+      this.gpUser.TabStop = false;
+      this.gpUser.Text = "User";
+      // 
+      // tbUserName
+      // 
+      this.tbUserName.Location = new System.Drawing.Point(77, 19);
+      this.tbUserName.Name = "tbUserName";
+      this.tbUserName.Size = new System.Drawing.Size(189, 20);
+      this.tbUserName.TabIndex = 2;
+      this.tbUserName.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.HiveServerConsole_KeyPress);
+      // 
+      // lblPwd
+      // 
+      this.lblPwd.AutoSize = true;
+      this.lblPwd.Location = new System.Drawing.Point(16, 54);
+      this.lblPwd.Name = "lblPwd";
+      this.lblPwd.Size = new System.Drawing.Size(53, 13);
+      this.lblPwd.TabIndex = 3;
+      this.lblPwd.Text = "Password";
+      // 
+      // lblUsername
+      // 
+      this.lblUsername.AutoSize = true;
+      this.lblUsername.Location = new System.Drawing.Point(16, 26);
+      this.lblUsername.Name = "lblUsername";
+      this.lblUsername.Size = new System.Drawing.Size(55, 13);
+      this.lblUsername.TabIndex = 2;
+      this.lblUsername.Text = "Username";
+      // 
+      // tbPwd
+      // 
+      this.tbPwd.Location = new System.Drawing.Point(77, 47);
+      this.tbPwd.Name = "tbPwd";
+      this.tbPwd.Size = new System.Drawing.Size(189, 20);
+      this.tbPwd.TabIndex = 3;
+      this.tbPwd.UseSystemPasswordChar = true;
+      this.tbPwd.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.HiveServerConsole_KeyPress);
+      // 
+      // lblError
+      // 
+      this.lblError.AutoSize = true;
+      this.lblError.ForeColor = System.Drawing.Color.Red;
+      this.lblError.Location = new System.Drawing.Point(12, 193);
+      this.lblError.Name = "lblError";
+      this.lblError.Size = new System.Drawing.Size(0, 13);
+      this.lblError.TabIndex = 5;
+      // 
+      // pictureBox1
+      // 
+      this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
+      this.pictureBox1.Location = new System.Drawing.Point(12, 12);
+      this.pictureBox1.Name = "pictureBox1";
+      this.pictureBox1.Size = new System.Drawing.Size(170, 170);
+      this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
+      this.pictureBox1.TabIndex = 8;
+      this.pictureBox1.TabStop = false;
+      // 
+      // btnCancel
+      // 
+      this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+      this.btnCancel.Location = new System.Drawing.Point(259, 193);
+      this.btnCancel.Name = "btnCancel";
+      this.btnCancel.Size = new System.Drawing.Size(90, 23);
+      this.btnCancel.TabIndex = 9;
+      this.btnCancel.Text = "&Cancel";
+      this.btnCancel.UseVisualStyleBackColor = true;
+      this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
+      // 
+      // HiveServerConsole
+      // 
+      this.AcceptButton = this.btnLogin;
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.BackColor = System.Drawing.SystemColors.Control;
+      this.CancelButton = this.btnCancel;
+      this.ClientSize = new System.Drawing.Size(482, 226);
+      this.Controls.Add(this.btnCancel);
+      this.Controls.Add(this.pictureBox1);
+      this.Controls.Add(this.lblError);
+      this.Controls.Add(this.gpUser);
+      this.Controls.Add(this.btnLogin);
+      this.Controls.Add(this.gbConfiguration);
+      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+      this.Name = "HiveServerConsole";
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+      this.Text = "Server Console Logon";
+      this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.HiveServerConsole_KeyPress);
+      this.gbConfiguration.ResumeLayout(false);
+      this.gbConfiguration.PerformLayout();
+      this.gpUser.ResumeLayout(false);
+      this.gpUser.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.GroupBox gbConfiguration;
+    private System.Windows.Forms.Label lblPort;
+    private System.Windows.Forms.Label lblIp;
+    private System.Windows.Forms.TextBox tbPort;
+    private System.Windows.Forms.TextBox tbIp;
+    private System.Windows.Forms.Button btnLogin;
+    private System.Windows.Forms.GroupBox gpUser;
+    private System.Windows.Forms.TextBox tbUserName;
+    private System.Windows.Forms.Label lblPwd;
+    private System.Windows.Forms.Label lblUsername;
+    private System.Windows.Forms.TextBox tbPwd;
+    private System.Windows.Forms.Label lblError;
+    private System.Windows.Forms.PictureBox pictureBox1;
+    private System.Windows.Forms.Button btnCancel;
+  }
+}
+
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerConsole.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerConsole.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerConsole.cs	(revision 4340)
@@ -0,0 +1,188 @@
+﻿#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.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+using System.Security.Cryptography;
+using System.Net;
+using System.Threading;
+using System.ServiceModel;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+
+  public partial class HiveServerConsole : Form {
+
+    HiveServerManagementConsole information = null;
+
+    public HiveServerConsole() {
+      InitializeComponent();
+    }
+
+    private void tsmiExit_Click(object sender, EventArgs e) {
+      this.Close();
+    }
+
+    /// <summary>
+    /// When login button is clicked, the ManagementConsole
+    /// will be opened
+    /// </summary>
+    /// <param name="sender"></param>
+    /// <param name="e"></param>
+    private void BtnLogin_Click(object sender, EventArgs e) {
+      string newIp = tbIp.Text;
+      newIp = newIp.Replace(" ", "");
+
+      ServiceLocator.Address = newIp;
+      ServiceLocator.Port = this.tbPort.Text;
+
+      if (IsValid()) {
+        this.Visible = false;
+        information = new HiveServerManagementConsole();
+        information.closeFormEvent += new closeForm(EnableForm);
+        information.Show();
+      } 
+    }
+
+    /// <summary>
+    /// if the input is correct and the login-method returns a 
+    /// valid response
+    /// </summary>
+    /// <returns></returns>
+    private bool IsValid() {
+      Thread t = new Thread(new ThreadStart(ShowWaitDlg));
+      if (IsFormValidated()) {
+        IPAddress ipAdress = IPAddress.Parse(tbIp.Text);
+        int port = int.Parse(tbPort.Text);
+        IServerConsoleFacade scf;
+        Response resp;
+        try {
+          lblError.Text = "Trying to logon...";
+          this.Cursor = Cursors.WaitCursor;
+          t.Start();
+
+          ServiceLocator.Address = tbIp.Text.Replace(" ", "");
+          ServiceLocator.Port = tbPort.Text;
+          ServiceLocator.Username = tbUserName.Text;
+          ServiceLocator.Password = tbPwd.Text;
+          scf = ServiceLocator.GetServerConsoleFacade();
+
+          resp = scf.Login();
+          t.Abort();
+          this.Cursor = Cursors.Default;
+          if (resp.StatusMessage == ResponseStatus.Ok) return true;
+          lblError.Text = resp.StatusMessage.ToString();
+          MessageBox.Show("Wrong username or password");
+        }
+        catch (EndpointNotFoundException ene) {
+          t.Abort();
+          this.Cursor = Cursors.Default;
+          MessageBox.Show(ene.Message);
+          lblError.Text = "No Service at this address!";
+          scf = null;
+        }
+        catch (Exception ex) {
+          //login failed
+          t.Abort();
+          this.Cursor = Cursors.Default;
+          MessageBox.Show(ex.Message);
+          lblError.Text = "Logon failed! Please restart console";
+        }
+      }
+        return false;
+    }
+
+
+    private void ShowWaitDlg() {
+      LogonDlg dlg = new LogonDlg();
+      dlg.ShowDialog();
+    }
+
+    /// <summary>
+    /// Validates the form.
+    /// </summary>
+    /// <returns></returns>
+    private bool IsFormValidated() {
+      bool isValid = true;
+      if (String.IsNullOrEmpty(tbUserName.Text)) {
+        lblError.Text = "Please type in Username.";
+        isValid = false;
+      }
+      if (String.IsNullOrEmpty(tbPwd.Text)) {
+        lblError.Text = "Please type in Password.";
+        isValid = false;
+      }
+      if (String.IsNullOrEmpty(tbIp.Text)) {
+        lblError.Text = "Please type in Port.";
+        isValid = false;
+      }
+      if (String.IsNullOrEmpty(tbPort.Text)) {
+        lblError.Text = "Please type in IP-Address.";
+        isValid = false;
+      }
+      try {
+        int.Parse(tbPort.Text);
+      }
+      catch (Exception ex) {
+        isValid = false;
+        lblError.Text = "Please verify entered Port.";
+      }
+      try {
+        IPAddress.Parse(tbIp.Text);
+      }
+      catch (Exception ex) {
+        isValid = false;
+        lblError.Text = "Please verify entered IP address.";
+      }
+      return isValid;
+    }
+
+    private void EnableForm(bool cf, bool error) {
+      if (cf) {
+        this.Visible = true;
+        ServiceLocator.ShutDownFacade();
+        lblError.Text = "";
+        if (error == true) {
+          lblError.Text = "Establishing server connection failed.";
+        }
+      }
+    }
+
+    private void HiveServerConsole_KeyPress(object sender, KeyPressEventArgs e) {
+      if (e.KeyChar == (char)Keys.Return) {
+        BtnLogin_Click(sender, e);
+      }
+    }
+
+    private void btnCancel_Click(object sender, EventArgs e) {
+      Dispose();
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerConsole.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerConsole.resx	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerConsole.resx	(revision 4340)
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        R0lGODlh7gDTAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwMDcwKbK8AQEBAgICAwMDBERERYWFhwc
+        HCIiIikpKVVVVU1NTUJCQjk5Of98gP9QUNYAk8zs/+/Wxufn1q2pkDMAAGYAAJkAAMwAAAAzADMzAGYz
+        AJkzAMwzAP8zAABmADNmAGZmAJlmAMxmAP9mAACZADOZAGaZAJmZAMyZAP+ZAADMADPMAGbMAJnMAMzM
+        AP/MAGb/AJn/AMz/AAAAMzMAM2YAM5kAM8wAM/8AMwAzMzMzM2YzM5kzM8wzM/8zMwBmMzNmM2ZmM5lm
+        M8xmM/9mMwCZMzOZM2aZM5mZM8yZM/+ZMwDMMzPMM2bMM5nMM8zMM//MMzP/M2b/M5n/M8z/M///MwAA
+        ZjMAZmYAZpkAZswAZv8AZgAzZjMzZmYzZpkzZswzZv8zZgBmZjNmZmZmZplmZsxmZgCZZjOZZmaZZpmZ
+        ZsyZZv+ZZgDMZjPMZpnMZszMZv/MZgD/ZjP/Zpn/Zsz/Zv8AzMwA/wCZmZkzmZkAmcwAmQAAmTMzmWYA
+        mcwzmf8AmQBmmTNmmWYzmZlmmcxmmf8zmTOZmWaZmZmZmcyZmf+ZmQDMmTPMmWbMZpnMmczMmf/MmQD/
+        mTP/mWbMmZn/mcz/mf//mQAAzDMAmWYAzJkAzMwAzAAzmTMzzGYzzJkzzMwzzP8zzABmzDNmzGZmmZlm
+        zMxmzP9mmQCZzDOZzGaZzJmZzMyZzP+ZzADMzDPMzGbMzJnMzMzMzP/MzAD/zDP/zGb/mZn/zMz/zP//
+        zDMAzGYA/5kA/wAzzDMz/2Yz/5kz/8wz//8z/wBm/zNm/2ZmzJlm/8xm//9mzACZ/zOZ/2aZ/5mZ/8yZ
+        //+Z/wDM/zPM/2bM/5nM/8zM///M/zP//2b/zJn//8z///9mZmb/Zv//ZmZm//9m/2b//6UAIV9fX3d3
+        d4aGhpaWlsvLy7KystfX193d3ePj4+rq6vHx8fj4+P/78KCgpICAgP8AAAD/AP//AAAA//8A/wD/////
+        /ywAAAAA7gDTAAAI/wD/CRxIsKDBgwgTKlzIsKFDhPUydEtAsWKGDPUeatzIsaPHjyBDihxJMEPFkygp
+        0iPJsqXLlzBjbqSXsibKjDJz6tzJs+fAiTaDUuzms6jRo0gT1hPKtCLOpFCjSmVJs6nVp1Ozat0K0arX
+        BFzDitX69evYs2h9lv1KNK3btyxNrvWaAa7duxuXzv2KFa/fvwP3rgVM+K9cwV77Fl58FvFgxpDHHnZs
+        tW7ky1n1UjaLuTNUwRf3WvZMuqfmsjgncy7NOufelQNVe21N+2XVsqMDz4Vdu3fIvYpPr/ZNfKPsprlL
+        zk1evLnSvQqhO5+eULTC40zbUt8u8HZZhsC5c/+XvlD4bPHTsQtljlB9UN7oiZNnaN5q/OLubbJPmL/m
+        /vud1ddUXuEB2FqBGvVXk4GsCciUR68xSNp8HFEoIWMKovRfQxmetOGFdzkolEgWgvgXULiJ1KFFJhYm
+        YlAkIdgiXiV65N1wM8J1Y2UtyZijWz6SONePcK1I0YcdWUdkWjUK+diSY6H4FZI2zqUdlFvtaJ9MQWIZ
+        VZcsvWiTl1oZmQCVIZkJH5lJNdmSmAuyCZWZaKq4nJxIwZlSUW7iGROYCNEjkUkXzaMYf336+Wai3SF3
+        qEERKroTo/+kWB6lkn6kJVNIbvrgQkpmChOgApnpFKhDivpSqF05thCdqi7/mmp0m6G61qOxVjhrdZsl
+        gOs/eqKUq0ieBnXlQcEOSOutw4JEaqW9UvRrshU16xGstvb6IbbWapSoqcZeumu3DHHLa7QUlYuptdSm
+        Cx660r7LLLnZfrUmQvDGK+6T9B5kakPtNnXvQc92S2mxgg1M8Lj9lnpnQwjPxY3CBpnbcMAPRbzbQ+tm
+        WvBA9HCT768F/dswsOsGzBTJBX3s8Vwst5wvgQw3qzFKxzaUL1gbsWqtywTlm7PONccqJV0dgatf0g83
+        i3FH88A7D4Qw/9w0zdHGfNDNJw0tKdcVee0QvM5WnSvQC0cL0tOqWszR0YiJ7ZDbfnbsb7R1tjqvpHTP
+        /4S3nWvJjaXdyGY9EtomRuokZSSxLSfY1cbYa1wb40k4orU2fvl9fVdJWd7qrgU6gI6PpLKHLm0unplT
+        p06Z1g91bmLpkru6qtlLIj434y/R3iLkCQj+kdLu3i567ri7BDzqfxYtoewhnX6mTNDH53uPiMGepPMA
+        +my86hCDT9v1LSk9afIMis8hYjypT1r1poPGE/zO6U711TKRvx39h9vPdODp4973vqMW9HEHbgIrisl6
+        srz7NLAoUTueAisnHv99pF2ji577CrNAPu3NJ/wrzQZ79sEC8ss5IWwJAkeElBReRn86MdJnDNgbCxLL
+        UnkaIVxgqJNkZZAlivONDv+35xWK9WSIaAHeD7GXGKm4kDBIfBuO2kRDz3ivhVNEygNbw0MGIi0rNnxL
+        GMP0RTAKcDFK5EoRt7JCoRhxMWNk4sq20kXD4G8qCgrLE4F0xqPASSxBhEwb3yMWMS1RJluETB2Pgpyx
+        BLIwcRwVU96YlEWmJZF6nKNk7viXKJIkP0zqY1oGuTS0vCgtZhKeKT0JxKAcsn1VFCMF0bIet1iSjqxs
+        pU0oOZVIevCEaFGP9mYITLekES4RjNNb9kjFEq5yTHbxZQw5SUv/3AV4qpzKLXtZE15uRZrNW4s32ViT
+        YUplm0bBZJGUeRc1hbKYb0nmSf6Czp4wMyrmeWVS7un/GlE6UkNQjOWcqAmXlLTOjv40TS51cjRzfnOW
+        3HQmXlSzmHrCxKJaichFLoIhghploWQCaehweLL1SRAqAXNov8C5EVJ2s6RYI2AOEwpTgbB0bDStqU1z
+        OpJj6jRBHg0nan4a0yzmhJ8l7WAPRSqqm6atLON8i0Y9hJHOgFSdhImYPssU1P5J1C/JOqiLcolUPHZ1
+        mWf9iFNByD7GeLKsUSEezwqDzYsyNSbLw5lbIerVocKxV1EtpA4xmhW5zvOvJ+0rXyoKL5U+FJ7/Iylg
+        DNu1jia2bF+9y84gM8Yr+mVnjs0o+AhLlnxtVSqP9JZA7ZLXWnKWp40CIGRa68rI/+xxrUWhbSkZg064
+        anNnpzVrTu96PngF9p1+dYhLUxJcM5INM4skbViWK9PLpPap9vKMbgFqxT4q1broKk31iOuT7R6JNX3y
+        rVgo25q66q26InwdbcDkzvE5prlj8Z10pSq/Gt4Rt2FZrVXHhUHn3Ay/aE0sgM8iqNpShzw+3Y5GLxLa
+        yACvddQ9LFEbkyoBb/hLg2nXh1EpThmO+JlTuuyJM7mzU624mi2e64v/2WIEz5hyNb7xWSirnwrruCX0
+        yHCMh0zkIhv5yEhOspKXzOQmw4vHTo6ylKf8ZOlR+cpYzvJQtczlLnvZdlD+spjHbGTLWJnMaE5zi5Wj
+        5ja7mTfJyXmznOdMZOzS+c54dl6e98xnZZ2rz4DuM9ECTWg61ynMhU50kUeHaEU7+m+aavSjJz2lhgQE
+        ADs=
+</value>
+  </data>
+</root>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerManagementConsole.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerManagementConsole.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerManagementConsole.Designer.cs	(revision 4340)
@@ -0,0 +1,1177 @@
+﻿namespace HeuristicLab.Hive.Server.ServerConsole {
+  partial class HiveServerManagementConsole {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HiveServerManagementConsole));
+      this.menuStrip1 = new System.Windows.Forms.MenuStrip();
+      this.informationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.refreshToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.closeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.addToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.jobToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.groupToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.projectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.largeIconsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.smallIconsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.listToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.ilLargeImgClient = new System.Windows.Forms.ImageList(this.components);
+      this.ilLargeImgJob = new System.Windows.Forms.ImageList(this.components);
+      this.plClientDetails = new System.Windows.Forms.Panel();
+      this.lblState = new System.Windows.Forms.Label();
+      this.lblStateClient = new System.Windows.Forms.Label();
+      this.lblLogin = new System.Windows.Forms.Label();
+      this.lblLoginOn = new System.Windows.Forms.Label();
+      this.lblClientName = new System.Windows.Forms.Label();
+      this.pbClientControl = new System.Windows.Forms.PictureBox();
+      this.plUserDetails = new System.Windows.Forms.Panel();
+      this.lblUserName = new System.Windows.Forms.Label();
+      this.btnUserControlClose = new System.Windows.Forms.Button();
+      this.pbUserControl = new System.Windows.Forms.PictureBox();
+      this.plJobDetails = new System.Windows.Forms.Panel();
+      this.lvJobDetails = new System.Windows.Forms.ListView();
+      this.chContent = new System.Windows.Forms.ColumnHeader();
+      this.chDetails = new System.Windows.Forms.ColumnHeader();
+      this.lblProgress = new System.Windows.Forms.Label();
+      this.lblStatus = new System.Windows.Forms.Label();
+      this.progressJob = new System.Windows.Forms.ProgressBar();
+      this.lblJobName = new System.Windows.Forms.Label();
+      this.pbJobControl = new System.Windows.Forms.PictureBox();
+      this.treeView2 = new System.Windows.Forms.TreeView();
+      this.listView2 = new System.Windows.Forms.ListView();
+      this.timerSyncronize = new System.Windows.Forms.Timer(this.components);
+      this.fileSystemWatcher1 = new System.IO.FileSystemWatcher();
+      this.updaterWoker = new System.ComponentModel.BackgroundWorker();
+      this.tpJobControl = new System.Windows.Forms.TabPage();
+      this.scJobControl = new System.Windows.Forms.SplitContainer();
+      this.calculatingJobTabControl = new System.Windows.Forms.TabControl();
+      this.calculatingJobTabPage = new System.Windows.Forms.TabPage();
+      this.splitContainer5 = new System.Windows.Forms.SplitContainer();
+      this.cmb_calculatingJob_count = new System.Windows.Forms.ComboBox();
+      this.btn_calculatingJobs_next = new System.Windows.Forms.Button();
+      this.btn_calculatingJobs_prev = new System.Windows.Forms.Button();
+      this.lv_calculatingJobs = new System.Windows.Forms.ListView();
+      this.contextMenuJob = new System.Windows.Forms.ContextMenuStrip(this.components);
+      this.offlineItemAbortJob = new System.Windows.Forms.ToolStripMenuItem();
+      this.menuItemGetSnapshot = new System.Windows.Forms.ToolStripMenuItem();
+      this.ilSmallImgJob = new System.Windows.Forms.ImageList(this.components);
+      this.finishedJobsTabPage = new System.Windows.Forms.TabPage();
+      this.splitContainer2 = new System.Windows.Forms.SplitContainer();
+      this.cmb_finishedJob_count = new System.Windows.Forms.ComboBox();
+      this.btn_finishedJob_next = new System.Windows.Forms.Button();
+      this.btn_finishedJob_prev = new System.Windows.Forms.Button();
+      this.lv_finishedJobs = new System.Windows.Forms.ListView();
+      this.offlineJobsTabPage = new System.Windows.Forms.TabPage();
+      this.splitContainer4 = new System.Windows.Forms.SplitContainer();
+      this.cmb_offlineJob_count = new System.Windows.Forms.ComboBox();
+      this.btn_offlineJob_next = new System.Windows.Forms.Button();
+      this.btn_offlinejob_prev = new System.Windows.Forms.Button();
+      this.lv_offlineJobs = new System.Windows.Forms.ListView();
+      this.AbortContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+      this.ilSmallImgClient = new System.Windows.Forms.ImageList(this.components);
+      this.tpClientControl = new System.Windows.Forms.TabPage();
+      this.scClientControl = new System.Windows.Forms.SplitContainer();
+      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+      this.btnRefresh = new System.Windows.Forms.Button();
+      this.tvClientControl = new System.Windows.Forms.TreeView();
+      this.contextMenuGroup = new System.Windows.Forms.ContextMenuStrip(this.components);
+      this.menuItemAddGroup = new System.Windows.Forms.ToolStripMenuItem();
+      this.menuItemDeleteGroup = new System.Windows.Forms.ToolStripMenuItem();
+      this.menuItemOpenCalendar = new System.Windows.Forms.ToolStripMenuItem();
+      this.lvClientControl = new System.Windows.Forms.ListView();
+      this.tcManagementConsole = new System.Windows.Forms.TabControl();
+      this.checkBox1 = new System.Windows.Forms.CheckBox();
+      this.splitContainer3 = new System.Windows.Forms.SplitContainer();
+      this.comboBox1 = new System.Windows.Forms.ComboBox();
+      this.button1 = new System.Windows.Forms.Button();
+      this.button2 = new System.Windows.Forms.Button();
+      this.listView1 = new System.Windows.Forms.ListView();
+      this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
+      this.calcToolStripAbortItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.menuStrip1.SuspendLayout();
+      this.plClientDetails.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pbClientControl)).BeginInit();
+      this.plUserDetails.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pbUserControl)).BeginInit();
+      this.plJobDetails.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pbJobControl)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.fileSystemWatcher1)).BeginInit();
+      this.tpJobControl.SuspendLayout();
+      this.scJobControl.Panel1.SuspendLayout();
+      this.scJobControl.Panel2.SuspendLayout();
+      this.scJobControl.SuspendLayout();
+      this.calculatingJobTabControl.SuspendLayout();
+      this.calculatingJobTabPage.SuspendLayout();
+      this.splitContainer5.Panel1.SuspendLayout();
+      this.splitContainer5.Panel2.SuspendLayout();
+      this.splitContainer5.SuspendLayout();
+      this.contextMenuJob.SuspendLayout();
+      this.finishedJobsTabPage.SuspendLayout();
+      this.splitContainer2.Panel1.SuspendLayout();
+      this.splitContainer2.Panel2.SuspendLayout();
+      this.splitContainer2.SuspendLayout();
+      this.offlineJobsTabPage.SuspendLayout();
+      this.splitContainer4.Panel1.SuspendLayout();
+      this.splitContainer4.Panel2.SuspendLayout();
+      this.splitContainer4.SuspendLayout();
+      this.AbortContextMenuStrip.SuspendLayout();
+      this.tpClientControl.SuspendLayout();
+      this.scClientControl.Panel1.SuspendLayout();
+      this.scClientControl.Panel2.SuspendLayout();
+      this.scClientControl.SuspendLayout();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      this.contextMenuGroup.SuspendLayout();
+      this.tcManagementConsole.SuspendLayout();
+      this.splitContainer3.Panel1.SuspendLayout();
+      this.splitContainer3.Panel2.SuspendLayout();
+      this.splitContainer3.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // menuStrip1
+      // 
+      this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.informationToolStripMenuItem,
+            this.addToolStripMenuItem,
+            this.viewToolStripMenuItem});
+      this.menuStrip1.Location = new System.Drawing.Point(0, 0);
+      this.menuStrip1.Name = "menuStrip1";
+      this.menuStrip1.Size = new System.Drawing.Size(893, 24);
+      this.menuStrip1.TabIndex = 0;
+      this.menuStrip1.Text = "menuStrip1";
+      // 
+      // informationToolStripMenuItem
+      // 
+      this.informationToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.refreshToolStripMenuItem,
+            this.closeToolStripMenuItem});
+      this.informationToolStripMenuItem.Name = "informationToolStripMenuItem";
+      this.informationToolStripMenuItem.Size = new System.Drawing.Size(90, 20);
+      this.informationToolStripMenuItem.Text = "Management";
+      // 
+      // refreshToolStripMenuItem
+      // 
+      this.refreshToolStripMenuItem.Name = "refreshToolStripMenuItem";
+      this.refreshToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.R)));
+      this.refreshToolStripMenuItem.Size = new System.Drawing.Size(154, 22);
+      this.refreshToolStripMenuItem.Text = "Refresh";
+      this.refreshToolStripMenuItem.Click += new System.EventHandler(this.Refresh_Click);
+      // 
+      // closeToolStripMenuItem
+      // 
+      this.closeToolStripMenuItem.Name = "closeToolStripMenuItem";
+      this.closeToolStripMenuItem.Size = new System.Drawing.Size(154, 22);
+      this.closeToolStripMenuItem.Text = "Close";
+      this.closeToolStripMenuItem.Click += new System.EventHandler(this.Close_Click);
+      // 
+      // addToolStripMenuItem
+      // 
+      this.addToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.jobToolStripMenuItem,
+            this.groupToolStripMenuItem,
+            this.projectToolStripMenuItem});
+      this.addToolStripMenuItem.Name = "addToolStripMenuItem";
+      this.addToolStripMenuItem.Size = new System.Drawing.Size(41, 20);
+      this.addToolStripMenuItem.Text = "Add";
+      // 
+      // jobToolStripMenuItem
+      // 
+      this.jobToolStripMenuItem.Name = "jobToolStripMenuItem";
+      this.jobToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.J)));
+      this.jobToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+      this.jobToolStripMenuItem.Text = "Job";
+      this.jobToolStripMenuItem.Click += new System.EventHandler(this.AddJob_Click);
+      // 
+      // groupToolStripMenuItem
+      // 
+      this.groupToolStripMenuItem.Name = "groupToolStripMenuItem";
+      this.groupToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.G)));
+      this.groupToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+      this.groupToolStripMenuItem.Text = "Group";
+      this.groupToolStripMenuItem.Click += new System.EventHandler(this.groupToolStripMenuItem_Click);
+      // 
+      // projectToolStripMenuItem
+      // 
+      this.projectToolStripMenuItem.Name = "projectToolStripMenuItem";
+      this.projectToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.P)));
+      this.projectToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+      this.projectToolStripMenuItem.Text = "Project";
+      this.projectToolStripMenuItem.Click += new System.EventHandler(this.projectToolStripMenuItem_Click);
+      // 
+      // viewToolStripMenuItem
+      // 
+      this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.largeIconsToolStripMenuItem,
+            this.smallIconsToolStripMenuItem,
+            this.listToolStripMenuItem});
+      this.viewToolStripMenuItem.Name = "viewToolStripMenuItem";
+      this.viewToolStripMenuItem.Size = new System.Drawing.Size(44, 20);
+      this.viewToolStripMenuItem.Text = "View";
+      // 
+      // largeIconsToolStripMenuItem
+      // 
+      this.largeIconsToolStripMenuItem.Checked = true;
+      this.largeIconsToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked;
+      this.largeIconsToolStripMenuItem.Name = "largeIconsToolStripMenuItem";
+      this.largeIconsToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D1)));
+      this.largeIconsToolStripMenuItem.Size = new System.Drawing.Size(174, 22);
+      this.largeIconsToolStripMenuItem.Text = "Large Icons";
+      this.largeIconsToolStripMenuItem.Click += new System.EventHandler(this.largeIconsToolStripMenuItem_Click);
+      // 
+      // smallIconsToolStripMenuItem
+      // 
+      this.smallIconsToolStripMenuItem.Name = "smallIconsToolStripMenuItem";
+      this.smallIconsToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D2)));
+      this.smallIconsToolStripMenuItem.Size = new System.Drawing.Size(174, 22);
+      this.smallIconsToolStripMenuItem.Text = "Small Icons";
+      this.smallIconsToolStripMenuItem.Click += new System.EventHandler(this.smallIconsToolStripMenuItem_Click);
+      // 
+      // listToolStripMenuItem
+      // 
+      this.listToolStripMenuItem.Name = "listToolStripMenuItem";
+      this.listToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D3)));
+      this.listToolStripMenuItem.Size = new System.Drawing.Size(174, 22);
+      this.listToolStripMenuItem.Text = "List";
+      this.listToolStripMenuItem.Click += new System.EventHandler(this.listToolStripMenuItem_Click);
+      // 
+      // ilLargeImgClient
+      // 
+      this.ilLargeImgClient.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ilLargeImgClient.ImageStream")));
+      this.ilLargeImgClient.TransparentColor = System.Drawing.Color.Transparent;
+      this.ilLargeImgClient.Images.SetKeyName(0, "monitor-green.png");
+      this.ilLargeImgClient.Images.SetKeyName(1, "monitor-orange.png");
+      this.ilLargeImgClient.Images.SetKeyName(2, "monitor-red.png");
+      this.ilLargeImgClient.Images.SetKeyName(3, "monitor-gray.png");
+      // 
+      // ilLargeImgJob
+      // 
+      this.ilLargeImgJob.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ilLargeImgJob.ImageStream")));
+      this.ilLargeImgJob.TransparentColor = System.Drawing.Color.Transparent;
+      this.ilLargeImgJob.Images.SetKeyName(0, "ok.png");
+      this.ilLargeImgJob.Images.SetKeyName(1, "Forward.png");
+      this.ilLargeImgJob.Images.SetKeyName(2, "pause.png");
+      // 
+      // plClientDetails
+      // 
+      this.plClientDetails.BackColor = System.Drawing.SystemColors.Window;
+      this.plClientDetails.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+      this.plClientDetails.Controls.Add(this.lblState);
+      this.plClientDetails.Controls.Add(this.lblStateClient);
+      this.plClientDetails.Controls.Add(this.lblLogin);
+      this.plClientDetails.Controls.Add(this.lblLoginOn);
+      this.plClientDetails.Controls.Add(this.lblClientName);
+      this.plClientDetails.Controls.Add(this.pbClientControl);
+      this.plClientDetails.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.plClientDetails.Location = new System.Drawing.Point(0, 0);
+      this.plClientDetails.Name = "plClientDetails";
+      this.plClientDetails.Size = new System.Drawing.Size(421, 386);
+      this.plClientDetails.TabIndex = 1;
+      this.plClientDetails.Visible = false;
+      // 
+      // lblState
+      // 
+      this.lblState.AutoSize = true;
+      this.lblState.Location = new System.Drawing.Point(103, 76);
+      this.lblState.Name = "lblState";
+      this.lblState.Size = new System.Drawing.Size(42, 13);
+      this.lblState.TabIndex = 6;
+      this.lblState.Text = "lblState";
+      // 
+      // lblStateClient
+      // 
+      this.lblStateClient.AutoSize = true;
+      this.lblStateClient.Location = new System.Drawing.Point(29, 76);
+      this.lblStateClient.Name = "lblStateClient";
+      this.lblStateClient.Size = new System.Drawing.Size(32, 13);
+      this.lblStateClient.TabIndex = 5;
+      this.lblStateClient.Text = "State";
+      // 
+      // lblLogin
+      // 
+      this.lblLogin.AutoSize = true;
+      this.lblLogin.Location = new System.Drawing.Point(100, 55);
+      this.lblLogin.Name = "lblLogin";
+      this.lblLogin.Size = new System.Drawing.Size(43, 13);
+      this.lblLogin.TabIndex = 4;
+      this.lblLogin.Text = "lblLogin";
+      // 
+      // lblLoginOn
+      // 
+      this.lblLoginOn.AutoSize = true;
+      this.lblLoginOn.Location = new System.Drawing.Point(29, 55);
+      this.lblLoginOn.Name = "lblLoginOn";
+      this.lblLoginOn.Size = new System.Drawing.Size(69, 13);
+      this.lblLoginOn.TabIndex = 3;
+      this.lblLoginOn.Text = "last logged in";
+      // 
+      // lblClientName
+      // 
+      this.lblClientName.AutoSize = true;
+      this.lblClientName.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.lblClientName.Location = new System.Drawing.Point(41, 14);
+      this.lblClientName.Name = "lblClientName";
+      this.lblClientName.Size = new System.Drawing.Size(71, 13);
+      this.lblClientName.TabIndex = 2;
+      this.lblClientName.Text = "lblClientName";
+      // 
+      // pbClientControl
+      // 
+      this.pbClientControl.Location = new System.Drawing.Point(3, 4);
+      this.pbClientControl.Name = "pbClientControl";
+      this.pbClientControl.Size = new System.Drawing.Size(32, 32);
+      this.pbClientControl.TabIndex = 0;
+      this.pbClientControl.TabStop = false;
+      // 
+      // plUserDetails
+      // 
+      this.plUserDetails.BackColor = System.Drawing.SystemColors.Window;
+      this.plUserDetails.Controls.Add(this.lblUserName);
+      this.plUserDetails.Controls.Add(this.btnUserControlClose);
+      this.plUserDetails.Controls.Add(this.pbUserControl);
+      this.plUserDetails.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.plUserDetails.Location = new System.Drawing.Point(0, 0);
+      this.plUserDetails.Name = "plUserDetails";
+      this.plUserDetails.Size = new System.Drawing.Size(494, 346);
+      this.plUserDetails.TabIndex = 2;
+      // 
+      // lblUserName
+      // 
+      this.lblUserName.AutoSize = true;
+      this.lblUserName.Location = new System.Drawing.Point(41, 13);
+      this.lblUserName.Name = "lblUserName";
+      this.lblUserName.Size = new System.Drawing.Size(67, 13);
+      this.lblUserName.TabIndex = 5;
+      this.lblUserName.Text = "lblUserName";
+      // 
+      // btnUserControlClose
+      // 
+      this.btnUserControlClose.Location = new System.Drawing.Point(414, 3);
+      this.btnUserControlClose.Name = "btnUserControlClose";
+      this.btnUserControlClose.Size = new System.Drawing.Size(75, 23);
+      this.btnUserControlClose.TabIndex = 4;
+      this.btnUserControlClose.Text = "Close";
+      this.btnUserControlClose.UseVisualStyleBackColor = true;
+      // 
+      // pbUserControl
+      // 
+      this.pbUserControl.Location = new System.Drawing.Point(3, 3);
+      this.pbUserControl.Name = "pbUserControl";
+      this.pbUserControl.Size = new System.Drawing.Size(32, 32);
+      this.pbUserControl.TabIndex = 3;
+      this.pbUserControl.TabStop = false;
+      // 
+      // plJobDetails
+      // 
+      this.plJobDetails.BackColor = System.Drawing.SystemColors.Window;
+      this.plJobDetails.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+      this.plJobDetails.Controls.Add(this.lvJobDetails);
+      this.plJobDetails.Controls.Add(this.lblProgress);
+      this.plJobDetails.Controls.Add(this.lblStatus);
+      this.plJobDetails.Controls.Add(this.progressJob);
+      this.plJobDetails.Controls.Add(this.lblJobName);
+      this.plJobDetails.Controls.Add(this.pbJobControl);
+      this.plJobDetails.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.plJobDetails.Location = new System.Drawing.Point(0, 0);
+      this.plJobDetails.Name = "plJobDetails";
+      this.plJobDetails.Size = new System.Drawing.Size(421, 386);
+      this.plJobDetails.TabIndex = 1;
+      this.plJobDetails.Visible = false;
+      // 
+      // lvJobDetails
+      // 
+      this.lvJobDetails.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.chContent,
+            this.chDetails});
+      this.lvJobDetails.FullRowSelect = true;
+      this.lvJobDetails.GridLines = true;
+      this.lvJobDetails.Location = new System.Drawing.Point(17, 124);
+      this.lvJobDetails.Name = "lvJobDetails";
+      this.lvJobDetails.Size = new System.Drawing.Size(382, 243);
+      this.lvJobDetails.TabIndex = 17;
+      this.lvJobDetails.UseCompatibleStateImageBehavior = false;
+      this.lvJobDetails.View = System.Windows.Forms.View.Details;
+      // 
+      // chContent
+      // 
+      this.chContent.Text = "Content";
+      this.chContent.Width = 121;
+      // 
+      // chDetails
+      // 
+      this.chDetails.Text = "Details";
+      this.chDetails.Width = 255;
+      // 
+      // lblProgress
+      // 
+      this.lblProgress.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.lblProgress.BackColor = System.Drawing.Color.Transparent;
+      this.lblProgress.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
+      this.lblProgress.Location = new System.Drawing.Point(252, 108);
+      this.lblProgress.Name = "lblProgress";
+      this.lblProgress.Size = new System.Drawing.Size(143, 13);
+      this.lblProgress.TabIndex = 8;
+      this.lblProgress.Text = "lblProgress";
+      this.lblProgress.TextAlign = System.Drawing.ContentAlignment.TopRight;
+      // 
+      // lblStatus
+      // 
+      this.lblStatus.AutoSize = true;
+      this.lblStatus.BackColor = System.Drawing.Color.Transparent;
+      this.lblStatus.Location = new System.Drawing.Point(14, 55);
+      this.lblStatus.Name = "lblStatus";
+      this.lblStatus.Size = new System.Drawing.Size(88, 13);
+      this.lblStatus.TabIndex = 7;
+      this.lblStatus.Text = "Statusinformation";
+      // 
+      // progressJob
+      // 
+      this.progressJob.Location = new System.Drawing.Point(17, 73);
+      this.progressJob.Name = "progressJob";
+      this.progressJob.Size = new System.Drawing.Size(382, 23);
+      this.progressJob.TabIndex = 6;
+      // 
+      // lblJobName
+      // 
+      this.lblJobName.AutoSize = true;
+      this.lblJobName.Location = new System.Drawing.Point(41, 13);
+      this.lblJobName.Name = "lblJobName";
+      this.lblJobName.Size = new System.Drawing.Size(62, 13);
+      this.lblJobName.TabIndex = 5;
+      this.lblJobName.Text = "lblJobName";
+      // 
+      // pbJobControl
+      // 
+      this.pbJobControl.Location = new System.Drawing.Point(3, 3);
+      this.pbJobControl.Name = "pbJobControl";
+      this.pbJobControl.Size = new System.Drawing.Size(32, 32);
+      this.pbJobControl.TabIndex = 3;
+      this.pbJobControl.TabStop = false;
+      // 
+      // treeView2
+      // 
+      this.treeView2.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.treeView2.LineColor = System.Drawing.Color.Empty;
+      this.treeView2.Location = new System.Drawing.Point(0, 0);
+      this.treeView2.Name = "treeView2";
+      this.treeView2.Size = new System.Drawing.Size(139, 346);
+      this.treeView2.TabIndex = 0;
+      // 
+      // listView2
+      // 
+      this.listView2.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.listView2.Location = new System.Drawing.Point(0, 0);
+      this.listView2.Name = "listView2";
+      this.listView2.Size = new System.Drawing.Size(494, 346);
+      this.listView2.TabIndex = 0;
+      this.listView2.UseCompatibleStateImageBehavior = false;
+      // 
+      // timerSyncronize
+      // 
+      this.timerSyncronize.Interval = 10000;
+      this.timerSyncronize.Tick += new System.EventHandler(this.TickSync);
+      // 
+      // fileSystemWatcher1
+      // 
+      this.fileSystemWatcher1.EnableRaisingEvents = true;
+      this.fileSystemWatcher1.SynchronizingObject = this;
+      // 
+      // updaterWoker
+      // 
+      this.updaterWoker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.updaterWoker_DoWork);
+      this.updaterWoker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.updaterWoker_RunWorkerCompleted);
+      // 
+      // tpJobControl
+      // 
+      this.tpJobControl.Controls.Add(this.scJobControl);
+      this.tpJobControl.Location = new System.Drawing.Point(4, 22);
+      this.tpJobControl.Name = "tpJobControl";
+      this.tpJobControl.Padding = new System.Windows.Forms.Padding(3);
+      this.tpJobControl.Size = new System.Drawing.Size(885, 392);
+      this.tpJobControl.TabIndex = 1;
+      this.tpJobControl.Text = "Job Control";
+      this.tpJobControl.UseVisualStyleBackColor = true;
+      // 
+      // scJobControl
+      // 
+      this.scJobControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.scJobControl.Location = new System.Drawing.Point(3, 3);
+      this.scJobControl.Name = "scJobControl";
+      // 
+      // scJobControl.Panel1
+      // 
+      this.scJobControl.Panel1.Controls.Add(this.calculatingJobTabControl);
+      // 
+      // scJobControl.Panel2
+      // 
+      this.scJobControl.Panel2.Controls.Add(this.plJobDetails);
+      this.scJobControl.Size = new System.Drawing.Size(879, 386);
+      this.scJobControl.SplitterDistance = 454;
+      this.scJobControl.TabIndex = 0;
+      // 
+      // calculatingJobTabControl
+      // 
+      this.calculatingJobTabControl.Controls.Add(this.calculatingJobTabPage);
+      this.calculatingJobTabControl.Controls.Add(this.finishedJobsTabPage);
+      this.calculatingJobTabControl.Controls.Add(this.offlineJobsTabPage);
+      this.calculatingJobTabControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.calculatingJobTabControl.Location = new System.Drawing.Point(0, 0);
+      this.calculatingJobTabControl.Name = "calculatingJobTabControl";
+      this.calculatingJobTabControl.SelectedIndex = 0;
+      this.calculatingJobTabControl.Size = new System.Drawing.Size(454, 386);
+      this.calculatingJobTabControl.TabIndex = 0;
+      // 
+      // calculatingJobTabPage
+      // 
+      this.calculatingJobTabPage.Controls.Add(this.splitContainer5);
+      this.calculatingJobTabPage.Location = new System.Drawing.Point(4, 22);
+      this.calculatingJobTabPage.Name = "calculatingJobTabPage";
+      this.calculatingJobTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.calculatingJobTabPage.Size = new System.Drawing.Size(446, 360);
+      this.calculatingJobTabPage.TabIndex = 2;
+      this.calculatingJobTabPage.Text = "Calculating Jobs";
+      this.calculatingJobTabPage.UseVisualStyleBackColor = true;
+      // 
+      // splitContainer5
+      // 
+      this.splitContainer5.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer5.Location = new System.Drawing.Point(3, 3);
+      this.splitContainer5.Name = "splitContainer5";
+      this.splitContainer5.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      // 
+      // splitContainer5.Panel1
+      // 
+      this.splitContainer5.Panel1.Controls.Add(this.cmb_calculatingJob_count);
+      this.splitContainer5.Panel1.Controls.Add(this.btn_calculatingJobs_next);
+      this.splitContainer5.Panel1.Controls.Add(this.btn_calculatingJobs_prev);
+      // 
+      // splitContainer5.Panel2
+      // 
+      this.splitContainer5.Panel2.Controls.Add(this.lv_calculatingJobs);
+      this.splitContainer5.Size = new System.Drawing.Size(440, 354);
+      this.splitContainer5.SplitterDistance = 28;
+      this.splitContainer5.TabIndex = 3;
+      // 
+      // cmb_calculatingJob_count
+      // 
+      this.cmb_calculatingJob_count.FormattingEnabled = true;
+      this.cmb_calculatingJob_count.Items.AddRange(new object[] {
+            "25",
+            "50",
+            "75",
+            "100"});
+      this.cmb_calculatingJob_count.Location = new System.Drawing.Point(165, 3);
+      this.cmb_calculatingJob_count.Name = "cmb_calculatingJob_count";
+      this.cmb_calculatingJob_count.Size = new System.Drawing.Size(48, 21);
+      this.cmb_calculatingJob_count.TabIndex = 2;
+      this.cmb_calculatingJob_count.SelectedIndexChanged += new System.EventHandler(this.cmb_count_SelectedIndexChanged);
+      // 
+      // btn_calculatingJobs_next
+      // 
+      this.btn_calculatingJobs_next.Location = new System.Drawing.Point(84, 3);
+      this.btn_calculatingJobs_next.Name = "btn_calculatingJobs_next";
+      this.btn_calculatingJobs_next.Size = new System.Drawing.Size(75, 23);
+      this.btn_calculatingJobs_next.TabIndex = 1;
+      this.btn_calculatingJobs_next.Text = "-->";
+      this.btn_calculatingJobs_next.UseVisualStyleBackColor = true;
+      this.btn_calculatingJobs_next.Click += new System.EventHandler(this.btn_next_Click);
+      // 
+      // btn_calculatingJobs_prev
+      // 
+      this.btn_calculatingJobs_prev.Location = new System.Drawing.Point(3, 3);
+      this.btn_calculatingJobs_prev.Name = "btn_calculatingJobs_prev";
+      this.btn_calculatingJobs_prev.Size = new System.Drawing.Size(75, 23);
+      this.btn_calculatingJobs_prev.TabIndex = 0;
+      this.btn_calculatingJobs_prev.Text = "<--";
+      this.btn_calculatingJobs_prev.UseVisualStyleBackColor = true;
+      this.btn_calculatingJobs_prev.Click += new System.EventHandler(this.btn_prev_Click);
+      // 
+      // lv_calculatingJobs
+      // 
+      this.lv_calculatingJobs.ContextMenuStrip = this.contextMenuJob;
+      this.lv_calculatingJobs.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.lv_calculatingJobs.LargeImageList = this.ilLargeImgJob;
+      this.lv_calculatingJobs.Location = new System.Drawing.Point(0, 0);
+      this.lv_calculatingJobs.Name = "lv_calculatingJobs";
+      this.lv_calculatingJobs.Size = new System.Drawing.Size(440, 322);
+      this.lv_calculatingJobs.SmallImageList = this.ilSmallImgJob;
+      this.lv_calculatingJobs.TabIndex = 0;
+      this.lv_calculatingJobs.UseCompatibleStateImageBehavior = false;
+      this.lv_calculatingJobs.SelectedIndexChanged += new System.EventHandler(this.lv_Jobs_SelectedIndexChanged);
+      // 
+      // contextMenuJob
+      // 
+      this.contextMenuJob.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.menuItemGetSnapshot,
+            this.calcToolStripAbortItem});
+      this.contextMenuJob.Name = "contextMenuJob";
+      this.contextMenuJob.Size = new System.Drawing.Size(145, 48);
+      // 
+      // offlineItemAbortJob
+      // 
+      this.offlineItemAbortJob.Name = "offlineItemAbortJob";
+      this.offlineItemAbortJob.Size = new System.Drawing.Size(152, 22);
+      this.offlineItemAbortJob.Text = "Abort";
+      // 
+      // menuItemGetSnapshot
+      // 
+      this.menuItemGetSnapshot.Name = "menuItemGetSnapshot";
+      this.menuItemGetSnapshot.Size = new System.Drawing.Size(144, 22);
+      this.menuItemGetSnapshot.Text = "Get Snapshot";
+      // 
+      // ilSmallImgJob
+      // 
+      this.ilSmallImgJob.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ilSmallImgJob.ImageStream")));
+      this.ilSmallImgJob.TransparentColor = System.Drawing.Color.Transparent;
+      this.ilSmallImgJob.Images.SetKeyName(0, "ok.png");
+      this.ilSmallImgJob.Images.SetKeyName(1, "Forward.png");
+      this.ilSmallImgJob.Images.SetKeyName(2, "pause.png");
+      // 
+      // finishedJobsTabPage
+      // 
+      this.finishedJobsTabPage.Controls.Add(this.splitContainer2);
+      this.finishedJobsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.finishedJobsTabPage.Name = "finishedJobsTabPage";
+      this.finishedJobsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.finishedJobsTabPage.Size = new System.Drawing.Size(446, 360);
+      this.finishedJobsTabPage.TabIndex = 0;
+      this.finishedJobsTabPage.Text = "Finished Jobs";
+      this.finishedJobsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // splitContainer2
+      // 
+      this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer2.Location = new System.Drawing.Point(3, 3);
+      this.splitContainer2.Name = "splitContainer2";
+      this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      // 
+      // splitContainer2.Panel1
+      // 
+      this.splitContainer2.Panel1.Controls.Add(this.cmb_finishedJob_count);
+      this.splitContainer2.Panel1.Controls.Add(this.btn_finishedJob_next);
+      this.splitContainer2.Panel1.Controls.Add(this.btn_finishedJob_prev);
+      // 
+      // splitContainer2.Panel2
+      // 
+      this.splitContainer2.Panel2.Controls.Add(this.lv_finishedJobs);
+      this.splitContainer2.Size = new System.Drawing.Size(440, 354);
+      this.splitContainer2.SplitterDistance = 28;
+      this.splitContainer2.TabIndex = 2;
+      // 
+      // cmb_finishedJob_count
+      // 
+      this.cmb_finishedJob_count.FormattingEnabled = true;
+      this.cmb_finishedJob_count.Items.AddRange(new object[] {
+            "25",
+            "50",
+            "75",
+            "100"});
+      this.cmb_finishedJob_count.Location = new System.Drawing.Point(165, 3);
+      this.cmb_finishedJob_count.Name = "cmb_finishedJob_count";
+      this.cmb_finishedJob_count.Size = new System.Drawing.Size(48, 21);
+      this.cmb_finishedJob_count.TabIndex = 2;
+      this.cmb_finishedJob_count.SelectedIndexChanged += new System.EventHandler(this.cmb_count_SelectedIndexChanged);
+      // 
+      // btn_finishedJob_next
+      // 
+      this.btn_finishedJob_next.Location = new System.Drawing.Point(84, 3);
+      this.btn_finishedJob_next.Name = "btn_finishedJob_next";
+      this.btn_finishedJob_next.Size = new System.Drawing.Size(75, 23);
+      this.btn_finishedJob_next.TabIndex = 1;
+      this.btn_finishedJob_next.Text = "-->";
+      this.btn_finishedJob_next.UseVisualStyleBackColor = true;
+      this.btn_finishedJob_next.Click += new System.EventHandler(this.btn_next_Click);
+      // 
+      // btn_finishedJob_prev
+      // 
+      this.btn_finishedJob_prev.Location = new System.Drawing.Point(3, 3);
+      this.btn_finishedJob_prev.Name = "btn_finishedJob_prev";
+      this.btn_finishedJob_prev.Size = new System.Drawing.Size(75, 23);
+      this.btn_finishedJob_prev.TabIndex = 0;
+      this.btn_finishedJob_prev.Text = "<--";
+      this.btn_finishedJob_prev.UseVisualStyleBackColor = true;
+      this.btn_finishedJob_prev.Click += new System.EventHandler(this.btn_prev_Click);
+      // 
+      // lv_finishedJobs
+      // 
+      this.lv_finishedJobs.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.lv_finishedJobs.LargeImageList = this.ilLargeImgJob;
+      this.lv_finishedJobs.Location = new System.Drawing.Point(0, 0);
+      this.lv_finishedJobs.Name = "lv_finishedJobs";
+      this.lv_finishedJobs.Size = new System.Drawing.Size(440, 322);
+      this.lv_finishedJobs.SmallImageList = this.ilSmallImgJob;
+      this.lv_finishedJobs.TabIndex = 0;
+      this.lv_finishedJobs.UseCompatibleStateImageBehavior = false;
+      this.lv_finishedJobs.SelectedIndexChanged += new System.EventHandler(this.lv_Jobs_SelectedIndexChanged);
+      // 
+      // offlineJobsTabPage
+      // 
+      this.offlineJobsTabPage.Controls.Add(this.splitContainer4);
+      this.offlineJobsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.offlineJobsTabPage.Name = "offlineJobsTabPage";
+      this.offlineJobsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.offlineJobsTabPage.Size = new System.Drawing.Size(446, 360);
+      this.offlineJobsTabPage.TabIndex = 1;
+      this.offlineJobsTabPage.Text = "Offline Jobs";
+      this.offlineJobsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // splitContainer4
+      // 
+      this.splitContainer4.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer4.Location = new System.Drawing.Point(3, 3);
+      this.splitContainer4.Name = "splitContainer4";
+      this.splitContainer4.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      // 
+      // splitContainer4.Panel1
+      // 
+      this.splitContainer4.Panel1.Controls.Add(this.cmb_offlineJob_count);
+      this.splitContainer4.Panel1.Controls.Add(this.btn_offlineJob_next);
+      this.splitContainer4.Panel1.Controls.Add(this.btn_offlinejob_prev);
+      // 
+      // splitContainer4.Panel2
+      // 
+      this.splitContainer4.Panel2.Controls.Add(this.lv_offlineJobs);
+      this.splitContainer4.Size = new System.Drawing.Size(440, 354);
+      this.splitContainer4.SplitterDistance = 28;
+      this.splitContainer4.TabIndex = 3;
+      // 
+      // cmb_offlineJob_count
+      // 
+      this.cmb_offlineJob_count.FormattingEnabled = true;
+      this.cmb_offlineJob_count.Items.AddRange(new object[] {
+            "25",
+            "50",
+            "75",
+            "100"});
+      this.cmb_offlineJob_count.Location = new System.Drawing.Point(165, 3);
+      this.cmb_offlineJob_count.Name = "cmb_offlineJob_count";
+      this.cmb_offlineJob_count.Size = new System.Drawing.Size(48, 21);
+      this.cmb_offlineJob_count.TabIndex = 2;
+      this.cmb_offlineJob_count.SelectedIndexChanged += new System.EventHandler(this.cmb_count_SelectedIndexChanged);
+      // 
+      // btn_offlineJob_next
+      // 
+      this.btn_offlineJob_next.Location = new System.Drawing.Point(84, 3);
+      this.btn_offlineJob_next.Name = "btn_offlineJob_next";
+      this.btn_offlineJob_next.Size = new System.Drawing.Size(75, 23);
+      this.btn_offlineJob_next.TabIndex = 1;
+      this.btn_offlineJob_next.Text = "-->";
+      this.btn_offlineJob_next.UseVisualStyleBackColor = true;
+      this.btn_offlineJob_next.Click += new System.EventHandler(this.btn_next_Click);
+      // 
+      // btn_offlinejob_prev
+      // 
+      this.btn_offlinejob_prev.Location = new System.Drawing.Point(3, 3);
+      this.btn_offlinejob_prev.Name = "btn_offlinejob_prev";
+      this.btn_offlinejob_prev.Size = new System.Drawing.Size(75, 23);
+      this.btn_offlinejob_prev.TabIndex = 0;
+      this.btn_offlinejob_prev.Text = "<--";
+      this.btn_offlinejob_prev.UseVisualStyleBackColor = true;
+      this.btn_offlinejob_prev.Click += new System.EventHandler(this.btn_prev_Click);
+      // 
+      // lv_offlineJobs
+      // 
+      this.lv_offlineJobs.ContextMenuStrip = this.AbortContextMenuStrip;
+      this.lv_offlineJobs.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.lv_offlineJobs.LargeImageList = this.ilLargeImgJob;
+      this.lv_offlineJobs.Location = new System.Drawing.Point(0, 0);
+      this.lv_offlineJobs.Name = "lv_offlineJobs";
+      this.lv_offlineJobs.Size = new System.Drawing.Size(440, 322);
+      this.lv_offlineJobs.SmallImageList = this.ilSmallImgJob;
+      this.lv_offlineJobs.TabIndex = 0;
+      this.lv_offlineJobs.UseCompatibleStateImageBehavior = false;
+      this.lv_offlineJobs.SelectedIndexChanged += new System.EventHandler(this.lv_Jobs_SelectedIndexChanged);
+      // 
+      // AbortContextMenuStrip
+      // 
+      this.AbortContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.offlineItemAbortJob});
+      this.AbortContextMenuStrip.Name = "AbortContextMenuStrip";
+      this.AbortContextMenuStrip.Size = new System.Drawing.Size(105, 26);
+      // 
+      // ilSmallImgClient
+      // 
+      this.ilSmallImgClient.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ilSmallImgClient.ImageStream")));
+      this.ilSmallImgClient.TransparentColor = System.Drawing.Color.Transparent;
+      this.ilSmallImgClient.Images.SetKeyName(0, "monitor-green.png");
+      this.ilSmallImgClient.Images.SetKeyName(1, "monitor-orange.png");
+      this.ilSmallImgClient.Images.SetKeyName(2, "monitor-red.png");
+      this.ilSmallImgClient.Images.SetKeyName(3, "monitor-gray.png");
+      // 
+      // tpClientControl
+      // 
+      this.tpClientControl.AllowDrop = true;
+      this.tpClientControl.Controls.Add(this.scClientControl);
+      this.tpClientControl.Location = new System.Drawing.Point(4, 22);
+      this.tpClientControl.Name = "tpClientControl";
+      this.tpClientControl.Padding = new System.Windows.Forms.Padding(3);
+      this.tpClientControl.Size = new System.Drawing.Size(885, 392);
+      this.tpClientControl.TabIndex = 0;
+      this.tpClientControl.Text = "Client Control";
+      this.tpClientControl.UseVisualStyleBackColor = true;
+      // 
+      // scClientControl
+      // 
+      this.scClientControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.scClientControl.Location = new System.Drawing.Point(3, 3);
+      this.scClientControl.Name = "scClientControl";
+      // 
+      // scClientControl.Panel1
+      // 
+      this.scClientControl.Panel1.Controls.Add(this.splitContainer1);
+      // 
+      // scClientControl.Panel2
+      // 
+      this.scClientControl.Panel2.Controls.Add(this.plClientDetails);
+      this.scClientControl.Size = new System.Drawing.Size(879, 386);
+      this.scClientControl.SplitterDistance = 454;
+      this.scClientControl.TabIndex = 0;
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer1.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer1.Name = "splitContainer1";
+      // 
+      // splitContainer1.Panel1
+      // 
+      this.splitContainer1.Panel1.Controls.Add(this.btnRefresh);
+      this.splitContainer1.Panel1.Controls.Add(this.tvClientControl);
+      // 
+      // splitContainer1.Panel2
+      // 
+      this.splitContainer1.Panel2.Controls.Add(this.lvClientControl);
+      this.splitContainer1.Size = new System.Drawing.Size(454, 386);
+      this.splitContainer1.SplitterDistance = 151;
+      this.splitContainer1.TabIndex = 0;
+      // 
+      // btnRefresh
+      // 
+      this.btnRefresh.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.btnRefresh.Image = ((System.Drawing.Image)(resources.GetObject("btnRefresh.Image")));
+      this.btnRefresh.Location = new System.Drawing.Point(0, 357);
+      this.btnRefresh.Name = "btnRefresh";
+      this.btnRefresh.Size = new System.Drawing.Size(151, 29);
+      this.btnRefresh.TabIndex = 1;
+      this.btnRefresh.UseVisualStyleBackColor = true;
+      this.btnRefresh.Click += new System.EventHandler(this.Refresh_Click);
+      // 
+      // tvClientControl
+      // 
+      this.tvClientControl.AllowDrop = true;
+      this.tvClientControl.ContextMenuStrip = this.contextMenuGroup;
+      this.tvClientControl.Dock = System.Windows.Forms.DockStyle.Top;
+      this.tvClientControl.Location = new System.Drawing.Point(0, 0);
+      this.tvClientControl.Name = "tvClientControl";
+      this.tvClientControl.Size = new System.Drawing.Size(151, 357);
+      this.tvClientControl.TabIndex = 0;
+      this.tvClientControl.DragLeave += new System.EventHandler(this.tvClientControl_DragLeave);
+      this.tvClientControl.MouseUp += new System.Windows.Forms.MouseEventHandler(this.tvClientControl_MouseUp);
+      this.tvClientControl.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.tvClientControl_NodeMouseClick);
+      // 
+      // contextMenuGroup
+      // 
+      this.contextMenuGroup.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.menuItemAddGroup,
+            this.menuItemDeleteGroup,
+            this.menuItemOpenCalendar});
+      this.contextMenuGroup.Name = "contextMenuJob";
+      this.contextMenuGroup.Size = new System.Drawing.Size(154, 70);
+      // 
+      // menuItemAddGroup
+      // 
+      this.menuItemAddGroup.Name = "menuItemAddGroup";
+      this.menuItemAddGroup.Size = new System.Drawing.Size(153, 22);
+      this.menuItemAddGroup.Text = "Add Group";
+      // 
+      // menuItemDeleteGroup
+      // 
+      this.menuItemDeleteGroup.Name = "menuItemDeleteGroup";
+      this.menuItemDeleteGroup.Size = new System.Drawing.Size(153, 22);
+      this.menuItemDeleteGroup.Text = "Delete Group";
+      // 
+      // menuItemOpenCalendar
+      // 
+      this.menuItemOpenCalendar.Name = "menuItemOpenCalendar";
+      this.menuItemOpenCalendar.Size = new System.Drawing.Size(153, 22);
+      this.menuItemOpenCalendar.Text = "Open Calendar";
+      // 
+      // lvClientControl
+      // 
+      this.lvClientControl.AllowDrop = true;
+      this.lvClientControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.lvClientControl.ImeMode = System.Windows.Forms.ImeMode.Off;
+      this.lvClientControl.LargeImageList = this.ilLargeImgClient;
+      this.lvClientControl.Location = new System.Drawing.Point(0, 0);
+      this.lvClientControl.Name = "lvClientControl";
+      this.lvClientControl.Size = new System.Drawing.Size(299, 386);
+      this.lvClientControl.SmallImageList = this.ilSmallImgClient;
+      this.lvClientControl.TabIndex = 0;
+      this.lvClientControl.UseCompatibleStateImageBehavior = false;
+      this.lvClientControl.Click += new System.EventHandler(this.OnLVClientClicked);
+      // 
+      // tcManagementConsole
+      // 
+      this.tcManagementConsole.Controls.Add(this.tpClientControl);
+      this.tcManagementConsole.Controls.Add(this.tpJobControl);
+      this.tcManagementConsole.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tcManagementConsole.Location = new System.Drawing.Point(0, 24);
+      this.tcManagementConsole.Name = "tcManagementConsole";
+      this.tcManagementConsole.SelectedIndex = 0;
+      this.tcManagementConsole.Size = new System.Drawing.Size(893, 418);
+      this.tcManagementConsole.TabIndex = 1;
+      // 
+      // checkBox1
+      // 
+      this.checkBox1.AutoSize = true;
+      this.checkBox1.Location = new System.Drawing.Point(149, 114);
+      this.checkBox1.Name = "checkBox1";
+      this.checkBox1.Size = new System.Drawing.Size(80, 17);
+      this.checkBox1.TabIndex = 0;
+      this.checkBox1.Text = "checkBox1";
+      this.checkBox1.UseVisualStyleBackColor = true;
+      // 
+      // splitContainer3
+      // 
+      this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer3.Location = new System.Drawing.Point(3, 3);
+      this.splitContainer3.Name = "splitContainer3";
+      this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      // 
+      // splitContainer3.Panel1
+      // 
+      this.splitContainer3.Panel1.Controls.Add(this.comboBox1);
+      this.splitContainer3.Panel1.Controls.Add(this.button1);
+      this.splitContainer3.Panel1.Controls.Add(this.button2);
+      // 
+      // splitContainer3.Panel2
+      // 
+      this.splitContainer3.Panel2.Controls.Add(this.listView1);
+      this.splitContainer3.Size = new System.Drawing.Size(440, 354);
+      this.splitContainer3.SplitterDistance = 28;
+      this.splitContainer3.TabIndex = 2;
+      // 
+      // comboBox1
+      // 
+      this.comboBox1.FormattingEnabled = true;
+      this.comboBox1.Items.AddRange(new object[] {
+            "25",
+            "50",
+            "75",
+            "100"});
+      this.comboBox1.Location = new System.Drawing.Point(165, 3);
+      this.comboBox1.Name = "comboBox1";
+      this.comboBox1.Size = new System.Drawing.Size(48, 21);
+      this.comboBox1.TabIndex = 2;
+      // 
+      // button1
+      // 
+      this.button1.Location = new System.Drawing.Point(84, 3);
+      this.button1.Name = "button1";
+      this.button1.Size = new System.Drawing.Size(75, 23);
+      this.button1.TabIndex = 1;
+      this.button1.Text = "-->";
+      this.button1.UseVisualStyleBackColor = true;
+      // 
+      // button2
+      // 
+      this.button2.Location = new System.Drawing.Point(3, 3);
+      this.button2.Name = "button2";
+      this.button2.Size = new System.Drawing.Size(75, 23);
+      this.button2.TabIndex = 0;
+      this.button2.Text = "<--";
+      this.button2.UseVisualStyleBackColor = true;
+      // 
+      // listView1
+      // 
+      this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.listView1.LargeImageList = this.ilLargeImgJob;
+      this.listView1.Location = new System.Drawing.Point(0, 0);
+      this.listView1.Name = "listView1";
+      this.listView1.Size = new System.Drawing.Size(440, 322);
+      this.listView1.SmallImageList = this.ilSmallImgJob;
+      this.listView1.TabIndex = 0;
+      this.listView1.UseCompatibleStateImageBehavior = false;
+      // 
+      // toolStripMenuItem1
+      // 
+      this.toolStripMenuItem1.Name = "toolStripMenuItem1";
+      this.toolStripMenuItem1.Size = new System.Drawing.Size(152, 22);
+      this.toolStripMenuItem1.Text = "Abort";
+      // 
+      // calcToolStripAbortItem
+      // 
+      this.calcToolStripAbortItem.Name = "calcToolStripAbortItem";
+      this.calcToolStripAbortItem.Size = new System.Drawing.Size(144, 22);
+      this.calcToolStripAbortItem.Text = "Abort";
+      // 
+      // HiveServerManagementConsole
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(893, 442);
+      this.Controls.Add(this.tcManagementConsole);
+      this.Controls.Add(this.menuStrip1);
+      this.MainMenuStrip = this.menuStrip1;
+      this.Name = "HiveServerManagementConsole";
+      this.Text = "Management Console";
+      this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.HiveServerConsoleInformation_FormClosing);
+      this.menuStrip1.ResumeLayout(false);
+      this.menuStrip1.PerformLayout();
+      this.plClientDetails.ResumeLayout(false);
+      this.plClientDetails.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pbClientControl)).EndInit();
+      this.plUserDetails.ResumeLayout(false);
+      this.plUserDetails.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pbUserControl)).EndInit();
+      this.plJobDetails.ResumeLayout(false);
+      this.plJobDetails.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pbJobControl)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.fileSystemWatcher1)).EndInit();
+      this.tpJobControl.ResumeLayout(false);
+      this.scJobControl.Panel1.ResumeLayout(false);
+      this.scJobControl.Panel2.ResumeLayout(false);
+      this.scJobControl.ResumeLayout(false);
+      this.calculatingJobTabControl.ResumeLayout(false);
+      this.calculatingJobTabPage.ResumeLayout(false);
+      this.splitContainer5.Panel1.ResumeLayout(false);
+      this.splitContainer5.Panel2.ResumeLayout(false);
+      this.splitContainer5.ResumeLayout(false);
+      this.contextMenuJob.ResumeLayout(false);
+      this.finishedJobsTabPage.ResumeLayout(false);
+      this.splitContainer2.Panel1.ResumeLayout(false);
+      this.splitContainer2.Panel2.ResumeLayout(false);
+      this.splitContainer2.ResumeLayout(false);
+      this.offlineJobsTabPage.ResumeLayout(false);
+      this.splitContainer4.Panel1.ResumeLayout(false);
+      this.splitContainer4.Panel2.ResumeLayout(false);
+      this.splitContainer4.ResumeLayout(false);
+      this.AbortContextMenuStrip.ResumeLayout(false);
+      this.tpClientControl.ResumeLayout(false);
+      this.scClientControl.Panel1.ResumeLayout(false);
+      this.scClientControl.Panel2.ResumeLayout(false);
+      this.scClientControl.ResumeLayout(false);
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      this.splitContainer1.ResumeLayout(false);
+      this.contextMenuGroup.ResumeLayout(false);
+      this.tcManagementConsole.ResumeLayout(false);
+      this.splitContainer3.Panel1.ResumeLayout(false);
+      this.splitContainer3.Panel2.ResumeLayout(false);
+      this.splitContainer3.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.MenuStrip menuStrip1;
+    private System.Windows.Forms.ToolStripMenuItem informationToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem closeToolStripMenuItem;
+    private System.Windows.Forms.TreeView treeView2;
+    private System.Windows.Forms.ListView listView2;
+    private System.Windows.Forms.ImageList ilLargeImgClient;
+    private System.Windows.Forms.ToolStripMenuItem addToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem jobToolStripMenuItem;
+    private System.Windows.Forms.Timer timerSyncronize;
+    private System.Windows.Forms.ImageList ilLargeImgJob;
+    private System.Windows.Forms.Panel plClientDetails;
+    private System.Windows.Forms.PictureBox pbClientControl;
+    private System.Windows.Forms.Label lblClientName;
+    private System.Windows.Forms.Label lblLoginOn;
+    private System.Windows.Forms.Label lblLogin;
+    private System.Windows.Forms.Panel plJobDetails;
+    private System.Windows.Forms.Label lblJobName;
+    private System.Windows.Forms.PictureBox pbJobControl;
+    private System.Windows.Forms.Panel plUserDetails;
+    private System.Windows.Forms.Label lblUserName;
+    private System.Windows.Forms.Button btnUserControlClose;
+    private System.Windows.Forms.PictureBox pbUserControl;
+    private System.Windows.Forms.ProgressBar progressJob;
+    private System.IO.FileSystemWatcher fileSystemWatcher1;
+    private System.Windows.Forms.Label lblStatus;
+    private System.Windows.Forms.Label lblProgress;
+    private System.Windows.Forms.Label lblStateClient;
+    private System.Windows.Forms.Label lblState;
+    private System.ComponentModel.BackgroundWorker updaterWoker;
+    private System.Windows.Forms.TabControl tcManagementConsole;
+    private System.Windows.Forms.TabPage tpClientControl;
+    private System.Windows.Forms.SplitContainer scClientControl;
+    private System.Windows.Forms.ListView lvClientControl;
+    private System.Windows.Forms.TabPage tpJobControl;
+    private System.Windows.Forms.SplitContainer scJobControl;
+    private System.Windows.Forms.CheckBox checkBox1;
+    private System.Windows.Forms.ContextMenuStrip contextMenuJob;
+    private System.Windows.Forms.ToolStripMenuItem offlineItemAbortJob;
+    private System.Windows.Forms.ToolStripMenuItem menuItemGetSnapshot;
+    private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem largeIconsToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem smallIconsToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem listToolStripMenuItem;
+    private System.Windows.Forms.ImageList ilSmallImgClient;
+    private System.Windows.Forms.ImageList ilSmallImgJob;
+    private System.Windows.Forms.SplitContainer splitContainer1;
+    private System.Windows.Forms.ToolStripMenuItem refreshToolStripMenuItem;
+    private System.Windows.Forms.ListView lvJobDetails;
+    private System.Windows.Forms.ColumnHeader chContent;
+    private System.Windows.Forms.ColumnHeader chDetails;
+    private System.Windows.Forms.Button btnRefresh;
+    private System.Windows.Forms.TreeView tvClientControl;
+    private System.Windows.Forms.ContextMenuStrip contextMenuGroup;
+    private System.Windows.Forms.ToolStripMenuItem menuItemAddGroup;
+    private System.Windows.Forms.ToolStripMenuItem menuItemDeleteGroup;
+    private System.Windows.Forms.ToolStripMenuItem groupToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem projectToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem menuItemOpenCalendar;
+    private System.Windows.Forms.TabControl calculatingJobTabControl;
+    private System.Windows.Forms.TabPage finishedJobsTabPage;
+    private System.Windows.Forms.TabPage offlineJobsTabPage;
+    private System.Windows.Forms.TabPage calculatingJobTabPage;
+    private System.Windows.Forms.SplitContainer splitContainer2;
+    private System.Windows.Forms.Button btn_finishedJob_next;
+    private System.Windows.Forms.Button btn_finishedJob_prev;
+    private System.Windows.Forms.ComboBox cmb_finishedJob_count;
+    private System.Windows.Forms.ListView lv_finishedJobs;
+    private System.Windows.Forms.SplitContainer splitContainer3;
+    private System.Windows.Forms.ComboBox comboBox1;
+    private System.Windows.Forms.Button button1;
+    private System.Windows.Forms.Button button2;
+    private System.Windows.Forms.ListView listView1;
+    private System.Windows.Forms.SplitContainer splitContainer5;
+    private System.Windows.Forms.ComboBox cmb_calculatingJob_count;
+    private System.Windows.Forms.Button btn_calculatingJobs_next;
+    private System.Windows.Forms.Button btn_calculatingJobs_prev;
+    private System.Windows.Forms.ListView lv_calculatingJobs;
+    private System.Windows.Forms.SplitContainer splitContainer4;
+    private System.Windows.Forms.ComboBox cmb_offlineJob_count;
+    private System.Windows.Forms.Button btn_offlineJob_next;
+    private System.Windows.Forms.Button btn_offlinejob_prev;
+    private System.Windows.Forms.ListView lv_offlineJobs;
+    private System.Windows.Forms.ContextMenuStrip AbortContextMenuStrip;
+    private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1;
+    private System.Windows.Forms.ToolStripMenuItem calcToolStripAbortItem;
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerManagementConsole.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerManagementConsole.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerManagementConsole.cs	(revision 4340)
@@ -0,0 +1,891 @@
+﻿#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.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+using System.Threading;
+using System.ServiceModel;
+using HeuristicLab.Tracing;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+
+  /// <summary>
+  /// if form is closed the loginform gets an information
+  /// </summary>
+  /// <param name="cf"></param>
+  /// <param name="error"></param>
+  public delegate void closeForm(bool cf, bool error);
+
+  public delegate void updateListView(JobDataFetcher fetcher, ListView sender, int category);
+
+  public partial class HiveServerManagementConsole : Form {
+
+    public event closeForm closeFormEvent;
+
+    #region private variables
+    private ResponseList<JobDto> jobs = null;
+
+    List<ListViewGroup> jobGroup;
+    private Dictionary<Guid, List<ListViewItem>> clientList = new Dictionary<Guid, List<ListViewItem>>();
+    private List<Changes> changes = new List<Changes>();
+
+    private JobDto currentJob = null;
+    private SlaveDto currentSlave = null;
+
+    private TreeNode currentGroupNode = null;
+    Guid parentgroup = Guid.Empty;
+    private ToolTip tt = new ToolTip();
+
+    private const string NOGROUP = "No group";
+    private TreeNode hoverNode;
+    private List<ListViewGroup> lvSlaveGroups;
+
+    private JobDataFetcher jdfFinished = null;
+    private JobDataFetcher jdfOffline = null;
+    private JobDataFetcher jdfCalculating = null;
+
+
+    #endregion
+
+    #region Properties
+    private ISlaveManager SlaveManager {
+      get {
+        try {
+          return ServiceLocator.GetSlaveManager();
+        }
+        catch (FaultException ex) {
+          MessageBox.Show(ex.Message);
+        }
+        return null;
+      }
+    }
+    #endregion
+
+    public HiveServerManagementConsole() {
+      InitializeComponent();
+      Init();
+      AddSlaves();
+      //AddJobs();
+      StartAutoUpdateTimers();
+      //timerSyncronize.Start();
+    }
+
+    private void StartAutoUpdateTimers() {
+      jdfCalculating.NewDataAvailable += new EventHandler(jdf_NewDataAvailable);
+      jdfOffline.NewDataAvailable += new EventHandler(jdf_NewDataAvailable);
+      jdfFinished.NewDataAvailable += new EventHandler(jdf_NewDataAvailable);
+      jdfFinished.Start();
+      jdfOffline.Start();
+      jdfCalculating.Start();
+    }
+
+    void jdf_NewDataAvailable(object sender, EventArgs e) {
+      JobDataFetcher fetcher = (JobDataFetcher)sender;
+      if (fetcher.PollStates.Contains(JobState.Finished)) {
+        UpdateJobListView(fetcher, lv_finishedJobs, 0);
+      } else if (fetcher.PollStates.Contains(JobState.Calculating)) {
+        UpdateJobListView(fetcher, lv_calculatingJobs, 1);
+      } else if (fetcher.PollStates.Contains(JobState.Offline)) {
+        UpdateJobListView(fetcher, lv_offlineJobs, 2);
+      }
+    }
+
+    private void UpdateJobListView(JobDataFetcher fetcher, ListView listView, int category) {
+      if (listView.InvokeRequired) {
+        listView.Invoke(new updateListView(UpdateJobListView), new object[] { fetcher, listView, category });
+      } else {
+        listView.BeginUpdate();
+        listView.Items.Clear();
+        foreach (JobDto job in fetcher.CachedJobs) {
+          ListViewItem lvi = new ListViewItem(job.Id.ToString(), category);
+          lvi.Tag = job;
+          listView.Items.Add(lvi);
+        }
+        listView.EndUpdate();
+      }
+    }
+
+
+    private void Init() {
+
+      jdfFinished = new JobDataFetcher(new JobState[] { JobState.Finished }, 50);
+      jdfCalculating = new JobDataFetcher(new JobState[] { JobState.Calculating }, 50);
+      jdfOffline = new JobDataFetcher(new JobState[] { JobState.Offline }, 50);
+
+      cmb_finishedJob_count.SelectedItem = "50";
+      cmb_offlineJob_count.SelectedItem = "50";
+      cmb_calculatingJob_count.SelectedItem = "50";
+
+      calcToolStripAbortItem.Click += (s, e) => {
+        if (lv_calculatingJobs.SelectedItems.Count > 0) {
+          ServiceLocator.GetJobManager().AbortJob(((JobDto)lv_calculatingJobs.SelectedItems[0].Tag).Id);
+        }
+      };
+
+      offlineItemAbortJob.Click += (s, e) => {
+        if (lv_offlineJobs.SelectedItems.Count > 0) {
+          ServiceLocator.GetJobManager().AbortJob(((JobDto)lv_offlineJobs.SelectedItems[0].Tag).Id);
+        }
+      };
+
+      //adding group
+      menuItemAddGroup.Click += (s, e) => {
+        AddGroup addgroup = new AddGroup();
+        parentgroup = Guid.Empty;
+        if ((tvClientControl.SelectedNode != null) && (((SlaveGroupDto)tvClientControl.SelectedNode.Tag).Id != Guid.Empty)) {
+          parentgroup = ((SlaveGroupDto)tvClientControl.SelectedNode.Tag).Id;
+        }
+        addgroup.addGroupEvent += new AddGroupDelegate(addgroup_addGroupEvent);
+        addgroup.Show();
+      };
+
+      //adding group
+      menuItemDeleteGroup.Click += (s, e) => {
+        ISlaveManager slaveManager = ServiceLocator.GetSlaveManager();
+        if (tvClientControl.SelectedNode != null) {
+          Response resp = slaveManager.DeleteSlaveGroup(((SlaveGroupDto)tvClientControl.SelectedNode.Tag).Id);
+          if (tvClientControl.SelectedNode == currentGroupNode) {
+            currentGroupNode = null;
+          }
+          tvClientControl.Nodes.Remove(tvClientControl.SelectedNode);
+          AddSlaves();
+        }
+      };
+
+      menuItemOpenCalendar.Click += (s, e) => {
+        if (tvClientControl.SelectedNode != null) {
+          CgCalendar cal = new CgCalendar(((SlaveGroupDto)tvClientControl.SelectedNode.Tag).Id, ((SlaveGroupDto)tvClientControl.SelectedNode.Tag).Name);
+          cal.Show();
+        }
+      };
+
+
+      // drag item to treeview
+      lvClientControl.ItemDrag += delegate(object sender, ItemDragEventArgs e) {
+        List<string> itemIDs = new List<string>((sender as ListView).SelectedItems.Count);
+        foreach (ListViewItem item in (sender as ListView).SelectedItems) {
+          itemIDs.Add(item.Name);
+        }
+        (sender as ListView).DoDragDrop(itemIDs.ToArray(), DragDropEffects.Move);
+      };
+
+      // drag enter on treeview
+      tvClientControl.DragEnter += delegate(object sender, DragEventArgs e) {
+        e.Effect = DragDropEffects.Move;
+      };
+
+      // drag over
+      tvClientControl.DragOver += delegate(object sender, DragEventArgs e) {
+        Point mouseLocation = tvClientControl.PointToClient(new Point(e.X, e.Y));
+        TreeNode node = tvClientControl.GetNodeAt(mouseLocation);
+        if (node != null && ((SlaveGroupDto)node.Tag).Id != Guid.Empty) {
+          e.Effect = DragDropEffects.Move;
+          if (hoverNode == null) {
+            node.BackColor = Color.LightBlue;
+            node.ForeColor = Color.White;
+            hoverNode = node;
+          } else if (hoverNode != node) {
+            hoverNode.BackColor = Color.White;
+            hoverNode.ForeColor = Color.Black;
+            node.BackColor = Color.LightBlue;
+            node.ForeColor = Color.White;
+            hoverNode = node;
+          }
+        } else {
+          e.Effect = DragDropEffects.None;
+        }
+      };
+
+      // drag drop event
+      tvClientControl.DragDrop += delegate(object sender, DragEventArgs e) {
+        if (e.Data.GetDataPresent(typeof(string[]))) {
+          Point dropLocation = (sender as TreeView).PointToClient(new Point(e.X, e.Y));
+          TreeNode dropNode = (sender as TreeView).GetNodeAt(dropLocation);
+          if (((SlaveGroupDto)dropNode.Tag).Id != Guid.Empty) {
+            Dictionary<SlaveDto, Guid> clients = new Dictionary<SlaveDto, Guid>();
+            foreach (ListViewItem lvi in lvClientControl.SelectedItems) {
+              Guid groupId = Guid.Empty;
+              foreach (ListViewGroup lvg in lvSlaveGroups) {
+                if (lvi.Group.Header == ((SlaveGroupDto)lvg.Tag).Name) {
+                  groupId = ((SlaveGroupDto)lvg.Tag).Id;
+                }
+              }
+              clients.Add((SlaveDto)lvi.Tag, groupId);
+            }
+            ChangeGroup(clients, ((SlaveGroupDto)dropNode.Tag).Id);
+          }
+          tvClientControl_DragLeave(null, EventArgs.Empty);
+          AddSlaves();
+        }
+      };
+    }
+
+    /// <summary>
+    /// Change client to other group
+    /// </summary>
+    /// <param name="clients">list of clients</param>
+    /// <param name="clientgroupID">group of clients</param>
+    private void ChangeGroup(Dictionary<SlaveDto, Guid> clients, Guid clientgroupID) {
+      ISlaveManager slaveManager = ServiceLocator.GetSlaveManager();
+      foreach (KeyValuePair<SlaveDto, Guid> client in clients) {
+        if (client.Key.Id != Guid.Empty) {
+          Response resp = slaveManager.DeleteResourceFromGroup(client.Value, client.Key.Id);
+        }
+        slaveManager.AddResourceToGroup(clientgroupID, client.Key);
+      }
+    }
+
+    #region Backgroundworker
+    /// <summary>
+    /// event on Ticker
+    /// </summary>
+    /// <param name="obj"></param>
+    /// <param name="e"></param>
+    private void TickSync(object obj, EventArgs e) {
+      if (!updaterWoker.IsBusy) {
+        updaterWoker.RunWorkerAsync();
+      }
+    }
+
+    private void updaterWoker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
+      RefreshForm();
+    }
+
+    private void updaterWoker_DoWork(object sender, DoWorkEventArgs e) {
+      changes.Clear();
+
+      ResponseList<JobDto> jobsOld = jobs;
+      try {
+        IJobManager jobManager = ServiceLocator.GetJobManager();
+
+        jobs = jobManager.GetAllJobs();
+
+        IDictionary<int, JobDto> jobsOldHelp;
+        CloneList(jobsOld, out jobsOldHelp);
+
+        if (jobsOld != null && jobsOld.List != null && jobsOldHelp != null)
+          GetDelta(jobsOld.List, jobsOldHelp);
+
+      }
+      catch (FaultException fe) {
+        MessageBox.Show(fe.Message);
+      }
+
+    }
+
+    #endregion
+
+
+    private void AddSlaves() {
+      lvSlaveGroups = new List<ListViewGroup>();
+      clientList.Clear();
+      tvClientControl.Nodes.Clear();
+      try {
+        ResponseList<SlaveGroupDto> clientGroups = SlaveManager.GetAllSlaveGroups();
+
+        if (clientGroups != null && clientGroups.List != null) {
+          foreach (SlaveGroupDto cg in clientGroups.List) {
+            AddSlaveOrGroup(cg, null);
+          }
+
+          if (currentGroupNode != null) {
+            lvClientControl.Items.Clear();
+            lvClientControl.Groups.Clear();
+            AddGroupsToListView(currentGroupNode);
+          }
+          tvClientControl.ExpandAll();
+        }
+
+      }
+      catch (FaultException fe) {
+        MessageBox.Show(fe.Message);
+      }
+    }
+
+    private void AddSlaveOrGroup(SlaveGroupDto clientGroup, TreeNode currentNode) {
+      currentNode = CreateTreeNode(clientGroup, currentNode);
+      List<ListViewItem> clientGroupList = new List<ListViewItem>();
+      ListViewGroup lvg;
+      if (string.IsNullOrEmpty(clientGroup.Name)) {
+        lvg = new ListViewGroup(NOGROUP, HorizontalAlignment.Left);
+      } else {
+        lvg = new ListViewGroup(clientGroup.Name, HorizontalAlignment.Left);
+      }
+      lvClientControl.Groups.Add(lvg);
+      lvg.Tag = clientGroup;
+      lvSlaveGroups.Add(lvg);
+      foreach (ResourceDto resource in clientGroup.Resources) {
+        if (resource is SlaveDto) {
+          int percentageUsage = CapacityRam(((SlaveDto)resource).NrOfCores, ((SlaveDto)resource).NrOfFreeCores);
+          int usage = 3;
+          if ((((SlaveDto)resource).State != SlaveState.Offline) &&
+            (((SlaveDto)resource).State != SlaveState.NullState)) {
+            if ((percentageUsage >= 0) && (percentageUsage <= 25)) {
+              usage = 0;
+            } else if ((percentageUsage > 25) && (percentageUsage <= 75)) {
+              usage = 1;
+            } else if ((percentageUsage > 75) && (percentageUsage <= 100)) {
+              usage = 2;
+            }
+          }
+          ListViewItem lvi = new ListViewItem(resource.Name, usage, lvg);
+          lvi.Tag = resource as SlaveDto;
+          clientGroupList.Add(lvi);
+        } else if (resource is SlaveGroupDto) {
+          AddSlaveOrGroup(resource as SlaveGroupDto, currentNode);
+        }
+      }
+      clientList.Add(clientGroup.Id, clientGroupList);
+    }
+
+    private TreeNode CreateTreeNode(SlaveGroupDto clientGroup, TreeNode currentNode) {
+      TreeNode tn;
+      if (string.IsNullOrEmpty(clientGroup.Name)) {
+        tn = new TreeNode(NOGROUP);
+      } else {
+        tn = new TreeNode(clientGroup.Name);
+      }
+      tn.Tag = clientGroup;
+      if (currentNode == null) {
+        tvClientControl.Nodes.Add(tn);
+      } else {
+        currentNode.Nodes.Add(tn);
+      }
+      return tn;
+    }
+
+    private void AddGroupsToListView(TreeNode node) {
+      if (node != null) {
+        ListViewGroup lvg = new ListViewGroup(node.Text, HorizontalAlignment.Left);
+        lvClientControl.Groups.Add(lvg);
+        lvg.Tag = node.Tag;
+        foreach (ListViewItem item in clientList[((SlaveGroupDto)node.Tag).Id]) {
+          item.Group = lvg;
+          lvClientControl.Items.Add(item);
+        }
+
+        if (node.Nodes != null) {
+          foreach (TreeNode curNode in node.Nodes) {
+            AddGroupsToListView(curNode);
+          }
+        }
+      }
+    }
+
+    /// <summary>
+    /// if one job is clicked, the details for the clicked job are shown
+    /// in the second panel
+    /// </summary>
+    private void JobClicked() {
+      plJobDetails.Visible = true;
+      lvJobDetails.Items.Clear();
+
+      ResponseObject<JobDto> response = ServiceLocator.GetJobManager().GetJobByIdWithDetails(currentJob.Id);
+
+      if (response.StatusMessage != ResponseStatus.Ok || response.Obj == null)
+        return;
+
+      JobDto job = response.Obj;
+
+      //lvSnapshots.Enabled = true;
+
+      if (job.State == JobState.Offline) {
+        pbJobControl.Image = ilLargeImgJob.Images[2];
+      } else if (job.State == JobState.Calculating) {
+        pbJobControl.Image = ilLargeImgJob.Images[1];
+      } else if (job.State == JobState.Finished) {
+        pbJobControl.Image = ilLargeImgJob.Images[0];
+      }
+
+      lblJobName.Text = job.Id.ToString();
+      if (job.Percentage != null) {
+        progressJob.Value = (int)(currentJob.Percentage * 100);
+        lblProgress.Text = (int)(currentJob.Percentage * 100) + "% calculated";
+      }
+
+      ListViewItem lvi = new ListViewItem();
+      lvi.Text = "User:";
+      lvi.SubItems.Add(job.UserId.ToString());
+      lvJobDetails.Items.Add(lvi);
+
+      lvi = null;
+      lvi = new ListViewItem();
+      lvi.Text = "created at:";
+      lvi.SubItems.Add(job.DateCreated.ToString());
+      lvJobDetails.Items.Add(lvi);
+
+      if (job.ParentJob != null) {
+        lvi = null;
+        lvi = new ListViewItem();
+        lvi.Text = "Parent job:";
+        lvi.SubItems.Add(job.ParentJob.ToString());
+        lvJobDetails.Items.Add(lvi);
+      }
+
+      lvi = null;
+      lvi = new ListViewItem();
+      lvi.Text = "Priority:";
+      lvi.SubItems.Add(job.Priority.ToString());
+      lvJobDetails.Items.Add(lvi);
+
+      if (job.Project != null) {
+        lvi = null;
+        lvi = new ListViewItem();
+        lvi.Text = "Project:";
+        lvi.SubItems.Add(job.Project.Name.ToString());
+        lvJobDetails.Items.Add(lvi);
+      }
+
+      if (job.Slave != null) {
+        lvi = null;
+        lvi = new ListViewItem();
+        lvi.Text = "Calculation begin:";
+        lvi.SubItems.Add(job.DateCalculated.ToString());
+        lvJobDetails.Items.Add(lvi);
+
+
+        lvi = null;
+        lvi = new ListViewItem();
+        lvi.Text = "Slave calculated:";
+        lvi.SubItems.Add(job.Slave.Name.ToString());
+        lvJobDetails.Items.Add(lvi);
+
+        if (job.State == JobState.Finished) {
+          lvi = null;
+          lvi = new ListViewItem();
+          lvi.Text = "Calculation ended:";
+          lvi.SubItems.Add(job.DateFinished.ToString());
+          lvJobDetails.Items.Add(lvi);
+        }
+      }
+    }
+
+    /// <summary>
+    /// if one client is clicked, the details for the clicked client are shown
+    /// in the second panel
+    /// </summary>
+    private void SlaveClicked() {
+      plClientDetails.Visible = true;
+
+      if (currentSlave != null) {
+        int percentageUsage = CapacityRam(currentSlave.NrOfCores, currentSlave.NrOfFreeCores);
+        int usage = 3;
+        if ((currentSlave.State != SlaveState.Offline) && (currentSlave.State != SlaveState.NullState)) {
+          if ((percentageUsage >= 0) && (percentageUsage <= 25)) {
+            usage = 0;
+          } else if ((percentageUsage > 25) && (percentageUsage <= 75)) {
+            usage = 1;
+          } else if ((percentageUsage > 75) && (percentageUsage <= 100)) {
+            usage = 2;
+          }
+        }
+        pbClientControl.Image = ilLargeImgClient.Images[usage];
+        lblClientName.Text = currentSlave.Name;
+        lblLogin.Text = currentSlave.Login.ToString();
+        lblState.Text = currentSlave.State.ToString();
+      }
+    }
+
+    private void RefreshForm() {
+      foreach (Changes change in changes) {
+        if (change.Types == Type.Job) {
+          RefreshJob(change);
+        }
+      }
+    }
+
+    private void RefreshJob(Changes change) {
+      /*if (change.ChangeType == Change.Update) {
+        for (int i = 0; i < lvJobControl.Items.Count; i++) {
+          if (lvJobControl.Items[i].Text == change.ID.ToString()) {
+            foreach (JobDto job in jobs.List) {
+              if (job.Id == change.ID) {
+                lvJobControl.Items[i].Tag = job;
+                if (currentJob != null) {
+                  if (currentJob.Id == change.ID) {
+                    currentJob = job;
+                    JobClicked();
+                  }
+                }
+                break;
+              }
+            }
+            State state = jobs.List[change.Position].State;
+            if (state == State.finished) {
+              lvJobControl.Items[i].Group = jobGroup[1];
+              lvJobControl.Items[i].ImageIndex = 0;
+            } else if (state == State.calculating) {
+              lvJobControl.Items[i].Group = jobGroup[0];
+              lvJobControl.Items[i].ImageIndex = 1;
+            } else if (state == State.offline || state == State.pending) {
+              lvJobControl.Items[i].Group = jobGroup[2];
+              lvJobControl.Items[i].ImageIndex = 2;
+            }
+            lvJobControl.Refresh();
+          }
+        }
+      } else if (change.ChangeType == Change.Create) {
+
+        ListViewItem lvi = new ListViewItem(
+          change.ID.ToString(), 2, jobGroup[2]);
+        foreach (JobDto job in jobs.List) {
+          if (job.Id == change.ID) {
+            lvi.Tag = job;
+            break;
+          }
+        }
+        lvJobControl.Items.Add(lvi);
+
+      } else if (change.ChangeType == Change.Delete) {
+        for (int i = 0; i < lvJobControl.Items.Count; i++) {
+          if (change.ID.ToString() == lvJobControl.Items[i].Text.ToString()) {
+            lvJobControl.Items[i].Remove();
+            break;
+          }
+        }
+      }                    */
+    }
+
+
+    #region Eventhandlers
+    /// <summary>
+    /// Send event to Login-GUI when closing
+    /// </summary>
+    /// <param name="sender"></param>
+    /// <param name="e"></param>
+    private void Close_Click(object sender, EventArgs e) {
+      if (closeFormEvent != null) {
+        closeFormEvent(true, false);
+      }
+      this.Close();
+    }
+
+    /// <summary>
+    /// Send evnt to Login-GUI when closing
+    /// </summary>
+    /// <param name="sender"></param>
+    /// <param name="e"></param>
+    private void HiveServerConsoleInformation_FormClosing(object sender, FormClosingEventArgs e) {
+      if (closeFormEvent != null) {
+        closeFormEvent(true, false);
+      }
+    }
+
+    private void AddJob_Click(object sender, EventArgs e) {
+      AddJobForm newForm = new AddJobForm();
+      newForm.Show();
+      newForm.addJobEvent += new addDelegate(updaterWoker.RunWorkerAsync);
+    }
+
+    private void OnLVJobControlClicked(object sender, EventArgs e) {
+      JobListView jlv = (JobListView)sender;
+      currentJob = (JobDto)jlv.SelectedItems[0].Tag;
+      JobClicked();
+    }
+
+    private void lvJobControl_MouseMove(object sender, MouseEventArgs e) {
+      JobListView jlv = (JobListView)sender;
+      if ((jlv.GetItemAt(e.X, e.Y) != null) &&
+        (jlv.GetItemAt(e.X, e.Y).ToolTipText != null)) {
+        tt.SetToolTip(jlv, jlv.GetItemAt(e.X, e.Y).ToolTipText);
+      }
+    }
+
+    private void lvJobControl_MouseUp(object sender, MouseEventArgs e) {
+      // If the right mouse button was clicked and released,
+      // display the shortcut menu assigned to the ListView. 
+      JobListView jlv = (JobListView)sender;
+      jlv.ContextMenuStrip.Items.Clear();
+      ListViewHitTestInfo hitTestInfo = jlv.HitTest(e.Location);
+      if (e.Button == MouseButtons.Right && hitTestInfo.Item != null && jlv.SelectedItems.Count == 1) {
+        JobDto selectedJob = (JobDto)jlv.SelectedItems[0].Tag;
+
+        if (selectedJob != null && selectedJob.State == JobState.Calculating) {
+          jlv.ContextMenuStrip.Items.Add(offlineItemAbortJob);
+          jlv.ContextMenuStrip.Items.Add(menuItemGetSnapshot);
+        }
+      }
+      jlv.ContextMenuStrip.Show(new Point(e.X, e.Y));
+    }
+
+    private void tvClientControl_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) {
+      lvClientControl.Items.Clear();
+      lvClientControl.Groups.Clear();
+      currentGroupNode = e.Node;
+      AddGroupsToListView(e.Node);
+    }
+
+    private void groupToolStripMenuItem_Click(object sender, EventArgs e) {
+      AddGroup addgroup = new AddGroup();
+      parentgroup = Guid.Empty;
+      if ((tvClientControl.SelectedNode != null) && (((SlaveGroupDto)tvClientControl.SelectedNode.Tag).Id != Guid.Empty)) {
+        parentgroup = ((SlaveGroupDto)tvClientControl.SelectedNode.Tag).Id;
+      }
+      addgroup.addGroupEvent += new AddGroupDelegate(addgroup_addGroupEvent);
+      addgroup.Show();
+    }
+
+    private void projectToolStripMenuItem_Click(object sender, EventArgs e) {
+      AddProject addproject = new AddProject();
+      addproject.AddProjectEvent += new AddProjectDelegate(addproject_AddProjectEvent);
+      addproject.Show();
+    }
+
+    private void OnLVClientClicked(object sender, EventArgs e) {
+      currentSlave = (SlaveDto)lvClientControl.SelectedItems[0].Tag;
+      SlaveClicked();
+    }
+
+    private void tvClientControl_MouseUp(object sender, MouseEventArgs e) {
+      // If the right mouse button was clicked and released,
+      // display the shortcut menu assigned to the ListView. 
+      contextMenuGroup.Items.Clear();
+      TreeViewHitTestInfo hitTestInfo = tvClientControl.HitTest(e.Location);
+      tvClientControl.SelectedNode = hitTestInfo.Node;
+      if (e.Button != MouseButtons.Right) return;
+      if (hitTestInfo.Node != null) {
+        ResourceDto selectedGroup = (ResourceDto)tvClientControl.SelectedNode.Tag;
+
+        if (selectedGroup != null) {
+          contextMenuGroup.Items.Add(menuItemAddGroup);
+          contextMenuGroup.Items.Add(menuItemDeleteGroup);
+          contextMenuGroup.Items.Add(menuItemOpenCalendar);
+        }
+      } else {
+        contextMenuGroup.Items.Add(menuItemAddGroup);
+      }
+      tvClientControl.ContextMenuStrip.Show(tvClientControl, new Point(e.X, e.Y));
+    }
+
+    private void addproject_AddProjectEvent(string name) {
+      IJobManager jobManager = ServiceLocator.GetJobManager();
+
+      ProjectDto pg = new ProjectDto() { Name = name };
+      jobManager.CreateProject(pg);
+
+    }
+
+    private void addgroup_addGroupEvent(string name) {
+      ISlaveManager slaveManager = ServiceLocator.GetSlaveManager();
+
+      if (parentgroup != Guid.Empty) {
+        SlaveGroupDto cg = new SlaveGroupDto() { Name = name };
+        ResponseObject<SlaveGroupDto> respcg = slaveManager.AddSlaveGroup(cg);
+        Response res = slaveManager.AddResourceToGroup(parentgroup, respcg.Obj);
+        if (res != null && res.StatusMessage != ResponseStatus.Ok) {
+          MessageBox.Show(res.StatusMessage.ToString(), "Error adding Group", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        }
+      } else {
+        SlaveGroupDto cg = new SlaveGroupDto() { Name = name };
+        slaveManager.AddSlaveGroup(cg);
+      }
+      AddSlaves();
+    }
+
+
+    private void Refresh_Click(object sender, EventArgs e) {
+      Form overlayingForm = new Form();
+
+      overlayingForm.Show();
+      overlayingForm.FormBorderStyle = FormBorderStyle.None;
+      overlayingForm.BackColor = Color.Gray;
+      overlayingForm.Opacity = 0.4;
+      overlayingForm.Size = this.Size;
+      overlayingForm.Location = this.Location;
+
+      AddSlaves();
+
+      overlayingForm.Close();
+    }
+
+    private void largeIconsToolStripMenuItem_Click(object sender, EventArgs e) {
+      lvClientControl.View = View.LargeIcon;
+      //lvJobControl.View = View.LargeIcon;
+      largeIconsToolStripMenuItem.CheckState = CheckState.Checked;
+      smallIconsToolStripMenuItem.CheckState = CheckState.Unchecked;
+      listToolStripMenuItem.CheckState = CheckState.Unchecked;
+    }
+
+    private void smallIconsToolStripMenuItem_Click(object sender, EventArgs e) {
+      lvClientControl.View = View.SmallIcon;
+      //lvJobControl.View = View.SmallIcon;
+      largeIconsToolStripMenuItem.CheckState = CheckState.Unchecked;
+      smallIconsToolStripMenuItem.CheckState = CheckState.Checked;
+      listToolStripMenuItem.CheckState = CheckState.Unchecked;
+    }
+
+    private void listToolStripMenuItem_Click(object sender, EventArgs e) {
+      lvClientControl.View = View.List;
+      //lvJobControl.View = View.List;
+      largeIconsToolStripMenuItem.CheckState = CheckState.Unchecked;
+      smallIconsToolStripMenuItem.CheckState = CheckState.Unchecked;
+      listToolStripMenuItem.CheckState = CheckState.Checked;
+    }
+
+    private void tvClientControl_DragLeave(object sender, EventArgs e) {
+      foreach (TreeNode node in tvClientControl.Nodes) {
+        node.BackColor = Color.White;
+        node.ForeColor = Color.Black;
+      }
+    }
+    #endregion
+
+    #region Helper methods
+
+    private void CloneList(ResponseList<JobDto> oldList, out IDictionary<int, JobDto> newList) {
+      newList = new Dictionary<int, JobDto>();
+      if (oldList != null && oldList.List != null) {
+        for (int i = 0; i < oldList.List.Count; i++) {
+          newList.Add(i, oldList.List[i]);
+        }
+      }
+    }
+
+    private bool IsEqual(SlaveDto ci1, SlaveDto ci2) {
+      if (ci1 == null && ci2 == null) {
+        return true;
+      }
+      if (ci2 == null) {
+        return false;
+      }
+      if (ci1.Id.Equals(ci2.Id)) {
+        return true;
+      } else return false;
+    }
+
+    private int CapacityRam(int noCores, int freeCores) {
+      if (noCores > 0) {
+        int capacity = ((noCores - freeCores) / noCores) * 100;
+        return capacity;
+      }
+      return 100;
+    }
+
+    private void GetDelta(IList<JobDto> oldJobs, IDictionary<int, JobDto> helpJobs) {
+      bool found = false;
+      for (int i = 0; i < jobs.List.Count; i++) {
+        JobDto job = jobs.List[i];
+        for (int j = 0; j < oldJobs.Count; j++) {
+
+          JobDto jobold = oldJobs[j];
+
+          if (job.Id.Equals(jobold.Id)) {
+
+            found = true;
+            bool change = false;
+            if (job.State != jobold.State) {
+              change = true;
+            }
+            if (job.State != JobState.Offline) {
+              if ((!IsEqual(job.Slave, jobold.Slave)) || (job.State != jobold.State)
+                   || (job.Percentage != jobold.Percentage)) {
+                change = true;
+              }
+            } else if (job.DateCalculated != jobold.DateCalculated) {
+              change = true;
+            }
+            if (change) {
+              changes.Add(new Changes { Types = Type.Job, ID = job.Id, ChangeType = Change.Update, Position = i });
+            }
+
+            int removeAt = -1;
+            foreach (KeyValuePair<int, JobDto> kvp in helpJobs) {
+              if (job.Id.Equals(kvp.Value.Id)) {
+                removeAt = kvp.Key;
+                break;
+              }
+            }
+            if (removeAt >= 0) {
+              helpJobs.Remove(removeAt);
+            }
+            break;
+          }
+
+        }
+        if (found == false) {
+          changes.Add(new Changes { Types = Type.Job, ID = job.Id, ChangeType = Change.Create });
+        }
+        found = false;
+      }
+      foreach (KeyValuePair<int, JobDto> kvp in helpJobs) {
+        changes.Add(new Changes { Types = Type.Job, ID = kvp.Value.Id, ChangeType = Change.Delete, Position = kvp.Key });
+      }
+    }
+
+    #endregion
+
+    private void btn_prev_Click(object sender, EventArgs e) {
+      if (sender == btn_finishedJob_prev)
+        jdfFinished.Backward();
+      else if (sender == btn_calculatingJobs_prev)
+        jdfCalculating.Backward();
+      else if (sender == btn_offlinejob_prev) {
+        jdfOffline.Backward();
+      }
+    }
+
+    private void btn_next_Click(object sender, EventArgs e) {
+      if (sender == btn_finishedJob_next)
+        jdfFinished.Forward();
+      else if (sender == btn_calculatingJobs_next)
+        jdfCalculating.Forward();
+      else if (sender == btn_offlineJob_next) {
+        jdfOffline.Forward();
+      }
+    }
+
+    private void cmb_count_SelectedIndexChanged(object sender, EventArgs e) {
+      ComboBox box = (ComboBox)sender;
+      if (box.SelectedItem != null) {
+        int val;
+        if (Int32.TryParse(box.SelectedItem.ToString(), out val)) {
+          if (box == cmb_offlineJob_count) {
+            jdfOffline.NrOfEntriesOnPage = val;
+          } else if (box == cmb_finishedJob_count) {
+            jdfFinished.NrOfEntriesOnPage = val;
+          } else if (box == cmb_calculatingJob_count) {
+            jdfCalculating.NrOfEntriesOnPage = val;
+          }
+        }
+      }
+    }
+
+    private void lv_Jobs_SelectedIndexChanged(object sender, EventArgs e) {
+      ListView lv = (ListView)sender;
+      if (lv.SelectedItems.Count > 0) {
+        foreach (ListViewItem lvi in lv.SelectedItems) {
+          currentJob = (JobDto)lvi.Tag;
+          JobClicked();
+        }
+      }
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerManagementConsole.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerManagementConsole.resx	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerManagementConsole.resx	(revision 4340)
@@ -0,0 +1,460 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>32, 12</value>
+  </metadata>
+  <metadata name="ilLargeImgClient.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>129, 12</value>
+  </metadata>
+  <data name="ilLargeImgClient.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABo
+        FwAAAk1TRnQBSQFMAgEBBAEAAXQBAAF0AQABIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
+        AwABgAMAAUADAAEBAQABCAYAASAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
+        AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
+        AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
+        AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
+        AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
+        AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
+        ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
+        AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
+        AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
+        AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
+        AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
+        AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
+        AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
+        AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
+        AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
+        ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
+        Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
+        AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
+        AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
+        AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
+        ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
+        Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
+        AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
+        AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
+        AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
+        AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
+        AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
+        AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8A/wD/AP8A
+        /wD/AP8A/wD/AP8A/wD/AP8AEQALNQJWAZcDeAGXA1YKNQE0CywCUwV0AVIBTAFNCywMQAFGAWkEbwJG
+        DEAfkgHtCTUCVgGYAQcBvAPwArwB7wF4AlYENQE0AzUBNAksAU0BUgGTAQcBvAPwArwB7wF0AVIBTQks
+        CkABaQGTAQcBvAPwArwB7wFvAUYKQAuSAfcBBwG8AvADvAHvC5IB7Qg1AVYBmAG8AfAE8QLwAfEB8AIH
+        AZgBVgU0AjUBNAgsAVIBkwG8AfAE8QLwAfEB8AIHAZMBTAIsASsFLAhAAUYBkwG8AfAE8QLwAfEB8AIH
+        AZMBRgJAASAFQAmSAe8BvAHwBPEC8AHxAbwCBwHvCJIB7Qc1AVYB7wO8AfAD8QPwBAcB9wFQAi4FNAcs
+        AVIBmQO8AfAD8QPwBAcB7wFuBCsDLAdAAUYBkwO8AfAD8QPwBAcB7wFoAukCIANACJIBBwO8AfAD8QPw
+        BAcB7wHsBpIB7QY1AVYBmAMHAbwB8ALxAfADvAIHAe8C9wHtAU8CLgQ0BiwBTQGTAwcBvAHwAvEB8AO8
+        AgcB7wL3Ae0BSwMrAywHQAGTAwcBvAHwAvEB8AO8AgcB7wL3Ae0C6QIgA0AHkgHvAwcBvAHwAvEB8AO8
+        AgcB7wP3Ae0FkgHtBjUBVgGYBAcBvAPwAbwDBwHvAfcB7QGSAe0BTwY0BiwBUwGTBAcBvAPwAbwDBwHv
+        AfcB7QGSARwBSwMrAywHQAGTBAcBvAPwAbwDBwHvAfcB7QGSAe0B6QMgA0AHkgHvBAcBvAPwAbwDBwHv
+        AfcB7QGSAfcGkgHtBzUBlwHvBQcBvAIHAu8B7QLsAe0BkgFyAi4FNAcsAXQB7wUHAbwCBwLvAe0C7AHt
+        AfcBcwErAUwCKwMsB0ABaQGTBQcBvAIHAu8B7QLsAe0BkgFuAukFQAeSAe0B7wUHAbwCBwLvAe0C7AHt
+        CJIB7Qg1AVYBHAHvAQcD7wGSAuwCbQHrAewB9wHvAfcC7wFyBDQILAFMARwCBwPvAZIC7AJtAesB7AH3
+        Ae8BHALvAXQELAhAAUYBkwHvAQcD7wGSAuwCbQHrAewB9wHvARwC7wFvBEAJkgH3Be8BkgLsAm0B6wHs
+        AfcB7wH3Au8B7QOSAe0JNQE0AVABcgLtBewBkgLvAQcBvAHwAbwB7wFzAzUBNAksASsBTAFuAe0BkgXs
+        AZIC7wEHAbwB8AG8AQcBdAQsCkABRQFuAewB7QXsAZIC7wEHAbwB8AG8Ae8BbwRAC5ID7QXsAZIC7wEH
+        AbwB8AG8AQcB7QOSAe0KNQE0AVUBUAPsAe0B9wEHA7wBBwHvAfcCBwFzAzUBNAssAkwD7AHtAfcBBwO8
+        AQcB7wH3AgcBHAQsDEABRQPsAe0B9wEHA7wBBwHvAfcCBwGNBEANkgHtAuwB7QH3AQcDvAEHAe8B9wIH
+        BJIB7QU1AjQCUAFyAe0BkgH3A+8CBwHvAe0BbQETARUBEQEVAewBvAHtAVYCNQE0BSwBKwJMAUsBcwHt
+        AvcD7wIHAe8B7QFtARMBFQERARUB7AG8ARwBTQMsB0ABRgFFAW4B7QGSAfcD7wIHAe8B7QFtARMBFQER
+        ARUB7AG8Ae0EQAmSAu0BkgH3A+8CBwHvAe0BbQETARUBEQEVAewBvASSAe0BNQJWAXIB7AHtAfcFBwHv
+        AfcB7AFtARQCQwIRA0MBFAHsAbwB7QFWAjUBNAEsAU0BTAFzAewB7QHvBQcB7wH3AewBbQEUAkMCEQND
+        ARQB7AG8ARwBUwMsAUACRgJuAe0B9wUHAe8B9wHsAW0BFAJDAhEDQwEUAewBvAGSAUYDQASSAewB7QH3
+        BQcB7wH3AewBbQEUAkMCEQNDARQB7AG8AfcDkgHtATUBlwHtAu8DBwH3AewB6gEVAREDEAERAhUFFAET
+        AewBvAEcAVYCNQE0ASwBdAHtAu8DBwH3AewB6gEVAREDEAERAhUFFAETAewBvAEcAVIDLAFAAWkB7QLv
+        AwcB9wHsAeoBFQERAxABEQIVBRQBEwHsAbwBkgFGA0ACkgHtAu8DBwH3AewB6gEVAREDEAERAhUFFAET
+        AewBvAH3A5IB7QE1AXgB9wHtAewBbQEVARADDwMQAhEBFQEUAhMFEgHsAbwB9wFWAjUBNAEsAXQB9wHt
+        AewBbQEVARADDwMQAhEBFQEUAhMFEgHsAbwBHAFSAywBQAFvAfcB7QHsAW0BFQEQAw8DEAIRARUBFAIT
+        BRIB7AG8AfcBRgNAApIB9wHtAewBbQEVARADDwMQAhEBFQEUAhMFEgHsAbwB7wOSAe0BNQF4AfcBEQgQ
+        AxEBQwEUARIC6gVtAewBvAHvAVYCNQE0ASwBdQH3AREIEAMRAUMBFAESAuoFbQHsAbwB7wFSAywBQAFv
+        AfcBEQgQAxEBQwEUARIC6gVtAewBvAHvAWkDQAGSAe0B9wERCBADEQFDARQBEgLqBW0B7AG8Ae8DkgHt
+        ATUBVgHvARUBEQFDAxECEAMRAkMBEwRtBOsB7AEHAe8BlwI1ATQBLAFTAe8BFQERAUMDEQIQAxECQwET
+        BG0E6wHsAQcB7wF0AywBQAEXAe8BFQERAUMDEQIQAxECQwETBG0E6wHsAQcB7wFvA0ACkgHvARUBEQFD
+        AxECEAMRAkMBEwRtBOsB7AEHAe8B7QKSAe0BNQFWAe8BEwFDARUCQwERARADEQJDARUB6gnsAgcBcwI1
+        ATQBLAFTAe8BEwFDARUCQwERARADEQJDARUB6gnsAgcBdAMsAUABRgHvARMBQwEVAkMBEQEQAxECQwEV
+        AeoJ7AEHAe8BbwNAApIB7wETAUMBFQJDAREBEAMRAkMBFQHqCewCBwHtApIB7QE1AVYB7wFtARUCFAEV
+        BBEDQwEUAW0F7APtAewCBwFzAjUBNAEsAVMB7wFtARUCFAEVBBEDQwEUAW0F7APtAewCBwEcAywCQAHv
+        AW0BFQIUARUEEQNDARQBbQXsA+0B7AIHAW4DQAKSAe8BbQEVAhQBFQQRA0MBFAFtBewD7QHsAgcB7QKS
+        Ae0CNQHvAesBFQETARIBFAMRBEMBEwHsBpIB9wKSAe8BvAHtAjUBNAIsAe8B6wEVARMBEgEUAxEEQwET
+        AewGkgH3ApIB7wG8ARwDLAJAAZMB6wEVARMBEgEUAxEEQwETAewGkgH3ApIB7wG8Ae0DQAKSAe8B6wEV
+        ARMBEgEUAxEEQwETAewGkgH3ApIB7wG8Ae0CkgHtAjUBmAHsARQC6gEVAxEDQwEVARIB7AHvAvcF7wH3
+        Ae8B8AHtAjUBNAIsAZkB7AEUAuoBFQMRA0MBFQESAewB7wL3Be8B9wHvAfABHAFNAiwCQAGTAewBFALq
+        ARUDEQNDARUBEgHsAe8C9wXvAfcB7wHwAe0DQAKSAe8B7AEUAuoBFQMRA0MBFQESAewB7wL3Be8B9wHv
+        AfAB9wKSAe0CNQGYAfcBFAFtAeoBQwIRA0MCFQFtAZIF7wMHAu8B8AGSAVYBNQE0AiwBkwH3ARQBbQHq
+        AUMCEQNDAhUBbQGSBe8DBwLvAfABHAFSAiwCQAGTAfcBFAFtAeoBQwIRA0MCFQFtAZIF7wMHAu8B8AHt
+        AUYCQAHtAZIB9wGSARQBbQHqAUMCEQNDAhUBbQGSBe8DBwLvAfAB9wKSAe0CNQF4AfcBEwFtARICEQND
+        AhUBFAHsAe8GBwK8AgcB8AGSAVYBNQE0AiwBdAHvARMBbQESAhEDQwIVARQB7AHvBgcCvAIHAfABHAFS
+        AiwCQAFvAfcBEwFtARICEQNDAhUBFAHsAe8GBwK8AgcB8AGSAUYCQAHtApIB9wETAW0BEgIRA0MCFQEU
+        AewB7wYHArwCBwHwAfcCkgHtAjUBeAHvARMBbQEVARECQwIVAhQBEwHsBbwE8AG8AQcB8AH3AZcBNQE0
+        AiwBdAHvARMBbQEVARECQwIVAhQBEwHsBbwE8AG8AQcB8AEcAXQCLAJAAW8B9wETAW0BFQERAkMCFQIU
+        ARMB7AW8BPABvAEHAfAB9wFpAkAB7QKSAe8BEwFtARUBEQJDAhUCFAETAewFvATwAbwBBwHwAfcCkgHt
+        AjUBVgHvAhIBQwERAkMCFQIUAeoB9wXwBfEBBwHwAe8BlwE1ATQCLAFTAe8CEgFDARECQwIVAhQB6gH3
+        BfAF8QEHAfAB7wF0AiwCQAFGAe8CEgFDARECQwIVAhQB6gH3BfAF8QEHAfAB7wFvAkAB7QKSAe8CEgFD
+        ARECQwIVAhQB6gH3BfAF8QEHAfAB7wHtAZIB7QI1AVYB7wESARUBEQJDAhUDFAFtAQcB8gTxBfIBvAHx
+        Ae8BcgE1ATQCLAFTAe8BEgEVARECQwIVAxQBbQEHAfIE8QXyAbwB8QHvAXQCLAJAAUYB7wESARUBEQJD
+        AhUDFAFtAQcB8gTxBfIBvAHxAe8BbwJAAe0CkgHvARIBFQERAkMCFQMUAW0BBwHyBPEF8gG8AfEBBwHt
+        AZIB7QM1ARwBEgIRAkMCFQIUARMB7AHwBfIF8wLxAbwBcwE1ATQCLAFNAZMBEgIRAkMCFQIUARMB7AHw
+        BfIF8wLxAbwBdAIsA0ABkwESAhECQwIVAhQBEwHsAfAF8gXzAvEBvAFuAkADkgHvARICEQJDAhUCFAET
+        AewB8AXyBfMC8QG8Ae0BkgHtAzUBmAFtAhECQwIVAhQBEwGSAfII8wHyAfEBBwLwAe0BNQE0AywBkwFt
+        AhECQwIVAhQBEwGSAfII8wHyAfEBBwLwAe0BTQEsA0ABkwFtAhECQwIVAhQBEwGSAfII8wHyAfEBBwLw
+        AewCQAOSAe8BbQIRAkMCFQIUARMBkgHyCPMB8gHxAQcC8AHtAZIB7QM1AZgB7AFDARECQwIVAhQBEgHv
+        AfIB8QHwA7wFBwG8AvEBHAE1ATQDLAEcAewBQwERAkMCFQIUARIB7wHyAfEB8AO8BQcBvALxARwBTQEs
+        A0ABkwHsAUMBEQJDAhUCFAESAe8B8gHxAfADvAUHAbwC8QHtAkAEkgHsAUMBEQJDAhUCFAESAe8B8gHx
+        AfADvAYHAvECkgHtAzUBmAHtARUCEQJDARUCFAHqAe0D7wIHBLwBCAKZApgBVgE1ATQDLAGTAe0BFQIR
+        AkMBFQIUAeoB7QPvAgcFvAOZAZMBUwIsA0ABjgHtARUCEQJDARUCFAHqAe0D7wIHBLwBBwOTAY4BRgJA
+        BJIB7QEVAhECQwEVAhQB6gHtA+8CBwS8AQgB7wH3BJIB7QM1AXgB9wIUAeoBbQHsAZIB7wEHArwBBwII
+        AZkDmAN4BVYBNQE0AywBdAH3AhQB6gFtAewBkgHvAQcDvAEHA5kCkwJ0AXUFUwIsA0ABbwH3AhQB6gFt
+        AewBkgHvAQcCvAIHBZMBjgJvAWkERgJABJIB9wIUAeoBbQHsAZIB7wEHArwBBwEIAe8C9wuSAe0DNQF4
+        Ae8BBwG8AQcCCAGZApgCeAZWCjUBNAMsAXQCBwK8AQcDmQGTAXQBdQVTAU0LLANAAW8B7wEHAbwDBwOT
+        Am8BaQNGDUACkgLtAe8BBwG8AQcCCAHvAfcTkgHtBDUBVgGXA1YWNQE0BCwBUwF1A1MXLARAA2kCRhdA
+        A5IB7RuSAe0BQgFNAT4HAAE+AwABKAMAAYADAAFAAwABAQEAAQEGAAEEFgAD//8A/wD/AP8ABQAL
+</value>
+  </data>
+  <metadata name="ilLargeImgJob.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>239, 7</value>
+  </metadata>
+  <data name="ilLargeImgJob.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAO
+        DgAAAk1TRnQBSQFMAgEBAwEAAXQBAAF0AQABIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
+        AwABgAMAASADAAEBAQABCAYAARAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
+        AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
+        AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
+        AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
+        AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
+        AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
+        ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
+        AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
+        AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
+        AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
+        AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
+        AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
+        AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
+        AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
+        AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
+        ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
+        Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
+        AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
+        AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
+        AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
+        ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
+        Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
+        AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
+        AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
+        AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
+        AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
+        AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
+        AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wYAAaEBhhJsAYYBoQoA
+        AaEUxwGhCgABoQGGAYwQZwGMAYYBoSgAAaEBbAE1FDYBNQFsAaEGAAGhAccWrAHHAaEGAAGhAWcWTQFn
+        AaElAAGhAVAYNgFQAaEEAAGhBKwCsw7UArMErAGhBAABxAFMA00SUwNNAUwBxCMAAaEBUAM2AzcENg03
+        AzYBUAGhAgABoQOsAdQD2w7VA9sB1AOsAaECAAGhAUwCTQFTA1kFUwxZAVMCTQFMAaEiAAFsHDYBbAIA
+        AccCrAHVFdQC1QKsAccCAAFnAk0DUwNNElMCTQFnIQABoQE1HDYBNQKhAqwa1AKsAqECTQJTBE0UUwJN
+        AaEgAAGGHjYBhgHHAawBrRrUAa0BrAHHAYYBTQJTBE0WUwFNAYYgAAFsHjYBbAHHAawc1AGsAccBjAFN
+        AVMETRdTAU0BjCAAAWweNgFsAccBrBzUAawBxwFnAU0BUwNNGFMBTQFnIAABbAw2AXkBVxA2AWwBxwGs
+        B9QC3BPUAawBxwFnBE0FUwGaA/8BmgJTAZoD/wGaCFMBTQFnIAABbAs2AVcB9gHDEDYBbAHHAawH1AHc
+        Af8B9AHcEdQBrAHHAWcDTQZTAZoD/wEaAlMBGgP/AZoIUwFNAWcgAAFsCzYBGwL/AZ8PNgFsAccBrAfU
+        AdwD/wH0AdwP1AGsAccBZwJNB1MBmgP/ARoCUwEaA/8BmghTAU0BZyAAAWwKNgGfBP8BeQ42AWwBxwGs
+        B9QB3AX/AfQB3A3UAawBxwFnAU0IUwGaA/8BGgJTARoD/wGaCFMBTQFnIAABbAk2AVgF/wH2AVgNNgFs
+        AccBrAfUAdwH/wH0AdwL1AGsAccBZwFNCFMBmgP/ARoCUwEaA/8BmghTAU0BZyAAAWwINgFXAfYC/wHC
+        AXkC/wHDDTYBbAHHAawH1AHcCf8B9AHcCdQBrAHHAWcBTQhTAZoD/wEaAlMBGgP/AZoIUwFNAWcgAAFs
+        CDYBnwL/AfYBVwE2AZ8C/wGfDDYBbAHHAawH1AHcC/8B9AHbB9QBrAHHAWcBTQhTAZoD/wEaAlMBGgP/
+        AZoIUwFNAWcgAAFsCDYBWAL/AXkDNgHDAv8BeQs2AWwBxwGsB9QBCQr/ARkB2wjUAawBxwFnAU0IUwGa
+        A/8BGgJTARoD/wGaCFMBTQFnIAABbAk2AXkBnwQ2AVgC/wH2AVgKNgFsAccBrAfUAQkI/wH0AdsK1AGs
+        AccBZwFNCFMBmgP/ARoCUwEaA/8BmghTAU0BZyAAAWwQNgF+Av8Bwwo2AWwBxwGsB9QBCQb/AfQB3AzU
+        AawBxwFnAU0IUwGaA/8BGgJTARoD/wGaCFMBTQFnIAABbBE2ARsC/wGfCTYBbAHHAawH1AEJBf8B3A7U
+        AawBxwFnAU0IUwGaA/8BGgJTARoD/wGaCFMBTQFnIAABbBE2AVcB9gL/AXkINgFsAccBrAfUAQkD/wHc
+        ENQBrAHHAWcBTQhTAZoD/wEaAlMBGgP/AZoIUwFNAWcgAAFsEjYBeQL/AZ8GNgE3ATYBbAHHAawH1AEJ
+        Af8BCRLUAawBxwFnAU0IUwF1AxoBegJTAXoDGgF6CFMBTQFnIAABbBM2AZ8B9gFYBTYCNwE2AWwBxwGs
+        B9QB2wHVE9QBrAHHAWcBTRxTAU0BZyAAAWwUNgFYBTYCNwI2AWwBxwGsHNQBrAHHAWcBTRxTAU0BZyAA
+        AWwZNgM3AjYBbAHHAawc1AGsAccBjAFNHFMBTQGMIAABhgI2ATcVNgQ3AjYBhgHHAawBrQHVGNQB2wGt
+        AawBxwGGAU0cUwFNAYYgAAGhATUBNgI3EzYENwI2ATUCoQKsAdQB2xbUAdsB1AKsAqECTQFTAXUWUwF1
+        AVMCTQGhIQABbAI2ATcBOxY3AjYBbAIAAccCrAHVAtsR1APbAdUCrAHHAgABZwJNA3oSUwJ6AXUCTQFn
+        IgABoQFQAjYBNxQ7AzYBUAGhAgABoQOsAdQU2wHUA6wBoQIAAaEBTAJNAVMUegFTAk0BTAGhIwABoQFQ
+        BTYONwU2AVABoQQAAaEErAKzDtQCswSsAaEEAAHEAUwDTRJTA00BTAHEJQABoQFsATUUNgE1AWwBoQYA
+        AaEBxxasAccBoQYAAaEBZxZNAWcBoSgAAaEBhhJsAYYBoQoAAaEUxwGhCgABoQGGAYwQZwGMAYYBoSUA
+        AUIBTQE+BwABPgMAASgDAAGAAwABIAMAAQEBAAEBBgABAhYAA/8BAAH4AgABHwH4AgABHwH4AgABHwQA
+        AeACAAEHAeACAAEHAeACAAEHBAABwAIAAQMBwAIAAQMBwAIAAQMEAAGAAgABAQGAAgABAQGAAgABAQQA
+        AYACAAEBAYACAAEBAYACAAEB/wBlAAGAAgABAQGAAgABAQGAAgABAQQAAYACAAEBAYACAAEBAYACAAEB
+        BAABwAIAAQMBwAIAAQMBwAIAAQMEAAHgAgABBwHgAgABBwHgAgABBwQAAfgCAAEfAfgCAAEfAfgCAAEf
+        BAAL
+</value>
+  </data>
+  <metadata name="timerSyncronize.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>341, 9</value>
+  </metadata>
+  <metadata name="fileSystemWatcher1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>462, 9</value>
+  </metadata>
+  <metadata name="updaterWoker.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>286, 48</value>
+  </metadata>
+  <metadata name="contextMenuJob.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>144, 48</value>
+  </metadata>
+  <metadata name="ilSmallImgJob.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 48</value>
+  </metadata>
+  <data name="ilSmallImgJob.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABq
+        CQAAAk1TRnQBSQFMAgEBAwEAAXQBAAF0AQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
+        AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
+        AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
+        AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
+        AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
+        AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
+        AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
+        ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
+        AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
+        AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
+        AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
+        AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
+        AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
+        AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
+        AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
+        AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
+        ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
+        Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
+        AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
+        AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
+        AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
+        ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
+        Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
+        AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
+        AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
+        AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
+        AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
+        AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
+        AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wMAAWwKNgE1AaEDAAHH
+        C6wBoQMAAWcLTQGhEgABUAE2AjcCNgY3AjYBoQEAAqwC2wfVAdsB1AGsAaEBAAFMAU0CWQJTBlkBUwFN
+        AaEQAAGhDjYBNQGhAawN1AGsAaEBTQFTAk0KUwFNEAABbA82AccO1AGsAYwBUwJNC1MBTRAAAWwGNgFX
+        CDYBxwTUAdwJ1AGsAWcCTQJTAZoB/wGaAVMC/wRTAU0QAAFsBTYBGwH/CDYBxwTUAv8B3AfUAawBZwFN
+        A1MBmgH/ARoBUwL/BFMBTRAAAWwENgFYAv8B9gc2AccE1AT/AdwF1AGsAWcEUwGaAf8BGgFTAv8EUwFN
+        EAABbAQ2Af8B9gE2Af8BnwY2AccE1Ab/AdsD1AGsAWcEUwGaAf8BGgFTAv8EUwFNEAABbAQ2AXkCNgFY
+        Af8BWAU2AccE1AT/AfQF1AGsAWcEUwGaAf8BGgFTAv8EUwFNEAABbAg2ARsB/wU2AccE1AP/B9QBrAFn
+        BFMBmgH/ARoBUwL/BFMBTRAAAWwJNgH/AZ8ENgHHBNQB/wnUAawBZwRTAXUBGgF6AVMCGgRTAU0QAAFs
+        DTYBNwE2AccO1AGsAWcOUwFNEAABhgw2AjcBNgHHAa0M1AHbAawBhg5TAU0RAAE2DDcBNgFsAQABrAHV
+        AdsI1ALbAawBxwEAAU0CeglTAXoBTQFnEQABoQM2BzcCNgFQAgABoQKsAbMH1AGzAqwCAAHEAk0JUwFN
+        AUwUAAGGCWwBoQUACscBoQUAAYYIZwGMAaESAAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEBAQABAQUA
+        AYAXAAP/AQABwAEBAcABAQHAAQECAAGAAQABgAEAAYBbAAGAAQABgAEAAYADAAGAAQEBgAEBAYABAQIA
+        AeABAwHgAQMB4AEDAgAL
+</value>
+  </data>
+  <metadata name="AbortContextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>621, 9</value>
+  </metadata>
+  <metadata name="ilSmallImgClient.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>961, 9</value>
+  </metadata>
+  <data name="ilSmallImgClient.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABy
+        DAAAAk1TRnQBSQFMAgEBBAEAAXQBAAF0AQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
+        AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
+        AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
+        AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
+        AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
+        AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
+        AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
+        ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
+        AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
+        AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
+        AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
+        AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
+        AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
+        AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
+        AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
+        AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
+        ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
+        Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
+        AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
+        AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
+        AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
+        ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
+        Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
+        AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
+        AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
+        AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
+        AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
+        AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
+        AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8ABQAFNQFW
+        AQcC8AG8AXgBVgQ1BSwBUgEHAvABvAF0AU0ELAVAAWkBBwLwAbwBbwVABpIBBwHwArwGkgQ1Ae8BvAHw
+        AfEC8AIHAVABLgI0BCwBmQG8AfAB8QLwAgcBbgIrASwEQAGTAbwB8AHxAvACBwFoAekBIAFABJIBBwG8
+        AfAB8QLwAgcB7AOSAzUBVgIHAbwB8AG8AQcB7wLtAzQDLAFTAgcBvAHwAbwBBwHvAe0BHAIrASwEQAIH
+        AbwB8AG8AQcB7wLtAiABQASSAgcBvAHwAbwBBwHvAe0B9wOSBDUBVgPvAewBbQHrAvcB7wI0BCwBTAEH
+        Au8B7AFtAesB9wEcAe8CLARAAUYD7wHsAW0B6wH3ARwB7wJABZID7wHsAW0B6wL3Ae8CkgU1ATQBUAHs
+        Ae0BBwG8AQcB9wEHAjUGLAFMAewB7QEHAbwBBwH3AQcCLAZAAUUB7AHtAQcBvAEHAfcBBwJAB5IB7AHt
+        AQcBvAEHAfcBBwKSATUBVgHsAfcCBwHvAewBFAFDAREBQwEUAbwBVgE1ASwBTAHsAe8CBwHvAewBFAFD
+        AREBQwEUAbwBUwEsAUABRgFuAfcCBwHvAewBFAFDAREBQwEUAbwBRgFAApIB7AH3AgcB7wHsARQBQwER
+        AUMBFAG8ApIBNQH3AewBFQIPARABEQEVARMDEgG8AVYBNQEsAfcB7AEVAg8BEAERARUBEwMSAbwBUgEs
+        AUAB9wHsARUCDwEQAREBFQETAxIBvAFGAUABkgH3AewBFQIPARABEQEVARMDEgG8ApIBNQHvAxEBEAER
+        AUMBEwJtAusBBwGXATUBLAHvAxEBEAERAUMBEwJtAusBBwF0ASwBQAHvAxEBEAERAUMBEwJtAusBBwFv
+        AUABkgHvAxEBEAERAUMBEwJtAusBBwHtAZIBNQHvARUBFAIRAkMBbQLsAu0BBwFzATUBLAHvARUBFAIR
+        AkMBbQLsAu0BBwEcASwBQAHvARUBFAIRAkMBbQLsAu0BBwFuAUABkgHvARUBFAIRAkMBbQLsAu0BBwHt
+        AZIBNQGYARQB6gIRAUMBFQHsAfcE7wHtATUBLAGZARQB6gIRAUMBFQHsAfcE7wEcASwBQAGTARQB6gIR
+        AUMBFQHsAfcE7wHtAUABkgHvARQB6gIRAUMBFQHsAfcE7wH3AZIBNQF4ARMBEgERAUMBFQEUAe8DBwG8
+        AQcBkgE1ASwBdAETARIBEQFDARUBFAHvAwcBvAEHARwBLAFAAW8BEwESAREBQwEVARQB7wMHAbwBBwGS
+        AUAB7QGSARMBEgERAUMBFQEUAe8DBwG8AQcB9wGSATUBVgESAkMBFQEUAeoD8ALxAQcB7wE1ASwBUwES
+        AkMBFQEUAeoD8ALxAQcB7wEsAUABRgESAkMBFQEUAeoD8ALxAQcB7wFAAe0BkgESAkMBFQEUAeoD8ALx
+        AQcB7wGSAjUBEgERAUMBFQEUAewD8gLzAfEBvAE1ASwBTQESAREBQwEVARQB7APyAvMB8QG8ASwCQAES
+        AREBQwEVARQB7APyAvMB8QG8AUACkgESAREBQwEVARQB7APyAvMB8QG8AZICNQHsAREBQwEVARQB7wHx
+        ArwCBwG8AfEBNQIsAewBEQFDARUBFAHvAfECvAIHAbwB8QFNAkAB7AERAUMBFQEUAe8B8QK8AgcBvAHx
+        AUACkgHsAREBQwEVARQB7wHxArwDBwHxAZICNQH3ARQBbQGSAQcBvAEIAZkBmAJ4AlYBNQIsAfcBFAFt
+        AZIBBwG8AQcBmQGTAXQBdQJTASwCQAH3ARQBbQGSAQcBvAEHApMBjgFvAkYBQAKSAfcBFAFtAZIBBwG8
+        AQgB9waSAjUDVgs1AiwDUwssAkACaQFGC0AQkgFCAU0BPgcAAT4DAAEoAwABQAMAASADAAEBAQABAQYA
+        AQEWAAP//wACAAs=
+</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="btnRefresh.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAABcPgAA
+        XD4BFAM/EwAAA3hJREFUSEu1ls1PE2EQxj229ouPVNErgZOJicZDjR68mHg1JgYvxov/gIlHxARBoxGU
+        KlJUVJDypVIQKkXBpIootoC0tLS0pZEIiILfikAfZ5Zuu9sWaDQ2edLt7vvOrzPzzsxuALBBquIeRR7p
+        CKmQVJSmeC3vyUu0FzNOD3NIFhJYpU8VuGBXpiVeK+6L2sgRQQKAbm4hTZ/pVcA8ooN9Ug/H7GY4Z3PS
+        Eq/lPbyXbbAttsm2RUB7CT3oDmXj+Ts9uiay0B7IQFtU7YFMPAxmoiMUl5WurRMrsoWz0DuZjb4pPWxk
+        g20RoF0A0EU+u2d2aWEZz8Adlxq3R9SodWlQ59bg7qgG9SSzR4tGrxZNYytqId3z6XDfr8MDUuu4Dhb6
+        Q7ZwJupHtGLI8hlQwG7xhpo3atwi4wz4F4g1lCGGqoABhWXPlbgxrBa0HqTBqyMPWHFPXk4dRXd4p8yT
+        8j4le1HIgCLjSyWuD6nWhNhC+zHz3Y6lyHcsR35h7qcDg+9PwjdvpFADT8J7ZeEyOVQMOCUAKghgGlSt
+        Cnk2eVwwstbncXiPLCfVzo1xwOV+JaqcqpSQNr8BXxYCGJw5ja7gflj82zEwfQIRLMp43QSQJt7kkAAu
+        EeBaFFAtCdVNSnpHYB+dpmwh6XeiJ8v94WKSMwxolpysKjlAIQBWg0hPVk/4ED4tePB5YUzQl99+fP0d
+        wKOJXULiRYgMUN6vQCURRUidK5dCchZDM+fou5RUgqH3JRSiAzJPuEZYXCMNkhphSNVrSYjKXyhwhQAi
+        pMW7OykEsz9eU6g2xWqEw9Xo3SoAUkGuJQKMdEOEJAI4oa0+AzgnHK5W3w54P5pgf3ssVu2JEBmgjDxg
+        gAhp9hiSPFiOLODjz2H8WJwWnoU+tQhJFxOf6IkMcLFPgYqBFQCrKQqY/+XF9Ld+GSyCJbhnK1Drzlqz
+        pVSSPbHQCs/bFbj0ShmDNI4a4J9rosLTC4k3u7fBFjxMST4I82huWi2lTNIqCoqp2RkH4pBKp07w5Kok
+        8asVYurmqAbb5EYaa9eVBLhMXkg9+RtInVsNkyM24fJjA4db9t2RjagZ5tMUD1e6kFqaI40eNRrcKrFV
+        rwycxJF5nbpg65gG1qCG2oQ2pk667gzKZaXfrK6QBm0+DW5QvlKOzCgkaeifp6HPWm/4rzv0/+dryx8H
+        ysmLkjulowAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <metadata name="contextMenuGroup.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>803, 9</value>
+  </metadata>
+</root>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/JobDataFetcher.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/JobDataFetcher.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/JobDataFetcher.cs	(revision 4340)
@@ -0,0 +1,100 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using System.Timers;
+using HeuristicLab.Hive.Contracts;
+using System.Collections;
+using System.Threading;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+  public class JobDataFetcher {
+    private List<JobState> pollStates;
+
+    public IEnumerable<JobState> PollStates {
+      get { return pollStates; }
+    }
+
+    public event EventHandler NewDataAvailable;
+
+    private System.Timers.Timer timer;
+
+    private static object locker = new object();
+
+    public List<JobDto> CachedJobs { get; set; }
+
+    private IJobManager jobManager;
+
+    public double Interval {
+      get { return timer.Interval; }
+      set { timer.Interval = value; }
+    }
+
+    private int _nrOfEntriesOnPage;
+    public int NrOfEntriesOnPage {
+      get {
+        return _nrOfEntriesOnPage;
+      }
+      set {
+        Console.WriteLine("Setting for " + PollStates + " changed to: " + value);
+        _nrOfEntriesOnPage = value;
+        Thread t = new Thread(new ThreadStart(DoUpdateRun));
+        t.Start();
+      }
+    }
+    public int CurrentPage { get; set; }
+
+    public JobDataFetcher(IEnumerable<JobState> states, int nrOfEntries) {
+      pollStates = new List<JobState>();
+      CachedJobs = new List<JobDto>();
+      NrOfEntriesOnPage = nrOfEntries;
+      CurrentPage = 0;
+      pollStates.AddRange(states);
+      jobManager = ServiceLocator.GetJobManager();
+      timer = new System.Timers.Timer();
+      timer.Interval = 5000;
+      timer.Elapsed += new ElapsedEventHandler(Timer_Elapsed);
+    }
+
+    public void Start() {
+      timer.Start();
+    }
+
+    public void Forward() {
+      CurrentPage++;
+      DoUpdateRun();
+    }
+    public void Backward() {
+      if (CurrentPage != 0)
+        CurrentPage--;
+      DoUpdateRun();
+    }
+
+    private void Timer_Elapsed(object sender, ElapsedEventArgs e) {
+      DoUpdateRun();
+    }
+
+    private void DoUpdateRun() {
+      JobState[] pollStatesCopy = PollStates.ToArray();
+      for (int i = 0; i < pollStatesCopy.Length; i++) {
+        ResponseList<JobDto> resList = jobManager.GetAllJobsWithFilter(pollStatesCopy[i], CurrentPage * NrOfEntriesOnPage, NrOfEntriesOnPage);
+        if (resList.StatusMessage == ResponseStatus.Ok) {
+          if (resList.List.Count == 0) {
+            if (CurrentPage > 0) {
+              CurrentPage--;
+            }
+          } else {
+            CachedJobs = new List<JobDto>();
+            CachedJobs.AddRange(resList.List);
+          }
+        }
+      }
+      if (NewDataAvailable != null) {
+        NewDataAvailable(this, new EventArgs());
+      }
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/JobListView.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/JobListView.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/JobListView.cs	(revision 4340)
@@ -0,0 +1,136 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts.Interfaces;
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+  public class JobListView : ListView {
+    private ContextMenuStrip contextMenuJob;
+    private System.ComponentModel.IContainer components;
+    private ToolStripMenuItem menuItemAbortJob;
+    private ToolStripMenuItem menuItemGetSnapshot;
+    private ImageList ilLargeImgJob;
+    private ImageList ilSmallImgJob;
+
+    public int NrOfEntriesOnPage {
+      get {
+        return jdf.NrOfEntriesOnPage;
+      }
+      set {
+        jdf.NrOfEntriesOnPage = value;
+      }
+    }
+
+
+    private JobDataFetcher jdf;
+
+    public JobListView(IEnumerable<JobState> states, int nrOfEntries)
+      : base() {
+      InitializeComponent();
+      InitializeCustomControls();
+      jdf = new JobDataFetcher(states, nrOfEntries);
+      jdf.NewDataAvailable += new EventHandler(JdfNewDataAvailable);
+      jdf.Start();
+    }
+
+    private void JdfNewDataAvailable(object sender, EventArgs e) {
+      JobDataFetcher datafetcher = (JobDataFetcher)sender;
+      this.BeginUpdate();
+      if (datafetcher.PollStates.Contains(JobState.Finished)) {
+        this.Items.Clear();
+        ListViewItem lviDummy = new ListViewItem("blahr", 0);
+        this.Items.Add(lviDummy);
+        foreach (JobDto job in datafetcher.CachedJobs) {
+          ListViewItem lvi = new ListViewItem(job.Id.ToString(), 0);
+          lvi.Tag = job;
+          this.Items.Add(lvi);
+        }
+      }
+      this.EndUpdate();
+    }
+
+    public void Forward() {
+      jdf.Forward();
+    }
+
+    public void Backward() {
+      jdf.Backward();
+    }
+
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(JobListView));
+      this.contextMenuJob = new System.Windows.Forms.ContextMenuStrip(this.components);
+      this.menuItemAbortJob = new System.Windows.Forms.ToolStripMenuItem();
+      this.menuItemGetSnapshot = new System.Windows.Forms.ToolStripMenuItem();
+      this.ilLargeImgJob = new System.Windows.Forms.ImageList(this.components);
+      this.ilSmallImgJob = new System.Windows.Forms.ImageList(this.components);
+      this.contextMenuJob.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // contextMenuJob
+      // 
+      this.contextMenuJob.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.menuItemAbortJob,
+            this.menuItemGetSnapshot});
+      this.contextMenuJob.Name = "contextMenuJob";
+      this.contextMenuJob.Size = new System.Drawing.Size(145, 48);
+      // 
+      // menuItemAbortJob
+      // 
+      this.menuItemAbortJob.Name = "menuItemAbortJob";
+      this.menuItemAbortJob.Size = new System.Drawing.Size(144, 22);
+      this.menuItemAbortJob.Text = "Abort";
+      // 
+      // menuItemGetSnapshot
+      // 
+      this.menuItemGetSnapshot.Name = "menuItemGetSnapshot";
+      this.menuItemGetSnapshot.Size = new System.Drawing.Size(144, 22);
+      this.menuItemGetSnapshot.Text = "Get Snapshot";
+      // 
+      // ilLargeImgJob
+      // 
+      this.ilLargeImgJob.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ilLargeImgJob.ImageStream")));
+      this.ilLargeImgJob.TransparentColor = System.Drawing.Color.Transparent;
+      this.ilLargeImgJob.Images.SetKeyName(0, "ok.png");
+      this.ilLargeImgJob.Images.SetKeyName(1, "Forward.png");
+      this.ilLargeImgJob.Images.SetKeyName(2, "pause.png");
+      // 
+      // ilSmallImgJob
+      // 
+      this.ilSmallImgJob.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ilSmallImgJob.ImageStream")));
+      this.ilSmallImgJob.TransparentColor = System.Drawing.Color.Transparent;
+      this.ilSmallImgJob.Images.SetKeyName(0, "ok.png");
+      this.ilSmallImgJob.Images.SetKeyName(1, "Forward.png");
+      this.ilSmallImgJob.Images.SetKeyName(2, "pause.png");
+      // 
+      // JobListView
+      // 
+      this.LargeImageList = this.ilLargeImgJob;
+      this.SmallImageList = this.ilSmallImgJob;
+      this.contextMenuJob.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    private void InitializeCustomControls() {
+      menuItemAbortJob.Click += (s, e) => {
+        IJobManager jobManager = ServiceLocator.GetJobManager();
+        if (this.SelectedItems.Count == 1) {
+          jobManager.AbortJob(((JobDto)(this.SelectedItems[0].Tag)).Id);
+        }
+      };
+
+      //adding context menu items for jobs
+      menuItemGetSnapshot.Click += (s, e) => {
+        IJobManager jobManager = ServiceLocator.GetJobManager();
+        if (this.SelectedItems.Count == 1) {
+          jobManager.RequestSnapshot(((JobDto)(this.SelectedItems[0].Tag)).Id);
+        }
+      };
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/JobListView.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/JobListView.resx	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/JobListView.resx	(revision 4340)
@@ -0,0 +1,248 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="contextMenuJob.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="ilLargeImgJob.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>152, 21</value>
+  </metadata>
+  <data name="ilLargeImgJob.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAO
+        DgAAAk1TRnQBSQFMAgEBAwEAAVQBAAFUAQABIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
+        AwABgAMAASADAAEBAQABCAYAARAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
+        AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
+        AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
+        AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
+        AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
+        AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
+        ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
+        AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
+        AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
+        AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
+        AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
+        AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
+        AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
+        AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
+        AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
+        ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
+        Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
+        AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
+        AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
+        AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
+        ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
+        Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
+        AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
+        AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
+        AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
+        AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
+        AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
+        AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wYAAaEBhhJsAYYBoQoA
+        AaEUxwGhCgABoQGGAYwQZwGMAYYBoSgAAaEBbAE1FDYBNQFsAaEGAAGhAccWrAHHAaEGAAGhAWcWTQFn
+        AaElAAGhAVAYNgFQAaEEAAGhBKwCsw7UArMErAGhBAABxAFMA00SUwNNAUwBxCMAAaEBUAM2AzcENg03
+        AzYBUAGhAgABoQOsAdQD2w7VA9sB1AOsAaECAAGhAUwCTQFTA1kFUwxZAVMCTQFMAaEiAAFsHDYBbAIA
+        AccCrAHVFdQC1QKsAccCAAFnAk0DUwNNElMCTQFnIQABoQE1HDYBNQKhAqwa1AKsAqECTQJTBE0UUwJN
+        AaEgAAGGHjYBhgHHAawBrRrUAa0BrAHHAYYBTQJTBE0WUwFNAYYgAAFsHjYBbAHHAawc1AGsAccBjAFN
+        AVMETRdTAU0BjCAAAWweNgFsAccBrBzUAawBxwFnAU0BUwNNGFMBTQFnIAABbAw2AXkBVxA2AWwBxwGs
+        B9QC3BPUAawBxwFnBE0FUwGaA/8BmgJTAZoD/wGaCFMBTQFnIAABbAs2AVcB9gHDEDYBbAHHAawH1AHc
+        Af8B9AHcEdQBrAHHAWcDTQZTAZoD/wEaAlMBGgP/AZoIUwFNAWcgAAFsCzYBGwL/AZ8PNgFsAccBrAfU
+        AdwD/wH0AdwP1AGsAccBZwJNB1MBmgP/ARoCUwEaA/8BmghTAU0BZyAAAWwKNgGfBP8BeQ42AWwBxwGs
+        B9QB3AX/AfQB3A3UAawBxwFnAU0IUwGaA/8BGgJTARoD/wGaCFMBTQFnIAABbAk2AVgF/wH2AVgNNgFs
+        AccBrAfUAdwH/wH0AdwL1AGsAccBZwFNCFMBmgP/ARoCUwEaA/8BmghTAU0BZyAAAWwINgFXAfYC/wHC
+        AXkC/wHDDTYBbAHHAawH1AHcCf8B9AHcCdQBrAHHAWcBTQhTAZoD/wEaAlMBGgP/AZoIUwFNAWcgAAFs
+        CDYBnwL/AfYBVwE2AZ8C/wGfDDYBbAHHAawH1AHcC/8B9AHbB9QBrAHHAWcBTQhTAZoD/wEaAlMBGgP/
+        AZoIUwFNAWcgAAFsCDYBWAL/AXkDNgHDAv8BeQs2AWwBxwGsB9QBCQr/ARkB2wjUAawBxwFnAU0IUwGa
+        A/8BGgJTARoD/wGaCFMBTQFnIAABbAk2AXkBnwQ2AVgC/wH2AVgKNgFsAccBrAfUAQkI/wH0AdsK1AGs
+        AccBZwFNCFMBmgP/ARoCUwEaA/8BmghTAU0BZyAAAWwQNgF+Av8Bwwo2AWwBxwGsB9QBCQb/AfQB3AzU
+        AawBxwFnAU0IUwGaA/8BGgJTARoD/wGaCFMBTQFnIAABbBE2ARsC/wGfCTYBbAHHAawH1AEJBf8B3A7U
+        AawBxwFnAU0IUwGaA/8BGgJTARoD/wGaCFMBTQFnIAABbBE2AVcB9gL/AXkINgFsAccBrAfUAQkD/wHc
+        ENQBrAHHAWcBTQhTAZoD/wEaAlMBGgP/AZoIUwFNAWcgAAFsEjYBeQL/AZ8GNgE3ATYBbAHHAawH1AEJ
+        Af8BCRLUAawBxwFnAU0IUwF1AxoBegJTAXoDGgF6CFMBTQFnIAABbBM2AZ8B9gFYBTYCNwE2AWwBxwGs
+        B9QB2wHVE9QBrAHHAWcBTRxTAU0BZyAAAWwUNgFYBTYCNwI2AWwBxwGsHNQBrAHHAWcBTRxTAU0BZyAA
+        AWwZNgM3AjYBbAHHAawc1AGsAccBjAFNHFMBTQGMIAABhgI2ATcVNgQ3AjYBhgHHAawBrQHVGNQB2wGt
+        AawBxwGGAU0cUwFNAYYgAAGhATUBNgI3EzYENwI2ATUCoQKsAdQB2xbUAdsB1AKsAqECTQFTAXUWUwF1
+        AVMCTQGhIQABbAI2ATcBOxY3AjYBbAIAAccCrAHVAtsR1APbAdUCrAHHAgABZwJNA3oSUwJ6AXUCTQFn
+        IgABoQFQAjYBNxQ7AzYBUAGhAgABoQOsAdQU2wHUA6wBoQIAAaEBTAJNAVMUegFTAk0BTAGhIwABoQFQ
+        BTYONwU2AVABoQQAAaEErAKzDtQCswSsAaEEAAHEAUwDTRJTA00BTAHEJQABoQFsATUUNgE1AWwBoQYA
+        AaEBxxasAccBoQYAAaEBZxZNAWcBoSgAAaEBhhJsAYYBoQoAAaEUxwGhCgABoQGGAYwQZwGMAYYBoSUA
+        AUIBTQE+BwABPgMAASgDAAGAAwABIAMAAQEBAAEBBgABAhYAA/8BAAH4AgABHwH4AgABHwH4AgABHwQA
+        AeACAAEHAeACAAEHAeACAAEHBAABwAIAAQMBwAIAAQMBwAIAAQMEAAGAAgABAQGAAgABAQGAAgABAQQA
+        AYACAAEBAYACAAEBAYACAAEB/wBlAAGAAgABAQGAAgABAQGAAgABAQQAAYACAAEBAYACAAEBAYACAAEB
+        BAABwAIAAQMBwAIAAQMBwAIAAQMEAAHgAgABBwHgAgABBwHgAgABBwQAAfgCAAEfAfgCAAEfAfgCAAEf
+        BAAL
+</value>
+  </data>
+  <metadata name="ilSmallImgJob.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>280, 21</value>
+  </metadata>
+  <data name="ilSmallImgJob.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABq
+        CQAAAk1TRnQBSQFMAgEBAwEAAVQBAAFUAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
+        AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
+        AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
+        AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
+        AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
+        AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
+        AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
+        ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
+        AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
+        AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
+        AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
+        AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
+        AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
+        AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
+        AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
+        AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
+        ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
+        Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
+        AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
+        AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
+        AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
+        ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
+        Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
+        AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
+        AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
+        AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
+        AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
+        AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
+        AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wMAAWwKNgE1AaEDAAHH
+        C6wBoQMAAWcLTQGhEgABUAE2AjcCNgY3AjYBoQEAAqwC2wfVAdsB1AGsAaEBAAFMAU0CWQJTBlkBUwFN
+        AaEQAAGhDjYBNQGhAawN1AGsAaEBTQFTAk0KUwFNEAABbA82AccO1AGsAYwBUwJNC1MBTRAAAWwGNgFX
+        CDYBxwTUAdwJ1AGsAWcCTQJTAZoB/wGaAVMC/wRTAU0QAAFsBTYBGwH/CDYBxwTUAv8B3AfUAawBZwFN
+        A1MBmgH/ARoBUwL/BFMBTRAAAWwENgFYAv8B9gc2AccE1AT/AdwF1AGsAWcEUwGaAf8BGgFTAv8EUwFN
+        EAABbAQ2Af8B9gE2Af8BnwY2AccE1Ab/AdsD1AGsAWcEUwGaAf8BGgFTAv8EUwFNEAABbAQ2AXkCNgFY
+        Af8BWAU2AccE1AT/AfQF1AGsAWcEUwGaAf8BGgFTAv8EUwFNEAABbAg2ARsB/wU2AccE1AP/B9QBrAFn
+        BFMBmgH/ARoBUwL/BFMBTRAAAWwJNgH/AZ8ENgHHBNQB/wnUAawBZwRTAXUBGgF6AVMCGgRTAU0QAAFs
+        DTYBNwE2AccO1AGsAWcOUwFNEAABhgw2AjcBNgHHAa0M1AHbAawBhg5TAU0RAAE2DDcBNgFsAQABrAHV
+        AdsI1ALbAawBxwEAAU0CeglTAXoBTQFnEQABoQM2BzcCNgFQAgABoQKsAbMH1AGzAqwCAAHEAk0JUwFN
+        AUwUAAGGCWwBoQUACscBoQUAAYYIZwGMAaESAAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEBAQABAQUA
+        AYAXAAP/AQABwAEBAcABAQHAAQECAAGAAQABgAEAAYBbAAGAAQABgAEAAYADAAGAAQEBgAEBAYABAQIA
+        AeABAwHgAQMB4AEDAgAL
+</value>
+  </data>
+  <metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </metadata>
+</root>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/JobListViewControl.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/JobListViewControl.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/JobListViewControl.Designer.cs	(revision 4340)
@@ -0,0 +1,118 @@
+﻿namespace HeuristicLab.Hive.Server.ServerConsole {
+  partial class JobListViewControl {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+      this.comboBox1 = new System.Windows.Forms.ComboBox();
+      this.btn_finishedJob_next = new System.Windows.Forms.Button();
+      this.btn_finishedJob_prev = new System.Windows.Forms.Button();
+      this.listView1 = new JobListView(null, 5);
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer1.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer1.Name = "splitContainer1";
+      this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      // 
+      // splitContainer1.Panel1
+      // 
+      this.splitContainer1.Panel1.Controls.Add(this.comboBox1);
+      this.splitContainer1.Panel1.Controls.Add(this.btn_finishedJob_next);
+      this.splitContainer1.Panel1.Controls.Add(this.btn_finishedJob_prev);
+      // 
+      // splitContainer1.Panel2
+      // 
+      this.splitContainer1.Panel2.Controls.Add(this.listView1);
+      this.splitContainer1.Size = new System.Drawing.Size(586, 479);
+      this.splitContainer1.SplitterDistance = 31;
+      this.splitContainer1.TabIndex = 0;
+      // 
+      // comboBox1
+      // 
+      this.comboBox1.FormattingEnabled = true;
+      this.comboBox1.Items.AddRange(new object[] {
+            "25",
+            "50",
+            "75",
+            "100"});
+      this.comboBox1.Location = new System.Drawing.Point(165, 3);
+      this.comboBox1.Name = "comboBox1";
+      this.comboBox1.Size = new System.Drawing.Size(48, 21);
+      this.comboBox1.TabIndex = 5;
+      // 
+      // btn_finishedJob_next
+      // 
+      this.btn_finishedJob_next.Location = new System.Drawing.Point(84, 3);
+      this.btn_finishedJob_next.Name = "btn_finishedJob_next";
+      this.btn_finishedJob_next.Size = new System.Drawing.Size(75, 23);
+      this.btn_finishedJob_next.TabIndex = 4;
+      this.btn_finishedJob_next.Text = "-->";
+      this.btn_finishedJob_next.UseVisualStyleBackColor = true;
+      // 
+      // btn_finishedJob_prev
+      // 
+      this.btn_finishedJob_prev.Location = new System.Drawing.Point(3, 3);
+      this.btn_finishedJob_prev.Name = "btn_finishedJob_prev";
+      this.btn_finishedJob_prev.Size = new System.Drawing.Size(75, 23);
+      this.btn_finishedJob_prev.TabIndex = 3;
+      this.btn_finishedJob_prev.Text = "<--";
+      this.btn_finishedJob_prev.UseVisualStyleBackColor = true;
+      // 
+      // listView1
+      // 
+      this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.listView1.Location = new System.Drawing.Point(0, 0);
+      this.listView1.Name = "listView1";
+      this.listView1.Size = new System.Drawing.Size(586, 444);
+      this.listView1.TabIndex = 0;
+      this.listView1.UseCompatibleStateImageBehavior = false;
+      // 
+      // JobListViewControl
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.splitContainer1);
+      this.Name = "JobListViewControl";
+      this.Size = new System.Drawing.Size(586, 479);
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      this.splitContainer1.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.SplitContainer splitContainer1;
+    private System.Windows.Forms.ComboBox comboBox1;
+    private System.Windows.Forms.Button btn_finishedJob_next;
+    private System.Windows.Forms.Button btn_finishedJob_prev;
+    private System.Windows.Forms.ListView listView1;
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/JobListViewControl.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/JobListViewControl.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/JobListViewControl.cs	(revision 4340)
@@ -0,0 +1,16 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+  public partial class JobListViewControl : UserControl {
+    public JobListViewControl() {
+      InitializeComponent();
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/JobListViewControl.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/JobListViewControl.resx	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/JobListViewControl.resx	(revision 4340)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/LogonDlg.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/LogonDlg.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/LogonDlg.Designer.cs	(revision 4340)
@@ -0,0 +1,77 @@
+﻿namespace HeuristicLab.Hive.Server.ServerConsole {
+  partial class LogonDlg {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LogonDlg));
+      this.pictureBox1 = new System.Windows.Forms.PictureBox();
+      this.label1 = new System.Windows.Forms.Label();
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // pictureBox1
+      // 
+      this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
+      this.pictureBox1.Location = new System.Drawing.Point(12, 12);
+      this.pictureBox1.Name = "pictureBox1";
+      this.pictureBox1.Size = new System.Drawing.Size(97, 77);
+      this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+      this.pictureBox1.TabIndex = 0;
+      this.pictureBox1.TabStop = false;
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Font = new System.Drawing.Font("Segoe UI", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.label1.ForeColor = System.Drawing.Color.White;
+      this.label1.Location = new System.Drawing.Point(115, 37);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(276, 25);
+      this.label1.TabIndex = 1;
+      this.label1.Text = "Connecting... Please stand by.";
+      // 
+      // LogonDlg
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.BackColor = System.Drawing.Color.RoyalBlue;
+      this.ClientSize = new System.Drawing.Size(450, 101);
+      this.Controls.Add(this.label1);
+      this.Controls.Add(this.pictureBox1);
+      this.Cursor = System.Windows.Forms.Cursors.WaitCursor;
+      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
+      this.Name = "LogonDlg";
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+      this.Text = "LogonDlg";
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.PictureBox pictureBox1;
+    private System.Windows.Forms.Label label1;
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/LogonDlg.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/LogonDlg.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/LogonDlg.cs	(revision 4340)
@@ -0,0 +1,16 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+  public partial class LogonDlg : Form {
+    public LogonDlg() {
+      InitializeComponent();
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/LogonDlg.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/LogonDlg.resx	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/LogonDlg.resx	(revision 4340)
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        R0lGODlhUAAyALMAAP//////AMDAwICAgICAAP8A//8AAIAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAA
+        ACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJEAAJACwKABIAHgAWAAAErDDJFCqoYerNJ74W1o1eAJqfSHJn
+        m1ZriYbBcNwHAsdzfxhAYE7Ho5kOg6ByuOpdDgLBIGnA4RCklw0AiNqgUcENO2odCgUBFymdTm/Z2Q+d
+        hk7D0lz8GCwgBlIAgG4DZGUVP0F/CF2CA1wCCIYdJjaKhY1qhZKbTTgGi11RjaJSkjFXhXhqaqWFMQlX
+        CKusbVOTJJKctISvsBt3Yb24vxLBw8Ujd27EyRq6ZBEAIfkECRAACQAsCQANACAAGwAABMEwSRkCqLbO
+        zfusF4iFgWcmYpqpJ0e+Y6y18mrD5XnXeKarvZ4uKBscjsdBrsMrHg0H6BFh2qkGBQN0i6R6gCOjAMuV
+        HryuZuAgAIyzyG61hy20x0eBXjCt7qIFdgAHA2MDh3xoTCpRBoFQY3uRil8ijY4IAwgAhYeHlH5rl5mb
+        nAMAnKA/TwakbqkIpC0eT656r56qLV2ae7ifsx28CL6SmsHCZ5m+nsDIJoWGzbrPCZ3Nx9XQ2NnaHtjU
+        3gmxsRIRACH5BAkQAAkALBMACAAWACAAAAS7MMkZKqgza1nDtdhGgaQXiEn5mZa4vt2qxbR6ZmwOt6Ne
+        s7idD9QTCinCwWG5HJiKsWXBQGWGUrADQDCYGpiIG8ckOAi2Xer3EMZ1DobCmasGzy5w+ZbJR8wqcHFl
+        AwKFhUt+GXhUBQiFA5CQZYk4gWYDjoZcbChwCJhnAJFKlBqeoGgAoqUbbKChCLGsrZ+OW5qzprGFqoa5
+        G59zuCgahKG+xMVnowK/yqOQzsXQmMkZ1NXWE9DSIrKJEQAh+QQJEAAJACwbAAgAFQAgAAAEwDDJCYKt
+        d2pqA/YdsEnYZ2baFa5qoJ0tiCasbH/SXZ8JrMelnfBHhJkOyOTBGBocBIBBwUA9DJiHggAqpRqSMlrA
+        qeVOq8iBJQc4GMrR8xeJqEwCbq1yf0C4NHlIW4NKCAMbgVEDiwMCCHSHgAZ1V1uLCI59kRNuhleMA4aP
+        hiN9lABbCKKkpX0AAKqioayldagCl6qbIwm2lrO7vFe3l8HCr8ihxiOVjI7LG42gyrzRuKC01QnTxdoa
+        nt3e37HQEQAh+QQJEAAJACwiAAgAFgAgAAAEvzDJSUMA9tJdb8YWwFWgF2ZjUq6fxbVnrG1mzbrTbbed
+        rk87GQsohNWAmMFhuRwYMcSlACAoGJY/SeBQmFYN4OsOyJ0WrGBmjFKmotPNTIB9ZS7rS4SHfUAI/n9K
+        dno4En0CA4mJiAhMehx9A1SIAgiJjX0jkYoDjAONlgMjCABUfpefmyOfCJaIn6yJq5OdqK2ys4GvraEp
+        krqoiikJkgCLwcPEpYDIyb/MsKLOk4G9ycSdgdHXEqHN3Am81twRACH5BAkQAAkALCIADQAgABsAAATO
+        MMlJ6wwB4Iyt95uGiVz2gWOopsFJsWVMAq4kr3d3zjifnr0g7BMYHI7HAczH+RwKAoCgUDAclLmY5xmd
+        Vg1gbFZj4Uqp4PSVKdpakWnwwboMla2CvOAotxrEPFsHAgOFA4R8cwcIOU6EUnmHim+MQ06Gh4cIAwhv
+        i1ouAwBSm4SbCEifOqEACK4IhJycSKU1EqJ6mYWnR5uFtriRsbKoi4bAo1K6xIu+A8hdyruvzra3o12G
+        zsfW19G73N0UhVIA4L/iFpiy6OkW1O3uFBEAIfkEBRAACQAsIgASAB4AFgAABKowyUkrDRjgYHvX2QZy
+        3ieeIVlOaDC+KxsMR30MqbvF9GEIQEHh0NKsfAYAcFAoGAyH187js9WczydRSq0FBbWsDafDdAdotKCH
+        rHEtiNtX3balPIj0YK0exK0jHgNKAnl9eX92Lh1pCI59aIhWeyoTakGQjX41j2gVgwBKmZpxnWkUgwKE
+        fHp+pYZ6n6GqrI2Opp6MSoR6uKcraLu2sTGfvbADxXi3xMoVEQAh+QQJEAAJACwiABIAHgAWAAAEGzDJ
+        Sau9OOvNu/9gKI5kaZ5oqq5s675wLM9uBAAh+QQJEAAJACwiAA0AIAAbAAAEzzDJSesMAeCMgf3WpnVi
+        B34lqXLBSa0jK3tuMqc35sY83p++4AoUGByOxwEsCDoUBABBoWA4KHOyjxMqpRq+V6zGso1Ov2hrT6Wt
+        ItHfQ3VpqsgPgrzgGK8awj9keAOEAwJGd1UIOU2HUXmGiUeLQ02FhoYIAwhuB4sxNQMAUZqHmghInhs1
+        CaIIrwiHm5tImi2sonqYhKeThbiPh7KzqJ6/oaNRu8SemoTAXMq8sM4DrBKiUdKzl9bX2NpQvMffFITa
+        48/lFt3V6yDU6u8VEQAh+QQJEAAJACwiAAgAFgAgAAAExTDJSUMANtC9LfYZR2HflZViUq6nxbVgfL2s
+        jE61aWvT7vMJnTCH6f1yPczgwGQOYCYjUwAQFAxMpCRwKFCthjB2COR6AYVruBmjdL/qtTMDTBywTSae
+        iYhO+AKBgUt5fS5/CAIDi4uKCE19ABsHCANVigKVA4+UdRKUjI2bm6ADIggAVYmLlY+aIpsIlYqjsouw
+        lwO0ra+4g7u2pr6YrKEpCZYAoqPCKcmCxc3Ol4PMxxKWgo6318i61b3dmtHdFLLB5RIRACH5BAkQAAkA
+        LBsACAAVACAAAATAMMkJgq13amoD9h2wSdhnZtoVrmqgnS2IJqxsf9Jdnwmsx6Wd8EeEmQ7I5MEYGhwE
+        gEHBQD0MmIeCACqlGpIyWsCp5U6ryIElBzgYytHzF4moTAJurXJ/QLg0eUhbg0oIAxuBUQOLAwIIdIeA
+        BnVXW4sIjn2RE26GV4wDho+GI32UAFsIoqSlfQAAqqKhrKV1qAKXqpsjCbaWs7u8V7eXwcKvyKHGI5WM
+        jssbjaDKvNG4oLTVCdPF2hqe3d7fsdARACH5BAkQAAkALBMACAAWACAAAATCMEkJgq1h6p1w8BinWR8J
+        ZuJlrpd4qjA6sWVcbXX+fqNNh7OdUPYrWoK0wWG5HJRmtmXBQGUeJbrAASAYTA1MhAxTERwEXC8VfBD3
+        LAdDAd1dhzWVSnzOZfoROHBUcwcDAoeHS4B4WoMIhwORkWaLI3FgXY+IXW0iCXEIA48AAJJKlRugonQD
+        pKKeEm2raAAItqgisqObArgcbZqkiL4ioXSbxByGtMOwG4alkr3OE4amkcnK16/UEtvc3QnX2Z63ixEA
+        IfkECRAACQAsCQANACAAGwAABMEwSRkCqLbOzfusF4iFgWcmYpqpJ0e+Y6y18mrD5XnXeKarvZ4uKBsc
+        jsdBrsMrHg0H6BFh2qkGBQN0i6R6gCOjAMuVHryuZuAgAIyzyG61hy20x0eBXjCt7qIFdgAHA2MDh3xo
+        TCpRBoFQY3uRil8ijY4IAwgAhYeHlH5rl5mbnAMAnKA/TwakbqkIpC0eT656r56qLV2ae7ifsx28CL6S
+        msHCZ5m+nsDIJoWGzbrPCZ3Nx9XQ2NnaHtjU3gmxsRIRACH5BAUQAAkALAoAEgAeABYAAASsMMkUKqgB
+        zM27xJcFeuSXgahVduEpvsE6pe5w3AdSyVTbHoZgMKeT0QCHgXBJXLlOB4FgoDTgcIhSygYASG1RqeCW
+        9TyRhYKgm5xSqTetC5hWR6niaU6eAQYLCANTAIJvA2UkIX5BgQhehANdAgiIZoSLjY9rh5ScTjgGmWKP
+        Xl+UMliHeWtrpVOVJFgIq6xuVLAklJ20hoc8HXhivbi/CcHDxSR4b8TJE7plEQAh+QQJEAAJACwKABIA
+        HgAWAAAEGzDJSau9OOvNu/9gKI5kaZ5oqq5s675wLM9uBAAh+QQJEAAJACwJAA0AIAAbAAAExDBJGQKo
+        ts7Nu7xZBYaBZyYiNq7YybFpTLqoDJOgi6u8XZq9nU8EvMEGh2Ry8OsEj0nDQZpEADxC0qBgkHqVCGAW
+        gBRsv9RDuGOsHAQAM1cJLga3Bbg5KegLqmIsUwV5AAcDZgOKf2tYMlMGhFJmfpSNYhmQkQgDVoiKipcn
+        GFFdnFZkAwBkojoBpadxrAinNB1RsX2yoK00YJ1+u6G2HL8IwZWdxMVqnMGgw8seiInQvdIJn9DK2NPb
+        3N0d29fhCbS0EhEAIfkECRAACQAsEwAIABYAIAAABMgwSQmCrXbqjUPvm2Z5IyZUoXSVo1CmXynMdLCx
+        a3ACPH/HlxPpIsoNhTkR0COMTXDH5XM5OFitA9LTCLAWDOBrRhU7AASDr+GKsFFWgsMJrV4f2kXLwVCY
+        D8B2dxoVFXt9Z1eJCDd6YH0HAzQzVouDAXt8CDMDnJxxlSKYcgOaklWgG3sIpDudpykJqqxnAzyksBJ3
+        rDsIvagpuppnkr8hd6U8NMUpq3PEuBqRO8rQ0SeuAsshka6c2tvdt9US4eLjCd3fsL6VEQAh+QQJEAAJ
+        ACwbAAgAFQAgAAAE0zDJOaq1M+cRAugeqG1h95ndGAxn6Z6ZIM90LQdSIAB87/+83A5FfOE+u5YStNSd
+        msZQkkktnoaeg3Z7aCIBhcFhNygYzgdWdXcoyADls2FbQordZDNay/EkdAcGeHB6c1oIH0KBblyNBwgp
+        EmKCWjVcCAMbi10XAwIIh5kUgYgsMhUIn4+ikqQVcBaYoJgbYgilADK3A7sanoc8t7K8tCQCjzynxMUb
+        BM6IuQKozBrCLNGorCMUP7za2wmmFp/f256d1ODnF+nmnd7g1ezl8cLtEhEAIfkECRAACQAsHgAIABoA
+        IAAABPowyTSqtSCErKeXAyCOYhBqG/pRmRC4bjqkGhdMZ6bT28xzFIFwSCwahyyScsnMnGAvmxQ1DUFj
+        P6pW83zVttmv1Yudfs+mlld2aLd92TE00BYABAVD25wmaw4FdngGhHpxd36AdgV5hG5oXS6Kd42Obyg3
+        ci8Hem5tnW0IKQAsZKFFA54Hoh0sUKsCFwOxCG6iGSBqAqtWsQIIFbWruLmvwBe0A7XHHpEBCCK/scrK
+        vAPNiDDKCMDTwNwVH5G9s8Hb4eIE6urk3uDXKwnc4He+5hbxKyEAFd7o+djq+YMHEBuRewXFCUxGMCGI
+        WUIQOvRwTOJEivP+JYwAACH5BAkQAAkALB4ACAAgACAAAAT/MMk0qrUz650H+CA4cKTmBQKqpsJYkie7
+        ru7bCXiu71d/TZ6QcEgUumIzmRIQaDKdAYBA4lEmVc9oU+tMUZjW5TZLjgoA3/AMyuaam0i1uwyVMqvX
+        FH0+TgXiVwMHg4MDbUx2f1J5AQcFZwIFBQYHhnN+gDKOkJIGngaWWol4VptSnZ+UJ11wYDOClISplJR1
+        Z4phB5Q6g566uqGLileDLRYtvb8IomdpSQctUjgDAr+xy6xfxBctAggDCLEHy4gBVItKQd7U4OCE409o
+        50keCPYIxt8IhN9OHQQAA1aZZqzdvnEYNtyzN7CbBX2DvlWw8eWDwwoQGU60UcVOwYUSIGtwtCjloQ+K
+        HTwCwJgQpYmOLDe63NAj5MwSC2XeTBABACH5BAUQAAkALB4ACAAgACAAAAT/MMk0qrUz650H+CA4cKTm
+        BQKqpsJYkie7ru7bCXiu71dvIRNPaEgshhBACmAmazKZhKTHSX06o5KYdUvFKqvgrVcbrgbOS4AUUH4u
+        0ecAO7tss97yeDr15c7ggHICAEp+MgEDB4oHA3BsZ1OGiQcGOgUHeoOIdVyUBmwtBQUGBgd7kI9glIuK
+        o6SkmGxLZEyLOoqvi5GbYJM9LYuwppq0MgiMOhUCnqyPvFYIFy3KA8fNfMUoUwLR1NHWi7IUBOTlBD9I
+        1BXfrCcTSPDKOeo/1YrpFRxCbPT1x/gYTMia5wPJAYABBQ4sCK9bQn0Dp61zeMFGlikA0FW0uKEHQo4l
+        BhpuBCkhAgAh+QQJEAAJACweAAgAIAAgAAAEIjDJSau9OOvNu/9gKI5kaZ5oqq5s675wLM90bd94ru+8
+        HAEAIfkECRAACQAsHgAIACAAIAAABP8wyTSqtTPrnQf4IDhwpOYFAqqmwliSJ7uu7tsJeK7vV39NnpBw
+        SBS6YjOZEhBoMp0BgEDiUSZVz2hT60xRmNblNkuOCgDf8AzK5pqbSLW7DJUyq9cUfT5OBeJXAweDgwNt
+        THZ/UnkBBwVnAgUFBgeGc36AMo6QkgaeBpZaiXhWm1Kdn5QnXXBgM4KUhKmUlHVnimEHlDqDnrq6oYuK
+        V4MtFi29vwiiZ2lJBy1SOAMCv7HLrF/EFy0CCAMIsQfLiAFUi0pB3tTg4ITjT2jnSR4I9gjG3wiE304d
+        BAADVplmrN2+cRg23LM3sJsFfYO+VbDx5YPDChAZTrRRxU7BhRIga3C0KOWhD4odPALAmBCliY4sN7rc
+        0CPkzBILZd5MEAEAIfkECRAACQAsHgAIABoAIAAABPowyTSqtSCErKeXAyCOYhBqG/pRmRC4bjqkGhdM
+        Z6bT28xzFIFwSCwahyyScsnMnGAvmxQ1DUFjP6pW83zVttmv1Yudfs+mlld2aLd92TE00BYABAVD25wm
+        aw4FdngGhHpxd36AdgV5hG5oXS6Kd42Obyg3ci8Hem5tnW0IKQAsZKFFA54Hoh0sUKsCFwOxCG6iGSBq
+        AqtWsQIIFbWruLmvwBe0A7XHHpEBCCK/scrKvAPNiDDKCMDTwNwVH5G9s8Hb4eIE6urk3uDXKwnc4He+
+        5hbxKyEAFd7o+djq+YMHEBuRewXFCUxGMCGIWUIQOvRwTOJEivP+JYwAACH5BAkQAAkALBsACAAVACAA
+        AATTMMk5qrUz5xEC6B6obWH3md0YDGfpnpkgz3QtB1IgAHzv/7zcDkV84T67lhK01J2axlCSSS2ehp6D
+        dntoIgGFwWE3KBjOB1Z1dyjIAOWzYVtCit1kM1rL8SR0BwZ4cHpzWggfQoFuXI0HCCkSYoJaNVwIAxuL
+        XRcDAgiHmRSBiCwyFQifj6KSpBVwFpigmBtiCKUAMrcDuxqehzy3sry0JAKPPKfExRsEzoi5AqjMGsIs
+        0aisIxQ/vNrbCaYWn9/bnp3U4OcX6ead3uDV7OXxwu0SEQAh+QQJEAAJACwTAAgAFgAgAAAEyDBJCYKt
+        duqNQ++bZnkjJlShdJWjUKZfKcx0sLFrcAI8f8eXE+kiyg2FORHQI4xNcMflczk4WK0D0tMIsBYM4GtG
+        FTsABIOv4YqwUVaCwwmtXh/aRcvBUJgPwHZ3GhUVe31nV4kIN3pgfQcDNDNWi4MBe3wIMwOcnHGVIphy
+        A5qSVaAbewikO52nKQmqrGcDPKSwEnesOwi9qCm6mmeSvyF3pTw0xSmrc8S4GpE7ytDRJ64CyyGRrpza
+        29231RLh4uMJ3d+wvpURACH5BAkQAAkALAkADQAgABsAAATEMEkZAqi2zs27vFkFhoFnJiI2rtjJsWlM
+        uqgMk6CLq7xdmr2dTwS8wQaHZHLw6wSPScNBmkQAPELSoGCQepUIYBaAFGy/1EO4Y6wcBAAzVwkuBrcF
+        uDkp6AuqYixTBXkABwNmA4p/a1gyUwaEUmZ+lI1iGZCRCANWiIqKlycYUV2cVmQDAGSiOgGlp3GsCKc0
+        HVGxfbKgrTRgnX67obYcvwjBlZ3ExWqcwaDDyx6IidC90gmf0MrY09vc3R3b1+EJtLQSEQAh+QQFEAAJ
+        ACwKABIAHgAWAAAErDDJFCqoAczNu8SXBXrkl4GoVXbhKb7BOqXucNwHUslU2x6GYDCnk9EAh4FwSVy5
+        TgeBYKA04HCIUsoGAEhtUanglvU8kYWCoJucUqk3rQuYVkep4mlOngEGCwgDUwCCbwNlJCF+QYEIXoQD
+        XQIIiGaEi42Pa4eUnE44Bplij15flDJYh3lra6VTlSRYCKusblSwJJSdtIaHPB14Yr24vwnBw8UkeG/E
+        yRO6ZREAIfkECRAACQAsCgASAB4AFgAABBswyUmrvTjrzbv/YCiOZGmeaKqubOu+cCzPbgQAOw==
+</value>
+  </data>
+</root>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/AssemblyInfo.frame	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/AssemblyInfo.frame	(revision 4340)
@@ -0,0 +1,58 @@
+#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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Hive.Server.Console")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("1131CD44-0FDC-4f7b-9D7E-8029B26EAE05")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.AppointmentDto.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.AppointmentDto.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.AppointmentDto.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="AppointmentDto" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.BusinessObjects.AppointmentDto, HeuristicLab.Hive.Contracts-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.JobDto.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.JobDto.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.JobDto.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="JobDto" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.BusinessObjects.JobDto, HeuristicLab.Hive.Contracts-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.JobResult.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.JobResult.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.JobResult.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="JobResult" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.BusinessObjects.JobResult, HeuristicLab.Hive.Contracts-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.ProjectDto.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.ProjectDto.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.ProjectDto.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="ProjectDto" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.BusinessObjects.ProjectDto, HeuristicLab.Hive.Contracts-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.SerializedJob.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.SerializedJob.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.SerializedJob.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="SerializedJob" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.BusinessObjects.SerializedJob, HeuristicLab.Hive.Contracts-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.SlaveDto.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.SlaveDto.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.SlaveDto.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="SlaveDto" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.BusinessObjects.SlaveDto, HeuristicLab.Hive.Contracts-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.SlaveGroupDto.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.SlaveGroupDto.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.SlaveGroupDto.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="SlaveGroupDto" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.BusinessObjects.SlaveGroupDto, HeuristicLab.Hive.Contracts-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.UpTimeStatisticsDto.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.UpTimeStatisticsDto.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.UpTimeStatisticsDto.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="UpTimeStatisticsDto" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.BusinessObjects.UpTimeStatisticsDto, HeuristicLab.Hive.Contracts-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseObjects.Response.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseObjects.Response.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseObjects.Response.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="Response" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.ResponseObjects.Response, HeuristicLab.Hive.Contracts-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/Resources.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/Resources.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/Resources.Designer.cs	(revision 4340)
@@ -0,0 +1,63 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Server.ServerConsole.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HeuristicLab.Hive.Server.ServerConsole.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/Resources.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/Resources.resx	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/Resources.resx	(revision 4340)
@@ -0,0 +1,117 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/Settings.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/Settings.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/Settings.Designer.cs	(revision 4340)
@@ -0,0 +1,26 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Server.ServerConsole.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/Settings.settings
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/Settings.settings	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Properties/Settings.settings	(revision 4340)
@@ -0,0 +1,7 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Recurrence.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Recurrence.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Recurrence.Designer.cs	(revision 4340)
@@ -0,0 +1,318 @@
+﻿namespace HeuristicLab.Hive.Slave.Console
+{
+  partial class Recurrence
+  {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing)
+    {
+      if (disposing && (components != null))
+      {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent()
+    {
+      this.gbAppointment = new System.Windows.Forms.GroupBox();
+      this.chbade = new System.Windows.Forms.CheckBox();
+      this.dtpEnd = new System.Windows.Forms.DateTimePicker();
+      this.dtpToTime = new System.Windows.Forms.DateTimePicker();
+      this.label5 = new System.Windows.Forms.Label();
+      this.dtpStart = new System.Windows.Forms.DateTimePicker();
+      this.dtpFromTime = new System.Windows.Forms.DateTimePicker();
+      this.label6 = new System.Windows.Forms.Label();
+      this.txtDays = new System.Windows.Forms.TextBox();
+      this.label4 = new System.Windows.Forms.Label();
+      this.label7 = new System.Windows.Forms.Label();
+      this.btSaveRecurrence = new System.Windows.Forms.Button();
+      this.btCancelRecurrence = new System.Windows.Forms.Button();
+      this.gbWeekly = new System.Windows.Forms.GroupBox();
+      this.cbSunday = new System.Windows.Forms.CheckBox();
+      this.cbSaturday = new System.Windows.Forms.CheckBox();
+      this.cbFriday = new System.Windows.Forms.CheckBox();
+      this.cbThursday = new System.Windows.Forms.CheckBox();
+      this.cbWednesday = new System.Windows.Forms.CheckBox();
+      this.cbTuesday = new System.Windows.Forms.CheckBox();
+      this.cbMonday = new System.Windows.Forms.CheckBox();
+      this.gbAppointment.SuspendLayout();
+      this.gbWeekly.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // gbAppointment
+      // 
+      this.gbAppointment.Controls.Add(this.chbade);
+      this.gbAppointment.Controls.Add(this.dtpEnd);
+      this.gbAppointment.Controls.Add(this.dtpToTime);
+      this.gbAppointment.Controls.Add(this.label5);
+      this.gbAppointment.Controls.Add(this.dtpStart);
+      this.gbAppointment.Controls.Add(this.dtpFromTime);
+      this.gbAppointment.Controls.Add(this.label6);
+      this.gbAppointment.Location = new System.Drawing.Point(2, 2);
+      this.gbAppointment.Name = "gbAppointment";
+      this.gbAppointment.Size = new System.Drawing.Size(386, 109);
+      this.gbAppointment.TabIndex = 39;
+      this.gbAppointment.TabStop = false;
+      this.gbAppointment.Text = "Appointment";
+      // 
+      // chbade
+      // 
+      this.chbade.AutoSize = true;
+      this.chbade.Location = new System.Drawing.Point(113, 86);
+      this.chbade.Name = "chbade";
+      this.chbade.Size = new System.Drawing.Size(90, 17);
+      this.chbade.TabIndex = 39;
+      this.chbade.Text = "All Day Event";
+      this.chbade.UseVisualStyleBackColor = true;
+      // 
+      // dtpEnd
+      // 
+      this.dtpEnd.Format = System.Windows.Forms.DateTimePickerFormat.Short;
+      this.dtpEnd.Location = new System.Drawing.Point(113, 56);
+      this.dtpEnd.Name = "dtpEnd";
+      this.dtpEnd.Size = new System.Drawing.Size(91, 20);
+      this.dtpEnd.TabIndex = 29;
+      // 
+      // dtpToTime
+      // 
+      this.dtpToTime.CustomFormat = "HH:00";
+      this.dtpToTime.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+      this.dtpToTime.Location = new System.Drawing.Point(226, 56);
+      this.dtpToTime.Name = "dtpToTime";
+      this.dtpToTime.ShowUpDown = true;
+      this.dtpToTime.Size = new System.Drawing.Size(73, 20);
+      this.dtpToTime.TabIndex = 38;
+      // 
+      // label5
+      // 
+      this.label5.AutoSize = true;
+      this.label5.Location = new System.Drawing.Point(58, 60);
+      this.label5.Name = "label5";
+      this.label5.Size = new System.Drawing.Size(55, 13);
+      this.label5.TabIndex = 27;
+      this.label5.Text = "End Date:";
+      // 
+      // dtpStart
+      // 
+      this.dtpStart.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+      this.dtpStart.Location = new System.Drawing.Point(113, 19);
+      this.dtpStart.Name = "dtpStart";
+      this.dtpStart.Size = new System.Drawing.Size(89, 20);
+      this.dtpStart.TabIndex = 28;
+      // 
+      // dtpFromTime
+      // 
+      this.dtpFromTime.CustomFormat = "HH:00";
+      this.dtpFromTime.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+      this.dtpFromTime.Location = new System.Drawing.Point(226, 19);
+      this.dtpFromTime.Name = "dtpFromTime";
+      this.dtpFromTime.ShowUpDown = true;
+      this.dtpFromTime.Size = new System.Drawing.Size(73, 20);
+      this.dtpFromTime.TabIndex = 30;
+      // 
+      // label6
+      // 
+      this.label6.AutoSize = true;
+      this.label6.Location = new System.Drawing.Point(58, 23);
+      this.label6.Name = "label6";
+      this.label6.Size = new System.Drawing.Size(58, 13);
+      this.label6.TabIndex = 25;
+      this.label6.Text = "Start Date:";
+      // 
+      // txtDays
+      // 
+      this.txtDays.Location = new System.Drawing.Point(160, 13);
+      this.txtDays.Name = "txtDays";
+      this.txtDays.Size = new System.Drawing.Size(30, 20);
+      this.txtDays.TabIndex = 24;
+      this.txtDays.Text = "1";
+      this.txtDays.Visible = false;
+      // 
+      // label4
+      // 
+      this.label4.AutoSize = true;
+      this.label4.Location = new System.Drawing.Point(120, 16);
+      this.label4.Name = "label4";
+      this.label4.Size = new System.Drawing.Size(34, 13);
+      this.label4.TabIndex = 23;
+      this.label4.Text = "Every";
+      this.label4.Visible = false;
+      // 
+      // label7
+      // 
+      this.label7.AutoSize = true;
+      this.label7.Location = new System.Drawing.Point(196, 16);
+      this.label7.Name = "label7";
+      this.label7.Size = new System.Drawing.Size(59, 13);
+      this.label7.TabIndex = 25;
+      this.label7.Text = "week(s) on";
+      this.label7.Visible = false;
+      // 
+      // btSaveRecurrence
+      // 
+      this.btSaveRecurrence.Location = new System.Drawing.Point(2, 217);
+      this.btSaveRecurrence.Name = "btSaveRecurrence";
+      this.btSaveRecurrence.Size = new System.Drawing.Size(147, 23);
+      this.btSaveRecurrence.TabIndex = 43;
+      this.btSaveRecurrence.Text = "Save";
+      this.btSaveRecurrence.UseVisualStyleBackColor = true;
+      this.btSaveRecurrence.Click += new System.EventHandler(this.btSaveRecurrence_Click);
+      // 
+      // btCancelRecurrence
+      // 
+      this.btCancelRecurrence.Location = new System.Drawing.Point(241, 217);
+      this.btCancelRecurrence.Name = "btCancelRecurrence";
+      this.btCancelRecurrence.Size = new System.Drawing.Size(147, 23);
+      this.btCancelRecurrence.TabIndex = 44;
+      this.btCancelRecurrence.Text = "Cancel";
+      this.btCancelRecurrence.UseVisualStyleBackColor = true;
+      this.btCancelRecurrence.Click += new System.EventHandler(this.btCancelRecurrence_Click);
+      // 
+      // gbWeekly
+      // 
+      this.gbWeekly.Controls.Add(this.label7);
+      this.gbWeekly.Controls.Add(this.cbSunday);
+      this.gbWeekly.Controls.Add(this.txtDays);
+      this.gbWeekly.Controls.Add(this.cbSaturday);
+      this.gbWeekly.Controls.Add(this.cbFriday);
+      this.gbWeekly.Controls.Add(this.cbThursday);
+      this.gbWeekly.Controls.Add(this.label4);
+      this.gbWeekly.Controls.Add(this.cbWednesday);
+      this.gbWeekly.Controls.Add(this.cbTuesday);
+      this.gbWeekly.Controls.Add(this.cbMonday);
+      this.gbWeekly.Location = new System.Drawing.Point(2, 111);
+      this.gbWeekly.Name = "gbWeekly";
+      this.gbWeekly.Size = new System.Drawing.Size(386, 100);
+      this.gbWeekly.TabIndex = 42;
+      this.gbWeekly.TabStop = false;
+      this.gbWeekly.Text = "Days of week";
+      // 
+      // cbSunday
+      // 
+      this.cbSunday.AutoSize = true;
+      this.cbSunday.Location = new System.Drawing.Point(199, 65);
+      this.cbSunday.Name = "cbSunday";
+      this.cbSunday.Size = new System.Drawing.Size(62, 17);
+      this.cbSunday.TabIndex = 6;
+      this.cbSunday.Text = "Sunday";
+      this.cbSunday.UseVisualStyleBackColor = true;
+      // 
+      // cbSaturday
+      // 
+      this.cbSaturday.AutoSize = true;
+      this.cbSaturday.Location = new System.Drawing.Point(122, 65);
+      this.cbSaturday.Name = "cbSaturday";
+      this.cbSaturday.Size = new System.Drawing.Size(68, 17);
+      this.cbSaturday.TabIndex = 5;
+      this.cbSaturday.Text = "Saturday";
+      this.cbSaturday.UseVisualStyleBackColor = true;
+      // 
+      // cbFriday
+      // 
+      this.cbFriday.AutoSize = true;
+      this.cbFriday.Location = new System.Drawing.Point(37, 65);
+      this.cbFriday.Name = "cbFriday";
+      this.cbFriday.Size = new System.Drawing.Size(54, 17);
+      this.cbFriday.TabIndex = 4;
+      this.cbFriday.Text = "Friday";
+      this.cbFriday.UseVisualStyleBackColor = true;
+      // 
+      // cbThursday
+      // 
+      this.cbThursday.AutoSize = true;
+      this.cbThursday.Location = new System.Drawing.Point(289, 40);
+      this.cbThursday.Name = "cbThursday";
+      this.cbThursday.Size = new System.Drawing.Size(70, 17);
+      this.cbThursday.TabIndex = 3;
+      this.cbThursday.Text = "Thursday";
+      this.cbThursday.UseVisualStyleBackColor = true;
+      // 
+      // cbWednesday
+      // 
+      this.cbWednesday.AutoSize = true;
+      this.cbWednesday.Location = new System.Drawing.Point(199, 42);
+      this.cbWednesday.Name = "cbWednesday";
+      this.cbWednesday.Size = new System.Drawing.Size(86, 17);
+      this.cbWednesday.TabIndex = 2;
+      this.cbWednesday.Text = "Wednesday ";
+      this.cbWednesday.UseVisualStyleBackColor = true;
+      // 
+      // cbTuesday
+      // 
+      this.cbTuesday.AutoSize = true;
+      this.cbTuesday.Location = new System.Drawing.Point(123, 42);
+      this.cbTuesday.Name = "cbTuesday";
+      this.cbTuesday.Size = new System.Drawing.Size(67, 17);
+      this.cbTuesday.TabIndex = 1;
+      this.cbTuesday.Text = "Tuesday";
+      this.cbTuesday.UseVisualStyleBackColor = true;
+      // 
+      // cbMonday
+      // 
+      this.cbMonday.AutoSize = true;
+      this.cbMonday.Location = new System.Drawing.Point(37, 42);
+      this.cbMonday.Name = "cbMonday";
+      this.cbMonday.Size = new System.Drawing.Size(64, 17);
+      this.cbMonday.TabIndex = 0;
+      this.cbMonday.Text = "Monday";
+      this.cbMonday.UseVisualStyleBackColor = true;
+      // 
+      // Recurrence
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(393, 243);
+      this.Controls.Add(this.gbWeekly);
+      this.Controls.Add(this.btCancelRecurrence);
+      this.Controls.Add(this.btSaveRecurrence);
+      this.Controls.Add(this.gbAppointment);
+      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+      this.Name = "Recurrence";
+      this.Text = "Recurrence";
+      this.gbAppointment.ResumeLayout(false);
+      this.gbAppointment.PerformLayout();
+      this.gbWeekly.ResumeLayout(false);
+      this.gbWeekly.PerformLayout();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.GroupBox gbAppointment;
+    private System.Windows.Forms.TextBox txtDays;
+    private System.Windows.Forms.Label label4;
+    private System.Windows.Forms.DateTimePicker dtpEnd;
+    private System.Windows.Forms.DateTimePicker dtpStart;
+    private System.Windows.Forms.Label label5;
+    private System.Windows.Forms.Label label6;
+    private System.Windows.Forms.Label label7;
+    private System.Windows.Forms.Button btSaveRecurrence;
+    private System.Windows.Forms.Button btCancelRecurrence;
+    private System.Windows.Forms.DateTimePicker dtpFromTime;
+    private System.Windows.Forms.DateTimePicker dtpToTime;
+    private System.Windows.Forms.CheckBox chbade;
+    private System.Windows.Forms.GroupBox gbWeekly;
+    private System.Windows.Forms.CheckBox cbSunday;
+    private System.Windows.Forms.CheckBox cbSaturday;
+    private System.Windows.Forms.CheckBox cbFriday;
+    private System.Windows.Forms.CheckBox cbThursday;
+    private System.Windows.Forms.CheckBox cbWednesday;
+    private System.Windows.Forms.CheckBox cbTuesday;
+    private System.Windows.Forms.CheckBox cbMonday;
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Recurrence.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Recurrence.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Recurrence.cs	(revision 4340)
@@ -0,0 +1,126 @@
+﻿#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.Windows.Forms;
+using HeuristicLab.Hive.Server.ServerConsole;
+
+namespace HeuristicLab.Hive.Slave.Console
+{
+
+  public enum RecurrenceMode
+  {
+    Daily,
+    Weekly
+  }
+
+  public partial class Recurrence : Form
+  {
+
+    public OnDialogClosedDelegate dialogClosedDelegate;
+
+    public Recurrence()
+    {
+      InitializeComponent();
+    }
+
+    private void btCancelRecurrence_Click(object sender, EventArgs e)
+    {
+      this.Close();
+    }
+
+    private void btSaveRecurrence_Click(object sender, EventArgs e)
+    {
+      DateTime dateFrom, dateTo;
+      RecurrenceMode mode = RecurrenceMode.Daily;
+      int incWeek = 0;
+      HashSet<DayOfWeek> days = new HashSet<DayOfWeek>();
+
+      days = GetDays();
+
+      //check if valid
+      if (InputIsValid())
+      {
+        //set entity
+
+        dateFrom = DateTime.Parse(dtpStart.Text + " " + dtpFromTime.Text);
+        dateTo = DateTime.Parse(dtpEnd.Text + " " + dtpToTime.Text);
+
+        if (int.TryParse(txtDays.Text, out incWeek))
+          mode = RecurrenceMode.Weekly;
+        else
+          mode = RecurrenceMode.Daily;
+
+        RecurrentEvent recurrentEvent = new RecurrentEvent()
+        {
+          DateFrom = dateFrom,
+          DateTo = dateTo,
+          AllDay = chbade.Checked,
+          WeekDays = days,
+          IncWeeks = incWeek,
+        };
+
+        //fire delegate and close the dialog
+        dialogClosedDelegate(recurrentEvent);
+        this.Close();
+      }
+      else
+        MessageBox.Show("Incorrect date format", "Schedule Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+    }
+
+    private HashSet<DayOfWeek> GetDays()
+    {
+      HashSet<DayOfWeek> days = new HashSet<DayOfWeek>();
+
+      if (cbMonday.Checked)
+        days.Add(DayOfWeek.Monday);
+      if (cbTuesday.Checked)
+        days.Add(DayOfWeek.Tuesday);
+      if (cbWednesday.Checked)
+        days.Add(DayOfWeek.Wednesday);
+      if (cbThursday.Checked)
+        days.Add(DayOfWeek.Thursday);
+      if (cbFriday.Checked)
+        days.Add(DayOfWeek.Friday);
+      if (cbSaturday.Checked)
+        days.Add(DayOfWeek.Saturday);
+      if (cbSunday.Checked)
+        days.Add(DayOfWeek.Sunday);
+
+      return days;
+    }
+
+    private bool InputIsValid()
+    {
+      DateTime dateFrom, dateTo;
+      int i = 0;
+
+      dateFrom = DateTime.Parse(dtpStart.Text + " " + dtpFromTime.Text);
+      dateTo = DateTime.Parse(dtpEnd.Text + " " + dtpToTime.Text);
+
+      if (dateFrom < dateTo && dateFrom.TimeOfDay < dateTo.TimeOfDay && int.TryParse(txtDays.Text, out i))
+        return true;
+      else
+        return false;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Recurrence.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Recurrence.resx	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Recurrence.resx	(revision 4340)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/ServiceLocator.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/ServiceLocator.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/ServiceLocator.cs	(revision 4340)
@@ -0,0 +1,55 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using System.ServiceModel;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts;
+using System.ServiceModel.Description;
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+
+  internal class ServiceLocator {
+    private static IServerConsoleFacade serverConsoleFacade = null;
+
+    internal static string Address { get; set; }
+    internal static string Port { get; set; }
+    internal static string Username { get; set; }
+    internal static string Password { get; set; } // [chn] TODO: Don't store plaintext password in memory!
+
+    internal static ISlaveManager GetSlaveManager() {
+      return GetServerConsoleFacade() as ISlaveManager;
+    }
+
+    internal static IJobManager GetJobManager() {
+      return GetServerConsoleFacade() as IJobManager;
+    }
+
+    internal static IServerConsoleFacade GetServerConsoleFacade() {
+      if (serverConsoleFacade == null && Address != String.Empty && Port != String.Empty) {
+        ChannelFactory<IServerConsoleFacade> factory = new ChannelFactory<IServerConsoleFacade>("ServerConsoleHttpEndpoint");
+        WcfSettings.SetEndpointAddress(factory.Endpoint, Address);
+
+        factory.Credentials.UserName.UserName = Username;
+        factory.Credentials.UserName.Password = Password;
+
+        IServerConsoleFacade client = factory.CreateChannel();
+
+        ((ICommunicationObject)client).Faulted += ServiceLocator_Faulted;
+        serverConsoleFacade = client;
+      }
+      return serverConsoleFacade;
+    }
+
+    static void ServiceLocator_Faulted(object sender, EventArgs e) {
+      ((ICommunicationObject)serverConsoleFacade).Abort();
+      ((ICommunicationObject)serverConsoleFacade).Faulted -= ServiceLocator_Faulted;
+      serverConsoleFacade = null;
+    }
+
+    internal static void ShutDownFacade() {
+      serverConsoleFacade = null;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Tools/RecreateServiceConfig.bat
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Tools/RecreateServiceConfig.bat	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Tools/RecreateServiceConfig.bat	(revision 4340)
@@ -0,0 +1,7 @@
+REM This tool updates the app.config with the client-config. IP-Adress may need to be adjusted
+REM ServerConsoleFacade.cs is also created, but not needed
+
+SvcUtil.exe ^
+      /noLogo ^
+      http://localhost:9000/ServerConsoleService?wsdl ^
+      /config:app.config
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/app.config
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/app.config	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/app.config	(revision 4340)
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <system.serviceModel>
+    <behaviors>
+      <endpointBehaviors>
+        <behavior name="ServerConsoleBehaviour">
+          <clientCredentials>
+            <serviceCertificate>
+              <authentication certificateValidationMode="None" />
+            </serviceCertificate>
+          </clientCredentials>
+        </behavior>
+      </endpointBehaviors>
+    </behaviors>
+    <bindings>
+      <wsHttpBinding>
+        <binding name="ServerConsoleHttpEndpoint" closeTimeout="00:01:00"
+            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+            bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
+            maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
+            messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
+            allowCookies="false">
+          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+          <reliableSession ordered="true" inactivityTimeout="00:10:00"
+              enabled="false" />
+          <security mode="Message">
+            <transport clientCredentialType="Windows" proxyCredentialType="None"
+                realm="" />
+            <message clientCredentialType="UserName" negotiateServiceCredential="true"
+                algorithmSuite="Default" />
+          </security>
+        </binding>
+        <binding name="ServerConsoleMexEndpoint" closeTimeout="00:01:00"
+            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+            bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
+            maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
+            messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
+            allowCookies="false">
+          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+          <reliableSession ordered="true" inactivityTimeout="00:10:00"
+              enabled="false" />
+          <security mode="None">
+            <transport clientCredentialType="Windows" proxyCredentialType="None"
+                realm="" />
+            <message clientCredentialType="Windows" negotiateServiceCredential="true" />
+          </security>
+        </binding>
+      </wsHttpBinding>
+    </bindings>
+    <client>
+      <endpoint address="http://localhost:9000/ServerConsoleService" behaviorConfiguration="ServerConsoleBehaviour"
+          binding="wsHttpBinding" bindingConfiguration="ServerConsoleHttpEndpoint"
+          contract="HeuristicLab.Hive.Contracts.Interfaces.IServerConsoleFacade" name="ServerConsoleHttpEndpoint">
+        <identity>
+          <certificate encodedValue="AwAAAAEAAAAUAAAAeBLH/0jWrlsW42fIC8VIIdAE6PUgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhDez3CoJIIitEZ5xwVqLJn6MAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMzE1NTg0OFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmOgweB6X4Ss6W2xb2hg1x61cjD2T7SO0ckkzmtqRhC2UWly9dBnonFJmg9RjN0y6l2tZhVzNhq8DgCkn3hPg5GL3XIwYX4PsXwNmeT6i+7s6rGbESuaEMvYOAQJSJ+MTgBvXCwo2g5nFHIBqP4W4aU2eybxP7H4cm1rQpoYHHjQIDAQABo0kwRzBFBgNVHQEEPjA8gBASDhO/IE7Ff7PpkCVF8oUpoRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghDez3CoJIIitEZ5xwVqLJn6MAkGBSsOAwIdBQADgYEAhxAzm3JTV7j51jti5P7izTEs7+8534kQloeAJDwlKolkd4ZMkf0BiexC2Vt1KsnxUjrK0HbbITzazkvkAmKi7dP+4G+3SrWag5lS4NcoPjTQy16T3zC9E6yafRaZp1/pxjC3Ap44qwq4Kjl2mEjeHHsdie/h4loowTqC9FlLbgo=" />
+        </identity>
+      </endpoint>
+      <endpoint address="http://localhost:9000/ServerConsoleService/mex" behaviorConfiguration="ServerConsoleBehaviour"
+          binding="wsHttpBinding" bindingConfiguration="ServerConsoleMexEndpoint"
+          contract="HeuristicLab.Hive.Contracts.Interfaces.IServerConsoleFacade" name="ServerConsoleMexEndpoint" />
+    </client>
+  </system.serviceModel>
+</configuration>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/AuthorizationManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/AuthorizationManager.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/AuthorizationManager.cs	(revision 4340)
@@ -0,0 +1,34 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Security.Principal;
+using System.ServiceModel;
+using System.Threading;
+using System.Security;
+using HeuristicLab.Hive.Server.DataAccess;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces;
+
+namespace HeuristicLab.Hive.Server.Core.Authorization {
+  public class AuthorizationManager : IAuthorizationManager {
+    private IContextFactory contextFactory = ServiceLocator.GetContextFactory();
+
+    public void AuthorizeForJobs(params Guid[] jobIds) {
+      if (!(Identity.IsAuthenticated && IsAuthorizedForJobs(jobIds))) {
+        throw new SecurityException("User '" + Identity.Name + "' is not authorized to access job (Id: " + string.Join(", ", jobIds.Select(x => x.ToString()).ToArray()) + ")");
+      }
+    }
+
+    public string UserId {
+      get { return Identity.Name; }
+    }
+    
+    private bool IsAuthorizedForJobs(params Guid[] jobIds) {
+      return DaoLocator.JobDao.IsUserAuthorizedForJobs(Identity.Name, jobIds);
+    }
+
+    private IIdentity Identity {
+      get { return ServiceSecurityContext.Current.PrimaryIdentity; }
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/HivePermissionManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/HivePermissionManager.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/HivePermissionManager.cs	(revision 4340)
@@ -0,0 +1,101 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Security.Contracts.Interfaces;
+using HeuristicLab.DataAccess;
+using HeuristicLab.Security.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces;
+using System.ServiceModel;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+
+namespace HeuristicLab.Hive.Server.Core {
+  public class HivePermissionManager : IHivePermissionManager {
+
+    private IJobManager jobManager = ServiceLocator.GetJobManager();
+    
+    private IPermissionManager permManager = ServiceLocator.GetPermissionManager();
+
+    private ISlaveManager slaveManager = ServiceLocator.GetSlaveManager();
+
+    private PermissionCollection permissions = HivePermissions.GetPermissions();
+    private PolicyCollection policyCollection = HivePermissions.GetPolicies();
+
+    /// <summary>
+    /// Authenticates an user and returns a valid guid if success.
+    /// </summary>
+    /// <param name="username"></param>
+    /// <param name="password"></param>
+    /// <returns></returns>
+    public Guid Login(string username, string password) {
+      return permManager.Authenticate(username, password);
+    }
+
+    /// <summary>
+    /// Checks user permission against predefined policy.
+    /// </summary>
+    /// <param name="policyName">Policy Name defines the action.</param>
+    /// <param name="sessionID">Session ID identifies a currently logged on user.</param>
+    /// <param name="entityID">Entity ID can be some resource or emtpy.</param>
+    public void Authorize(string policyName, Guid sessionID, Guid entityID) {
+      #region Use authorization method with scopes
+      //check if this policy has a permission with 'ANY' scope defined
+      Permission p = policyCollection[policyName].GetPermissionByContext("Any");
+      //check if user has 'xxx.Any' permission
+      if (p != null)
+        if (CheckPermission(sessionID, p.Id, entityID)) return;
+      
+      //check if this policy has a permission with 'PROJECT' scope defined
+      p = policyCollection[policyName].GetPermissionByContext("Project");
+      //check if user has 'xxx.Project' permission
+      if ((p != null) && (entityID!=Guid.Empty))
+      {
+          ResponseObject<JobDto> job = jobManager.GetJobById(entityID);
+          if (job.Obj.Project != null)
+              if (CheckPermission(sessionID, p.Id, jobManager.GetJobById(entityID).Obj.Project.Id)) return;
+      }
+      //check if this policy has a permission with 'OWNER' scope defined
+      p = policyCollection[policyName].GetPermissionByContext("User");
+      
+      //check if user has 'xxx.Owner' permission
+      if (p != null)
+        if (CheckPermission(sessionID, p.Id, jobManager.GetJobById(entityID).Obj.UserId)) return;
+      #endregion
+      #region Use authorization method when no scopes are present
+      //when no permission context is available, use primary authentification
+      foreach (KeyValuePair<Permission, PermissionContext> item in policyCollection[policyName].Permissions)
+      {
+          if (CheckPermission(sessionID, item.Key.Id, Guid.Empty)) return;
+      }
+      #endregion
+      //throw an exception when user access fails
+      throw new PermissionException(policyName);
+    }
+
+    /// <summary>
+    /// Checks if a user has permission for a specified action.
+    /// </summary>
+    /// <param name="sessionID">The current session.</param>
+    /// <param name="actionID">A pre-defined action that requires permission.</param>
+    /// <param name="entityID">A resource (Job,...)</param>
+    /// <returns></returns>
+    public bool CheckPermission(Guid sessionID, Guid actionID, Guid entityId) {
+      bool hasPerm = permManager.CheckPermission(sessionID, actionID, entityId);
+      PermissionCollection pc = HivePermissions.GetPermissions();
+      if (!hasPerm)
+          if (CheckPermissionHelper(sessionID, actionID, entityId)) return true;
+      return hasPerm;
+    }
+
+    private bool CheckPermissionHelper(Guid sessionId, Guid actionId, Guid entityId) {
+      if (entityId == Guid.Empty) return true;
+      IList<SlaveGroupDto> groups = slaveManager.GetAllGroupsOfResource(entityId).Obj;
+      foreach (SlaveGroupDto group in groups)
+        if (CheckPermission(sessionId, actionId, group.Id)) return true;
+      return false;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/HivePermissionPolicy.xml
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/HivePermissionPolicy.xml	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/HivePermissionPolicy.xml	(revision 4340)
@@ -0,0 +1,62 @@
+﻿<?xml version="1.0" encoding="utf-8" ?>
+<Policies>
+  <Policy name="AccessSlaves">
+    <Permission name="HivePermissions.Usermanagement.Slave.Read"/>
+  </Policy>
+  <Policy name="AccessSlaveGroup">
+    <Permission name="HivePermissions.Usermanagement.SlaveGroup.Read"/>
+  </Policy>
+  <Policy name="AccessUserGroup">
+    <Permission name="HivePermissions.Usermanagement.UserGroup.Read"/>
+  </Policy>
+  <Policy name="AccessProjects">
+    <Permission name="HivePermissions.ResourceManagement.Project.Read"/>
+  </Policy>
+  <Policy name="DeleteProjects">
+    <Permission name="HivePermissions.ResourceManagement.Project.Delete"/>
+  </Policy>
+  <Policy name="ChangeProjects">
+    <Permission name="HivePermissions.ResourceManagement.Project.Update"/>
+  </Policy>
+  <Policy name="DeleteSlaveGroup">
+    <Permission name="HivePermissions.Usermanagement.SlaveGroup.Delete"/>
+  </Policy>
+  <Policy name="AccessJobs">
+    <Permission priority="1" name="HivePermissions.Jobmanagement.Read.Any" context="Any"/>
+    <Permission priority="2" name="HivePermissions.Jobmanagement.Read.ProjectOnly" context="Project"/>
+    <Permission priority="3" name="HivePermissions.Jobmanagement.Read.OwnedOnly" context="User"/>
+  </Policy>
+  <Policy name="AddSlaveGroup">
+    <Permission name="HivePermissions.Usermanagement.SlaveGroup.Create"/>
+  </Policy>
+  <Policy name="AddJob">
+    <Permission priority="1" name="HivePermissions.Jobmanagement.Create.Any" context="Any"/>
+    <Permission priority="2" name="HivePermissions.Jobmanagement.Create.ProjectOnly" context="Project"/>
+  </Policy>
+  <Policy name="AddResource">
+    <Permission priority="1" name="HivePermissions.Jobmanagement.Assign.ToAnyResource" context="Any"/>
+    <Permission priority="2" name="HivePermissions.Jobmanagement.Assign.ToProject" context="Project"/>
+  </Policy>
+  <Policy name="AccessStatistics">
+    <Permission priority="1" name="HivePermissions.Jobmanagement.Read.Any" context="Any"/>
+    <Permission priority="2" name="HivePermissions.Jobmanagement.Read.ProjectOnly" context="Project"/>
+    <Permission priority="3" name="HivePermissions.Jobmanagement.Read.OwnedOnly" context="User"/>
+  </Policy>
+  <Policy name="AccessJobResults">
+    <Permission priority="1" name="HivePermissions.Jobmanagement.Read.Any" context="Any"/>
+    <Permission priority="2" name="HivePermissions.Jobmanagement.Read.ProjectOnly" context="Project"/>
+    <Permission priority="3" name="HivePermissions.Jobmanagement.Read.OwnedOnly" context="User"/>
+  </Policy>
+  <Policy name="AbortJob">
+    <Permission priority="1" name="HivePermissions.Jobmanagement.Abort.Any" context="Any"/>
+    <Permission priority="2" name="HivePermissions.Jobmanagement.Abort.ProjectOnly" context="Project"/>
+    <Permission priority="3" name="HivePermissions.Jobmanagement.Abort.OwnedOnly" context="User"/>
+  </Policy>
+
+  <Policy name="RemoveJob">
+    <Permission priority="1" name="HivePermissions.Jobmanagement.Delete.Any" context="Any"/>
+    <Permission priority="2" name="HivePermissions.Jobmanagement.Delete.ProjectOnly" context="Project"/>
+    <Permission priority="3" name="HivePermissions.Jobmanagement.Delete.OwnedOnly" context="User"/>
+  </Policy>
+  
+</Policies>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/HivePermissionSet.xml
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/HivePermissionSet.xml	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/HivePermissionSet.xml	(revision 4340)
@@ -0,0 +1,184 @@
+﻿<?xml version="1.0" encoding="utf-8" ?>
+<Permissions>
+  <Permission name="HivePermissions.Jobmanagement.Create.Any">
+    <ID>A477BEA9-9C05-477f-AD9E-F76C510DDB0B</ID>
+    <Description>Add any job.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name="HivePermissions.Jobmanagement.Create.ProjectOnly">
+    <ID>95276EA1-F97F-4827-B5D0-AE326856585E</ID>
+    <Description>Add only project-related job.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Jobmanagement.Create.OwnedOnly">
+    <ID>1C47301B-4187-416f-B113-DA433448AA2E</ID>
+    <Description>Add private jobs only.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Jobmanagement.Assign.ToAnyResource">
+    <ID>48DBBEE7-53FC-4c23-B2C3-5244A5BD7385</ID>
+    <Description>Assign job to any resource.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Jobmanagement.Assign.ToProject">
+    <ID>34267865-551F-4faf-BAA8-D6821B116EBC</ID>
+    <Description>Assign job to a specific project.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Jobmanagement.Abort.Any">
+    <ID>C6EB36BE-2BE2-40f2-8440-7750759DFD79</ID>
+    <Description>Abort any running job.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Jobmanagement.Abort.ProjectOnly">
+    <ID>0E4C2FB1-DFAE-4b1d-B54A-4BD64D7BF905</ID>
+    <Description>Abort only jobs belonging to a specific project.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Jobmanagement.Abort.OwnedOnly">
+    <ID>D7C0C293-78E5-44cf-9785-7E2840BFF1AE</ID>
+    <Description>Abort only jobs belonging to self.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Jobmanagement.Delete.Any">
+    <ID>EBD4CF61-CD1B-4d61-BD8A-9CEC2174E50F</ID>
+    <Description>Delete any jobs.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Jobmanagement.Delete.ProjectOnly">
+    <ID>04C921A6-8F3E-4add-B6F1-E79C5E1C0724</ID>
+    <Description>Delete only jobs belonging to a specific project.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Jobmanagement.Delete.OwnedOnly">
+    <ID>D4F67946-1013-4d84-8B8F-0EA2E9A3E0D4</ID>
+    <Description>Delete only own jobs.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Jobmanagement.Read.Any">
+    <ID>E9FBDB1B-C532-49ad-AE1E-BDC33576F4E5</ID>
+    <Description>Read/Get any job.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Jobmanagement.Read.ProjectOnly">
+    <ID>C778C27F-BAA6-4aed-8495-015A0923E0ED</ID>
+    <Description>Read/Get only jobs belonging to a specific project.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Jobmanagement.Read.OwnedOnly">
+    <ID>022B7792-8CED-4f40-9B55-5BBB892338B4</ID>
+    <Description>Read/Get only owned jobs.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.PermissionManagement.Permission.Grant">
+    <ID>5A1A98DE-04CE-4316-9BCA-BBE833EC4E74</ID>
+    <Description>Grant a permission.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.PermissionManagement.Permission.Revoke">
+    <ID>50A3A44F-085C-47c2-AB95-DDA90CEE38B0</ID>
+    <Description>Revoke a permission.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Usermanagement.Slave.Create">
+    <ID>90A00F60-1AC2-4928-8EC3-D7667E08D849</ID>
+    <Description>Create new client.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Usermanagement.Slave.Read">
+    <ID>5B2AF000-920C-4955-BC27-8EA3EAA14EC6</ID>
+    <Description>Read/Get a client.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Usermanagement.Slave.Update">
+    <ID>072CC90A-5831-4ff1-8D2E-C1084AB601DB</ID>
+    <Description>Update a client.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Usermanagement.Slave.Delete">
+    <ID>EE39299A-D138-4ec8-89FE-55619FC3C35A</ID>
+    <Description>Delete a client.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Usermanagement.SlaveGroup.Create">
+    <ID>134AD38F-8875-4e74-A7B9-F3366B440752</ID>
+    <Description>Create/Add a clientgroup.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Usermanagement.SlaveGroup.Read">
+    <ID>3A43FA6F-CB4F-48fc-BB5C-631D1F09AFDA</ID>
+    <Description>Read/Get a clientgroup.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Usermanagement.SlaveGroup.Update">
+    <ID>46128AD3-C3E9-4605-B537-45CDB8276E44</ID>
+    <Description>Update a clientgroup.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Usermanagement.SlaveGroup.Delete">
+    <ID>6F2BB5DE-3AE9-4108-B537-362F311BAD8A</ID>
+    <Description>Update a clientgroup.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Usermanagement.User.Create">
+    <ID>7681347C-A7FF-4895-AE14-8454A7E05FCA</ID>
+    <Description>Create an user.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Usermanagement.User.Read">
+    <ID>48168F0B-3F76-4e2c-859F-71DDF0B4D4A4</ID>
+    <Description>Get an user.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Usermanagement.User.Update">
+    <ID>F44FEC19-5CEE-4f24-8B8C-EDE977DBA154</ID>
+    <Description>Update an user.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Usermanagement.User.Delete">
+    <ID>DA8F0ECB-97C2-485c-81D7-1A20B725EA47</ID>
+    <Description>Delete an user.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Usermanagement.UserGroup.Create">
+    <ID>D783D5E5-3DE5-465f-B6EF-A2E6BFA153DF</ID>
+    <Description>Create an user.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Usermanagement.UserGroup.Read">
+    <ID>16006FA7-C5A9-4185-8724-A2722F01A24A</ID>
+    <Description>Get an user.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Usermanagement.UserGroup.Update">
+    <ID>AA2F764A-A300-4827-B1DE-BE36CE38A546</ID>
+    <Description>Update an user.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.Usermanagement.UserGroup.Delete">
+    <ID>6A58925D-03C2-410a-A145-1B5BEDA7FB4A</ID>
+    <Description>Delete an user.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.ResourceManagement.Project.Create">
+    <ID>FA6C3DD1-3D51-4ed5-8C78-F52C4682009A</ID>
+    <Description>Create a project.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.ResourceManagement.Project.Read">
+    <ID>BA0EBF0A-FD0E-4439-95B2-ADF74EE7D951</ID>
+    <Description>Get a project.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.ResourceManagement.Project.Update">
+    <ID>963B74EF-1673-4eb6-969D-C16E6DBA68FA</ID>
+    <Description>Update a project.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+  <Permission name ="HivePermissions.ResourceManagement.Project.Delete">
+    <ID>AC78B93B-66F2-42b2-860E-976C825B11B7</ID>
+    <Description>Delete a project.</Description>
+    <Plugin>HeuristicLab.Hive</Plugin>
+  </Permission>
+
+</Permissions>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/HivePermissionSet.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/HivePermissionSet.xsd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/HivePermissionSet.xsd	(revision 4340)
@@ -0,0 +1,19 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="Permissions">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" name="Permission">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name="ID" type="xs:string" />
+              <xs:element name="Description" type="xs:string" />
+              <xs:element name="Plugin" type="xs:string" />
+            </xs:sequence>
+            <xs:attribute name="name" type="xs:string" use="required" />
+          </xs:complexType>
+        </xs:element>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/HivePermissions.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/HivePermissions.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/HivePermissions.cs	(revision 4340)
@@ -0,0 +1,241 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Xml.XPath;
+using HeuristicLab.Security.Contracts.BusinessObjects;
+using System.Diagnostics;
+using System.Xml;
+using System.IO;
+using System.Reflection;
+
+namespace HeuristicLab.Hive.Server.Core  {
+  
+  public static class HivePermissions {
+    private const string PERMISSIONFILE = @"HivePermissionSet.xml";
+    private const string POLICIESFILE = @"HivePermissionPolicy.xml";
+
+    public static class Jobmanagement {
+      [Flags]
+      public enum Assign {
+        ToAnyResource = 0x02,
+        ToProject = 0x04
+      }
+      [Flags]
+      public enum Abort {
+        /// <summary>Can abort any job.</summary>
+        Any = 0x02,
+        /// <summary>Can abort jobs from specific project only.</summary>
+        ProjectOnly = 0x04,
+        /// <summary>Can abort only owned jobs.</summary>
+        OwnedOnly = 0x08
+      }
+      [Flags]
+      public enum Create {
+        /// <summary>Can create a job everywhere.</summary>
+        Any = 0x02,
+        /// <summary>Can create a job in project context only.</summary>
+        ProjectOnly = 0x04,
+        /// <summary>Can create a job for owned resources only.</summary>
+        OwnedOnly = 0x08
+      }
+      [Flags]
+      public enum Read {
+        /// <summary>Can read any job.</summary>
+        Any = 0x02,
+        /// <summary>Can read a job in project context only.</summary>
+        ProjectOnly = 0x04,
+        /// <summary>Can read only owned job.</summary>
+        OwnedOnly = 0x08
+      }
+      [Flags]
+      public enum Delete {
+        /// <summary>Can delete any job.</summary>
+        Any = 0x02,
+        /// <summary>Can delete a job in project context only.</summary>
+        ProjectOnly = 0x04,
+        /// <summary>Can delete only owned job.</summary>
+        OwnedOnly = 0x08
+      }
+    }
+
+    public static class Usermanagement {
+      [Flags]
+      public enum User {
+        Create = 0x02,
+        Read = 0x04,
+        Update = 0x08,
+        Delete = 0x16
+      }
+
+      [Flags]
+      public enum UserGroup {
+        Create = 0x02,
+        Read = 0x04,
+        Update = 0x08,
+        Delete = 0x16
+      }
+
+      [Flags]
+      public enum Slave {
+        Create = 0x02,
+        Read = 0x04,
+        Update = 0x08,
+        Delete = 0x16
+      }
+
+      [Flags]
+      public enum SlaveGroup {
+        Create = 0x02,
+        Read = 0x04,
+        Update = 0x08,
+        Delete = 0x16
+      }
+    }
+
+    public static class PermissionManagement {
+      [Flags]
+      public enum Permission {
+        Grant = 0x02,
+        Revoke = 0x04
+      }
+    }
+
+    public static class ResourceManagement {
+      [Flags]
+      public enum Project {
+        Create = 0x02,
+        Read = 0x04,
+        Update = 0x08,
+        Delete = 0x16
+      }
+    }
+
+    private static PermissionCollection pc;
+
+    private static PolicyCollection pol;
+
+    public static PermissionCollection GetPermissions() {
+      if (pc == null) {
+        pc = new PermissionCollection();
+        LoadFromXml(pc.Permissions, PERMISSIONFILE);
+      }
+      return pc;
+    }
+
+    public static PolicyCollection GetPolicies() {
+      if (pol == null) {
+        pol = new PolicyCollection();
+        LoadFromXml(pol.Policies, POLICIESFILE);
+      }
+      return pol;
+    }
+
+    public static string ConvertEnumType(object obj) {
+      string retVal = string.Empty;
+      Type t = obj.GetType();
+      string value = obj.ToString();
+      retVal = (t.FullName.Replace(t.Namespace + ".", "")).Replace("+", ".") + "." + value;
+      return retVal;
+    }
+
+    /// <summary>
+    /// Permission
+    /// </summary>
+    /// <param name="perm"></param>
+    private static void LoadFromXml(IList<Permission> perm, string filename) {
+      Permission p = null;
+      XPathDocument doc;
+      string assemblyName = Assembly.GetAssembly(typeof(HivePermissions)).GetName().Name;
+      doc = new XPathDocument(filename);
+      XPathNavigator nav = doc.CreateNavigator();
+      nav.MoveToRoot();
+      do {
+        if (nav.NodeType == XPathNodeType.Element && nav.Name == "Permission") {
+          p = new Permission();
+          p.Name = nav.GetAttribute("name", "");
+          nav.MoveToFollowing(XPathNodeType.Element);
+          if (nav.Name == "ID")
+            p.Id = new Guid(nav.Value);
+          nav.MoveToFollowing(XPathNodeType.Element);
+          if (nav.Name == "Description")
+            p.Description = nav.Value;
+          nav.MoveToFollowing(XPathNodeType.Element);
+          if (nav.Name == "Plugin")
+            p.Plugin = nav.Value;
+          perm.Add(p);
+        }
+      } while (nav.MoveToFollowing(XPathNodeType.Element));
+    }
+    /*
+    public static XmlDocument GetEmbeddedXml(Type type, string fileName) {
+      Stream str = GetEmbeddedFile(type, fileName);
+      XmlTextReader tr = new XmlTextReader(str);
+      XmlDocument xml = new XmlDocument();
+      xml.Load(tr);
+      return xml;
+    }
+    */
+
+    /// <summary>
+    /// Extracts an embedded file out of a given assembly.
+    /// </summary>
+    /// <param name="assemblyName">The namespace of you assembly.</param>
+    /// <param name="fileName">The name of the file to extract.</param>
+    /// <returns>A stream containing the file data.</returns>
+    public static Stream GetEmbeddedFile(string assemblyName, string fileName) {
+      try {
+        Assembly a = Assembly.Load(assemblyName);
+        Stream str = a.GetManifestResourceStream(assemblyName + "." + fileName);
+
+        if (str == null)
+          throw new Exception("Could not locate embedded resource '" + fileName + "' in assembly '" + assemblyName + "'");
+        return str;
+      }
+      catch (Exception e) {
+        throw new Exception(assemblyName + ": " + e.Message);
+      }
+    }
+
+   
+    /// <summary>
+    /// Policy
+    /// </summary>
+    /// <param name="pol"></param>
+    /// <param name="filename"></param>
+    private static void LoadFromXml(IList<Policy> policyList, string filename) {
+      PermissionCollection permissionCollection = GetPermissions();
+      string assemblyName = Assembly.GetAssembly(typeof(HivePermissions)).GetName().Name;
+      XPathDocument doc = new XPathDocument(filename);
+      XPathNavigator nav = doc.CreateNavigator();
+      nav.MoveToRoot();
+      //receive all policies -> Element <Policy name="xxx">...</Policy>
+      do {
+        if (nav.NodeType == XPathNodeType.Element && nav.Name == "Policy") {
+          string policyName = nav.GetAttribute("name", "");
+          Policy policy = new Policy(policyName);
+          nav.MoveToFollowing(XPathNodeType.Element);
+          //receive all permissions -> Element <Permission.../>
+          do {
+            if (nav.Name == "Permission" && nav.HasAttributes) {
+              PermissionContext ctx = new PermissionContext();
+              int prior = 0;
+              int.TryParse(nav.GetAttribute("priority", ""), out prior);
+              ctx.Priority = prior;
+              ctx.Elevation = nav.GetAttribute("context", "");
+              string permissionName = nav.GetAttribute("name", "");
+              if (!string.IsNullOrEmpty(permissionName)) {
+                Permission permission = permissionCollection[permissionName];
+                Debug.WriteLineIf(permission == null, "Permission '" + permissionName + "' not found in PermissionCollection!");
+                if (permission != null)
+                  policy.AddPermission(permission, ctx);
+              }
+            }
+          } while (nav.MoveToNext());
+          policyList.Add(policy);
+        }
+      } while (nav.MoveToFollowing(XPathNodeType.Element));
+    }
+  }
+  
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/PermissionCollection.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/PermissionCollection.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/PermissionCollection.cs	(revision 4340)
@@ -0,0 +1,56 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Security.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.Core {
+  public class PermissionCollection : IEnumerable<Permission> {
+    public IList<Permission> perm = new List<Permission>();
+
+    public PermissionCollection() {
+    }
+
+    public IList<Permission> Permissions {
+      get { return perm; }
+    }
+
+    /// <summary>
+    /// Gets the Permission identified by FQN type.
+    /// </summary>
+    /// <param name="permissionName">eg. 'HivePermissions.Jobmanagement.Create.Any'</param>
+    /// <returns></returns>
+    public Permission this[string permissionName] {
+      get {
+        foreach (Permission item in perm) {
+          if (item.Name == permissionName)
+            return item;
+        }
+        return null;
+      }
+    }
+
+    /// <summary>
+    /// Converts an enumeration to a fully qualified string.
+    /// </summary>
+    /// <param name="obj">Any enumeration type.</param>
+    /// <returns>Type Information in Full Qualified Notation (FQN).</returns>
+    public string Convert(object obj) {
+      string retVal = string.Empty;
+      Type t = obj.GetType();
+      string value = obj.ToString();
+      retVal = (t.FullName.Replace(t.Namespace + ".", "")).Replace("+", ".") + "." + value;
+      return retVal;
+    }
+
+    public IEnumerator<Permission> GetEnumerator() {
+      return perm.GetEnumerator();
+    }
+
+    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
+      return perm.GetEnumerator();
+    }
+
+  }
+
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/PermissionContext.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/PermissionContext.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/PermissionContext.cs	(revision 4340)
@@ -0,0 +1,24 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Server.Core {
+  /// <summary>
+  /// Holds additional information about a certain permission.
+  /// </summary>
+  public class PermissionContext {
+    private int _priority;
+    /// <summary>
+    /// Gets or sets the priority of this permission rule.
+    /// </summary>
+    public int Priority { get { return this._priority; } set { this._priority = value; } }
+
+    private string _elevation;
+    /// <summary>
+    /// Gets or sets the Rights Elevation Information. (Primary Policy Context)
+    /// </summary>
+    public string Elevation { get { return this._elevation; } set { this._elevation = value; } }
+
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/PermissionException.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/PermissionException.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/PermissionException.cs	(revision 4340)
@@ -0,0 +1,17 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ServiceModel;
+
+namespace HeuristicLab.Hive.Server.Core {
+  public class PermissionException : FaultException {
+    public PermissionException()
+      : base("Current user has insufficent rights for this action!") {
+    }
+
+    public PermissionException(string msg)
+      : base("Current user has insufficent rights for this action: " + msg) {
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/Policy.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/Policy.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/Policy.cs	(revision 4340)
@@ -0,0 +1,32 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Security.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.Core {
+  public class Policy {
+    private string _name;
+    public string Name { get { return _name; } set { this._name = value; } }
+
+    private IDictionary<Permission, PermissionContext> _permissions = new Dictionary<Permission, PermissionContext>();
+    public IDictionary<Permission, PermissionContext> Permissions { get { return this._permissions; } set { this._permissions = value; } }
+
+    public Policy(string name) {
+      this._name = name;
+    }
+
+    public void AddPermission(Permission permission, PermissionContext ctx) {
+      this._permissions.Add(permission, ctx);
+    }
+
+    public Permission GetPermissionByContext(string context) {
+      foreach (KeyValuePair<Permission, PermissionContext> item in _permissions) {
+        if (item.Value.Elevation == context)
+          return item.Key;
+      }
+      return null;
+    }
+
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/PolicyCollection.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/PolicyCollection.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/PolicyCollection.cs	(revision 4340)
@@ -0,0 +1,36 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Collections;
+
+namespace HeuristicLab.Hive.Server.Core {
+  public class PolicyCollection : IEnumerable<Policy> {
+    private IList<Policy> _policies = new List<Policy>();
+
+    public IList<Policy> Policies { get { return this._policies; } }
+
+    public Policy this[string name] {
+      get {
+        foreach (Policy item in _policies) {
+          if (item.Name == name)
+            return item;
+        }
+        return null;
+      }
+    }
+
+    public IEnumerator<Policy> GetEnumerator() {
+      return this._policies.GetEnumerator();
+    }
+
+    #region IEnumerable Members
+
+    IEnumerator IEnumerable.GetEnumerator()
+    {
+        return this._policies.GetEnumerator();
+    }
+
+    #endregion
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/CreateHiveDatabaseApplication.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/CreateHiveDatabaseApplication.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/CreateHiveDatabaseApplication.cs	(revision 4340)
@@ -0,0 +1,24 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Hive.Server;
+using HeuristicLab.Hive.Server.DataAccess;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Hive.Server.Core {
+  [Application("Create Hive Database", "Creates new empty Hive Database.", true)]
+  class CreateHiveDatabaseApplication : ApplicationBase {
+
+    public override void Run() {
+      IContextFactory contextFactory = ServiceLocator.GetContextFactory();
+      using (contextFactory.GetContext(false)) {
+        if (contextFactory.CurrentContext.DatabaseExists())
+          contextFactory.CurrentContext.DeleteDatabase();
+        contextFactory.CurrentContext.CreateDatabase();
+        MessageBox.Show("Creating Database finished.");
+      }
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/DaoLocator.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/DaoLocator.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/DaoLocator.cs	(revision 4340)
@@ -0,0 +1,65 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Hive.Server.DataAccess;
+using HeuristicLab.Hive.Server.LINQDataAccess;
+
+namespace HeuristicLab.Hive.Server.Core {
+  public class DaoLocator {
+    
+    [ThreadStatic] private static ISlaveDao clientDao;
+    [ThreadStatic] private static ISlaveConfigDao clientConfigDao;
+    [ThreadStatic] private static ISlaveGroupDao clientGroupDao;
+    [ThreadStatic] private static IJobDao jobDao;
+    [ThreadStatic] private static IPluginInfoDao pluginInfoDao;
+    [ThreadStatic] private static IUptimeCalendarDao uptimeCalendarDao;
+
+    public static ISlaveDao SlaveDao {
+      get {
+        if (clientDao == null)
+          clientDao = new SlaveDao();
+        return clientDao;
+      }
+    }
+
+    public static ISlaveConfigDao SlaveConfigDao {
+      get {
+        if(clientConfigDao == null)
+          clientConfigDao = new SlaveConfigDao();
+        return clientConfigDao;
+      }
+    }
+
+    public static ISlaveGroupDao SlaveGroupDao {
+      get {
+        if(clientGroupDao == null)
+          clientGroupDao = new SlaveGroupDao();
+        return clientGroupDao;
+      }
+    }
+
+    public static IJobDao JobDao {
+      get {
+        if(jobDao == null)
+          jobDao = new JobDao();
+        return jobDao;
+      }
+    }
+
+    public static IPluginInfoDao PluginInfoDao {
+      get {
+        if(pluginInfoDao == null)
+          pluginInfoDao = new PluginInfoDao();
+        return pluginInfoDao;
+      }
+    }
+
+    public static IUptimeCalendarDao UptimeCalendarDao {
+      get {
+        if (uptimeCalendarDao == null)
+          uptimeCalendarDao = new UptimeCalendarDao();
+        return uptimeCalendarDao;
+      }
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/DefaultScheduler.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/DefaultScheduler.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/DefaultScheduler.cs	(revision 4340)
@@ -0,0 +1,56 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Server.DataAccess;
+using System.Threading;
+using HeuristicLab.DataAccess.Interfaces;
+using System.Transactions;
+using HeuristicLab.Hive.Contracts;
+
+namespace HeuristicLab.Hive.Server.Core {
+  internal class DefaultScheduler : IScheduler {
+
+    private static object jobLock = new object();
+
+    #region IScheduler Members
+
+    public DefaultScheduler() { }
+
+    public bool ExistsJobForSlave(HeartBeatData hbData) {
+      List<JobDto> allOfflineJobsForSlave = new List<JobDto>(DaoLocator.JobDao.FindFittingJobsForSlave(JobState.Offline, hbData.FreeCores, hbData.FreeMemory, hbData.SlaveId));
+      return (allOfflineJobsForSlave != null && allOfflineJobsForSlave.Count > 0);
+    }
+
+    public JobDto GetNextJobForSlave(Guid slaveId) {
+      lock (jobLock) {
+        /// Critical section ///
+        JobDto jobToCalculate = null;
+        using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = ApplicationConstants.ISOLATION_LEVEL_SCOPE })) {
+          SlaveDto slave = DaoLocator.SlaveDao.FindById(slaveId);
+          if (slave != null) {
+            LinkedList<JobDto> allOfflineJobsForSlave = new LinkedList<JobDto>(DaoLocator.JobDao.FindFittingJobsForSlave(JobState.Offline, slave.NrOfFreeCores, slave.FreeMemory, slave.Id));
+            if (allOfflineJobsForSlave != null && allOfflineJobsForSlave.Count > 0) {
+              jobToCalculate = allOfflineJobsForSlave.First.Value;
+              jobToCalculate.State = JobState.Calculating;
+              jobToCalculate.Slave = slave;
+              jobToCalculate.Slave.State = SlaveState.Calculating;
+              jobToCalculate.DateCalculated = DateTime.Now;
+              DaoLocator.JobDao.AssignSlaveToJob(slave.Id, jobToCalculate.Id);
+              DaoLocator.JobDao.Update(jobToCalculate);
+              DaoLocator.SlaveDao.Update(jobToCalculate.Slave);
+            }
+          }
+          scope.Complete();
+        }
+        /// End Critical section ///
+
+        return jobToCalculate;
+      }
+    }
+
+    #endregion
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/ClientFacade.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/ClientFacade.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/ClientFacade.cs	(revision 4340)
@@ -0,0 +1,107 @@
+﻿#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.Interfaces;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Server.DataAccess;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+using System.Security.Permissions;
+
+namespace HeuristicLab.Hive.Server.Core {
+  public class ClientFacade : IClientFacade {
+
+    private IJobManager jobManager = ServiceLocator.GetJobManager();
+    private IContextFactory contextFactory = ServiceLocator.GetContextFactory();
+
+    public ClientFacade() {
+    }
+
+    #region IClientFacade Members
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
+    public ResponseObject<JobDto> AddJob(SerializedJob job) {
+      using (contextFactory.GetContext()) {
+        return jobManager.AddNewJob(job);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
+    public ResponseObject<JobDto> AddJobWithGroupStrings(SerializedJob job, IEnumerable<string> resources) {
+      using (contextFactory.GetContext()) {
+        return jobManager.AddJobWithGroupStrings(job, resources);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
+    public Response RequestSnapshot(Guid jobId) {
+      using (contextFactory.GetContext()) {
+        ServiceLocator.GetAuthorizationManager().AuthorizeForJobs(jobId);
+        return jobManager.RequestSnapshot(jobId);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
+    public ResponseObject<SerializedJob> GetLastSerializedResult(Guid jobId, bool requested, bool snapshot) {
+      using (contextFactory.GetContext(false)) {
+        ServiceLocator.GetAuthorizationManager().AuthorizeForJobs(jobId);
+        return jobManager.GetLastSerializedResult(jobId, requested, snapshot);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
+    public ResponseObject<JobDto> GetJobById(Guid jobId) {
+      using (contextFactory.GetContext(false)) {
+        ServiceLocator.GetAuthorizationManager().AuthorizeForJobs(jobId);
+        return jobManager.GetJobById(jobId);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
+    public Response AbortJob(Guid jobId) {
+      using (contextFactory.GetContext()) {
+        ServiceLocator.GetAuthorizationManager().AuthorizeForJobs(jobId);
+        return jobManager.AbortJob(jobId);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Client)]
+    public ResponseObject<JobResultList> GetJobResults(IEnumerable<Guid> jobIds) {
+      using (contextFactory.GetContext(false)) {
+        ServiceLocator.GetAuthorizationManager().AuthorizeForJobs(jobIds.ToArray());
+        return jobManager.GetJobResults(jobIds);
+      }
+    }
+
+    #endregion
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/ServerConsoleFacade.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/ServerConsoleFacade.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/ServerConsoleFacade.cs	(revision 4340)
@@ -0,0 +1,228 @@
+﻿#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.Interfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces;
+using System.ServiceModel;
+using HeuristicLab.Hive.Server.DataAccess;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+using System.Security.Permissions;
+
+namespace HeuristicLab.Hive.Server.Core {
+  public class ServerConsoleFacade : IServerConsoleFacade {
+    private ISlaveManager slaveManager = ServiceLocator.GetSlaveManager();
+
+    private IJobManager jobManager = ServiceLocator.GetJobManager();
+
+    private IContextFactory contextFactory = ServiceLocator.GetContextFactory();
+
+    public Guid sessionID = Guid.Empty;
+
+    public ServerConsoleFacade() {
+    }
+
+    public Response Login() {
+      Response resp = new Response();
+      return resp;
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public ResponseList<SlaveDto> GetAllSlaves() {
+      using (contextFactory.GetContext(false)) {
+        return slaveManager.GetAllSlaves();
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public ResponseList<SlaveGroupDto> GetAllSlaveGroups() {
+      using (contextFactory.GetContext(false)) {
+        return slaveManager.GetAllSlaveGroups();
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public ResponseList<UpTimeStatisticsDto> GetAllUpTimeStatistics() {
+      using (contextFactory.GetContext(false)) {
+        return slaveManager.GetAllUpTimeStatistics();
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public ResponseObject<SlaveGroupDto> AddSlaveGroup(SlaveGroupDto slaveGroup) {
+      using (contextFactory.GetContext()) {
+        return slaveManager.AddSlaveGroup(slaveGroup);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public Response AddResourceToGroup(Guid slaveGroupId, ResourceDto resource) {
+      using (contextFactory.GetContext()) {
+        return slaveManager.AddResourceToGroup(slaveGroupId, resource);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public Response DeleteResourceFromGroup(Guid slaveGroupId, Guid resourceId) {
+      using (contextFactory.GetContext()) {
+        return slaveManager.DeleteResourceFromGroup(slaveGroupId, resourceId);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public ResponseList<JobDto> GetAllJobs() {
+      using (contextFactory.GetContext(false)) {
+        return jobManager.GetAllJobs();
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public ResponseList<JobDto> GetAllJobsWithFilter(JobState jobState, int offset, int count) {
+      using (contextFactory.GetContext(false)) {
+        return jobManager.GetAllJobsWithFilter(jobState, offset, count);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public ResponseObject<JobDto> GetJobById(Guid jobId) {
+      using (contextFactory.GetContext(false)) {
+        return jobManager.GetJobById(jobId);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public ResponseObject<JobDto> GetJobByIdWithDetails(Guid jobId) {
+      using (contextFactory.GetContext(false)) {
+        return jobManager.GetJobByIdWithDetails(jobId);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public ResponseObject<JobDto> AddNewJob(SerializedJob job) {
+      using (contextFactory.GetContext()) {
+        return jobManager.AddNewJob(job);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public ResponseObject<SerializedJob> GetLastSerializedResult(Guid jobId, bool requested, bool snapshot) {
+      using (contextFactory.GetContext(false)) {
+        return jobManager.GetLastSerializedResult(jobId, requested, snapshot);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public ResponseObject<JobResultList> GetJobResults(IEnumerable<Guid> jobIds) {
+      using (contextFactory.GetContext(false)) {
+        return jobManager.GetJobResults(jobIds);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public Response RequestSnapshot(Guid jobId) {
+      using (contextFactory.GetContext()) {
+        return jobManager.RequestSnapshot(jobId);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public Response AbortJob(Guid jobId) {
+      using (contextFactory.GetContext()) {
+        return jobManager.AbortJob(jobId);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public ResponseObject<SlaveGroupDtoList> GetAllGroupsOfResource(Guid resourceId) {
+      using (contextFactory.GetContext(false)) {
+        return slaveManager.GetAllGroupsOfResource(resourceId);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public Response DeleteSlaveGroup(Guid slaveGroupId) {
+      using (contextFactory.GetContext()) {
+        return slaveManager.DeleteSlaveGroup(slaveGroupId);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public ResponseList<ProjectDto> GetAllProjects() {
+      using (contextFactory.GetContext(false)) {
+        return jobManager.GetAllProjects();
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public Response CreateProject(ProjectDto project) {
+      using (contextFactory.GetContext()) {
+        return jobManager.CreateProject(project);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public Response ChangeProject(ProjectDto project) {
+      using (contextFactory.GetContext()) {
+        return jobManager.ChangeProject(project);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public Response DeleteProject(Guid projectId) {
+      using (contextFactory.GetContext()) {
+        return jobManager.DeleteProject(projectId);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public ResponseList<JobDto> GetJobsByProject(Guid projectId) {
+      using (contextFactory.GetContext(false)) {
+        return jobManager.GetJobsByProject(projectId);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public ResponseList<AppointmentDto> GetUptimeCalendarForResource(Guid guid) {
+      using (contextFactory.GetContext(false)) {
+        return slaveManager.GetUptimeCalendarForResource(guid);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public Response SetUptimeCalendarForResource(Guid guid, IEnumerable<AppointmentDto> appointments, bool isForced) {
+      using (contextFactory.GetContext()) {
+        return slaveManager.SetUptimeCalendarForResource(guid, appointments, isForced);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    public ResponseObject<JobDto> AddJobWithGroupStrings(SerializedJob job, IEnumerable<string> resources) {
+      using (contextFactory.GetContext()) {
+        return jobManager.AddJobWithGroupStrings(job, resources);
+      }
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/SlaveFacade.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/SlaveFacade.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/SlaveFacade.cs	(revision 4340)
@@ -0,0 +1,190 @@
+#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.Interfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.PluginInfrastructure;
+using System.IO;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.ServiceModel;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces;
+using System.Transactions;
+using HeuristicLab.Hive.Server.LINQDataAccess;
+using HeuristicLab.Hive.Server.DataAccess;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+using System.Security.Permissions;
+
+namespace HeuristicLab.Hive.Server.Core {
+  [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)]
+  public class SlaveFacade : ISlaveFacade {
+    private ISlaveCommunicator slaveCommunicator = ServiceLocator.GetSlaveCommunicator();
+    private IContextFactory contextFactory = ServiceLocator.GetContextFactory();
+
+    public SlaveFacade() {
+    }
+
+    #region ISlaveCommunicator Members
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
+    public Response Login(SlaveDto slave) {
+      using (contextFactory.GetContext()) {
+        return slaveCommunicator.Login(slave);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
+    public ResponseHeartBeat ProcessHeartBeat(HeartBeatData hbData) {
+      using (contextFactory.GetContext()) {
+        return slaveCommunicator.ProcessHeartBeat(hbData);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
+    public ResponseObject<JobDto> GetJob(Guid slaveId) {
+      using (contextFactory.GetContext()) {
+        return slaveCommunicator.GetJob(slaveId);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
+    public ResponseResultReceived StoreFinishedJobResult(Guid slaveId, Guid jobId, byte[] result, double percentage, string exception) {
+      using (contextFactory.GetContext()) {
+        ServiceLocator.GetAuthorizationManager().AuthorizeForJobs(jobId);
+        return slaveCommunicator.StoreFinishedJobResult(slaveId, jobId, result, percentage, exception);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
+    public Response Logout(Guid slaveId) {
+      using (contextFactory.GetContext()) {
+        return slaveCommunicator.Logout(slaveId);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
+    public Response IsJobStillNeeded(Guid jobId) {
+      using (contextFactory.GetContext()) {
+        return slaveCommunicator.IsJobStillNeeded(jobId);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
+    public ResponseList<CachedHivePluginInfoDto> GetPlugins(List<HivePluginInfoDto> pluginList) {
+      return slaveCommunicator.GetPlugins(pluginList);
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
+    public ResponseResultReceived ProcessSnapshot(Guid slaveId, Guid jobId, byte[] result, double percentage, string exception) {
+      using (contextFactory.GetContext()) {
+        ServiceLocator.GetAuthorizationManager().AuthorizeForJobs(jobId);
+        return slaveCommunicator.ProcessSnapshot(slaveId, jobId, result, percentage, exception);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
+    public ResponseCalendar GetCalendar(Guid slaveId) {
+      using (contextFactory.GetContext()) {
+        return slaveCommunicator.GetCalendar(slaveId);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
+    public Response SetCalendarStatus(Guid slaveId, CalendarState state) {
+      using (contextFactory.GetContext()) {
+        return slaveCommunicator.SetCalendarStatus(slaveId, state);
+      }
+    }
+    #endregion
+
+    #region ISlaveFacade Members
+
+    /// <summary>
+    /// Do not use automatic transactions here
+    /// </summary>
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
+    public Stream GetStreamedJob(Guid slaveId) {
+      using (contextFactory.GetContext(false)) {
+        ResponseObject<JobDto> job = null;
+        MultiStream stream = new MultiStream();
+        job = ServiceLocator.GetSlaveCommunicator().GetJob(slaveId);
+
+        //first send response
+        stream.AddStream(new StreamedObject<ResponseObject<JobDto>>(job));
+
+        IInternalJobManager internalJobManager = (IInternalJobManager)ServiceLocator.GetJobManager();
+
+        //second stream the job binary data
+        MemoryStream memoryStream = new MemoryStream();
+        if (job.Obj != null) {
+          stream.AddStream(new MemoryStream(internalJobManager.GetSerializedJobDataById(job.Obj.Id)));
+        }
+
+        OperationContext slaveContext = OperationContext.Current;
+        slaveContext.OperationCompleted += new EventHandler(delegate(object sender, EventArgs args) {
+          if (stream != null) {
+            stream.Dispose();
+          }
+        });
+
+        return stream;
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
+    public Stream GetStreamedPlugins(List<HivePluginInfoDto> pluginList) {
+      return new StreamedObject<ResponseList<CachedHivePluginInfoDto>>(this.GetPlugins(pluginList));
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
+    public ResponseResultReceived StoreFinishedJobResultStreamed(Stream stream) {
+      using (contextFactory.GetContext()) {
+        return ((IInternalSlaveCommunicator)slaveCommunicator).ProcessJobResult(stream, true);
+      }
+    }
+
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Administrator)]
+    [PrincipalPermission(SecurityAction.Demand, Role = HiveRoles.Slave)]
+    public ResponseResultReceived ProcessSnapshotStreamed(Stream stream) {
+      using (contextFactory.GetContext()) {
+        return ((IInternalSlaveCommunicator)slaveCommunicator).ProcessJobResult(stream, false);
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/HeuristicLab.Hive.Server.Core-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/HeuristicLab.Hive.Server.Core-3.3.csproj	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/HeuristicLab.Hive.Server.Core-3.3.csproj	(revision 4340)
@@ -0,0 +1,187 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{898B31CF-81DC-453B-AEB3-BDF83197A7EE}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Server.Core</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Server.Core-3.3</AssemblyName>
+    <ProjectTypeGuids>{3D9AD99F-2412-4246-B90B-4EAA41C64699};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Collections-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Collections-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Tracing-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Tracing-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Serialization" />
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Transactions" />
+    <Reference Include="System.Web" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Authorization\AuthorizationManager.cs" />
+    <Compile Include="CreateHiveDatabaseApplication.cs" />
+    <Compile Include="SlaveCommunicator.cs" />
+    <Compile Include="Facades\SlaveFacade.cs" />
+    <Compile Include="SlaveManager.cs" />
+    <Compile Include="DaoLocator.cs" />
+    <Compile Include="DefaultScheduler.cs" />
+    <Compile Include="Facades\ClientFacade.cs" />
+    <Compile Include="HeuristicLabHiveServerCorePlugin.cs" />
+    <Compile Include="InternalInterfaces\IAuthorizationManager.cs" />
+    <Compile Include="InternalInterfaces\IInternalSlaveCommunicator.cs" />
+    <Compile Include="InternalInterfaces\IInternalJobManager.cs" />
+    <Compile Include="InternalInterfaces\IScheduler.cs" />
+    <Compile Include="JobManager.cs" />
+    <Compile Include="LifecycleManager.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Facades\ServerConsoleFacade.cs" />
+    <Compile Include="ServiceLocator.cs" />
+    <Compile Include="Settings.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.DataAccess\3.3\HeuristicLab.DataAccess-3.3.csproj">
+      <Project>{9076697B-C151-46CD-95BC-1D059492B478}</Project>
+      <Name>HeuristicLab.DataAccess-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Contracts\3.3\HeuristicLab.Hive.Contracts-3.3.csproj">
+      <Project>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</Project>
+      <Name>HeuristicLab.Hive.Contracts-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Server.DataAccess\3.3\HeuristicLab.Hive.Server.DataAccess-3.3.csproj">
+      <Project>{4D5A2A16-66C2-431D-9AA3-BD3041E64B84}</Project>
+      <Name>HeuristicLab.Hive.Server.DataAccess-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Server.LINQDataAccess\3.3\HeuristicLab.Hive.Server.LINQDataAccess-3.3.csproj">
+      <Project>{A4499DDD-D1B8-414F-98F6-903C2C71BEB0}</Project>
+      <Name>HeuristicLab.Hive.Server.LINQDataAccess-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup />
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <ProjectExtensions>
+    <VisualStudio>
+      <FlavorProperties GUID="{3D9AD99F-2412-4246-B90B-4EAA41C64699}">
+        <WcfProjectProperties>
+          <AutoStart>False</AutoStart>
+        </WcfProjectProperties>
+      </FlavorProperties>
+    </VisualStudio>
+  </ProjectExtensions>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/HeuristicLabHiveServerCorePlugin.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/HeuristicLabHiveServerCorePlugin.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/HeuristicLabHiveServerCorePlugin.cs	(revision 4340)
@@ -0,0 +1,39 @@
+﻿#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.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Server {
+  [Plugin("HeuristicLab.Hive.Server.Core", "3.3")]
+  [PluginFile("HeuristicLab.Hive.Server.Core-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.DataAccess", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.Contracts", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.Server.DataAccess", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.Server.LINQDataAccess", "3.3")]
+  [PluginDependency("HeuristicLab.Tracing", "3.3")]
+  public class HeuristicLabHiveServerCorePlugin : PluginBase {
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/HivePermissionManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/HivePermissionManager.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/HivePermissionManager.cs	(revision 4340)
@@ -0,0 +1,58 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Security.Contracts.Interfaces;
+using HeuristicLab.DataAccess;
+using HeuristicLab.Security.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces;
+
+namespace HeuristicLab.Hive.Server.Core {
+  public class HivePermissionManager : IHivePermissionManager {
+    
+    private IPermissionManager permManager = ServiceLocator.GetPermissionManager();
+
+    private IClientManager clientManager = ServiceLocator.GetClientManager();
+
+    /// <summary>
+    /// Authenticates a user and returns a valid guid if success.
+    /// </summary>
+    /// <param name="username"></param>
+    /// <param name="password"></param>
+    /// <returns></returns>
+    public Guid Login(string username, string password) {
+      return permManager.Authenticate(username, password);
+    }
+
+    /// <summary>
+    /// Checks if a user has permission for a specified action.
+    /// </summary>
+    /// <param name="sessionID">The current session.</param>
+    /// <param name="actionID">A pre-defined action that requires permission.</param>
+    /// <param name="entityID">A resource (Job,...)</param>
+    /// <returns></returns>
+    public bool CheckPermission(Guid sessionID, Guid actionID, Guid entityId) {
+      bool hasPerm = permManager.CheckPermission(sessionID, actionID, entityId);
+      
+      if (!hasPerm) {
+        if ((actionID == PermissiveSecurityAction.Add_Job) ||
+            (actionID == PermissiveSecurityAction.Remove_Job) ||
+            (actionID == PermissiveSecurityAction.Request_Snapshot)||
+            (actionID==PermissiveSecurityAction.Abort_Job))
+          if (CheckPermissionHelper(sessionID, actionID, entityId)) return true;
+      }
+
+      return hasPerm;      
+    }
+
+    private bool CheckPermissionHelper(Guid sessionId, Guid actionId, Guid entityId) {
+      IList<ClientGroup> groups = clientManager.GetAllGroupsOfResource(entityId).Obj;
+      foreach (ClientGroup group in groups) 
+        if (CheckPermission(sessionId, actionId, group.Id)) return true;
+      return false;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IClientAdapter.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IClientAdapter.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IClientAdapter.cs	(revision 4340)
@@ -0,0 +1,47 @@
+﻿#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 {
+  /// <summary>
+  /// The client database adapter
+  /// </summary>
+  public interface IClientAdapter : IDataAdapter<ClientInfo> {
+    /// <summary>
+    /// Get the client with the specified name
+    /// </summary>
+    /// <param name="clientId"></param>
+    /// <returns></returns>
+    ClientInfo GetByName(string name);
+
+    /// <summary>
+    /// Get the client with the specified id
+    /// </summary>
+    /// <param name="clientId"></param>
+    /// <returns></returns>
+    ClientInfo GetById(Guid id);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IClientGroupAdapter.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IClientGroupAdapter.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IClientGroupAdapter.cs	(revision 4340)
@@ -0,0 +1,47 @@
+﻿#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 {
+  /// <summary>
+  /// The client group database adapter
+  /// </summary>
+  public interface IClientGroupAdapter: IDataAdapter<ClientGroup> {
+    /// <summary>
+    /// Get the client group with the specified name
+    /// </summary>
+    /// <param name="clientId"></param>
+    /// <returns></returns>
+    ClientGroup GetByName(string name);
+
+    /// <summary>
+    /// Gets all client groups where the resource is member of
+    /// </summary>
+    /// <param name="permOwner"></param>
+    /// <returns></returns>
+    ICollection<ClientGroup> MemberOf(Resource resource);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IDataAdapter.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IDataAdapter.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IDataAdapter.cs	(revision 4340)
@@ -0,0 +1,57 @@
+﻿#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 IDataAdapter<ObjT>
+    where ObjT: IHiveObject
+  {
+    /// <summary>
+    /// Save or update the object
+    /// </summary>
+    /// <param name="user"></param>
+    void Update(ObjT obj);
+
+    /// <summary>
+    /// Get the object with the specified ID
+    /// </summary>
+    /// <param name="userId"></param>
+    /// <returns></returns>
+    ObjT GetById(long id);
+
+    /// <summary>
+    /// Get all objects
+    /// </summary>
+    /// <returns></returns>
+    ICollection<ObjT> GetAll();
+
+    /// <summary>
+    /// Deletes the object
+    /// </summary>
+    /// <param name="user"></param>
+    bool Delete(ObjT obj);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IJobAdapter.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IJobAdapter.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IJobAdapter.cs	(revision 4340)
@@ -0,0 +1,63 @@
+﻿#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 IJobAdapter: IDataAdapter<Job> {
+    /// <summary>
+    /// Gets all subjobs of the specified job
+    /// </summary>
+    /// <returns></returns>
+    ICollection<Job> GetAllSubjobs(Job job);
+
+    /// <summary>
+    /// Gets all Jobs with the specified state
+    /// </summary>
+    /// <returns></returns>
+    ICollection<Job> GetJobsByState(State state);
+
+    /// <summary>
+    /// Gets all jobs of the client
+    /// </summary>
+    /// <param name="client"></param>
+    /// <returns></returns>
+    ICollection<Job> GetJobsOf(ClientInfo client);
+
+    /// <summary>
+    /// Gets all active jobs of the client
+    /// </summary>
+    /// <param name="client"></param>
+    /// <returns></returns>
+    ICollection<Job> GetActiveJobsOf(ClientInfo client);
+
+    /// <summary>
+    /// Gets all jobs of the user
+    /// </summary>
+    /// <param name="user"></param>
+    /// <returns></returns>
+    ICollection<Job> GetJobsOf(User user);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IJobResultsAdapter.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IJobResultsAdapter.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IJobResultsAdapter.cs	(revision 4340)
@@ -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);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IPermissionOwnerAdapter.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IPermissionOwnerAdapter.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IPermissionOwnerAdapter.cs	(revision 4340)
@@ -0,0 +1,47 @@
+﻿#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 {
+  /// <summary>
+  /// The permission owner database adapter
+  /// </summary>
+  public interface IPermissionOwnerAdapter: IDataAdapter<PermissionOwner> {
+    /// <summary>
+    /// Gets the permission owner and updates the values of the object
+    /// </summary>
+    /// <param name="resource"></param>
+    /// <returns></returns>
+    bool GetById(PermissionOwner permOwner);
+
+    /// <summary>
+    /// Get the permission owner with the specified name
+    /// </summary>
+    /// <param name="clientId"></param>
+    /// <returns></returns>
+    PermissionOwner GetByName(String name);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IResourceAdapter.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IResourceAdapter.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IResourceAdapter.cs	(revision 4340)
@@ -0,0 +1,47 @@
+﻿#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 {
+  /// <summary>
+  /// The resource database adapter
+  /// </summary>
+  public interface IResourceAdapter: IDataAdapter<Resource> {
+    /// <summary>
+    /// Gets the resource and updates the values of the object
+    /// </summary>
+    /// <param name="resource"></param>
+    /// <returns></returns>
+    bool GetById(Resource resource);
+
+    /// <summary>
+    /// Get the resource with the specified name
+    /// </summary>
+    /// <param name="clientId"></param>
+    /// <returns></returns>
+    Resource GetByName(string name);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IUserAdapter.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IUserAdapter.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IUserAdapter.cs	(revision 4340)
@@ -0,0 +1,40 @@
+﻿#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 {
+  /// <summary>
+  /// The user database adapter
+  /// </summary>
+  public interface IUserAdapter: IDataAdapter<User> {
+    /// <summary>
+    /// Get the user with the specified name
+    /// </summary>
+    /// <param name="userId"></param>
+    /// <returns></returns>
+    User GetByName(string name);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IUserGroupAdapter.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IUserGroupAdapter.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/DataAccess/IUserGroupAdapter.cs	(revision 4340)
@@ -0,0 +1,47 @@
+﻿#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 {
+  /// <summary>
+  /// The user group database adapter
+  /// </summary>
+  public interface IUserGroupAdapter: IDataAdapter<UserGroup> {
+    /// <summary>
+    /// Get the user group with the specified name
+    /// </summary>
+    /// <param name="clientId"></param>
+    /// <returns></returns>
+    UserGroup GetByName(String name);
+
+    /// <summary>
+    /// Gets all user groups where the permission owner is member of
+    /// </summary>
+    /// <param name="permOwner"></param>
+    /// <returns></returns>
+    ICollection<UserGroup> MemberOf(PermissionOwner permOwner);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/IAuthorizationManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/IAuthorizationManager.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/IAuthorizationManager.cs	(revision 4340)
@@ -0,0 +1,15 @@
+﻿using System;
+using System.Collections.Generic;
+namespace HeuristicLab.Hive.Server.Core.InternalInterfaces {
+  public interface IAuthorizationManager {
+
+    string UserId { get; }
+
+    /// <summary>
+    /// Checks if the user is allowed to access all the jobs.
+    /// throws an exception if one of those jobs is inaccessible
+    /// </summary>
+    /// <exception cref="SecurityException">thrown when access denied</exception>
+    void AuthorizeForJobs(params Guid[] jobId);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/IInternalJobManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/IInternalJobManager.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/IInternalJobManager.cs	(revision 4340)
@@ -0,0 +1,35 @@
+﻿#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;
+using System.IO;
+
+namespace HeuristicLab.Hive.Server.Core.InternalInterfaces {
+  interface IInternalJobManager {   
+    Stream GetJobStreamById(Guid jobId);
+    byte[] GetSerializedJobDataById(Guid jobId);
+    void SetSerializedJobDataById(Guid jobId, byte[] data);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/IInternalSlaveCommunicator.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/IInternalSlaveCommunicator.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/IInternalSlaveCommunicator.cs	(revision 4340)
@@ -0,0 +1,35 @@
+﻿#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;
+using HeuristicLab.Hive.Contracts;
+using System.IO;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+
+namespace HeuristicLab.Hive.Server.Core.InternalInterfaces {
+  interface IInternalSlaveCommunicator {
+    ResponseResultReceived ProcessJobResult(Stream stream, bool finished);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/IScheduler.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/IScheduler.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/IScheduler.cs	(revision 4340)
@@ -0,0 +1,33 @@
+﻿#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 {
+  public interface IScheduler {
+    bool ExistsJobForSlave(HeartBeatData hbData);
+    JobDto GetNextJobForSlave(Guid clientId);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/JobManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/JobManager.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/JobManager.cs	(revision 4340)
@@ -0,0 +1,355 @@
+﻿#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.Interfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.Server.DataAccess;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces;
+using HeuristicLab.DataAccess.Interfaces;
+using System.Data;
+using System.IO;
+using HeuristicLab.Tracing;
+using System.Transactions;
+using HeuristicLab.Hive.Server.LINQDataAccess;
+using IsolationLevel = System.Transactions.IsolationLevel;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+
+namespace HeuristicLab.Hive.Server.Core {
+  internal class JobManager : IJobManager, IInternalJobManager {
+    private ILifecycleManager lifecycleManager;
+
+    #region IJobManager Members
+
+    public JobManager() {
+      lifecycleManager = ServiceLocator.GetLifecycleManager();
+
+      lifecycleManager.RegisterStartup(new EventHandler(lifecycleManager_OnStartup));
+      lifecycleManager.RegisterShutdown(new EventHandler(lifecycleManager_OnShutdown));
+    }
+
+    private void CheckForDeadJobs() {
+      Logger.Info("Searching for dead Jobs");
+
+      List<JobDto> allJobs = new List<JobDto>(DaoLocator.JobDao.FindAll());
+      foreach (JobDto curJob in allJobs) {
+        if (curJob.State != JobState.Calculating && curJob.State != JobState.Finished) {
+          DaoLocator.JobDao.SetJobOffline(curJob);
+        }
+      }
+    }
+
+    private void lifecycleManager_OnStartup(object sender, EventArgs e) {
+      Logger.Info("Startup Event Fired, Checking DB for consistency");
+      CheckForDeadJobs();
+      Logger.Info("Startup Event Done");
+    }
+
+    private void lifecycleManager_OnShutdown(object sender, EventArgs e) {
+      Logger.Info("Startup Event Fired, Checking DB for consistency");
+      CheckForDeadJobs();
+      Logger.Info("Startup Event Done");
+    }
+
+    /// <summary>
+    /// returns all jobs stored in the database
+    /// </summary>
+    /// <returns></returns>
+    public ResponseList<JobDto> GetAllJobs() {
+      ResponseList<JobDto> response = new ResponseList<JobDto>();
+      response.List = new List<JobDto>(DaoLocator.JobDao.FindAll());
+      return response;
+    }
+
+    public ResponseList<JobDto> GetAllJobsWithFilter(JobState jobState, int offset, int count) {
+      ResponseList<JobDto> response = new ResponseList<JobDto>();
+      response.List = new List<JobDto>(DaoLocator.JobDao.FindWithLimitations(jobState, offset, count));
+      return response;
+    }
+
+    /// <summary>
+    /// Gets the streamed job
+    /// </summary>
+    /// <param name="jobId"></param>
+    /// <returns></returns>
+    public Stream GetJobStreamById(Guid jobId) {
+      return DaoLocator.JobDao.GetSerializedJobStream(jobId);
+    }
+
+    /// <summary>
+    /// returns the job with the specified id
+    /// </summary>
+    /// <returns></returns>
+    public ResponseObject<JobDto> GetJobById(Guid jobId) {
+      ResponseObject<JobDto> response = new ResponseObject<JobDto>();
+
+      response.Obj = DaoLocator.JobDao.FindById(jobId);
+      if (response.Obj != null) {
+        response.StatusMessage = ResponseStatus.Ok;
+      } else {
+        response.StatusMessage = ResponseStatus.GetJobById_JobDoesNotExist;
+      }
+
+      return response;
+    }
+
+    /// <summary>
+    /// Returns JobDto object with Slave-Object attached
+    /// </summary>
+    public ResponseObject<JobDto> GetJobByIdWithDetails(Guid jobId) {
+      ResponseObject<JobDto> job = new ResponseObject<JobDto>();
+      job.Obj = DaoLocator.JobDao.FindById(jobId);
+      if (job.Obj != null) {
+        job.StatusMessage = ResponseStatus.Ok;
+
+        job.Obj.Slave = DaoLocator.SlaveDao.GetSlaveForJob(jobId);
+      } else {
+        job.StatusMessage = ResponseStatus.GetJobByIdWithDetails_JobDoesNotExist;
+      }
+      return job;
+    }
+
+    public ResponseObject<JobDto> AddJobWithGroupStrings(SerializedJob job, IEnumerable<string> resources) {
+      ISlaveGroupDao cgd = DaoLocator.SlaveGroupDao;
+      foreach (string res in resources) {
+        foreach (SlaveGroupDto cg in cgd.FindByName(res)) {
+          job.JobInfo.AssignedResourceIds.Add(cg.Id);
+        }
+      }
+      return AddNewJob(job);
+    }
+
+    /// <summary>
+    /// Adds a new job into the database
+    /// </summary>
+    /// <param name="job"></param>
+    /// <returns></returns>
+    public ResponseObject<JobDto> AddNewJob(SerializedJob job) {
+      ResponseObject<JobDto> response = new ResponseObject<JobDto>();
+
+      if (job != null && job.JobInfo != null) {
+        if (job.JobInfo.State != JobState.Offline) {
+          response.StatusMessage = ResponseStatus.AddNewJob_JobStateMustBeOffline;
+          return response;
+        }
+        if (job.JobInfo.Id != Guid.Empty) {
+          response.StatusMessage = ResponseStatus.AddNewJob_JobIdMustNotBeSet;
+          return response;
+        }
+        if (job.SerializedJobData == null) {
+          response.StatusMessage = ResponseStatus.AddNewJob_JobNull;
+          return response;
+        }
+
+        job.JobInfo.DateCreated = DateTime.Now;
+        job.JobInfo.UserId = ServiceLocator.GetAuthorizationManager().UserId;
+        DaoLocator.JobDao.InsertWithAttachedJob(job);
+        DaoLocator.PluginInfoDao.InsertPluginDependenciesForJob(job.JobInfo);
+
+        response.Obj = job.JobInfo;
+      } else {
+        response.StatusMessage = ResponseStatus.AddNewJob_JobNull;
+      }
+
+      return response;
+    }
+
+    /// <summary>
+    /// Removes a job from the database
+    /// 
+    /// [chn] this is currently not used anywhere -> check redundancy with AbortJob
+    /// </summary>
+    /// <param name="jobId"></param>
+    /// <returns></returns>
+    //public Response RemoveJob(Guid jobId) {
+    //  Response response = new Response();
+
+    //  JobDto job = DaoLocator.JobDao.FindById(jobId);
+    //  if (job == null) {
+    //    response.StatusMessage = ResponseStatusMessage.RemoveJob_JobDoesNotExist;
+    //    return response;
+    //  }
+    //  DaoLocator.JobDao.Delete(job);
+
+    //  return response;
+    //}
+
+    ///
+    /// [chn] currently not used anywhere
+    /// 
+    //public ResponseObject<JobDto> GetLastJobResultOf(Guid jobId) {
+    //  ResponseObject<JobDto> result = new ResponseObject<JobDto>();
+
+    //  result.Obj = DaoLocator.JobDao.FindById(jobId);
+    //  if (result.Obj == null) {
+    //    result.StatusMessage = ResponseStatusMessage.
+    //  }
+
+    //  return result;
+    //}
+
+    // [chn] [refactor] why does this method handle 3 different cases? wouldn't 3 methods be easier?
+    //Requested means: there MUST be a job result which gets sent back
+    // requested==true: resultat mit job
+    // requested==false: 
+    public ResponseObject<SerializedJob> GetLastSerializedResult(Guid jobId, bool requested, bool snapshot) {
+      ResponseObject<SerializedJob> response = new ResponseObject<SerializedJob>();
+
+      JobDto job = DaoLocator.JobDao.FindById(jobId);
+
+      //if it's a snapshot but the result hasn't reached the server yet...
+      if (snapshot && (job.State == JobState.SnapshotRequested || job.State == JobState.SnapshotSent)) {
+        response.StatusMessage = ResponseStatus.GetLastSerializedResult_JobResultNotYetThere;
+
+        return response;
+      }
+
+      //if it's NOT a snapshot, NEITHER request NOR is it finished
+      if (!requested && !snapshot && job.State != JobState.Finished) {
+        response.StatusMessage = ResponseStatus.GetLastSerializedResult_JobResultNotYetThere;
+
+        return response;
+      }
+
+      //every other case - snapshot, job finished or it's requested
+      response.Obj = new SerializedJob();
+      response.Obj.JobInfo = job;
+
+      response.Obj.SerializedJobData = DaoLocator.JobDao.GetBinaryJobFile(jobId);
+
+      return response;
+    }
+
+    public Response RequestSnapshot(Guid jobId) {
+      Response response = new Response();
+
+      JobDto job = DaoLocator.JobDao.FindById(jobId);
+      if (job.State == JobState.SnapshotRequested || job.State == JobState.SnapshotSent) {
+        response.StatusMessage = ResponseStatus.RequestSnapshot_SnapshotAlreadyRequested;
+        return response;
+      }
+      if (job.State != JobState.Calculating) {
+        response.StatusMessage = ResponseStatus.RequestSnapshot_JobIsNotBeeingCalculated;
+        return response;
+      }
+      // job is in correct state
+      job.State = JobState.SnapshotRequested;
+      DaoLocator.JobDao.Update(job);
+
+      return response;
+    }
+
+    /// <summary>
+    /// [chn] rename to RequestAbortJob?
+    /// </summary>
+    public Response AbortJob(Guid jobId) {
+      Response response = new Response();
+
+      JobDto job = DaoLocator.JobDao.FindById(jobId);
+      if (job == null) {
+        //response.Success = false;
+        response.StatusMessage = ResponseStatus.AbortJob_JobDoesNotExist;
+        return response; // no commit needed
+      }
+      if (job.State == JobState.Aborted) {
+        //response.Success = true;
+        response.StatusMessage = ResponseStatus.AbortJob_AbortAlreadyRequested;
+        return response; // no commit needed
+      }
+      if (job.State != JobState.Calculating && job.State != JobState.SnapshotRequested && job.State != JobState.SnapshotSent) {
+        //response.Success = false;
+        response.StatusMessage = ResponseStatus.AbortJob_JobIsNotBeeingCalculated;
+        return response; // no commit needed
+      }
+      // job is in correct state
+      job.State = JobState.Aborted;
+      DaoLocator.JobDao.Update(job);
+
+      return response;
+    }
+
+    /// <summary>
+    /// Returns the current state for all jobs requested
+    /// </summary>
+    /// <param name="jobIds"></param>
+    /// <returns></returns>
+    public ResponseObject<JobResultList> GetJobResults(IEnumerable<Guid> jobIds) {
+      ResponseObject<JobResultList> response = new ResponseObject<JobResultList>();
+      JobResultList jobResultList = new JobResultList();
+      IEnumerable<JobDto> jobs = DaoLocator.JobDao.FindJobsById(jobIds);
+      foreach (JobDto job in jobs) {
+        jobResultList.Add(new JobResult() {
+          JobId = job.Id,
+          State = job.State,
+          DateCalculated = job.DateCalculated,
+          DateFinished = job.DateFinished,
+          Exception = job.Exception,
+          Percentage = job.Percentage
+        });
+      }
+      response.Obj = jobResultList;
+      return response;
+    }
+
+    public byte[] GetSerializedJobDataById(Guid jobId) {
+      return DaoLocator.JobDao.GetBinaryJobFile(jobId);
+    }
+
+    public void SetSerializedJobDataById(Guid jobId, byte[] data) {
+      DaoLocator.JobDao.SetBinaryJobFile(jobId, data);
+    }
+
+    #endregion
+
+    #region Project handling (currently unimplemented)
+
+    public ResponseList<ProjectDto> GetAllProjects() {
+      throw new NotImplementedException();
+    }
+
+    private Response CreateUpdateProject(ProjectDto project) {
+      throw new NotImplementedException();
+    }
+
+    public Response CreateProject(ProjectDto project) {
+      return CreateUpdateProject(project);
+    }
+
+    public Response ChangeProject(ProjectDto project) {
+      return CreateUpdateProject(project);
+    }
+
+    public Response DeleteProject(Guid projectId) {
+      throw new NotImplementedException();
+    }
+
+    public ResponseList<JobDto> GetJobsByProject(Guid projectId) {
+      throw new NotImplementedException();
+    }
+    #endregion
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/LifecycleManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/LifecycleManager.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/LifecycleManager.cs	(revision 4340)
@@ -0,0 +1,81 @@
+﻿#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.Interfaces;
+using HeuristicLab.Hive.Server.DataAccess;
+using System.Timers;
+using HeuristicLab.DataAccess.Interfaces;
+
+namespace HeuristicLab.Hive.Server.Core {
+  class LifecycleManager: ILifecycleManager {
+    private static Timer timer =
+      new Timer();
+
+    private static event EventHandler OnServerHeartbeat;
+    private static event EventHandler OnStartup;
+    private static event EventHandler OnShutdown;
+
+    #region ILifecycleManager Members
+
+    public void RegisterHeartbeat(EventHandler handler) {
+      OnServerHeartbeat += handler;
+    }
+
+    public void RegisterStartup(EventHandler handler) {
+      OnStartup += handler;
+    }
+
+    public void RegisterShutdown(EventHandler handler) {
+      OnShutdown += handler;
+    }
+
+    public void Init() {
+      using (ServiceLocator.GetContextFactory().GetContext()) {
+        timer.Interval = new TimeSpan(0, 0, 10).TotalMilliseconds; // TODO: global constant needed
+        timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
+        timer.Start();
+
+        if (OnStartup != null)
+          OnStartup(this, null);
+      }
+    }
+
+    void timer_Elapsed(object sender, ElapsedEventArgs e) {
+      using (ServiceLocator.GetContextFactory().GetContext()) {
+        if (OnServerHeartbeat != null)
+          OnServerHeartbeat(this, null);
+      }
+    }
+
+    public void Shutdown() {
+      using (ServiceLocator.GetContextFactory().GetContext()) {
+        if (OnShutdown != null)
+          OnShutdown(this, null);
+      }
+    }
+
+    #endregion
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Properties/AssemblyInfo.frame	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Properties/AssemblyInfo.frame	(revision 4340)
@@ -0,0 +1,58 @@
+#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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Hive.Server.Core")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("4D7B8E8F-6A49-499a-87E8-F0537F192295")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/ServiceLocator.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/ServiceLocator.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/ServiceLocator.cs	(revision 4340)
@@ -0,0 +1,134 @@
+﻿#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.Linq;
+using HeuristicLab.Hive.Server.DataAccess;
+using HeuristicLab.PluginInfrastructure;
+using System.Runtime.CompilerServices;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Server.Core;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces;
+using HeuristicLab.DataAccess.Interfaces;
+using System.Data.SqlClient;
+
+namespace HeuristicLab.Hive.Server.Core {
+  /// <summary>
+  /// The service locator for the server core
+  /// </summary>
+  public class ServiceLocator {
+    private static ISlaveManager slaveManager = null;
+
+    private static IJobManager jobManager = null;
+
+    private static ISlaveCommunicator slaveCommunicator = null;
+
+    private static ILifecycleManager lifecycleManager = null;
+    
+    private static IScheduler scheduler = null;
+
+    private static IAuthorizationManager authorizationManager = null;
+    
+    private static IContextFactory contextFactory = null;
+
+    /// <summary>
+    /// Gets the slave manager
+    /// </summary>
+    /// <returns></returns>
+    [MethodImpl(MethodImplOptions.Synchronized)]
+    public static ISlaveManager GetSlaveManager() {
+      if (slaveManager == null)
+        slaveManager = new SlaveManager();
+
+      return slaveManager;
+    }
+
+    /// <summary>
+    /// Gets the job manager
+    /// </summary>
+    /// <returns></returns>
+    [MethodImpl(MethodImplOptions.Synchronized)]
+    public static IJobManager GetJobManager() {
+      if (jobManager == null)
+        jobManager = new JobManager();
+
+      return jobManager;
+    }
+
+    /// <summary>
+    /// Gets the client Communicator
+    /// </summary>
+    /// <returns></returns>
+    [MethodImpl(MethodImplOptions.Synchronized)]
+    public static ISlaveCommunicator GetSlaveCommunicator() {
+      if (slaveCommunicator == null)
+        slaveCommunicator = new SlaveCommunicator();
+
+      return slaveCommunicator;
+    }
+
+    /// <summary>
+    /// Gets the lifecycle manager
+    /// </summary>
+    /// <returns></returns>
+    [MethodImpl(MethodImplOptions.Synchronized)]
+    public static ILifecycleManager GetLifecycleManager() {
+      if (lifecycleManager == null) {
+        lifecycleManager = ApplicationManager.Manager.GetInstances<ILifecycleManager>().First();
+      }
+      return lifecycleManager;
+    }
+
+    /// <summary>
+    /// Gets the scheduler
+    /// </summary>
+    /// <returns></returns>
+    [MethodImpl(MethodImplOptions.Synchronized)]
+    public static IScheduler GetScheduler() {
+      if (scheduler == null) {
+        scheduler = ApplicationManager.Manager.GetInstances<IScheduler>().First();
+      }
+
+      return scheduler;
+    }
+
+    /// <summary>
+    /// Gets the permission manager
+    /// </summary>
+    /// <returns></returns>
+    [MethodImpl(MethodImplOptions.Synchronized)]
+    public static IAuthorizationManager GetAuthorizationManager() {
+      if (authorizationManager == null)
+        authorizationManager = ApplicationManager.Manager.GetInstances<IAuthorizationManager>().First();
+      return authorizationManager;
+    }
+
+    /// <summary>
+    /// Gets the database context manager
+    /// </summary>
+    /// <returns></returns>
+    [MethodImpl(MethodImplOptions.Synchronized)]
+    public static IContextFactory GetContextFactory() {
+      if (contextFactory == null)
+        contextFactory = ApplicationManager.Manager.GetInstances<IContextFactory>().First();
+      return contextFactory;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Settings.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Settings.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Settings.cs	(revision 4340)
@@ -0,0 +1,28 @@
+﻿namespace HeuristicLab.Hive.Server.Core.Properties {
+    
+    
+    // This class allows you to handle specific events on the settings class:
+    //  The SettingChanging event is raised before a setting's value is changed.
+    //  The PropertyChanged event is raised after a setting's value is changed.
+    //  The SettingsLoaded event is raised after the setting values are loaded.
+    //  The SettingsSaving event is raised before the setting values are saved.
+    public sealed partial class Settings {
+        
+        public Settings() {
+            // // To add event handlers for saving and changing settings, uncomment the lines below:
+            //
+            // this.SettingChanging += this.SettingChangingEventHandler;
+            //
+            // this.SettingsSaving += this.SettingsSavingEventHandler;
+            //
+        }
+        
+        private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) {
+            // Add code to handle the SettingChangingEvent event here.
+        }
+        
+        private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) {
+            // Add code to handle the SettingsSaving event here.
+        }
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/SlaveCommunicator.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/SlaveCommunicator.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/SlaveCommunicator.cs	(revision 4340)
@@ -0,0 +1,726 @@
+﻿#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.IO;
+using System.Linq;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Threading;
+using System.Transactions;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Tracing;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+using System.Security.Permissions;
+using System.Web.Security;
+using System.Security.Principal;
+using System.ServiceModel;
+using System.Security;
+
+namespace HeuristicLab.Hive.Server.Core {
+  /// <summary>
+  /// The SlaveCommunicator manages the whole communication with the slave
+  /// </summary>
+  public class SlaveCommunicator : ISlaveCommunicator,
+    IInternalSlaveCommunicator {
+    private static Dictionary<Guid, DateTime> lastHeartbeats = new Dictionary<Guid, DateTime>();
+    private static Dictionary<Guid, int> newAssignedJobs = new Dictionary<Guid, int>();
+    private static Dictionary<Guid, int> pendingJobs = new Dictionary<Guid, int>();
+
+    private static ReaderWriterLockSlim heartbeatLock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
+
+    //private ISessionFactory factory;
+    private ILifecycleManager lifecycleManager;
+    private IInternalJobManager jobManager;
+    private IScheduler scheduler;
+
+    private static int PENDING_TIMEOUT = 100;
+
+    /// <summary>
+    /// Initialization of the Adapters to the database
+    /// Initialization of Eventhandler for the lifecycle management
+    /// Initialization of lastHearbeats Dictionary
+    /// </summary>
+    public SlaveCommunicator() {
+      //factory = ServiceLocator.GetSessionFactory();
+
+      lifecycleManager = ServiceLocator.GetLifecycleManager();
+      jobManager = ServiceLocator.GetJobManager() as IInternalJobManager;
+      scheduler = ServiceLocator.GetScheduler();
+
+      lifecycleManager.RegisterHeartbeat(new EventHandler(lifecycleManager_OnServerHeartbeat));
+    }
+
+    /// <summary>
+    /// Check if online slaves send their hearbeats
+    /// if not -> set them offline and check if they where calculating a job
+    /// </summary>
+    /// <param name="sender"></param>
+    /// <param name="e"></param>
+    void lifecycleManager_OnServerHeartbeat(object sender, EventArgs e) {
+      Logger.Debug("Server Heartbeat ticked");
+
+      // [chn] why is transaction management done here
+      using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = ApplicationConstants.ISOLATION_LEVEL_SCOPE })) {
+        List<SlaveDto> allSlaves = new List<SlaveDto>(DaoLocator.SlaveDao.FindAll());
+
+        foreach (SlaveDto slave in allSlaves) {
+          if (slave.State != SlaveState.Offline && slave.State != SlaveState.NullState) {
+            heartbeatLock.EnterUpgradeableReadLock();
+
+            if (!lastHeartbeats.ContainsKey(slave.Id)) {
+              Logger.Info("Slave " + slave.Id +
+                              " wasn't offline but hasn't sent heartbeats - setting offline");
+              slave.State = SlaveState.Offline;
+              DaoLocator.SlaveDao.Update(slave);
+              Logger.Info("Slave " + slave.Id +
+                              " wasn't offline but hasn't sent heartbeats - Resetting all his jobs");
+              foreach (JobDto job in DaoLocator.JobDao.FindActiveJobsOfSlave(slave)) {
+                //maybe implementa n additional Watchdog? Till then, just set them offline..
+                DaoLocator.JobDao.SetJobOffline(job);
+              }
+            } else {
+              DateTime lastHbOfSlave = lastHeartbeats[slave.Id];
+
+              TimeSpan dif = DateTime.Now.Subtract(lastHbOfSlave);
+              // check if time between last hearbeat and now is greather than HEARTBEAT_MAX_DIF
+              if (dif.TotalSeconds > ApplicationConstants.HEARTBEAT_MAX_DIF) {
+                // if slave calculated jobs, the job must be reset
+                Logger.Info("Slave timed out and is on RESET");
+                foreach (JobDto job in DaoLocator.JobDao.FindActiveJobsOfSlave(slave)) {
+                  DaoLocator.JobDao.SetJobOffline(job);
+                  lock (newAssignedJobs) {
+                    if (newAssignedJobs.ContainsKey(job.Id))
+                      newAssignedJobs.Remove(job.Id);
+                  }
+                }
+                Logger.Debug("setting slave offline");
+                // slave must be set offline
+                slave.State = SlaveState.Offline;
+
+                //slaveAdapter.Update(slave);
+                DaoLocator.SlaveDao.Update(slave);
+
+                Logger.Debug("removing it from the heartbeats list");
+                heartbeatLock.EnterWriteLock();
+                lastHeartbeats.Remove(slave.Id);
+                heartbeatLock.ExitWriteLock();
+              }
+            }
+
+            heartbeatLock.ExitUpgradeableReadLock();
+          } else {
+            //TODO: RLY neccesary?
+            //HiveLogger.Info(this.ToString() + ": Slave " + slave.Id + " has wrong state: Shouldn't have offline or nullstate, has " + slave.State);
+            heartbeatLock.EnterWriteLock();
+            //HiveLogger.Info(this.ToString() + ": Slave " + slave.Id + " has wrong state: Resetting all his jobs");
+            if (lastHeartbeats.ContainsKey(slave.Id))
+              lastHeartbeats.Remove(slave.Id);
+            foreach (JobDto job in DaoLocator.JobDao.FindActiveJobsOfSlave(slave)) {
+              DaoLocator.JobDao.SetJobOffline(job);
+            }
+            heartbeatLock.ExitWriteLock();
+          }
+        }
+        CheckForPendingJobs();
+        //        DaoLocator.DestroyContext();
+        scope.Complete();
+      }
+    }
+
+    private void CheckForPendingJobs() {
+      IList<JobDto> pendingJobsInDB = new List<JobDto>(DaoLocator.JobDao.GetJobsByState(JobState.Pending));
+
+      foreach (JobDto currJob in pendingJobsInDB) {
+        lock (pendingJobs) {
+          if (pendingJobs.ContainsKey(currJob.Id)) {
+            if (pendingJobs[currJob.Id] <= 0) {
+              currJob.State = JobState.Offline;
+              DaoLocator.JobDao.Update(currJob);
+            } else {
+              pendingJobs[currJob.Id]--;
+            }
+          }
+        }
+      }
+    }
+
+    #region ISlaveCommunicator Members
+
+    /// <summary>
+    /// Login process for the slave
+    /// A hearbeat entry is created as well (login is the first hearbeat)
+    /// </summary>
+    /// <param name="slaveInfo"></param>
+    /// <returns></returns>
+    public Response Login(SlaveDto slave) {
+      Response response = new Response();
+
+      heartbeatLock.EnterWriteLock();
+      if (lastHeartbeats.ContainsKey(slave.Id)) {
+        lastHeartbeats[slave.Id] = DateTime.Now;
+      } else {
+        lastHeartbeats.Add(slave.Id, DateTime.Now);
+      }
+      heartbeatLock.ExitWriteLock();
+
+      SlaveDto dbSlave = DaoLocator.SlaveDao.FindById(slave.Id);
+
+      slave.CalendarSyncStatus = dbSlave != null ? dbSlave.CalendarSyncStatus : CalendarState.NotAllowedToFetch;
+      slave.State = SlaveState.Idle;
+
+      if (dbSlave == null)
+        DaoLocator.SlaveDao.Insert(slave);
+      else {
+        DaoLocator.SlaveDao.Update(slave);
+      }
+
+      return response;
+    }
+
+    public ResponseCalendar GetCalendar(Guid slaveId) {
+      ResponseCalendar response = new ResponseCalendar();
+
+      SlaveDto slave = DaoLocator.SlaveDao.FindById(slaveId);
+      if (slave == null) {
+        //response.Success = false;
+        response.StatusMessage = ResponseStatus.GetCalendar_ResourceNotFound;
+        return response;
+      }
+
+      response.ForceFetch = (slave.CalendarSyncStatus == CalendarState.ForceFetch);
+
+      IEnumerable<AppointmentDto> appointments = DaoLocator.UptimeCalendarDao.GetCalendarForSlave(slave);
+      if (appointments.Count() == 0) {
+        response.StatusMessage = ResponseStatus.GetCalendar_NoCalendarFound;
+        //response.Success = false;
+      } else {
+        //response.Success = true;
+        response.Appointments = appointments;
+      }
+
+      slave.CalendarSyncStatus = CalendarState.Fetched;
+      DaoLocator.SlaveDao.Update(slave);
+      return response;
+    }
+
+    public Response SetCalendarStatus(Guid slaveId, CalendarState state) {
+      Response response = new Response();
+      SlaveDto slave = DaoLocator.SlaveDao.FindById(slaveId);
+      if (slave == null) {
+        //response.Success = false;
+        response.StatusMessage = ResponseStatus.GetCalendar_ResourceNotFound;
+        return response;
+      }
+
+      slave.CalendarSyncStatus = state;
+      DaoLocator.SlaveDao.Update(slave);
+
+      return response;
+    }
+
+    /// <summary>
+    /// The slave has to send regulary heartbeats
+    /// this hearbeats will be stored in the heartbeats dictionary
+    /// check if there is work for the slave and send the slave a response if he should pull a job
+    /// </summary>
+    /// <param name="heartbeatData"></param>
+    /// <returns></returns>
+    public ResponseHeartBeat ProcessHeartBeat(HeartBeatData heartbeatData) {
+      Logger.Debug("BEGIN Processing Heartbeat for Slave " + heartbeatData.SlaveId);
+
+      ResponseHeartBeat response = new ResponseHeartBeat();
+      response.ActionRequest = new List<MessageContainer>();
+
+      Logger.Debug("BEGIN Started Slave Fetching");
+      SlaveDto slave = DaoLocator.SlaveDao.FindById(heartbeatData.SlaveId);
+      Logger.Debug("END Finished Slave Fetching");
+
+      slave.NrOfFreeCores = heartbeatData.FreeCores;
+      slave.FreeMemory = heartbeatData.FreeMemory;
+      slave.IsAllowedToCalculate = heartbeatData.IsAllowedToCalculate;
+
+      // check if the slave is logged in
+      if (slave.State == SlaveState.Offline || slave.State == SlaveState.NullState) {
+        response.StatusMessage = ResponseStatus.ProcessHeartBeat_UserNotLoggedIn;
+        response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.NoMessage));
+        Logger.Error("ProcessHeartBeat: Slave state null or offline: " + slave);
+        return response;
+      }
+
+      // save timestamp of this heartbeat
+      Logger.Debug("BEGIN Locking for Heartbeats");
+      heartbeatLock.EnterWriteLock();
+      Logger.Debug("END Locked for Heartbeats");
+      if (lastHeartbeats.ContainsKey(heartbeatData.SlaveId)) {
+        lastHeartbeats[heartbeatData.SlaveId] = DateTime.Now;
+      } else {
+        lastHeartbeats.Add(heartbeatData.SlaveId, DateTime.Now);
+      }
+      heartbeatLock.ExitWriteLock();
+
+      Logger.Debug("BEGIN Processing Heartbeat Jobs");
+      ProcessJobProcess(heartbeatData, response);
+      Logger.Debug("END Processed Heartbeat Jobs");
+
+      //check if new Cal must be loaded
+      if (slave.CalendarSyncStatus == CalendarState.Fetch || slave.CalendarSyncStatus == CalendarState.ForceFetch) {
+        response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.FetchOrForceFetchCalendar));
+        //slave.CalendarSyncStatus = CalendarState.Fetching;
+        Logger.Info("fetch or forcefetch sent");
+      }
+
+      // check if slave has a free core for a new job
+      // if true, ask scheduler for a new job for this slave
+      Logger.Debug(" BEGIN Looking for Slave Jobs");
+      if (slave.IsAllowedToCalculate && heartbeatData.FreeCores > 0 && scheduler.ExistsJobForSlave(heartbeatData)) {
+        response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.FetchJob));
+      } else {
+        response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.NoMessage));
+      }
+      Logger.Debug(" END Looked for Slave Jobs");
+
+      DaoLocator.SlaveDao.Update(slave);
+
+      //tx.Commit();
+      Logger.Debug(" END Processed Heartbeat for Slave " + heartbeatData.SlaveId);
+      return response;
+    }
+
+    /// <summary>
+    /// Process the Job progress sent by a slave
+    /// [chn] this method needs to be refactored, because its a performance hog
+    /// 
+    /// what it does:
+    /// (1) find out if the jobs that should be calculated by this slave (from db) and compare if they are consistent with what the joblist the slave sent
+    /// (2) find out if every job from the joblist really should be calculated by this slave
+    /// (3) checks if a job should be aborted and issues Message
+    /// (4) update job-progress and write to db
+    /// (5) if snapshot is requested, issue Message
+    /// 
+    /// (6) for each job from DB, check if there is a job from slave (again).
+    /// (7) if job matches, it is removed from newAssigneJobs
+    /// (8) if job !matches, job's TTL is reduced by 1, 
+    /// (9) if TTL==0, job is set to Abort (save to DB), and Message to Abort job is issued to slave
+    /// 
+    /// 
+    /// 
+    /// quirks:
+    /// (1) the response-object is modified during the foreach-loop (only last element counts)
+    /// (2) state Abort results in Finished. This should be: AbortRequested, Aborted.
+    /// </summary>
+    /// <param name="hbData"></param>
+    /// <param name="jobAdapter"></param>
+    /// <param name="slaveAdapter"></param>
+    /// <param name="response"></param>
+    private void ProcessJobProcess(HeartBeatData hbData, ResponseHeartBeat response) {
+      Logger.Debug("Started for Slave " + hbData.SlaveId);
+      List<JobDto> jobsOfSlave = new List<JobDto>(DaoLocator.JobDao.FindActiveJobsOfSlave(DaoLocator.SlaveDao.FindById(hbData.SlaveId)));
+      if (hbData.JobProgress != null && hbData.JobProgress.Count > 0) {
+        if (jobsOfSlave == null || jobsOfSlave.Count == 0) {
+          foreach (Guid jobId in hbData.JobProgress.Keys) {
+            response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, jobId));
+          }
+
+          Logger.Error("There is no job calculated by this user " + hbData.SlaveId + ", advise him to abort all");
+          return;
+        }
+
+        foreach (KeyValuePair<Guid, double> jobProgress in hbData.JobProgress) {
+          JobDto curJob = DaoLocator.JobDao.FindById(jobProgress.Key);
+          if (curJob == null) {
+            response.StatusMessage = ResponseStatus.ProcessJobResult_JobDoesNotExist;
+            response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, jobProgress.Key));
+            Logger.Error("Job does not exist in DB: " + jobProgress.Key);
+            return;
+          }
+          curJob.Slave = DaoLocator.SlaveDao.GetSlaveForJob(curJob.Id);
+          if (curJob.Slave == null || curJob.Slave.Id != hbData.SlaveId) {
+            response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, curJob.Id));
+            Logger.Error("There is no job calculated by this user " + hbData.SlaveId + " Job: " + curJob);
+          } else if (curJob.State == JobState.Aborted) {
+            // a request to abort the job has been set
+            response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, curJob.Id));
+            curJob.State = JobState.Finished;
+          } else {
+            // save job progress
+            curJob.Percentage = jobProgress.Value;
+
+            if (curJob.State == JobState.SnapshotRequested) {
+              // a request for a snapshot has been set
+              response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.RequestSnapshot, curJob.Id));
+              curJob.State = JobState.SnapshotSent;
+            }
+          }
+          DaoLocator.JobDao.Update(curJob);
+        }
+      }
+      foreach (JobDto currJob in jobsOfSlave) {
+        bool found = false;
+        if (hbData.JobProgress != null) {
+          foreach (Guid jobId in hbData.JobProgress.Keys) {
+            if (jobId == currJob.Id) {
+              found = true;
+              break;
+            }
+          }
+        }
+        if (!found) {
+          lock (newAssignedJobs) {
+            if (newAssignedJobs.ContainsKey(currJob.Id)) {
+              newAssignedJobs[currJob.Id]--;
+              Logger.Error("Job TTL Reduced by one for job: " + currJob + "and is now: " + newAssignedJobs[currJob.Id] + ". User that sucks: " + currJob.Slave);
+              if (newAssignedJobs[currJob.Id] <= 0) {
+                Logger.Error("Job TTL reached Zero, Job gets removed: " + currJob + " and set back to offline. User that sucks: " + currJob.Slave);
+
+                currJob.State = JobState.Offline;
+                DaoLocator.JobDao.Update(currJob);
+
+                response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, currJob.Id));
+
+                newAssignedJobs.Remove(currJob.Id);
+              }
+            } else {
+              Logger.Error("Job ID wasn't with the heartbeats:  " + currJob);
+              currJob.State = JobState.Offline;
+              DaoLocator.JobDao.Update(currJob);
+            }
+          } // lock
+        } else {
+          lock (newAssignedJobs) {
+
+            if (newAssignedJobs.ContainsKey(currJob.Id)) {
+              Logger.Info("Job is sending a heart beat, removing it from the newAssignedJobList: " + currJob);
+              newAssignedJobs.Remove(currJob.Id);
+            }
+          }
+        }
+      }
+    }
+
+    /// <summary>
+    /// if the slave was told to pull a job he calls this method
+    /// the server selects a job and sends it to the slave
+    /// </summary>
+    /// <param name="slaveId"></param>
+    /// <returns></returns>
+    public ResponseObject<JobDto> GetJob(Guid slaveId) {
+      ResponseObject<JobDto> response = new ResponseObject<JobDto>();
+
+      JobDto job2Calculate = scheduler.GetNextJobForSlave(slaveId);
+      if (job2Calculate != null) {
+        response.Obj = job2Calculate;
+        response.Obj.PluginsNeeded = DaoLocator.PluginInfoDao.GetPluginDependenciesForJob(response.Obj);
+
+        Logger.Info("Job pulled: " + job2Calculate + " for user " + slaveId);
+        lock (newAssignedJobs) {
+          if (!newAssignedJobs.ContainsKey(job2Calculate.Id))
+            newAssignedJobs.Add(job2Calculate.Id, ApplicationConstants.JOB_TIME_TO_LIVE);
+        }
+      } else {
+        //response.Success = false;
+        response.Obj = null;
+        response.StatusMessage = ResponseStatus.GetJob_NoJobsAvailable;
+        Logger.Info("No more Jobs left for " + slaveId);
+      }
+      return response;
+    }
+
+    public ResponseResultReceived ProcessJobResult(Stream stream, bool finished) {
+      Logger.Info("BEGIN Job received for Storage - main method:");
+
+      //Stream jobResultStream = null;
+      //Stream jobStream = null;
+
+      //try {
+      BinaryFormatter formatter = new BinaryFormatter();
+
+      JobResult result = (JobResult)formatter.Deserialize(stream);
+
+      //important - repeatable read isolation level is required here, 
+      //otherwise race conditions could occur when writing the stream into the DB
+      //just removed TransactionIsolationLevel.RepeatableRead
+      //tx = session.BeginTransaction();
+
+      ResponseResultReceived response = ProcessJobResult(result.SlaveId, result.JobId, new byte[] { }, result.Percentage, result.Exception, finished);
+
+      if (response.StatusMessage == ResponseStatus.Ok) {
+        Logger.Debug("Trying to aquire WCF Job Stream");
+        //jobStream = DaoLocator.JobDao.GetSerializedJobStream(result.JobId);
+        //Logger.Debug("Job Stream Aquired");
+        byte[] buffer = new byte[3024];
+        List<byte> serializedJob = new List<byte>();
+        int read = 0;
+        int i = 0;
+        while ((read = stream.Read(buffer, 0, buffer.Length)) > 0) {
+          for (int j = 0; j < read; j++) {
+            serializedJob.Add(buffer[j]);
+          }
+          if (i % 100 == 0)
+            Logger.Debug("Writing to stream: " + i);
+          //jobStream.Write(buffer, 0, read);
+          i++;
+        }
+        Logger.Debug("Done Writing, closing the stream!");
+        //jobStream.Close();
+
+        DaoLocator.JobDao.SetBinaryJobFile(result.JobId, serializedJob.ToArray());
+      }
+      Logger.Info("END Job received for Storage:");
+      stream.Dispose();
+      return response;
+    }
+
+    private ResponseResultReceived ProcessJobResult(Guid slaveId, Guid jobId, byte[] result, double? percentage, string exception, bool finished) {
+      Logger.Info("BEGIN Job received for Storage - SUB method: " + jobId);
+
+      ResponseResultReceived response = new ResponseResultReceived();
+      SlaveDto slave = DaoLocator.SlaveDao.FindById(slaveId);
+
+      SerializedJob job = new SerializedJob();
+
+      if (job != null) {
+        job.JobInfo = DaoLocator.JobDao.FindById(jobId);
+        if (job.JobInfo != null) {
+          job.JobInfo.Slave = job.JobInfo.Slave = DaoLocator.SlaveDao.GetSlaveForJob(jobId);
+        }
+      }
+
+      if (job != null && job.JobInfo == null) {
+        //response.Success = false;
+        response.StatusMessage = ResponseStatus.ProcessJobResult_JobDoesNotExist;
+        response.JobId = jobId;
+        Logger.Error("No job with Id " + jobId);
+
+        //tx.Rollback();
+        return response;
+      }
+      if (job.JobInfo.State == JobState.Aborted) {
+        //response.Success = false;
+        response.StatusMessage = ResponseStatus.ProcessJobResult_JobAborted;
+
+        Logger.Error("Job was aborted! " + job.JobInfo);
+
+        //tx.Rollback();
+        return response;
+      }
+      if (job.JobInfo.Slave == null) {
+        //response.Success = false;
+        response.StatusMessage = ResponseStatus.ProcessJobResult_JobIsNotBeeingCalculated;
+        response.JobId = jobId;
+
+        Logger.Error("Job is not being calculated (slave = null)! " + job.JobInfo);
+
+        //tx.Rollback();
+        return response;
+      }
+      if (job.JobInfo.Slave.Id != slaveId) {
+        //response.Success = false;
+        response.StatusMessage = ResponseStatus.ProcessJobResult_WrongSlaveForJob;
+        response.JobId = jobId;
+
+        Logger.Error("Wrong Slave for this Job! " + job.JobInfo + ", Sending Slave is: " + slaveId);
+
+        //tx.Rollback();
+        return response;
+      }
+      if (job.JobInfo.State == JobState.Finished) {
+        response.StatusMessage = ResponseStatus.Ok;
+        response.JobId = jobId;
+
+        Logger.Error("Job already finished! " + job.JobInfo + ", Sending Slave is: " + slaveId);
+
+        //tx.Rollback();
+        return response;
+      }
+      //Todo: RequestsnapshotSent => calculating?
+      if (job.JobInfo.State == JobState.SnapshotSent) {
+        job.JobInfo.State = JobState.Calculating;
+      }
+      if (job.JobInfo.State != JobState.Calculating && job.JobInfo.State != JobState.Pending) {
+        //response.Success = false;
+        response.StatusMessage = ResponseStatus.ProcessJobResult_InvalidJobState;
+        response.JobId = jobId;
+
+        Logger.Error("Wrong Job State, job is: " + job.JobInfo);
+
+        //tx.Rollback();
+        return response;
+      }
+      job.JobInfo.Percentage = percentage;
+
+      if (!string.IsNullOrEmpty(exception)) {
+        job.JobInfo.State = JobState.Failed;
+        job.JobInfo.Exception = exception;
+        job.JobInfo.DateFinished = DateTime.Now;
+      } else if (finished) {
+        job.JobInfo.State = JobState.Finished;
+        job.JobInfo.DateFinished = DateTime.Now;
+      }
+
+      job.SerializedJobData = result;
+
+      DaoLocator.JobDao.Update(job.JobInfo);
+
+      response.StatusMessage = ResponseStatus.Ok;
+      response.JobId = jobId;
+      response.Finished = finished;
+
+      Logger.Info("END Job received for Storage - SUB method: " + jobId);
+      return response;
+
+    }
+
+    /// <summary>
+    /// the slave can send job results during calculating 
+    /// and will send a final job result when he finished calculating
+    /// these job results will be stored in the database
+    /// </summary>
+    /// <param name="slaveId"></param>
+    /// <param name="jobId"></param>
+    /// <param name="result"></param>
+    /// <param name="exception"></param>
+    /// <param name="finished"></param>
+    /// <returns></returns>
+    public ResponseResultReceived StoreFinishedJobResult(Guid slaveId,
+      Guid jobId,
+      byte[] result,
+      double percentage,
+      string exception) {
+
+      return ProcessJobResult(slaveId, jobId, result, percentage, exception, true);
+    }
+
+    public ResponseResultReceived ProcessSnapshot(Guid slaveId, Guid jobId, byte[] result, double percentage, string exception) {
+      return ProcessJobResult(slaveId, jobId, result, percentage, exception, false);
+    }
+
+    /// <summary>
+    /// when a slave logs out the state will be set
+    /// and the entry in the last hearbeats dictionary will be removed
+    /// </summary>
+    /// <param name="slaveId"></param>
+    /// <returns></returns>                       
+    public Response Logout(Guid slaveId) {
+      Logger.Info("Slave logged out " + slaveId);
+
+      Response response = new Response();
+
+      heartbeatLock.EnterWriteLock();
+      if (lastHeartbeats.ContainsKey(slaveId))
+        lastHeartbeats.Remove(slaveId);
+      heartbeatLock.ExitWriteLock();
+
+      SlaveDto slave = DaoLocator.SlaveDao.FindById(slaveId);
+      if (slave == null) {
+        //response.Success = false;
+        response.StatusMessage = ResponseStatus.Logout_SlaveNotRegistered;
+        return response;
+      }
+      if (slave.State == SlaveState.Calculating) {
+        // check wich job the slave was calculating and reset it
+        IEnumerable<JobDto> jobsOfSlave = DaoLocator.JobDao.FindActiveJobsOfSlave(slave);
+        foreach (JobDto job in jobsOfSlave) {
+          if (job.State != JobState.Finished)
+            DaoLocator.JobDao.SetJobOffline(job);
+        }
+      }
+
+      slave.State = SlaveState.Offline;
+      DaoLocator.SlaveDao.Update(slave);
+
+      return response;
+    }
+
+    /// <summary>
+    /// If a slave goes offline and restores a job he was calculating 
+    /// he can ask the slave if he still needs the job result
+    /// </summary>
+    /// <param name="jobId"></param>
+    /// <returns></returns>
+    public Response IsJobStillNeeded(Guid jobId) {
+      Response response = new Response();
+      JobDto job = DaoLocator.JobDao.FindById(jobId);
+      if (job == null) {
+        //response.Success = false;
+        response.StatusMessage = ResponseStatus.IsJobStillNeeded_JobDoesNotExist;
+        Logger.Error("Job doesn't exist (anymore)! " + jobId);
+        return response;
+      }
+      if (job.State == JobState.Finished) {
+        //response.Success = true;
+        response.StatusMessage = ResponseStatus.IsJobStillNeeded_JobAlreadyFinished;
+        Logger.Error("already finished! " + job);
+        return response;
+      }
+      job.State = JobState.Pending;
+      lock (pendingJobs) {
+        pendingJobs.Add(job.Id, PENDING_TIMEOUT);
+      }
+
+      DaoLocator.JobDao.Update(job);
+
+      return response;
+    }
+
+    public ResponseList<CachedHivePluginInfoDto> GetPlugins(List<HivePluginInfoDto> pluginList) {
+      ResponseList<CachedHivePluginInfoDto> response = new ResponseList<CachedHivePluginInfoDto>();
+      response.List = new List<CachedHivePluginInfoDto>();
+      foreach (HivePluginInfoDto pluginInfo in pluginList) {
+        if (pluginInfo.Update) {
+          //check if there is a newer version         
+          IPluginDescription ipd = ApplicationManager.Manager.Plugins.Where(pd => pd.Name == pluginInfo.Name && pd.Version.Major == pluginInfo.Version.Major && pd.Version.Minor == pluginInfo.Version.Minor && pd.Version.Revision > pluginInfo.Version.Revision).SingleOrDefault();
+          if (ipd != null) {
+            response.List.Add(ConvertPluginDescriptorToDto(ipd));
+          }
+        } else {
+          IPluginDescription ipd = ApplicationManager.Manager.Plugins.Where(pd => pd.Name == pluginInfo.Name && pd.Version.Major == pluginInfo.Version.Major && pd.Version.Minor == pluginInfo.Version.Minor && pd.Version.Revision >= pluginInfo.Version.Revision).SingleOrDefault();
+          if (ipd != null) {
+            response.List.Add(ConvertPluginDescriptorToDto(ipd));
+          } else {
+            //response.Success = false;
+            response.StatusMessage = ResponseStatus.GetPlugins_PluginsNotAvailable;
+            return response;
+          }
+        }
+      }
+      return response;
+    }
+
+    private CachedHivePluginInfoDto ConvertPluginDescriptorToDto(IPluginDescription currPlugin) {
+      CachedHivePluginInfoDto currCachedPlugin = new CachedHivePluginInfoDto {
+        Name = currPlugin.Name,
+        Version = currPlugin.Version
+      };
+
+      foreach (string fileName in from file in currPlugin.Files select file.Name) {
+        currCachedPlugin.PluginFiles.Add(new HivePluginFile(File.ReadAllBytes(fileName), fileName));
+      }
+      return currCachedPlugin;
+    }
+
+    #endregion
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/SlaveManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/SlaveManager.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/SlaveManager.cs	(revision 4340)
@@ -0,0 +1,199 @@
+#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.Interfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.Server.DataAccess;
+using HeuristicLab.DataAccess.Interfaces;
+using HeuristicLab.Hive.Server.LINQDataAccess;
+using SlaveGroup=HeuristicLab.Hive.Contracts.BusinessObjects.SlaveGroupDto;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+
+namespace HeuristicLab.Hive.Server.Core {
+  internal class SlaveManager : ISlaveManager {
+    private List<SlaveGroup> slaveGroups;
+
+    public SlaveManager() {
+      slaveGroups = new List<SlaveGroup>();
+    }
+
+    #region ISlaveManager Members
+
+    /// <summary>
+    /// Returns all slaves stored in the database
+    /// </summary>
+    /// <returns></returns>
+    public ResponseList<SlaveDto> GetAllSlaves() {
+      ResponseList<SlaveDto> response = new ResponseList<SlaveDto>();
+      response.List = new List<SlaveDto>(DaoLocator.SlaveDao.FindAll());
+      return response;
+    }
+
+    /// <summary>
+    /// returns all slave groups stored in the database
+    /// </summary>
+    /// <returns></returns>
+    public ResponseList<SlaveGroup> GetAllSlaveGroups() {
+      ResponseList<SlaveGroup> response = new ResponseList<SlaveGroup>();
+
+      List<SlaveGroup> allSlaveGroups = new List<SlaveGroup>(DaoLocator.SlaveGroupDao.FindAllWithSubGroupsAndSlaves());
+      SlaveGroup emptySlaveGroup = new SlaveGroup();
+      IEnumerable<SlaveDto> groupLessSlaves = DaoLocator.SlaveDao.FindAllSlavesWithoutGroup();
+      if (groupLessSlaves != null) {
+        foreach (SlaveDto currSlave in groupLessSlaves) {
+          emptySlaveGroup.Resources.Add(currSlave);
+        }
+      }
+      emptySlaveGroup.Id = Guid.Empty;
+      allSlaveGroups.Add(emptySlaveGroup);
+
+      response.List = allSlaveGroups;
+
+      return response;
+    }
+
+    /// <summary>
+    /// [chn] check usage 
+    /// </summary>
+    public ResponseList<UpTimeStatisticsDto> GetAllUpTimeStatistics() {
+      return new ResponseList<UpTimeStatisticsDto>();
+    }
+
+    /// <summary>
+    /// Add a slave group into the database
+    /// </summary>
+    /// <param name="slaveGroup"></param>
+    /// <returns></returns>
+    public ResponseObject<SlaveGroup> AddSlaveGroup(SlaveGroup slaveGroup) {
+      ResponseObject<SlaveGroup> response = new ResponseObject<SlaveGroup>();
+
+      if (slaveGroup.Id != Guid.Empty) {
+        //response.Success = false;
+        response.StatusMessage = ResponseStatus.AddSlaveGroup_SlaveIdMustNotBeSet;
+      }
+      else {
+        slaveGroup = DaoLocator.SlaveGroupDao.Insert(slaveGroup);
+        //slaveGroupAdapter.Update(slaveGroup);
+        response.Obj = slaveGroup;
+      }
+
+      return response;
+    }
+
+    /// <summary>
+    ///  Add a resource to a group
+    /// </summary>
+    /// <param name="slaveGroupId"></param>
+    /// <param name="resource"></param>
+    /// <returns></returns>
+    public Response AddResourceToGroup(Guid slaveGroupId, ResourceDto resource) {
+      Response response = new Response();
+
+      SlaveGroup slaveGroup = DaoLocator.SlaveGroupDao.FindById(slaveGroupId);
+      if (slaveGroup == null) {
+        //response.Success = false;
+        response.StatusMessage = ResponseStatus.AddResourceToGroup_SlaveGroupDoesNotExist;
+        return response;
+      }
+
+      slaveGroup.Resources.Add(resource);
+      DaoLocator.SlaveGroupDao.AddRessourceToSlaveGroup(resource.Id, slaveGroup.Id);
+
+      //If our resource is in fact a slave => set the callendar from the resource as current one.
+      
+      SlaveDto dbr = DaoLocator.SlaveDao.FindById(resource.Id);
+      if(dbr != null) {
+        DaoLocator.SlaveDao.SetServerSideCalendar(dbr, slaveGroup.Id);  
+      }
+
+      return response;
+    }
+
+    /// <summary>
+    /// Remove a resource from a group
+    /// </summary>
+    /// <param name="slaveGroupId"></param>
+    /// <param name="resourceId"></param>
+    /// <returns></returns>
+    public Response DeleteResourceFromGroup(Guid slaveGroupId, Guid resourceId) {
+      Response response = new Response();
+
+      SlaveGroup slaveGroup = DaoLocator.SlaveGroupDao.FindById(slaveGroupId);
+      if (slaveGroup == null) {
+        // response.Success = false;
+        response.StatusMessage = ResponseStatus.AddResourceToGroup_SlaveGroupDoesNotExist;
+        return response;
+      }
+     
+      DaoLocator.SlaveGroupDao.RemoveRessourceFromSlaveGroup(resourceId, slaveGroup.Id);
+      return response;                
+    }
+
+    public ResponseObject<SlaveGroupDtoList> GetAllGroupsOfResource(Guid resourceId) {
+      ResponseObject<SlaveGroupDtoList> response = new ResponseObject<SlaveGroupDtoList>();
+
+      SlaveDto slave = DaoLocator.SlaveDao.FindById(resourceId);
+      if (slave != null) {
+        SlaveGroupDtoList groupsOfSlave = new SlaveGroupDtoList(DaoLocator.SlaveGroupDao.MemberOf(slave));
+        response.Obj = groupsOfSlave;
+      } else {
+        response.Obj = new SlaveGroupDtoList();
+        //response.Success = false;
+        response.StatusMessage = ResponseStatus.GetAllGroupsOfResource_ResourceNotFound;
+      }
+
+      return response;
+    }
+
+    public Response DeleteSlaveGroup(Guid slaveGroupId) {
+      Response response = new Response();
+
+      SlaveGroup slaveGroup = DaoLocator.SlaveGroupDao.FindById(slaveGroupId);
+      if (slaveGroup == null) {
+        response.StatusMessage = ResponseStatus.DeleteSlaveGroup_SlaveGroupDoesNotExist;
+        return response;
+      }
+
+      DaoLocator.SlaveGroupDao.Delete(slaveGroup);
+      return response;
+    }
+
+    public ResponseList<AppointmentDto> GetUptimeCalendarForResource(Guid guid) {
+      ResponseList<AppointmentDto> response = new ResponseList<AppointmentDto>();
+      response.List = new List<AppointmentDto>(DaoLocator.UptimeCalendarDao.GetUptimeCalendarForResource(guid));
+      return response;
+    }
+
+    public Response SetUptimeCalendarForResource(Guid guid, IEnumerable<AppointmentDto> appointments, bool isForced) {
+      DaoLocator.UptimeCalendarDao.SetUptimeCalendarForResource(guid, appointments);
+      DaoLocator.UptimeCalendarDao.NotifySlavesOfNewCalendar(guid, isForced);
+      return new Response();
+    }
+    #endregion
+ }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/UserRoleManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/UserRoleManager.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/UserRoleManager.cs	(revision 4340)
@@ -0,0 +1,259 @@
+﻿#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.Interfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess;
+using System.Resources;
+using System.Reflection;
+using HeuristicLab.Hive.Contracts;
+
+namespace HeuristicLab.Hive.Server.Core {
+  class UserRoleManager: IUserRoleManager {
+
+    IUserAdapter userAdapter;
+    IUserGroupAdapter userGroupAdapter;
+    IPermissionOwnerAdapter permissionOwnerAdapter;
+
+    public UserRoleManager() {
+      userAdapter = ServiceLocator.GetUserAdapter();
+      userGroupAdapter = ServiceLocator.GetUserGroupAdapter();
+    }
+
+    #region IUserRoleManager Members
+
+    /// <summary>
+    /// returns all users from the database
+    /// </summary>
+    /// <returns></returns>
+    public ResponseList<User> GetAllUsers() {
+      ResponseList<User> response = new ResponseList<User>();
+
+      List<User> allUsers = new List<User>(userAdapter.GetAll());
+      response.List = allUsers;
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_GET_ALL_USERS;
+
+      return response;
+    }
+
+    /// <summary>
+    /// Adds a new user to the database
+    /// </summary>
+    /// <param name="user"></param>
+    /// <returns></returns>
+    public ResponseObject<User> AddNewUser(User user) {
+      ResponseObject<User> response = new ResponseObject<User>();
+
+      if (user.Id != 0) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_ID_MUST_NOT_BE_SET;
+        return response;
+      }
+      if (userAdapter.GetByName(user.Name) != null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USERNAME_EXISTS_ALLREADY;
+        return response;
+      }
+
+      userAdapter.Update(user);
+      response.Obj = user;
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USER_SUCCESSFULLY_ADDED;
+      
+      return response;
+    }
+
+    /// <summary>
+    /// returns all usergroups from the database
+    /// </summary>
+    /// <returns></returns>
+    public ResponseList<UserGroup> GetAllUserGroups() {
+      ResponseList<UserGroup> response = new ResponseList<UserGroup>();
+
+      response.List = new List<UserGroup>(userGroupAdapter.GetAll());
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_GET_ALL_USERGROUPS;
+
+      return response;
+    }
+
+    /// <summary>
+    /// Removes a user from the database
+    /// </summary>
+    /// <param name="userId"></param>
+    /// <returns></returns>
+    public Response RemoveUser(long userId) {
+      Response response = new Response();
+      User user = userAdapter.GetById(userId);
+      if (user == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USER_DOESNT_EXIST;
+        return response;
+      }
+      userAdapter.Delete(user);
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USER_REMOVED;
+                         
+      return response;
+    }
+
+    /// <summary>
+    /// Adds a new usergroup to the database
+    /// </summary>
+    /// <param name="userGroup"></param>
+    /// <returns></returns>
+    public ResponseObject<UserGroup> AddNewUserGroup(UserGroup userGroup) {
+      ResponseObject<UserGroup> response = new ResponseObject<UserGroup>();
+      
+      if (userGroup.Id != 0) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_ID_MUST_NOT_BE_SET;
+        return response;
+      }
+
+      userGroupAdapter.Update(userGroup);
+      response.Obj = userGroup;
+      response.Success = false;
+      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USERGROUP_ADDED;
+
+      return response;
+    }
+
+    /// <summary>
+    /// Removes a user group from the database
+    /// </summary>
+    /// <param name="groupId"></param>
+    /// <returns></returns>
+    public Response RemoveUserGroup(long groupId) {
+      Response response = new Response();
+
+      UserGroup userGroupFromDb = userGroupAdapter.GetById(groupId);
+      if (userGroupFromDb == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USERGROUP_DOESNT_EXIST;
+        return response;
+      }
+      userGroupAdapter.Delete(userGroupFromDb);
+      response.Success = false;
+      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USERGROUP_ADDED;
+
+      return response;
+    }
+
+    /// <summary>
+    /// Adds a user into a user group
+    /// </summary>
+    /// <param name="groupId"></param>
+    /// <param name="userId"></param>
+    /// <returns></returns>
+    public Response AddUserToGroup(long groupId, long userId) {
+      Response response = new Response();
+
+      User user = userAdapter.GetById(userId);
+      if (user == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USER_DOESNT_EXIST;
+        return response;
+      }
+
+      UserGroup userGroup = userGroupAdapter.GetById(groupId);
+      if (userGroup == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USERGROUP_DOESNT_EXIST;
+        return response;
+      }
+      userGroup.Members.Add(user);
+      userGroupAdapter.Update(userGroup);
+
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_PERMISSIONOWNER_ADDED;
+
+      return response;
+    }
+
+    /// <summary>
+    /// Adds a user group to a user group
+    /// </summary>
+    /// <param name="groupId"></param>
+    /// <param name="groupToAddId"></param>
+    /// <returns></returns>
+    public Response AddUserGroupToGroup(long groupId, long groupToAddId) {
+      Response response = new Response();
+
+      UserGroup userGroup = userGroupAdapter.GetById(groupId);
+      UserGroup userGroupToAdd = userGroupAdapter.GetById(groupToAddId);
+
+      if (userGroup == null || userGroupToAdd == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USERGROUP_DOESNT_EXIST;
+        return response;
+      }
+      userGroup.Members.Add(userGroupToAdd);
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USERGROUP_ADDED_TO_USERGROUP;
+
+      return response;
+    }
+
+    /// <summary>
+    /// Removes a permission owner (user, user group) from a user group
+    /// </summary>
+    /// <param name="groupId"></param>
+    /// <param name="permissionOwnerId"></param>
+    /// <returns></returns>
+    public Response RemovePermissionOwnerFromGroup(long groupId, long permissionOwnerId) {
+      Response response = new Response();
+
+      UserGroup userGroup = userGroupAdapter.GetById(groupId);
+      if (userGroup == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USERGROUP_DOESNT_EXIST;
+        return response;
+      }
+      User user = userAdapter.GetById(permissionOwnerId);
+      if (user == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_PERMISSIONOWNER_DOESNT_EXIST;
+        return response;
+      }
+      foreach (PermissionOwner permissionOwner in userGroup.Members) {
+        if (permissionOwner.Id == permissionOwnerId) {
+          userGroup.Members.Remove(permissionOwner);
+          userGroupAdapter.Update(userGroup);
+          response.Success = true;
+          response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_PERMISSIONOWNER_REMOVED;
+          return response;
+        }
+      }
+      response.Success = false;
+      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_PERMISSIONOWNER_DOESNT_EXIST;
+      
+      return response;
+    }
+
+    #endregion
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/app.config
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/app.config	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/app.config	(revision 4340)
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+  <system.diagnostics>
+    <sources>
+      <source name="System.ServiceModel.MessageLogging" switchValue="Verbose,ActivityTracing">
+        <listeners>
+          <add type="System.Diagnostics.DefaultTraceListener" name="Default">
+            <filter type="" />
+          </add>
+        </listeners>
+      </source>
+    </sources>
+    <sharedListeners>
+      <add type="System.Diagnostics.EventLogTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
+        name="EventLogTracer" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack">
+        <filter type="" />
+      </add>
+    </sharedListeners>
+  </system.diagnostics>
+  <connectionStrings>
+    <add name="HeuristicLab.Authentication"
+         connectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=HeuristicLab.Authentication"/>
+  </connectionStrings>
+
+  <system.web>
+    <membership>
+      <providers>
+        <clear/>
+        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="HeuristicLab.Authentication"
+             enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
+             maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
+             applicationName="HeuristicLab.Authentication" />
+      </providers>
+    </membership>
+
+    <roleManager enabled="true">
+      <providers>
+        <clear/>
+        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="HeuristicLab.Authentication" applicationName="HeuristicLab.Authentication" />
+      </providers>
+    </roleManager>
+  </system.web>
+
+  <system.serviceModel>
+
+    <diagnostics>
+      <messageLogging logEntireMessage="true" logMalformedMessages="true"
+        logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true"
+        maxMessagesToLog="3000" />
+    </diagnostics>
+    <bindings>
+      <netTcpBinding>
+        <binding name="TcpStreamedBinding" sendTimeout="00:10:00" transferMode="Streamed"
+          maxBufferPoolSize="104857600" maxBufferSize="104857600"
+          maxReceivedMessageSize="104857600">
+          <readerQuotas maxStringContentLength="104857600" maxArrayLength="104857600" />
+          <security mode="TransportWithMessageCredential">
+            <transport clientCredentialType="Certificate"/>
+            <message clientCredentialType="UserName" />
+          </security>
+        </binding>
+      </netTcpBinding>
+      <wsHttpBinding>
+        <binding name="HiveServerHttpBinding">
+          <security mode="Message">
+            <transport/>
+            <message clientCredentialType="UserName" />
+          </security>
+        </binding>
+      </wsHttpBinding>
+    </bindings>
+    <behaviors>
+      <serviceBehaviors>
+        <behavior name="ServiceBehaviour">
+          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
+          <serviceDebug includeExceptionDetailInFaults="true" />
+          <serviceAuthorization principalPermissionMode="UseAspNetRoles"
+            roleProviderName="AspNetSqlRoleProvider" />
+          <serviceCredentials>
+            <serviceCertificate findValue="localhost" x509FindType="FindBySubjectName" />
+            <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
+              membershipProviderName="AspNetSqlMembershipProvider" />
+          </serviceCredentials>
+          <serviceSecurityAudit auditLogLocation="Application" suppressAuditFailure="false"
+            messageAuthenticationAuditLevel="SuccessOrFailure" />
+          <serviceThrottling maxConcurrentCalls="100"/>
+        </behavior>
+      </serviceBehaviors>
+    </behaviors>
+    <services>
+      <service behaviorConfiguration="ServiceBehaviour" name="HeuristicLab.Hive.Server.Core.SlaveFacade">
+        <endpoint address="" binding="wsHttpBinding" bindingConfiguration="HiveServerHttpBinding"
+          name="SlaveHttpEndpoint" contract="HeuristicLab.Hive.Contracts.Interfaces.ISlaveFacade" />
+        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
+          name="SlaveMexEndpoint" contract="IMetadataExchange" />
+        <endpoint binding="netTcpBinding" bindingConfiguration="TcpStreamedBinding"
+          name="SlaveTcpStreamedEndpoint" contract="HeuristicLab.Hive.Contracts.Interfaces.ISlaveFacade" />
+        <host>
+          <baseAddresses>
+            <add baseAddress="http://localhost:9000/SlaveService" />
+            <add baseAddress="net.tcp://localhost:9001/SlaveServiceStreamed" />
+          </baseAddresses>
+        </host>
+      </service>
+      <service behaviorConfiguration="ServiceBehaviour" name="HeuristicLab.Hive.Server.Core.ServerConsoleFacade">
+        <endpoint address="" binding="wsHttpBinding" bindingConfiguration="HiveServerHttpBinding"
+          name="ServerConsoleHttpEndpoint" contract="HeuristicLab.Hive.Contracts.Interfaces.IServerConsoleFacade" />
+        <endpoint address="mex" binding="mexHttpBinding" name="ServerConsoleMexEndpoint"
+          contract="IMetadataExchange" />
+        <host>
+          <baseAddresses>
+            <add baseAddress="http://localhost:9000/ServerConsoleService" />
+          </baseAddresses>
+        </host>
+      </service>
+      <service behaviorConfiguration="ServiceBehaviour" name="HeuristicLab.Hive.Server.Core.ClientFacade">
+        <endpoint address="" binding="netTcpBinding" bindingConfiguration="TcpStreamedBinding"
+          name="ClientTcpStreamedEndpoint" contract="HeuristicLab.Hive.Contracts.Interfaces.IClientFacade" />
+        <endpoint binding="wsHttpBinding" bindingConfiguration="HiveServerHttpBinding"
+          name="ClientHttpEndpoint" contract="HeuristicLab.Hive.Contracts.Interfaces.IClientFacade" />
+        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
+          name="ClientHttpMexEndpoint" contract="IMetadataExchange" />
+        <host>
+          <baseAddresses>
+            <add baseAddress="net.tcp://localhost:9001/ClientServiceStreamed" />
+            <add baseAddress="http://localhost:9000/ClientService" />
+          </baseAddresses>
+        </host>
+      </service>
+    </services>
+
+  </system.serviceModel>
+
+</configuration>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/DataAccessException.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/DataAccessException.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/DataAccessException.cs	(revision 4340)
@@ -0,0 +1,11 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Server.DataAccess {
+  public class DataAccessException : Exception {
+    public DataAccessException(string message) : base(message) { }
+    public DataAccessException(string message, Exception innerException) : base(message, innerException) { }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/HeuristicLab.Hive.Server.DataAccess-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/HeuristicLab.Hive.Server.DataAccess-3.3.csproj	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/HeuristicLab.Hive.Server.DataAccess-3.3.csproj	(revision 4340)
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{4D5A2A16-66C2-431D-9AA3-BD3041E64B84}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Server.DataAccess</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Server.DataAccess-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <StartupObject>
+    </StartupObject>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <ItemGroup>
+    <Compile Include="DataAccessException.cs" />
+    <Compile Include="ISlaveConfigDao.cs" />
+    <Compile Include="ISlaveDao.cs" />
+    <Compile Include="ISlaveGroupDao.cs" />
+    <Compile Include="IContextFactory.cs" />
+    <Compile Include="IGenericDao.cs" />
+    <Compile Include="IJobDao.cs" />
+    <Compile Include="IPluginInfoDao.cs" />
+    <Compile Include="IUptimeCalendarDao.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="HeuristicLabHiveServerDataAccessPlugin.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.DataAccess\3.3\HeuristicLab.DataAccess-3.3.csproj">
+      <Project>{9076697B-C151-46CD-95BC-1D059492B478}</Project>
+      <Name>HeuristicLab.DataAccess-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Contracts\3.3\HeuristicLab.Hive.Contracts-3.3.csproj">
+      <Project>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</Project>
+      <Name>HeuristicLab.Hive.Contracts-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Data.Linq" />
+    <Reference Include="System.Transactions" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+</Project>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/HeuristicLabHiveServerDataAccessPlugin.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/HeuristicLabHiveServerDataAccessPlugin.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/HeuristicLabHiveServerDataAccessPlugin.cs	(revision 4340)
@@ -0,0 +1,35 @@
+﻿#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.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.DataAccess {
+  [Plugin("HeuristicLab.Hive.Server.DataAccess", "3.3")]
+  [PluginFile("HeuristicLab.Hive.Server.DataAccess-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.DataAccess", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.Contracts", "3.3")]
+  public class HeuristicLabHiveServerDataAccessPlugin : PluginBase {
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IContextFactory.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IContextFactory.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IContextFactory.cs	(revision 4340)
@@ -0,0 +1,27 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Data.Linq;
+
+namespace HeuristicLab.Hive.Server.DataAccess {
+  public interface IContextFactory {
+
+    /// <summary>
+    /// Uses transaction by default.
+    /// The caller of this Method is resposible for disposing the Context!
+    /// </summary>
+    /// <returns></returns>
+    IDisposable GetContext();
+
+    IDisposable GetContext(bool withTransaction);
+
+    DataContext CurrentContext { get; }
+
+    void RollbackTransaction();
+
+    void RemoveContext();
+
+    void RemoveAndCompleteTransaction();
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IExecutableJobAdapter.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IExecutableJobAdapter.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IExecutableJobAdapter.cs	(revision 4340)
@@ -0,0 +1,43 @@
+﻿#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.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.DataAccess.Interfaces;
+
+namespace HeuristicLab.Hive.Server.DataAccess {
+  public interface IExecutableJobAdapter: IDataAdapter<ExecutableJob> {
+    /// <summary>
+    /// Finds a job with the specified criterias 
+    /// </summary>
+    /// <param name="state">all jobs with the specified state</param>
+    /// <param name="cores">all jobs which require less or equal cores</param>
+    /// <param name="memory">all jobs which require less or equal memory</param>
+    /// <param name="resourceId">all jobs that can be calculated by that resource</param>
+    /// <returns></returns>
+    ICollection<ExecutableJob> FindJobs(State state,
+      int cores,
+      int memory,
+      Guid resourceId);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IGenericDao.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IGenericDao.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IGenericDao.cs	(revision 4340)
@@ -0,0 +1,15 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Hive.Server.DataAccess {
+  public interface IGenericDao<TBusiness> {
+    TBusiness FindById(Guid id);
+    IEnumerable<TBusiness> FindAll();
+    TBusiness Insert(TBusiness bObj);
+    
+    void Delete(TBusiness bObj);
+
+    void Update(TBusiness bObj);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IJobDao.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IJobDao.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IJobDao.cs	(revision 4340)
@@ -0,0 +1,33 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using System.IO;
+
+namespace HeuristicLab.Hive.Server.DataAccess {
+  public interface IJobDao: IGenericDao<JobDto> {
+    IEnumerable<JobDto> FindActiveJobsOfSlave(SlaveDto slave);
+
+    IEnumerable<JobDto> GetJobsByState(JobState state);
+
+    void AssignSlaveToJob(Guid slaveId, Guid jobId);
+
+    void SetJobOffline(JobDto job);
+
+    SerializedJob InsertWithAttachedJob(SerializedJob job);
+
+    byte[] GetBinaryJobFile(Guid jobId); 
+
+    IEnumerable<JobDto> FindFittingJobsForSlave(JobState state, int freeCores, int freeMemory, Guid slaveGuid);
+
+    Stream GetSerializedJobStream(Guid jobId);
+
+    IEnumerable<JobDto> FindWithLimitations(JobState jobState, int offset, int count);
+
+    void SetBinaryJobFile(Guid jobId, byte[] data);
+
+    IEnumerable<JobDto> FindJobsById(IEnumerable<Guid> jobIds);
+
+    bool IsUserAuthorizedForJobs(string userId, params Guid[] jobIds);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IPluginInfoDao.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IPluginInfoDao.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IPluginInfoDao.cs	(revision 4340)
@@ -0,0 +1,11 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.DataAccess {
+  public interface IPluginInfoDao: IGenericDao<HivePluginInfoDto> {    
+    void InsertPluginDependenciesForJob(JobDto jobDto);
+    List<HivePluginInfoDto> GetPluginDependenciesForJob(JobDto jobDto);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/ISlaveConfigDao.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/ISlaveConfigDao.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/ISlaveConfigDao.cs	(revision 4340)
@@ -0,0 +1,10 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.DataAccess {
+  public interface ISlaveConfigDao: IGenericDao<SlaveConfigDto> {
+
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/ISlaveDao.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/ISlaveDao.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/ISlaveDao.cs	(revision 4340)
@@ -0,0 +1,12 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.DataAccess {
+  public interface ISlaveDao: IGenericDao<SlaveDto> {
+    IEnumerable<SlaveDto> FindAllSlavesWithoutGroup();
+    SlaveDto GetSlaveForJob(Guid jobId);
+    void SetServerSideCalendar(SlaveDto slave, Guid slaveGroupId);    
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/ISlaveGroupDao.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/ISlaveGroupDao.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/ISlaveGroupDao.cs	(revision 4340)
@@ -0,0 +1,18 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.DataAccess {
+  public interface ISlaveGroupDao: IGenericDao<SlaveGroupDto> {
+    void AddRessourceToSlaveGroup(Guid ressource, Guid SlaveGroupId);
+    void RemoveRessourceFromSlaveGroup(Guid ressource, Guid slaveGroupId);
+
+    IEnumerable<SlaveGroupDto> MemberOf(SlaveDto slave);
+
+    IEnumerable<SlaveGroupDto> FindAllWithSubGroupsAndSlaves();
+    IEnumerable<Guid> FindAllGroupAndParentGroupIdsForSlave(Guid slaveId);
+
+    IEnumerable<SlaveGroupDto> FindByName(string res);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IUptimeCalendarDao.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IUptimeCalendarDao.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IUptimeCalendarDao.cs	(revision 4340)
@@ -0,0 +1,13 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.DataAccess {
+  public interface IUptimeCalendarDao: IGenericDao<AppointmentDto> {
+    IEnumerable<AppointmentDto> GetUptimeCalendarForResource(Guid resourceId);
+    void SetUptimeCalendarForResource(Guid resourceId, IEnumerable<AppointmentDto> appointments);
+    void NotifySlavesOfNewCalendar(Guid groupId, bool forcePush);
+    IEnumerable<AppointmentDto> GetCalendarForSlave(SlaveDto slave);
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/Properties/AssemblyInfo.frame	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/Properties/AssemblyInfo.frame	(revision 4340)
@@ -0,0 +1,58 @@
+#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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Hive.Server.DataAccess")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("258B3848-8048-4c22-A52F-24C7E823A5B1")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/BaseDao.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/BaseDao.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/BaseDao.cs	(revision 4340)
@@ -0,0 +1,43 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Data.Linq;
+using HeuristicLab.Tracing;
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess {
+  public abstract class BaseDao<TBusiness, TDatabaseEntity> {
+    private static ContextFactory contextFactory = new ContextFactory();
+
+    public static HiveDataContext Context {
+      get {
+        return contextFactory.CurrentContext as HiveDataContext;
+      }
+    }
+
+    protected void CommitChanges() {      
+      try {
+        Context.SubmitChanges(ConflictMode.ContinueOnConflict);
+      } catch (ChangeConflictException e) { 
+        Logger.Warn("Concurrency Exception! " + e.Message);
+        foreach (ObjectChangeConflict conflict in Context.ChangeConflicts) { 
+          Logger.Info("Conflicted: ");
+          foreach (MemberChangeConflict memberChangeConflict in conflict.MemberConflicts) {
+            Logger.Info("    Member in Conflict: " + memberChangeConflict.Member.Name);
+            Logger.Info("    Database Value: " + memberChangeConflict.DatabaseValue);
+            Logger.Info("    Original value: " + memberChangeConflict.OriginalValue);
+            Logger.Info("    Current value: " + memberChangeConflict.CurrentValue);              
+          }
+          conflict.Resolve(RefreshMode.KeepChanges);
+        }
+        //next round!
+        CommitChanges();
+        //Context.SubmitChanges(ConflictMode.FailOnFirstConflict);
+      }
+    }
+
+    public abstract TDatabaseEntity DtoToEntity(TBusiness source, TDatabaseEntity target);
+    public abstract TBusiness EntityToDto(TDatabaseEntity source, TBusiness target);
+
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/ContextFactory.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/ContextFactory.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/ContextFactory.cs	(revision 4340)
@@ -0,0 +1,139 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Server.DataAccess;
+using System.Collections;
+using System.Data.Linq;
+using System.Transactions;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Tracing;
+using System.Threading;
+using HeuristicLab.Hive.Server.LINQDataAccess.Properties;
+
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess {
+  /// <summary>
+  /// This class handles creates one Context for each Thread which asks for one.
+  /// If one Thread calls GetContext several times, it always gets the same Context object.
+  /// A context object is removed from the cache when it is disposed. 
+  /// 
+  /// Every context has a DB-Transaction over its livetime. After using the context object
+  /// it has to be disposed in order to finish the corresponding transaction.
+  /// </summary>
+  class ContextFactory : IContextFactory {
+    private static object locker = new object();
+    private static IDictionary<int, HiveDataContext> contexts = new Dictionary<int, HiveDataContext>();
+    private static IDictionary<int, TransactionScope> transactions = new Dictionary<int, TransactionScope>();
+
+    private static IContextFactory instance = null;
+    public static IContextFactory Instance {
+      get {
+        if (instance == null)
+          instance = new ContextFactory();
+        return instance;
+      }
+    }
+
+    #region IContextManager Members
+
+    public IDisposable GetContext() {
+      return GetContext(true);
+    }
+
+    public IDisposable GetContext(bool withTransaction) {
+      lock (locker) {
+        Logger.Debug("opening transaction");
+        int threadId = Thread.CurrentThread.ManagedThreadId;
+
+        if (contexts.ContainsKey(threadId)) {
+          throw new DataAccessException("Context for this Thread already defined");
+        }
+
+        Logger.Debug("creating context");
+        DisposableHiveDataContext context = CreateContext();
+        context.OnDisposing += new EventHandler(context_OnDisposing);
+        contexts.Add(threadId, context);
+
+        if (withTransaction) {
+          TransactionScope transaction = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = ApplicationConstants.ISOLATION_LEVEL_SCOPE });
+          Logger.Debug("creating  transaction");
+
+          transactions.Add(threadId, transaction);
+        }
+        return context;
+      }
+    }
+
+    private static DisposableHiveDataContext CreateContext() {
+      return new DisposableHiveDataContext(Settings.Default.HeuristicLab_Hive_LinqConnectionString);
+    }
+
+    void context_OnDisposing(object sender, EventArgs e) {
+      RemoveContext();
+      RemoveAndCompleteTransaction();
+    }
+
+    public void RollbackTransaction() {
+      Logger.Debug("rolling back transaction");
+      int threadId = Thread.CurrentThread.ManagedThreadId;
+
+      TransactionScope transaction = transactions[threadId];
+      transaction.Dispose();
+    }
+
+    public void RemoveContext() {
+      lock (locker) {
+        Logger.Debug("removing context");
+        int threadId = Thread.CurrentThread.ManagedThreadId;
+
+        contexts.Remove(threadId);
+        // context gets disposed implicitly, when it is used as IDisposable
+      }
+    }
+
+    public void RemoveAndCompleteTransaction() {
+      lock (locker) {
+        Logger.Debug("completing transaction");
+        int threadId = Thread.CurrentThread.ManagedThreadId;
+
+        // context does not always have an associated transaction
+        if (transactions.ContainsKey(threadId)) {
+          transactions[threadId].Complete();
+          transactions[threadId].Dispose();
+          transactions.Remove(threadId);
+        }
+      }
+    }
+
+    public DataContext CurrentContext {
+      get {
+        int threadId = Thread.CurrentThread.ManagedThreadId;
+        if (contexts.ContainsKey(threadId)) {
+          return contexts[threadId];
+        } else {
+          return null;
+        }
+      }
+    }
+
+    #endregion
+  }
+
+  /// <summary>
+  /// Offers an event when it gets disposed
+  /// </summary>
+  class DisposableHiveDataContext : HiveDataContext {
+
+    public DisposableHiveDataContext(string connection) : base(connection) { }
+
+    protected override void Dispose(bool disposing) {
+      base.Dispose(disposing);
+      if (OnDisposing != null)
+        OnDisposing(this, new EventArgs());
+    }
+
+    public event EventHandler OnDisposing;
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HeuristicLab.Hive.Server.LINQDataAccess-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HeuristicLab.Hive.Server.LINQDataAccess-3.3.csproj	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HeuristicLab.Hive.Server.LINQDataAccess-3.3.csproj	(revision 4340)
@@ -0,0 +1,178 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{A4499DDD-D1B8-414F-98F6-903C2C71BEB0}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Server.LINQDataAccess</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Server.LINQDataAccess-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Tracing-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Tracing-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Transactions" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="BaseDao.cs" />
+    <Compile Include="SlaveConfigDao.cs" />
+    <Compile Include="SlaveDao.cs" />
+    <Compile Include="SlaveGroupDao.cs" />
+    <Compile Include="ContextFactory.cs" />
+    <Compile Include="HiveDataContext.cs" />
+    <Compile Include="JobDao.cs" />
+    <Compile Include="HeuristicLabHiveServerLINQDataAccessPlugin.cs" />
+    <Compile Include="PluginInfoDao.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+      <DependentUpon>Settings.settings</DependentUpon>
+    </Compile>
+    <Compile Include="UptimeCalendarDao.cs" />
+    <Compile Include="VarBinaryStream.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config" />
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="Scripts\UpdateContext.bat" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.DataAccess\3.3\HeuristicLab.DataAccess-3.3.csproj">
+      <Project>{9076697B-C151-46CD-95BC-1D059492B478}</Project>
+      <Name>HeuristicLab.DataAccess-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Contracts\3.3\HeuristicLab.Hive.Contracts-3.3.csproj">
+      <Project>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</Project>
+      <Name>HeuristicLab.Hive.Contracts-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Server.DataAccess\3.3\HeuristicLab.Hive.Server.DataAccess-3.3.csproj">
+      <Project>{4D5A2A16-66C2-431D-9AA3-BD3041E64B84}</Project>
+      <Name>HeuristicLab.Hive.Server.DataAccess-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{3259AA49-8AA1-44D3-9025-A0B520596A8C}" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="HiveDataContext.xml">
+      <SubType>Designer</SubType>
+    </Content>
+    <Content Include="Scripts\cleanHiveDatabase.sql" />
+    <Content Include="Scripts\prepareHiveDatabase.sql" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HeuristicLabHiveServerLINQDataAccessPlugin.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HeuristicLabHiveServerLINQDataAccessPlugin.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HeuristicLabHiveServerLINQDataAccessPlugin.cs	(revision 4340)
@@ -0,0 +1,17 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess {
+  [Plugin("HeuristicLab.Hive.Server.LINQDataAccess", "3.3")]
+  [PluginFile("HeuristicLab.Hive.Server.LINQDataAccess-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.DataAccess", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.Contracts", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.Server.DataAccess", "3.3")]
+  [PluginDependency("HeuristicLab.Tracing", "3.3")]
+  public class HeuristicLabHiveServerLINQDataAccessPlugin: PluginBase {
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Hive.dbml
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Hive.dbml	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Hive.dbml	(revision 4340)
@@ -0,0 +1,137 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Database Name="HeuristicLab.Hive.Linq" Class="HiveDataContext" xmlns="http://schemas.microsoft.com/linqtosql/dbml/2007">
+  <Connection Mode="AppSettings" ConnectionString="Data Source=SEMTEX-PC;Initial Catalog=HeuristicLab.Hive.Linq;Integrated Security=True" SettingsObjectName="HeuristicLab.Hive.Server.LINQDataAccess.Properties.Settings" SettingsPropertyName="HeuristicLab_Hive_LinqConnectionString" Provider="System.Data.SqlClient" />
+  <Table Name="dbo.AssignedResources" Member="AssignedResources">
+    <Type Name="AssignedResource">
+      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="AssignedRessourcesId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Association Name="Resource_AssignedResource" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" Type="Resource" IsForeignKey="true" DeleteRule="CASCADE" DeleteOnNull="true" />
+      <Association Name="Job_AssignedResource" Member="Job" ThisKey="JobId" OtherKey="JobId" Type="Job" IsForeignKey="true" DeleteRule="CASCADE" DeleteOnNull="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.UptimeStatistics" Member="UptimeStatistics">
+    <Type Name="UptimeStatistic">
+      <Column Name="UptimeStatisticsId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="Login" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
+      <Column Name="Logout" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
+      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+      <Association Name="Client_UptimeStatistic" Member="Client" ThisKey="ResourceId" OtherKey="ResourceId" Type="Client" IsForeignKey="true" DeleteRule="SET NULL" />
+    </Type>
+  </Table>
+  <Table Name="dbo.ClientConfig" Member="ClientConfigs">
+    <Type Name="ClientConfig">
+      <Column Name="ClientConfigId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="UpDownTimeCalendar" Type="System.Xml.Linq.XElement" DbType="Xml" CanBeNull="true" UpdateCheck="Never" />
+      <Column Name="HeartBeatIntervall" Type="System.Int32" DbType="Int" CanBeNull="true" />
+      <Association Name="ClientConfig_Client" Member="Clients" ThisKey="ClientConfigId" OtherKey="ClientConfigId" Type="Client" />
+    </Type>
+  </Table>
+  <Table Name="dbo.ClientGroup" Member="ClientGroups">
+    <Type Name="ClientGroup">
+      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Association Name="ClientGroup_ClientGroup_Resource" Member="ClientGroup_Resources" ThisKey="ResourceId" OtherKey="ClientGroupId" Type="ClientGroup_Resource" />
+      <Association Name="Resource_ClientGroup" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" Type="Resource" IsForeignKey="true" DeleteRule="CASCADE" DeleteOnNull="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.ClientGroup_Resource" Member="ClientGroup_Resources">
+    <Type Name="ClientGroup_Resource">
+      <Column Name="ClientGroupId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="ClientGroup_RessourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Association Name="ClientGroup_ClientGroup_Resource" Member="ClientGroup" ThisKey="ClientGroupId" OtherKey="ResourceId" Type="ClientGroup" IsForeignKey="true" />
+      <Association Name="Resource_ClientGroup_Resource" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" Type="Resource" IsForeignKey="true" DeleteRule="CASCADE" DeleteOnNull="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.PluginInfo" Member="PluginInfos">
+    <Type Name="PluginInfo">
+      <Column Name="PluginId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="Name" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
+      <Column Name="Version" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
+      <Column Name="BuildDate" Type="System.String" DbType="VarChar(20)" CanBeNull="true" />
+      <Association Name="PluginInfo_RequiredPlugin" Member="RequiredPlugins" ThisKey="PluginId" OtherKey="PluginId" Type="RequiredPlugin" />
+    </Type>
+  </Table>
+  <Table Name="dbo.Project" Member="Projects">
+    <Type Name="Project">
+      <Column Name="ProjectId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="Name" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
+      <Association Name="Project_Job" Member="Jobs" ThisKey="ProjectId" OtherKey="ProjectId" Type="Job" />
+    </Type>
+  </Table>
+  <Table Name="dbo.RequiredPlugins" Member="RequiredPlugins">
+    <Type Name="RequiredPlugin">
+      <Column Name="JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="PluginId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="RequiredPluginId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" UpdateCheck="Never" />
+      <Association Name="PluginInfo_RequiredPlugin" Member="PluginInfo" ThisKey="PluginId" OtherKey="PluginId" Type="PluginInfo" IsForeignKey="true" DeleteRule="CASCADE" DeleteOnNull="true" />
+      <Association Name="Job_RequiredPlugin" Member="Job" ThisKey="JobId" OtherKey="JobId" Type="Job" IsForeignKey="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.Resource" Member="Resources">
+    <Type Name="Resource">
+      <Column Name="ResourceId" AutoSync="OnInsert" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="Name" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
+      <Association Name="Resource_AssignedResource" Member="AssignedResources" ThisKey="ResourceId" OtherKey="ResourceId" Type="AssignedResource" />
+      <Association Name="Resource_ClientGroup" Member="ClientGroup" ThisKey="ResourceId" OtherKey="ResourceId" Type="ClientGroup" Cardinality="One" />
+      <Association Name="Resource_ClientGroup_Resource" Member="ClientGroup_Resources" ThisKey="ResourceId" OtherKey="ResourceId" Type="ClientGroup_Resource" />
+      <Association Name="Resource_UptimeCalendar" Member="UptimeCalendars" ThisKey="ResourceId" OtherKey="ResourceId" Type="UptimeCalendar" />
+      <Association Name="Resource_Client" Member="Client" ThisKey="ResourceId" OtherKey="ResourceId" Type="Client" Cardinality="One" />
+    </Type>
+  </Table>
+  <Table Name="dbo.Job" Member="Jobs">
+    <Type Name="Job">
+      <Column Name="JobId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="ParentJobId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+      <Column Name="JobState" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
+      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+      <Column Name="Percentage" Type="System.Double" DbType="Float" CanBeNull="true" />
+      <Column Name="SerializedJob" Type="System.Data.Linq.Binary" DbType="VarBinary(MAX)" CanBeNull="true" UpdateCheck="Never" IsDelayLoaded="true" />
+      <Column Name="DateCreated" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
+      <Column Name="DateCalculated" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
+      <Column Name="DateFinished" Type="System.DateTime" DbType="DateTime" CanBeNull="true" />
+      <Column Name="Priority" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Column Name="ProjectId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+      <Column Name="UserId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+      <Column Name="CoresNeeded" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Column Name="MemoryNeeded" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Association Name="Job_AssignedResource" Member="AssignedResources" ThisKey="JobId" OtherKey="JobId" Type="AssignedResource" />
+      <Association Name="Job_RequiredPlugin" Member="RequiredPlugins" ThisKey="JobId" OtherKey="JobId" Type="RequiredPlugin" />
+      <Association Name="Job_Job" Member="Jobs" ThisKey="JobId" OtherKey="ParentJobId" Type="Job" />
+      <Association Name="Job_Job" Member="Job1" ThisKey="ParentJobId" OtherKey="JobId" Type="Job" IsForeignKey="true" />
+      <Association Name="Project_Job" Member="Project" ThisKey="ProjectId" OtherKey="ProjectId" Type="Project" IsForeignKey="true" DeleteRule="SET NULL" />
+      <Association Name="Client_Job" Member="Client" ThisKey="ResourceId" OtherKey="ResourceId" Type="Client" IsForeignKey="true" DeleteRule="SET NULL" />
+    </Type>
+  </Table>
+  <Table Name="dbo.UptimeCalendar" Member="UptimeCalendars">
+    <Type Name="UptimeCalendar">
+      <Column Name="UptimeCalendarId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" IsDbGenerated="true" CanBeNull="false" />
+      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" CanBeNull="false" />
+      <Column Name="StartDate" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="false" />
+      <Column Name="EndDate" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="false" />
+      <Column Name="AllDayEvent" Type="System.Boolean" DbType="Bit NOT NULL" CanBeNull="false" />
+      <Column Name="Recurring" Type="System.Boolean" DbType="Bit NOT NULL" CanBeNull="false" />
+      <Column Name="RecurringId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="false" />
+      <Association Name="Resource_UptimeCalendar" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" Type="Resource" IsForeignKey="true" DeleteRule="CASCADE" DeleteOnNull="true" />
+    </Type>
+  </Table>
+  <Table Name="dbo.Client" Member="Clients">
+    <Type Name="Client">
+      <Column Name="ResourceId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
+      <Column Name="CPUSpeed" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Column Name="Memory" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Column Name="Login" Type="System.DateTime" DbType="DateTime NOT NULL" CanBeNull="false" />
+      <Column Name="Status" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
+      <Column Name="CalendarSyncStatus" Type="System.String" DbType="VarChar(MAX)" CanBeNull="true" />
+      <Column Name="UseCalendarFromResourceId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+      <Column Name="ClientConfigId" Type="System.Guid" DbType="UniqueIdentifier" CanBeNull="true" />
+      <Column Name="NumberOfCores" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Column Name="NumberOfFreeCores" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Column Name="FreeMemory" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
+      <Association Name="Client_UptimeStatistic" Member="UptimeStatistics" ThisKey="ResourceId" OtherKey="ResourceId" Type="UptimeStatistic" />
+      <Association Name="Client_Job" Member="Jobs" ThisKey="ResourceId" OtherKey="ResourceId" Type="Job" />
+      <Association Name="Resource_Client" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" Type="Resource" IsForeignKey="true" DeleteRule="CASCADE" DeleteOnNull="true" />
+      <Association Name="ClientConfig_Client" Member="ClientConfig" ThisKey="ClientConfigId" OtherKey="ClientConfigId" Type="ClientConfig" IsForeignKey="true" DeleteRule="SET NULL" />
+    </Type>
+  </Table>
+</Database>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Hive.dbml.layout
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Hive.dbml.layout	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Hive.dbml.layout	(revision 4340)
@@ -0,0 +1,176 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<ordesignerObjectsDiagram dslVersion="1.0.0.0" absoluteBounds="0, 0, 14.25, 13.625" name="DataClasses1">
+  <DataContextMoniker Name="/HiveDataContext" />
+  <nestedChildShapes>
+    <classShape Id="3bbfffd4-3ad8-4ff9-b0ff-bdddca70b322" absoluteBounds="3.5, 3.75, 2, 1.3862939453125005">
+      <DataClassMoniker Name="/HiveDataContext/AssignedResource" />
+      <nestedChildShapes>
+        <elementListCompartment Id="40e2e788-932b-41d4-9853-f4bc011a045a" absoluteBounds="3.515, 4.21, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="93016de7-5896-4132-9db6-bc2fe38230fe" absoluteBounds="0.5, 10.125, 2, 1.5785953776041666">
+      <DataClassMoniker Name="/HiveDataContext/UptimeStatistic" />
+      <nestedChildShapes>
+        <elementListCompartment Id="c1f9c6c9-81a2-4007-8bd0-bcadb42ee3d5" absoluteBounds="0.51499999999999968, 10.585, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="5f1881a6-9a97-4298-a30e-bc434b948d15" absoluteBounds="3.625, 12, 2, 1.3862939453124987">
+      <DataClassMoniker Name="/HiveDataContext/ClientConfig" />
+      <nestedChildShapes>
+        <elementListCompartment Id="3dbf7375-bb24-421c-a581-712b9ba03996" absoluteBounds="3.64, 12.46, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="fdda4acc-8a1b-47c8-95ae-5e366f019c84" absoluteBounds="6, 5, 2, 1.0016910807291666">
+      <DataClassMoniker Name="/HiveDataContext/ClientGroup" />
+      <nestedChildShapes>
+        <elementListCompartment Id="a7ba98a6-72ae-4d79-ac43-e86da625101e" absoluteBounds="6.0150000000000006, 5.46, 1.9700000000000002, 0.44169108072916669" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="0535d2ec-d743-4b65-a1d6-70f7af1eead3" absoluteBounds="6, 6.375, 2, 1.3862939453125005">
+      <DataClassMoniker Name="/HiveDataContext/ClientGroup_Resource" />
+      <nestedChildShapes>
+        <elementListCompartment Id="21c0b804-20b8-44c5-8ca5-27abfd546691" absoluteBounds="6.015, 6.835, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="a054f27a-f931-4019-b8a0-500bbd926986" absoluteBounds="12, 6.375, 2, 1.5785953776041666">
+      <DataClassMoniker Name="/HiveDataContext/PluginInfo" />
+      <nestedChildShapes>
+        <elementListCompartment Id="02e6b3f0-ccab-4dba-863d-9d35e1214765" absoluteBounds="12.015, 6.835, 1.9700000000000002, 1.0185953776041665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="401c6a1e-69dc-43e4-a4c6-bfc7c2130170" absoluteBounds="6.25, 10.5, 2, 1.193992513020834">
+      <DataClassMoniker Name="/HiveDataContext/Project" />
+      <nestedChildShapes>
+        <elementListCompartment Id="ca3c7af1-fbed-43b6-8624-d94da9397e73" absoluteBounds="6.265, 10.96, 1.9700000000000002, 0.63399251302083326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="59a84aec-bc57-49b5-a709-71cdf7612b31" absoluteBounds="12, 8.75, 2, 1.3862939453124987">
+      <DataClassMoniker Name="/HiveDataContext/RequiredPlugin" />
+      <nestedChildShapes>
+        <elementListCompartment Id="eabd8d36-2ac8-4d59-9e58-18e1ce2c7d22" absoluteBounds="12.015, 9.21, 1.9700000000000002, 0.8262939453125" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <classShape Id="e44e8355-4290-42f0-8b46-4473e91e504b" absoluteBounds="3.375, 5.75, 2, 1.1939925130208327">
+      <DataClassMoniker Name="/HiveDataContext/Resource" />
+      <nestedChildShapes>
+        <elementListCompartment Id="822605f6-079e-4225-bd10-dc002d09045d" absoluteBounds="3.39, 6.21, 1.9700000000000002, 0.63399251302083326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(7 : 6.00169108072917); (7 : 6.375)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/ClientGroup/ClientGroup_ClientGroup_Resource" />
+      <nodes>
+        <classShapeMoniker Id="fdda4acc-8a1b-47c8-95ae-5e366f019c84" />
+        <classShapeMoniker Id="0535d2ec-d743-4b65-a1d6-70f7af1eead3" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(13 : 7.95359537760417); (13 : 8.75)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/PluginInfo/PluginInfo_RequiredPlugin" />
+      <nodes>
+        <classShapeMoniker Id="a054f27a-f931-4019-b8a0-500bbd926986" />
+        <classShapeMoniker Id="59a84aec-bc57-49b5-a709-71cdf7612b31" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(4.78125 : 5.75); (4.78125 : 5.1362939453125)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Resource/Resource_AssignedResource" />
+      <nodes>
+        <classShapeMoniker Id="e44e8355-4290-42f0-8b46-4473e91e504b" />
+        <classShapeMoniker Id="3bbfffd4-3ad8-4ff9-b0ff-bdddca70b322" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(5.375 : 5.87584554036458); (6 : 5.87584554036458)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Resource/Resource_ClientGroup" />
+      <nodes>
+        <classShapeMoniker Id="e44e8355-4290-42f0-8b46-4473e91e504b" />
+        <classShapeMoniker Id="fdda4acc-8a1b-47c8-95ae-5e366f019c84" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(5.375 : 6.65949625651042); (6 : 6.65949625651042)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Resource/Resource_ClientGroup_Resource" />
+      <nodes>
+        <classShapeMoniker Id="e44e8355-4290-42f0-8b46-4473e91e504b" />
+        <classShapeMoniker Id="0535d2ec-d743-4b65-a1d6-70f7af1eead3" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="9af04358-a545-4e37-bb13-d249fecfa769" absoluteBounds="9, 6.5, 2, 3.5016097005208326">
+      <DataClassMoniker Name="/HiveDataContext/Job" />
+      <nestedChildShapes>
+        <elementListCompartment Id="b55e771e-4639-44c8-9d16-727b309f657d" absoluteBounds="9.015, 6.96, 1.9700000000000002, 2.941609700520833" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(10 : 6.5); (10 : 4.34375); (5.5 : 4.34375)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Job/Job_AssignedResource" />
+      <nodes>
+        <classShapeMoniker Id="9af04358-a545-4e37-bb13-d249fecfa769" />
+        <classShapeMoniker Id="3bbfffd4-3ad8-4ff9-b0ff-bdddca70b322" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(11 : 9.37580485026042); (12 : 9.37580485026042)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Job/Job_RequiredPlugin" />
+      <nodes>
+        <classShapeMoniker Id="9af04358-a545-4e37-bb13-d249fecfa769" />
+        <classShapeMoniker Id="59a84aec-bc57-49b5-a709-71cdf7612b31" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(9.70923076923077 : 10.0016097005208); (9.70923076923077 : 10.2516097005208); (10.3046153846154 : 10.2516097005208); (10.3046153846154 : 10.0016097005208)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Job/Job_Job" />
+      <nodes>
+        <classShapeMoniker Id="9af04358-a545-4e37-bb13-d249fecfa769" />
+        <classShapeMoniker Id="9af04358-a545-4e37-bb13-d249fecfa769" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(8.25 : 11.0969962565104); (9.32336288461538 : 11.0969962565104); (9.32336288461538 : 10.0016097005208)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Project/Project_Job" />
+      <nodes>
+        <classShapeMoniker Id="401c6a1e-69dc-43e4-a4c6-bfc7c2130170" />
+        <classShapeMoniker Id="9af04358-a545-4e37-bb13-d249fecfa769" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="9ae82b5f-6e47-4a8e-8350-f7312381bb3b" absoluteBounds="0.625, 5.125, 2, 2.1554996744791666">
+      <DataClassMoniker Name="/HiveDataContext/UptimeCalendar" />
+      <nestedChildShapes>
+        <elementListCompartment Id="7469c6a3-4cb2-41c2-82b9-6999782218dd" absoluteBounds="0.64000000000000012, 5.585, 1.9700000000000002, 1.5954996744791665" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(3.375 : 6.34699625651042); (2.625 : 6.34699625651042)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Resource/Resource_UptimeCalendar" />
+      <nodes>
+        <classShapeMoniker Id="e44e8355-4290-42f0-8b46-4473e91e504b" />
+        <classShapeMoniker Id="9ae82b5f-6e47-4a8e-8350-f7312381bb3b" />
+      </nodes>
+    </associationConnector>
+    <classShape Id="51cb317e-413a-4e25-a9b6-e903322f0371" absoluteBounds="3.875, 8.25, 2, 2.9247054036458331">
+      <DataClassMoniker Name="/HiveDataContext/Client" />
+      <nestedChildShapes>
+        <elementListCompartment Id="0103eb78-0280-47ac-a748-9c6593a9640b" absoluteBounds="3.89, 8.71, 1.9700000000000002, 2.364705403645833" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
+      </nestedChildShapes>
+    </classShape>
+    <associationConnector edgePoints="[(3.875 : 10.6498527018229); (2.5 : 10.6498527018229)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Client/Client_UptimeStatistic" />
+      <nodes>
+        <classShapeMoniker Id="51cb317e-413a-4e25-a9b6-e903322f0371" />
+        <classShapeMoniker Id="93016de7-5896-4132-9db6-bc2fe38230fe" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(5.875 : 9.12580485026042); (9 : 9.12580485026042)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Client/Client_Job" />
+      <nodes>
+        <classShapeMoniker Id="51cb317e-413a-4e25-a9b6-e903322f0371" />
+        <classShapeMoniker Id="9af04358-a545-4e37-bb13-d249fecfa769" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(4.625 : 6.94399251302083); (4.625 : 8.25)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/Resource/Resource_Client" />
+      <nodes>
+        <classShapeMoniker Id="e44e8355-4290-42f0-8b46-4473e91e504b" />
+        <classShapeMoniker Id="51cb317e-413a-4e25-a9b6-e903322f0371" />
+      </nodes>
+    </associationConnector>
+    <associationConnector edgePoints="[(4.75 : 12); (4.75 : 11.1747054036458)]" fixedFrom="NotFixed" fixedTo="NotFixed">
+      <AssociationMoniker Name="/HiveDataContext/ClientConfig/ClientConfig_Client" />
+      <nodes>
+        <classShapeMoniker Id="5f1881a6-9a97-4298-a30e-bc434b948d15" />
+        <classShapeMoniker Id="51cb317e-413a-4e25-a9b6-e903322f0371" />
+      </nodes>
+    </associationConnector>
+  </nestedChildShapes>
+</ordesignerObjectsDiagram>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Hive.designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Hive.designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Hive.designer.cs	(revision 4340)
@@ -0,0 +1,2996 @@
+﻿#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3603
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess
+{
+	using System.Data.Linq;
+	using System.Data.Linq.Mapping;
+	using System.Data;
+	using System.Collections.Generic;
+	using System.Reflection;
+	using System.Linq;
+	using System.Linq.Expressions;
+	using System.ComponentModel;
+	using System;
+	
+	
+	[System.Data.Linq.Mapping.DatabaseAttribute(Name="HeuristicLab.Hive.Linq")]
+	public partial class HiveDataContext : System.Data.Linq.DataContext
+	{
+		
+		private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();
+		
+    #region Extensibility Method Definitions
+    partial void OnCreated();
+    partial void InsertAssignedResource(AssignedResource instance);
+    partial void UpdateAssignedResource(AssignedResource instance);
+    partial void DeleteAssignedResource(AssignedResource instance);
+    partial void InsertUptimeStatistic(UptimeStatistic instance);
+    partial void UpdateUptimeStatistic(UptimeStatistic instance);
+    partial void DeleteUptimeStatistic(UptimeStatistic instance);
+    partial void InsertClientConfig(ClientConfig instance);
+    partial void UpdateClientConfig(ClientConfig instance);
+    partial void DeleteClientConfig(ClientConfig instance);
+    partial void InsertClientGroup(ClientGroup instance);
+    partial void UpdateClientGroup(ClientGroup instance);
+    partial void DeleteClientGroup(ClientGroup instance);
+    partial void InsertClientGroup_Resource(ClientGroup_Resource instance);
+    partial void UpdateClientGroup_Resource(ClientGroup_Resource instance);
+    partial void DeleteClientGroup_Resource(ClientGroup_Resource instance);
+    partial void InsertPluginInfo(PluginInfo instance);
+    partial void UpdatePluginInfo(PluginInfo instance);
+    partial void DeletePluginInfo(PluginInfo instance);
+    partial void InsertProject(Project instance);
+    partial void UpdateProject(Project instance);
+    partial void DeleteProject(Project instance);
+    partial void InsertRequiredPlugin(RequiredPlugin instance);
+    partial void UpdateRequiredPlugin(RequiredPlugin instance);
+    partial void DeleteRequiredPlugin(RequiredPlugin instance);
+    partial void InsertResource(Resource instance);
+    partial void UpdateResource(Resource instance);
+    partial void DeleteResource(Resource instance);
+    partial void InsertJob(Job instance);
+    partial void UpdateJob(Job instance);
+    partial void DeleteJob(Job instance);
+    partial void InsertUptimeCalendar(UptimeCalendar instance);
+    partial void UpdateUptimeCalendar(UptimeCalendar instance);
+    partial void DeleteUptimeCalendar(UptimeCalendar instance);
+    partial void InsertClient(Client instance);
+    partial void UpdateClient(Client instance);
+    partial void DeleteClient(Client instance);
+    #endregion
+		
+		public HiveDataContext() : 
+				base(global::HeuristicLab.Hive.Server.LINQDataAccess.Properties.Settings.Default.HeuristicLab_Hive_LinqConnectionString, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public HiveDataContext(string connection) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public HiveDataContext(System.Data.IDbConnection connection) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public HiveDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public HiveDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public System.Data.Linq.Table<AssignedResource> AssignedResources
+		{
+			get
+			{
+				return this.GetTable<AssignedResource>();
+			}
+		}
+		
+		public System.Data.Linq.Table<UptimeStatistic> UptimeStatistics
+		{
+			get
+			{
+				return this.GetTable<UptimeStatistic>();
+			}
+		}
+		
+		public System.Data.Linq.Table<ClientConfig> ClientConfigs
+		{
+			get
+			{
+				return this.GetTable<ClientConfig>();
+			}
+		}
+		
+		public System.Data.Linq.Table<ClientGroup> ClientGroups
+		{
+			get
+			{
+				return this.GetTable<ClientGroup>();
+			}
+		}
+		
+		public System.Data.Linq.Table<ClientGroup_Resource> ClientGroup_Resources
+		{
+			get
+			{
+				return this.GetTable<ClientGroup_Resource>();
+			}
+		}
+		
+		public System.Data.Linq.Table<PluginInfo> PluginInfos
+		{
+			get
+			{
+				return this.GetTable<PluginInfo>();
+			}
+		}
+		
+		public System.Data.Linq.Table<Project> Projects
+		{
+			get
+			{
+				return this.GetTable<Project>();
+			}
+		}
+		
+		public System.Data.Linq.Table<RequiredPlugin> RequiredPlugins
+		{
+			get
+			{
+				return this.GetTable<RequiredPlugin>();
+			}
+		}
+		
+		public System.Data.Linq.Table<Resource> Resources
+		{
+			get
+			{
+				return this.GetTable<Resource>();
+			}
+		}
+		
+		public System.Data.Linq.Table<Job> Jobs
+		{
+			get
+			{
+				return this.GetTable<Job>();
+			}
+		}
+		
+		public System.Data.Linq.Table<UptimeCalendar> UptimeCalendars
+		{
+			get
+			{
+				return this.GetTable<UptimeCalendar>();
+			}
+		}
+		
+		public System.Data.Linq.Table<Client> Clients
+		{
+			get
+			{
+				return this.GetTable<Client>();
+			}
+		}
+	}
+	
+	[Table(Name="dbo.AssignedResources")]
+	public partial class AssignedResource : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _ResourceId;
+		
+		private System.Guid _JobId;
+		
+		private System.Guid _AssignedRessourcesId;
+		
+		private EntityRef<Resource> _Resource;
+		
+		private EntityRef<Job> _Job;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnResourceIdChanging(System.Guid value);
+    partial void OnResourceIdChanged();
+    partial void OnJobIdChanging(System.Guid value);
+    partial void OnJobIdChanged();
+    partial void OnAssignedRessourcesIdChanging(System.Guid value);
+    partial void OnAssignedRessourcesIdChanged();
+    #endregion
+		
+		public AssignedResource()
+		{
+			this._Resource = default(EntityRef<Resource>);
+			this._Job = default(EntityRef<Job>);
+			OnCreated();
+		}
+		
+		[Column(Storage="_ResourceId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					if (this._Resource.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_JobId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid JobId
+		{
+			get
+			{
+				return this._JobId;
+			}
+			set
+			{
+				if ((this._JobId != value))
+				{
+					if (this._Job.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnJobIdChanging(value);
+					this.SendPropertyChanging();
+					this._JobId = value;
+					this.SendPropertyChanged("JobId");
+					this.OnJobIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_AssignedRessourcesId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid AssignedRessourcesId
+		{
+			get
+			{
+				return this._AssignedRessourcesId;
+			}
+			set
+			{
+				if ((this._AssignedRessourcesId != value))
+				{
+					this.OnAssignedRessourcesIdChanging(value);
+					this.SendPropertyChanging();
+					this._AssignedRessourcesId = value;
+					this.SendPropertyChanged("AssignedRessourcesId");
+					this.OnAssignedRessourcesIdChanged();
+				}
+			}
+		}
+		
+		[Association(Name="Resource_AssignedResource", Storage="_Resource", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteOnNull=true, DeleteRule="CASCADE")]
+		public Resource Resource
+		{
+			get
+			{
+				return this._Resource.Entity;
+			}
+			set
+			{
+				Resource previousValue = this._Resource.Entity;
+				if (((previousValue != value) 
+							|| (this._Resource.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Resource.Entity = null;
+						previousValue.AssignedResources.Remove(this);
+					}
+					this._Resource.Entity = value;
+					if ((value != null))
+					{
+						value.AssignedResources.Add(this);
+						this._ResourceId = value.ResourceId;
+					}
+					else
+					{
+						this._ResourceId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Resource");
+				}
+			}
+		}
+		
+		[Association(Name="Job_AssignedResource", Storage="_Job", ThisKey="JobId", OtherKey="JobId", IsForeignKey=true, DeleteOnNull=true, DeleteRule="CASCADE")]
+		public Job Job
+		{
+			get
+			{
+				return this._Job.Entity;
+			}
+			set
+			{
+				Job previousValue = this._Job.Entity;
+				if (((previousValue != value) 
+							|| (this._Job.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Job.Entity = null;
+						previousValue.AssignedResources.Remove(this);
+					}
+					this._Job.Entity = value;
+					if ((value != null))
+					{
+						value.AssignedResources.Add(this);
+						this._JobId = value.JobId;
+					}
+					else
+					{
+						this._JobId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Job");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[Table(Name="dbo.UptimeStatistics")]
+	public partial class UptimeStatistic : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _UptimeStatisticsId;
+		
+		private System.Nullable<System.DateTime> _Login;
+		
+		private System.Nullable<System.DateTime> _Logout;
+		
+		private System.Nullable<System.Guid> _ResourceId;
+		
+		private EntityRef<Client> _Client;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnUptimeStatisticsIdChanging(System.Guid value);
+    partial void OnUptimeStatisticsIdChanged();
+    partial void OnLoginChanging(System.Nullable<System.DateTime> value);
+    partial void OnLoginChanged();
+    partial void OnLogoutChanging(System.Nullable<System.DateTime> value);
+    partial void OnLogoutChanged();
+    partial void OnResourceIdChanging(System.Nullable<System.Guid> value);
+    partial void OnResourceIdChanged();
+    #endregion
+		
+		public UptimeStatistic()
+		{
+			this._Client = default(EntityRef<Client>);
+			OnCreated();
+		}
+		
+		[Column(Storage="_UptimeStatisticsId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid UptimeStatisticsId
+		{
+			get
+			{
+				return this._UptimeStatisticsId;
+			}
+			set
+			{
+				if ((this._UptimeStatisticsId != value))
+				{
+					this.OnUptimeStatisticsIdChanging(value);
+					this.SendPropertyChanging();
+					this._UptimeStatisticsId = value;
+					this.SendPropertyChanged("UptimeStatisticsId");
+					this.OnUptimeStatisticsIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Login", DbType="DateTime")]
+		public System.Nullable<System.DateTime> Login
+		{
+			get
+			{
+				return this._Login;
+			}
+			set
+			{
+				if ((this._Login != value))
+				{
+					this.OnLoginChanging(value);
+					this.SendPropertyChanging();
+					this._Login = value;
+					this.SendPropertyChanged("Login");
+					this.OnLoginChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Logout", DbType="DateTime")]
+		public System.Nullable<System.DateTime> Logout
+		{
+			get
+			{
+				return this._Logout;
+			}
+			set
+			{
+				if ((this._Logout != value))
+				{
+					this.OnLogoutChanging(value);
+					this.SendPropertyChanging();
+					this._Logout = value;
+					this.SendPropertyChanged("Logout");
+					this.OnLogoutChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_ResourceId", DbType="UniqueIdentifier")]
+		public System.Nullable<System.Guid> ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					if (this._Client.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[Association(Name="Client_UptimeStatistic", Storage="_Client", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteRule="SET NULL")]
+		public Client Client
+		{
+			get
+			{
+				return this._Client.Entity;
+			}
+			set
+			{
+				Client previousValue = this._Client.Entity;
+				if (((previousValue != value) 
+							|| (this._Client.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Client.Entity = null;
+						previousValue.UptimeStatistics.Remove(this);
+					}
+					this._Client.Entity = value;
+					if ((value != null))
+					{
+						value.UptimeStatistics.Add(this);
+						this._ResourceId = value.ResourceId;
+					}
+					else
+					{
+						this._ResourceId = default(Nullable<System.Guid>);
+					}
+					this.SendPropertyChanged("Client");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[Table(Name="dbo.ClientConfig")]
+	public partial class ClientConfig : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _ClientConfigId;
+		
+		private System.Xml.Linq.XElement _UpDownTimeCalendar;
+		
+		private System.Nullable<int> _HeartBeatIntervall;
+		
+		private EntitySet<Client> _Clients;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnClientConfigIdChanging(System.Guid value);
+    partial void OnClientConfigIdChanged();
+    partial void OnUpDownTimeCalendarChanging(System.Xml.Linq.XElement value);
+    partial void OnUpDownTimeCalendarChanged();
+    partial void OnHeartBeatIntervallChanging(System.Nullable<int> value);
+    partial void OnHeartBeatIntervallChanged();
+    #endregion
+		
+		public ClientConfig()
+		{
+			this._Clients = new EntitySet<Client>(new Action<Client>(this.attach_Clients), new Action<Client>(this.detach_Clients));
+			OnCreated();
+		}
+		
+		[Column(Storage="_ClientConfigId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid ClientConfigId
+		{
+			get
+			{
+				return this._ClientConfigId;
+			}
+			set
+			{
+				if ((this._ClientConfigId != value))
+				{
+					this.OnClientConfigIdChanging(value);
+					this.SendPropertyChanging();
+					this._ClientConfigId = value;
+					this.SendPropertyChanged("ClientConfigId");
+					this.OnClientConfigIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_UpDownTimeCalendar", DbType="Xml", UpdateCheck=UpdateCheck.Never)]
+		public System.Xml.Linq.XElement UpDownTimeCalendar
+		{
+			get
+			{
+				return this._UpDownTimeCalendar;
+			}
+			set
+			{
+				if ((this._UpDownTimeCalendar != value))
+				{
+					this.OnUpDownTimeCalendarChanging(value);
+					this.SendPropertyChanging();
+					this._UpDownTimeCalendar = value;
+					this.SendPropertyChanged("UpDownTimeCalendar");
+					this.OnUpDownTimeCalendarChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_HeartBeatIntervall", DbType="Int")]
+		public System.Nullable<int> HeartBeatIntervall
+		{
+			get
+			{
+				return this._HeartBeatIntervall;
+			}
+			set
+			{
+				if ((this._HeartBeatIntervall != value))
+				{
+					this.OnHeartBeatIntervallChanging(value);
+					this.SendPropertyChanging();
+					this._HeartBeatIntervall = value;
+					this.SendPropertyChanged("HeartBeatIntervall");
+					this.OnHeartBeatIntervallChanged();
+				}
+			}
+		}
+		
+		[Association(Name="ClientConfig_Client", Storage="_Clients", ThisKey="ClientConfigId", OtherKey="ClientConfigId")]
+		public EntitySet<Client> Clients
+		{
+			get
+			{
+				return this._Clients;
+			}
+			set
+			{
+				this._Clients.Assign(value);
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_Clients(Client entity)
+		{
+			this.SendPropertyChanging();
+			entity.ClientConfig = this;
+		}
+		
+		private void detach_Clients(Client entity)
+		{
+			this.SendPropertyChanging();
+			entity.ClientConfig = null;
+		}
+	}
+	
+	[Table(Name="dbo.ClientGroup")]
+	public partial class ClientGroup : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _ResourceId;
+		
+		private EntitySet<ClientGroup_Resource> _ClientGroup_Resources;
+		
+		private EntityRef<Resource> _Resource;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnResourceIdChanging(System.Guid value);
+    partial void OnResourceIdChanged();
+    #endregion
+		
+		public ClientGroup()
+		{
+			this._ClientGroup_Resources = new EntitySet<ClientGroup_Resource>(new Action<ClientGroup_Resource>(this.attach_ClientGroup_Resources), new Action<ClientGroup_Resource>(this.detach_ClientGroup_Resources));
+			this._Resource = default(EntityRef<Resource>);
+			OnCreated();
+		}
+		
+		[Column(Storage="_ResourceId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					if (this._Resource.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[Association(Name="ClientGroup_ClientGroup_Resource", Storage="_ClientGroup_Resources", ThisKey="ResourceId", OtherKey="ClientGroupId")]
+		public EntitySet<ClientGroup_Resource> ClientGroup_Resources
+		{
+			get
+			{
+				return this._ClientGroup_Resources;
+			}
+			set
+			{
+				this._ClientGroup_Resources.Assign(value);
+			}
+		}
+		
+		[Association(Name="Resource_ClientGroup", Storage="_Resource", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteOnNull=true, DeleteRule="CASCADE")]
+		public Resource Resource
+		{
+			get
+			{
+				return this._Resource.Entity;
+			}
+			set
+			{
+				Resource previousValue = this._Resource.Entity;
+				if (((previousValue != value) 
+							|| (this._Resource.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Resource.Entity = null;
+						previousValue.ClientGroup = null;
+					}
+					this._Resource.Entity = value;
+					if ((value != null))
+					{
+						value.ClientGroup = this;
+						this._ResourceId = value.ResourceId;
+					}
+					else
+					{
+						this._ResourceId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Resource");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_ClientGroup_Resources(ClientGroup_Resource entity)
+		{
+			this.SendPropertyChanging();
+			entity.ClientGroup = this;
+		}
+		
+		private void detach_ClientGroup_Resources(ClientGroup_Resource entity)
+		{
+			this.SendPropertyChanging();
+			entity.ClientGroup = null;
+		}
+	}
+	
+	[Table(Name="dbo.ClientGroup_Resource")]
+	public partial class ClientGroup_Resource : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _ClientGroupId;
+		
+		private System.Guid _ResourceId;
+		
+		private System.Guid _ClientGroup_RessourceId;
+		
+		private EntityRef<ClientGroup> _ClientGroup;
+		
+		private EntityRef<Resource> _Resource;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnClientGroupIdChanging(System.Guid value);
+    partial void OnClientGroupIdChanged();
+    partial void OnResourceIdChanging(System.Guid value);
+    partial void OnResourceIdChanged();
+    partial void OnClientGroup_RessourceIdChanging(System.Guid value);
+    partial void OnClientGroup_RessourceIdChanged();
+    #endregion
+		
+		public ClientGroup_Resource()
+		{
+			this._ClientGroup = default(EntityRef<ClientGroup>);
+			this._Resource = default(EntityRef<Resource>);
+			OnCreated();
+		}
+		
+		[Column(Storage="_ClientGroupId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid ClientGroupId
+		{
+			get
+			{
+				return this._ClientGroupId;
+			}
+			set
+			{
+				if ((this._ClientGroupId != value))
+				{
+					if (this._ClientGroup.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnClientGroupIdChanging(value);
+					this.SendPropertyChanging();
+					this._ClientGroupId = value;
+					this.SendPropertyChanged("ClientGroupId");
+					this.OnClientGroupIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_ResourceId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					if (this._Resource.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_ClientGroup_RessourceId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid ClientGroup_RessourceId
+		{
+			get
+			{
+				return this._ClientGroup_RessourceId;
+			}
+			set
+			{
+				if ((this._ClientGroup_RessourceId != value))
+				{
+					this.OnClientGroup_RessourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ClientGroup_RessourceId = value;
+					this.SendPropertyChanged("ClientGroup_RessourceId");
+					this.OnClientGroup_RessourceIdChanged();
+				}
+			}
+		}
+		
+		[Association(Name="ClientGroup_ClientGroup_Resource", Storage="_ClientGroup", ThisKey="ClientGroupId", OtherKey="ResourceId", IsForeignKey=true)]
+		public ClientGroup ClientGroup
+		{
+			get
+			{
+				return this._ClientGroup.Entity;
+			}
+			set
+			{
+				ClientGroup previousValue = this._ClientGroup.Entity;
+				if (((previousValue != value) 
+							|| (this._ClientGroup.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._ClientGroup.Entity = null;
+						previousValue.ClientGroup_Resources.Remove(this);
+					}
+					this._ClientGroup.Entity = value;
+					if ((value != null))
+					{
+						value.ClientGroup_Resources.Add(this);
+						this._ClientGroupId = value.ResourceId;
+					}
+					else
+					{
+						this._ClientGroupId = default(System.Guid);
+					}
+					this.SendPropertyChanged("ClientGroup");
+				}
+			}
+		}
+		
+		[Association(Name="Resource_ClientGroup_Resource", Storage="_Resource", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteOnNull=true, DeleteRule="CASCADE")]
+		public Resource Resource
+		{
+			get
+			{
+				return this._Resource.Entity;
+			}
+			set
+			{
+				Resource previousValue = this._Resource.Entity;
+				if (((previousValue != value) 
+							|| (this._Resource.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Resource.Entity = null;
+						previousValue.ClientGroup_Resources.Remove(this);
+					}
+					this._Resource.Entity = value;
+					if ((value != null))
+					{
+						value.ClientGroup_Resources.Add(this);
+						this._ResourceId = value.ResourceId;
+					}
+					else
+					{
+						this._ResourceId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Resource");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[Table(Name="dbo.PluginInfo")]
+	public partial class PluginInfo : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _PluginId;
+		
+		private string _Name;
+		
+		private string _Version;
+		
+		private string _BuildDate;
+		
+		private EntitySet<RequiredPlugin> _RequiredPlugins;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnPluginIdChanging(System.Guid value);
+    partial void OnPluginIdChanged();
+    partial void OnNameChanging(string value);
+    partial void OnNameChanged();
+    partial void OnVersionChanging(string value);
+    partial void OnVersionChanged();
+    partial void OnBuildDateChanging(string value);
+    partial void OnBuildDateChanged();
+    #endregion
+		
+		public PluginInfo()
+		{
+			this._RequiredPlugins = new EntitySet<RequiredPlugin>(new Action<RequiredPlugin>(this.attach_RequiredPlugins), new Action<RequiredPlugin>(this.detach_RequiredPlugins));
+			OnCreated();
+		}
+		
+		[Column(Storage="_PluginId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid PluginId
+		{
+			get
+			{
+				return this._PluginId;
+			}
+			set
+			{
+				if ((this._PluginId != value))
+				{
+					this.OnPluginIdChanging(value);
+					this.SendPropertyChanging();
+					this._PluginId = value;
+					this.SendPropertyChanged("PluginId");
+					this.OnPluginIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Name", DbType="VarChar(MAX)")]
+		public string Name
+		{
+			get
+			{
+				return this._Name;
+			}
+			set
+			{
+				if ((this._Name != value))
+				{
+					this.OnNameChanging(value);
+					this.SendPropertyChanging();
+					this._Name = value;
+					this.SendPropertyChanged("Name");
+					this.OnNameChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Version", DbType="VarChar(MAX)")]
+		public string Version
+		{
+			get
+			{
+				return this._Version;
+			}
+			set
+			{
+				if ((this._Version != value))
+				{
+					this.OnVersionChanging(value);
+					this.SendPropertyChanging();
+					this._Version = value;
+					this.SendPropertyChanged("Version");
+					this.OnVersionChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_BuildDate", DbType="VarChar(20)")]
+		public string BuildDate
+		{
+			get
+			{
+				return this._BuildDate;
+			}
+			set
+			{
+				if ((this._BuildDate != value))
+				{
+					this.OnBuildDateChanging(value);
+					this.SendPropertyChanging();
+					this._BuildDate = value;
+					this.SendPropertyChanged("BuildDate");
+					this.OnBuildDateChanged();
+				}
+			}
+		}
+		
+		[Association(Name="PluginInfo_RequiredPlugin", Storage="_RequiredPlugins", ThisKey="PluginId", OtherKey="PluginId")]
+		public EntitySet<RequiredPlugin> RequiredPlugins
+		{
+			get
+			{
+				return this._RequiredPlugins;
+			}
+			set
+			{
+				this._RequiredPlugins.Assign(value);
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_RequiredPlugins(RequiredPlugin entity)
+		{
+			this.SendPropertyChanging();
+			entity.PluginInfo = this;
+		}
+		
+		private void detach_RequiredPlugins(RequiredPlugin entity)
+		{
+			this.SendPropertyChanging();
+			entity.PluginInfo = null;
+		}
+	}
+	
+	[Table(Name="dbo.Project")]
+	public partial class Project : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _ProjectId;
+		
+		private string _Name;
+		
+		private EntitySet<Job> _Jobs;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnProjectIdChanging(System.Guid value);
+    partial void OnProjectIdChanged();
+    partial void OnNameChanging(string value);
+    partial void OnNameChanged();
+    #endregion
+		
+		public Project()
+		{
+			this._Jobs = new EntitySet<Job>(new Action<Job>(this.attach_Jobs), new Action<Job>(this.detach_Jobs));
+			OnCreated();
+		}
+		
+		[Column(Storage="_ProjectId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid ProjectId
+		{
+			get
+			{
+				return this._ProjectId;
+			}
+			set
+			{
+				if ((this._ProjectId != value))
+				{
+					this.OnProjectIdChanging(value);
+					this.SendPropertyChanging();
+					this._ProjectId = value;
+					this.SendPropertyChanged("ProjectId");
+					this.OnProjectIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Name", DbType="VarChar(MAX)")]
+		public string Name
+		{
+			get
+			{
+				return this._Name;
+			}
+			set
+			{
+				if ((this._Name != value))
+				{
+					this.OnNameChanging(value);
+					this.SendPropertyChanging();
+					this._Name = value;
+					this.SendPropertyChanged("Name");
+					this.OnNameChanged();
+				}
+			}
+		}
+		
+		[Association(Name="Project_Job", Storage="_Jobs", ThisKey="ProjectId", OtherKey="ProjectId")]
+		public EntitySet<Job> Jobs
+		{
+			get
+			{
+				return this._Jobs;
+			}
+			set
+			{
+				this._Jobs.Assign(value);
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_Jobs(Job entity)
+		{
+			this.SendPropertyChanging();
+			entity.Project = this;
+		}
+		
+		private void detach_Jobs(Job entity)
+		{
+			this.SendPropertyChanging();
+			entity.Project = null;
+		}
+	}
+	
+	[Table(Name="dbo.RequiredPlugins")]
+	public partial class RequiredPlugin : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _JobId;
+		
+		private System.Guid _PluginId;
+		
+		private System.Guid _RequiredPluginId;
+		
+		private EntityRef<PluginInfo> _PluginInfo;
+		
+		private EntityRef<Job> _Job;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnJobIdChanging(System.Guid value);
+    partial void OnJobIdChanged();
+    partial void OnPluginIdChanging(System.Guid value);
+    partial void OnPluginIdChanged();
+    partial void OnRequiredPluginIdChanging(System.Guid value);
+    partial void OnRequiredPluginIdChanged();
+    #endregion
+		
+		public RequiredPlugin()
+		{
+			this._PluginInfo = default(EntityRef<PluginInfo>);
+			this._Job = default(EntityRef<Job>);
+			OnCreated();
+		}
+		
+		[Column(Storage="_JobId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid JobId
+		{
+			get
+			{
+				return this._JobId;
+			}
+			set
+			{
+				if ((this._JobId != value))
+				{
+					if (this._Job.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnJobIdChanging(value);
+					this.SendPropertyChanging();
+					this._JobId = value;
+					this.SendPropertyChanged("JobId");
+					this.OnJobIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_PluginId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid PluginId
+		{
+			get
+			{
+				return this._PluginId;
+			}
+			set
+			{
+				if ((this._PluginId != value))
+				{
+					if (this._PluginInfo.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnPluginIdChanging(value);
+					this.SendPropertyChanging();
+					this._PluginId = value;
+					this.SendPropertyChanged("PluginId");
+					this.OnPluginIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_RequiredPluginId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
+		public System.Guid RequiredPluginId
+		{
+			get
+			{
+				return this._RequiredPluginId;
+			}
+			set
+			{
+				if ((this._RequiredPluginId != value))
+				{
+					this.OnRequiredPluginIdChanging(value);
+					this.SendPropertyChanging();
+					this._RequiredPluginId = value;
+					this.SendPropertyChanged("RequiredPluginId");
+					this.OnRequiredPluginIdChanged();
+				}
+			}
+		}
+		
+		[Association(Name="PluginInfo_RequiredPlugin", Storage="_PluginInfo", ThisKey="PluginId", OtherKey="PluginId", IsForeignKey=true, DeleteOnNull=true, DeleteRule="CASCADE")]
+		public PluginInfo PluginInfo
+		{
+			get
+			{
+				return this._PluginInfo.Entity;
+			}
+			set
+			{
+				PluginInfo previousValue = this._PluginInfo.Entity;
+				if (((previousValue != value) 
+							|| (this._PluginInfo.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._PluginInfo.Entity = null;
+						previousValue.RequiredPlugins.Remove(this);
+					}
+					this._PluginInfo.Entity = value;
+					if ((value != null))
+					{
+						value.RequiredPlugins.Add(this);
+						this._PluginId = value.PluginId;
+					}
+					else
+					{
+						this._PluginId = default(System.Guid);
+					}
+					this.SendPropertyChanged("PluginInfo");
+				}
+			}
+		}
+		
+		[Association(Name="Job_RequiredPlugin", Storage="_Job", ThisKey="JobId", OtherKey="JobId", IsForeignKey=true)]
+		public Job Job
+		{
+			get
+			{
+				return this._Job.Entity;
+			}
+			set
+			{
+				Job previousValue = this._Job.Entity;
+				if (((previousValue != value) 
+							|| (this._Job.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Job.Entity = null;
+						previousValue.RequiredPlugins.Remove(this);
+					}
+					this._Job.Entity = value;
+					if ((value != null))
+					{
+						value.RequiredPlugins.Add(this);
+						this._JobId = value.JobId;
+					}
+					else
+					{
+						this._JobId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Job");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[Table(Name="dbo.Resource")]
+	public partial class Resource : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _ResourceId;
+		
+		private string _Name;
+		
+		private EntitySet<AssignedResource> _AssignedResources;
+		
+		private EntityRef<ClientGroup> _ClientGroup;
+		
+		private EntitySet<ClientGroup_Resource> _ClientGroup_Resources;
+		
+		private EntitySet<UptimeCalendar> _UptimeCalendars;
+		
+		private EntityRef<Client> _Client;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnResourceIdChanging(System.Guid value);
+    partial void OnResourceIdChanged();
+    partial void OnNameChanging(string value);
+    partial void OnNameChanged();
+    #endregion
+		
+		public Resource()
+		{
+			this._AssignedResources = new EntitySet<AssignedResource>(new Action<AssignedResource>(this.attach_AssignedResources), new Action<AssignedResource>(this.detach_AssignedResources));
+			this._ClientGroup = default(EntityRef<ClientGroup>);
+			this._ClientGroup_Resources = new EntitySet<ClientGroup_Resource>(new Action<ClientGroup_Resource>(this.attach_ClientGroup_Resources), new Action<ClientGroup_Resource>(this.detach_ClientGroup_Resources));
+			this._UptimeCalendars = new EntitySet<UptimeCalendar>(new Action<UptimeCalendar>(this.attach_UptimeCalendars), new Action<UptimeCalendar>(this.detach_UptimeCalendars));
+			this._Client = default(EntityRef<Client>);
+			OnCreated();
+		}
+		
+		[Column(Storage="_ResourceId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Name", DbType="VarChar(MAX)")]
+		public string Name
+		{
+			get
+			{
+				return this._Name;
+			}
+			set
+			{
+				if ((this._Name != value))
+				{
+					this.OnNameChanging(value);
+					this.SendPropertyChanging();
+					this._Name = value;
+					this.SendPropertyChanged("Name");
+					this.OnNameChanged();
+				}
+			}
+		}
+		
+		[Association(Name="Resource_AssignedResource", Storage="_AssignedResources", ThisKey="ResourceId", OtherKey="ResourceId")]
+		public EntitySet<AssignedResource> AssignedResources
+		{
+			get
+			{
+				return this._AssignedResources;
+			}
+			set
+			{
+				this._AssignedResources.Assign(value);
+			}
+		}
+		
+		[Association(Name="Resource_ClientGroup", Storage="_ClientGroup", ThisKey="ResourceId", OtherKey="ResourceId", IsUnique=true, IsForeignKey=false)]
+		public ClientGroup ClientGroup
+		{
+			get
+			{
+				return this._ClientGroup.Entity;
+			}
+			set
+			{
+				ClientGroup previousValue = this._ClientGroup.Entity;
+				if (((previousValue != value) 
+							|| (this._ClientGroup.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._ClientGroup.Entity = null;
+						previousValue.Resource = null;
+					}
+					this._ClientGroup.Entity = value;
+					if ((value != null))
+					{
+						value.Resource = this;
+					}
+					this.SendPropertyChanged("ClientGroup");
+				}
+			}
+		}
+		
+		[Association(Name="Resource_ClientGroup_Resource", Storage="_ClientGroup_Resources", ThisKey="ResourceId", OtherKey="ResourceId")]
+		public EntitySet<ClientGroup_Resource> ClientGroup_Resources
+		{
+			get
+			{
+				return this._ClientGroup_Resources;
+			}
+			set
+			{
+				this._ClientGroup_Resources.Assign(value);
+			}
+		}
+		
+		[Association(Name="Resource_UptimeCalendar", Storage="_UptimeCalendars", ThisKey="ResourceId", OtherKey="ResourceId")]
+		public EntitySet<UptimeCalendar> UptimeCalendars
+		{
+			get
+			{
+				return this._UptimeCalendars;
+			}
+			set
+			{
+				this._UptimeCalendars.Assign(value);
+			}
+		}
+		
+		[Association(Name="Resource_Client", Storage="_Client", ThisKey="ResourceId", OtherKey="ResourceId", IsUnique=true, IsForeignKey=false)]
+		public Client Client
+		{
+			get
+			{
+				return this._Client.Entity;
+			}
+			set
+			{
+				Client previousValue = this._Client.Entity;
+				if (((previousValue != value) 
+							|| (this._Client.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Client.Entity = null;
+						previousValue.Resource = null;
+					}
+					this._Client.Entity = value;
+					if ((value != null))
+					{
+						value.Resource = this;
+					}
+					this.SendPropertyChanged("Client");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_AssignedResources(AssignedResource entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = this;
+		}
+		
+		private void detach_AssignedResources(AssignedResource entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = null;
+		}
+		
+		private void attach_ClientGroup_Resources(ClientGroup_Resource entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = this;
+		}
+		
+		private void detach_ClientGroup_Resources(ClientGroup_Resource entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = null;
+		}
+		
+		private void attach_UptimeCalendars(UptimeCalendar entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = this;
+		}
+		
+		private void detach_UptimeCalendars(UptimeCalendar entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = null;
+		}
+	}
+	
+	[Table(Name="dbo.Job")]
+	public partial class Job : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _JobId;
+		
+		private System.Nullable<System.Guid> _ParentJobId;
+		
+		private string _JobState;
+		
+		private System.Nullable<System.Guid> _ResourceId;
+		
+		private System.Nullable<double> _Percentage;
+		
+		private System.Data.Linq.Link<System.Data.Linq.Binary> _SerializedJob;
+		
+		private System.Nullable<System.DateTime> _DateCreated;
+		
+		private System.Nullable<System.DateTime> _DateCalculated;
+		
+		private System.Nullable<System.DateTime> _DateFinished;
+		
+		private int _Priority;
+		
+		private System.Nullable<System.Guid> _ProjectId;
+		
+		private System.Nullable<System.Guid> _UserId;
+		
+		private int _CoresNeeded;
+		
+		private int _MemoryNeeded;
+		
+		private EntitySet<AssignedResource> _AssignedResources;
+		
+		private EntitySet<RequiredPlugin> _RequiredPlugins;
+		
+		private EntitySet<Job> _Jobs;
+		
+		private EntityRef<Job> _Job1;
+		
+		private EntityRef<Project> _Project;
+		
+		private EntityRef<Client> _Client;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnJobIdChanging(System.Guid value);
+    partial void OnJobIdChanged();
+    partial void OnParentJobIdChanging(System.Nullable<System.Guid> value);
+    partial void OnParentJobIdChanged();
+    partial void OnJobStateChanging(string value);
+    partial void OnJobStateChanged();
+    partial void OnResourceIdChanging(System.Nullable<System.Guid> value);
+    partial void OnResourceIdChanged();
+    partial void OnPercentageChanging(System.Nullable<double> value);
+    partial void OnPercentageChanged();
+    partial void OnSerializedJobChanging(System.Data.Linq.Binary value);
+    partial void OnSerializedJobChanged();
+    partial void OnDateCreatedChanging(System.Nullable<System.DateTime> value);
+    partial void OnDateCreatedChanged();
+    partial void OnDateCalculatedChanging(System.Nullable<System.DateTime> value);
+    partial void OnDateCalculatedChanged();
+    partial void OnDateFinishedChanging(System.Nullable<System.DateTime> value);
+    partial void OnDateFinishedChanged();
+    partial void OnPriorityChanging(int value);
+    partial void OnPriorityChanged();
+    partial void OnProjectIdChanging(System.Nullable<System.Guid> value);
+    partial void OnProjectIdChanged();
+    partial void OnUserIdChanging(System.Nullable<System.Guid> value);
+    partial void OnUserIdChanged();
+    partial void OnCoresNeededChanging(int value);
+    partial void OnCoresNeededChanged();
+    partial void OnMemoryNeededChanging(int value);
+    partial void OnMemoryNeededChanged();
+    #endregion
+		
+		public Job()
+		{
+			this._AssignedResources = new EntitySet<AssignedResource>(new Action<AssignedResource>(this.attach_AssignedResources), new Action<AssignedResource>(this.detach_AssignedResources));
+			this._RequiredPlugins = new EntitySet<RequiredPlugin>(new Action<RequiredPlugin>(this.attach_RequiredPlugins), new Action<RequiredPlugin>(this.detach_RequiredPlugins));
+			this._Jobs = new EntitySet<Job>(new Action<Job>(this.attach_Jobs), new Action<Job>(this.detach_Jobs));
+			this._Job1 = default(EntityRef<Job>);
+			this._Project = default(EntityRef<Project>);
+			this._Client = default(EntityRef<Client>);
+			OnCreated();
+		}
+		
+		[Column(Storage="_JobId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid JobId
+		{
+			get
+			{
+				return this._JobId;
+			}
+			set
+			{
+				if ((this._JobId != value))
+				{
+					this.OnJobIdChanging(value);
+					this.SendPropertyChanging();
+					this._JobId = value;
+					this.SendPropertyChanged("JobId");
+					this.OnJobIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_ParentJobId", DbType="UniqueIdentifier")]
+		public System.Nullable<System.Guid> ParentJobId
+		{
+			get
+			{
+				return this._ParentJobId;
+			}
+			set
+			{
+				if ((this._ParentJobId != value))
+				{
+					if (this._Job1.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnParentJobIdChanging(value);
+					this.SendPropertyChanging();
+					this._ParentJobId = value;
+					this.SendPropertyChanged("ParentJobId");
+					this.OnParentJobIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_JobState", DbType="VarChar(MAX)")]
+		public string JobState
+		{
+			get
+			{
+				return this._JobState;
+			}
+			set
+			{
+				if ((this._JobState != value))
+				{
+					this.OnJobStateChanging(value);
+					this.SendPropertyChanging();
+					this._JobState = value;
+					this.SendPropertyChanged("JobState");
+					this.OnJobStateChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_ResourceId", DbType="UniqueIdentifier")]
+		public System.Nullable<System.Guid> ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					if (this._Client.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Percentage", DbType="Float")]
+		public System.Nullable<double> Percentage
+		{
+			get
+			{
+				return this._Percentage;
+			}
+			set
+			{
+				if ((this._Percentage != value))
+				{
+					this.OnPercentageChanging(value);
+					this.SendPropertyChanging();
+					this._Percentage = value;
+					this.SendPropertyChanged("Percentage");
+					this.OnPercentageChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_SerializedJob", DbType="VarBinary(MAX)", UpdateCheck=UpdateCheck.Never)]
+		public System.Data.Linq.Binary SerializedJob
+		{
+			get
+			{
+				return this._SerializedJob.Value;
+			}
+			set
+			{
+				if ((this._SerializedJob.Value != value))
+				{
+					this.OnSerializedJobChanging(value);
+					this.SendPropertyChanging();
+					this._SerializedJob.Value = value;
+					this.SendPropertyChanged("SerializedJob");
+					this.OnSerializedJobChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_DateCreated", DbType="DateTime")]
+		public System.Nullable<System.DateTime> DateCreated
+		{
+			get
+			{
+				return this._DateCreated;
+			}
+			set
+			{
+				if ((this._DateCreated != value))
+				{
+					this.OnDateCreatedChanging(value);
+					this.SendPropertyChanging();
+					this._DateCreated = value;
+					this.SendPropertyChanged("DateCreated");
+					this.OnDateCreatedChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_DateCalculated", DbType="DateTime")]
+		public System.Nullable<System.DateTime> DateCalculated
+		{
+			get
+			{
+				return this._DateCalculated;
+			}
+			set
+			{
+				if ((this._DateCalculated != value))
+				{
+					this.OnDateCalculatedChanging(value);
+					this.SendPropertyChanging();
+					this._DateCalculated = value;
+					this.SendPropertyChanged("DateCalculated");
+					this.OnDateCalculatedChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_DateFinished", DbType="DateTime")]
+		public System.Nullable<System.DateTime> DateFinished
+		{
+			get
+			{
+				return this._DateFinished;
+			}
+			set
+			{
+				if ((this._DateFinished != value))
+				{
+					this.OnDateFinishedChanging(value);
+					this.SendPropertyChanging();
+					this._DateFinished = value;
+					this.SendPropertyChanged("DateFinished");
+					this.OnDateFinishedChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Priority", DbType="Int NOT NULL")]
+		public int Priority
+		{
+			get
+			{
+				return this._Priority;
+			}
+			set
+			{
+				if ((this._Priority != value))
+				{
+					this.OnPriorityChanging(value);
+					this.SendPropertyChanging();
+					this._Priority = value;
+					this.SendPropertyChanged("Priority");
+					this.OnPriorityChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_ProjectId", DbType="UniqueIdentifier")]
+		public System.Nullable<System.Guid> ProjectId
+		{
+			get
+			{
+				return this._ProjectId;
+			}
+			set
+			{
+				if ((this._ProjectId != value))
+				{
+					if (this._Project.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnProjectIdChanging(value);
+					this.SendPropertyChanging();
+					this._ProjectId = value;
+					this.SendPropertyChanged("ProjectId");
+					this.OnProjectIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_UserId", DbType="UniqueIdentifier")]
+		public System.Nullable<System.Guid> UserId
+		{
+			get
+			{
+				return this._UserId;
+			}
+			set
+			{
+				if ((this._UserId != value))
+				{
+					this.OnUserIdChanging(value);
+					this.SendPropertyChanging();
+					this._UserId = value;
+					this.SendPropertyChanged("UserId");
+					this.OnUserIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_CoresNeeded", DbType="Int NOT NULL")]
+		public int CoresNeeded
+		{
+			get
+			{
+				return this._CoresNeeded;
+			}
+			set
+			{
+				if ((this._CoresNeeded != value))
+				{
+					this.OnCoresNeededChanging(value);
+					this.SendPropertyChanging();
+					this._CoresNeeded = value;
+					this.SendPropertyChanged("CoresNeeded");
+					this.OnCoresNeededChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_MemoryNeeded", DbType="Int NOT NULL")]
+		public int MemoryNeeded
+		{
+			get
+			{
+				return this._MemoryNeeded;
+			}
+			set
+			{
+				if ((this._MemoryNeeded != value))
+				{
+					this.OnMemoryNeededChanging(value);
+					this.SendPropertyChanging();
+					this._MemoryNeeded = value;
+					this.SendPropertyChanged("MemoryNeeded");
+					this.OnMemoryNeededChanged();
+				}
+			}
+		}
+		
+		[Association(Name="Job_AssignedResource", Storage="_AssignedResources", ThisKey="JobId", OtherKey="JobId")]
+		public EntitySet<AssignedResource> AssignedResources
+		{
+			get
+			{
+				return this._AssignedResources;
+			}
+			set
+			{
+				this._AssignedResources.Assign(value);
+			}
+		}
+		
+		[Association(Name="Job_RequiredPlugin", Storage="_RequiredPlugins", ThisKey="JobId", OtherKey="JobId")]
+		public EntitySet<RequiredPlugin> RequiredPlugins
+		{
+			get
+			{
+				return this._RequiredPlugins;
+			}
+			set
+			{
+				this._RequiredPlugins.Assign(value);
+			}
+		}
+		
+		[Association(Name="Job_Job", Storage="_Jobs", ThisKey="JobId", OtherKey="ParentJobId")]
+		public EntitySet<Job> Jobs
+		{
+			get
+			{
+				return this._Jobs;
+			}
+			set
+			{
+				this._Jobs.Assign(value);
+			}
+		}
+		
+		[Association(Name="Job_Job", Storage="_Job1", ThisKey="ParentJobId", OtherKey="JobId", IsForeignKey=true)]
+		public Job Job1
+		{
+			get
+			{
+				return this._Job1.Entity;
+			}
+			set
+			{
+				Job previousValue = this._Job1.Entity;
+				if (((previousValue != value) 
+							|| (this._Job1.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Job1.Entity = null;
+						previousValue.Jobs.Remove(this);
+					}
+					this._Job1.Entity = value;
+					if ((value != null))
+					{
+						value.Jobs.Add(this);
+						this._ParentJobId = value.JobId;
+					}
+					else
+					{
+						this._ParentJobId = default(Nullable<System.Guid>);
+					}
+					this.SendPropertyChanged("Job1");
+				}
+			}
+		}
+		
+		[Association(Name="Project_Job", Storage="_Project", ThisKey="ProjectId", OtherKey="ProjectId", IsForeignKey=true, DeleteRule="SET NULL")]
+		public Project Project
+		{
+			get
+			{
+				return this._Project.Entity;
+			}
+			set
+			{
+				Project previousValue = this._Project.Entity;
+				if (((previousValue != value) 
+							|| (this._Project.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Project.Entity = null;
+						previousValue.Jobs.Remove(this);
+					}
+					this._Project.Entity = value;
+					if ((value != null))
+					{
+						value.Jobs.Add(this);
+						this._ProjectId = value.ProjectId;
+					}
+					else
+					{
+						this._ProjectId = default(Nullable<System.Guid>);
+					}
+					this.SendPropertyChanged("Project");
+				}
+			}
+		}
+		
+		[Association(Name="Client_Job", Storage="_Client", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteRule="SET NULL")]
+		public Client Client
+		{
+			get
+			{
+				return this._Client.Entity;
+			}
+			set
+			{
+				Client previousValue = this._Client.Entity;
+				if (((previousValue != value) 
+							|| (this._Client.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Client.Entity = null;
+						previousValue.Jobs.Remove(this);
+					}
+					this._Client.Entity = value;
+					if ((value != null))
+					{
+						value.Jobs.Add(this);
+						this._ResourceId = value.ResourceId;
+					}
+					else
+					{
+						this._ResourceId = default(Nullable<System.Guid>);
+					}
+					this.SendPropertyChanged("Client");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_AssignedResources(AssignedResource entity)
+		{
+			this.SendPropertyChanging();
+			entity.Job = this;
+		}
+		
+		private void detach_AssignedResources(AssignedResource entity)
+		{
+			this.SendPropertyChanging();
+			entity.Job = null;
+		}
+		
+		private void attach_RequiredPlugins(RequiredPlugin entity)
+		{
+			this.SendPropertyChanging();
+			entity.Job = this;
+		}
+		
+		private void detach_RequiredPlugins(RequiredPlugin entity)
+		{
+			this.SendPropertyChanging();
+			entity.Job = null;
+		}
+		
+		private void attach_Jobs(Job entity)
+		{
+			this.SendPropertyChanging();
+			entity.Job1 = this;
+		}
+		
+		private void detach_Jobs(Job entity)
+		{
+			this.SendPropertyChanging();
+			entity.Job1 = null;
+		}
+	}
+	
+	[Table(Name="dbo.UptimeCalendar")]
+	public partial class UptimeCalendar : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _UptimeCalendarId;
+		
+		private System.Guid _ResourceId;
+		
+		private System.DateTime _StartDate;
+		
+		private System.DateTime _EndDate;
+		
+		private bool _AllDayEvent;
+		
+		private bool _Recurring;
+		
+		private System.Guid _RecurringId;
+		
+		private EntityRef<Resource> _Resource;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnUptimeCalendarIdChanging(System.Guid value);
+    partial void OnUptimeCalendarIdChanged();
+    partial void OnResourceIdChanging(System.Guid value);
+    partial void OnResourceIdChanged();
+    partial void OnStartDateChanging(System.DateTime value);
+    partial void OnStartDateChanged();
+    partial void OnEndDateChanging(System.DateTime value);
+    partial void OnEndDateChanged();
+    partial void OnAllDayEventChanging(bool value);
+    partial void OnAllDayEventChanged();
+    partial void OnRecurringChanging(bool value);
+    partial void OnRecurringChanged();
+    partial void OnRecurringIdChanging(System.Guid value);
+    partial void OnRecurringIdChanged();
+    #endregion
+		
+		public UptimeCalendar()
+		{
+			this._Resource = default(EntityRef<Resource>);
+			OnCreated();
+		}
+		
+		[Column(Storage="_UptimeCalendarId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid UptimeCalendarId
+		{
+			get
+			{
+				return this._UptimeCalendarId;
+			}
+			set
+			{
+				if ((this._UptimeCalendarId != value))
+				{
+					this.OnUptimeCalendarIdChanging(value);
+					this.SendPropertyChanging();
+					this._UptimeCalendarId = value;
+					this.SendPropertyChanged("UptimeCalendarId");
+					this.OnUptimeCalendarIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_ResourceId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					if (this._Resource.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_StartDate", DbType="DateTime NOT NULL")]
+		public System.DateTime StartDate
+		{
+			get
+			{
+				return this._StartDate;
+			}
+			set
+			{
+				if ((this._StartDate != value))
+				{
+					this.OnStartDateChanging(value);
+					this.SendPropertyChanging();
+					this._StartDate = value;
+					this.SendPropertyChanged("StartDate");
+					this.OnStartDateChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_EndDate", DbType="DateTime NOT NULL")]
+		public System.DateTime EndDate
+		{
+			get
+			{
+				return this._EndDate;
+			}
+			set
+			{
+				if ((this._EndDate != value))
+				{
+					this.OnEndDateChanging(value);
+					this.SendPropertyChanging();
+					this._EndDate = value;
+					this.SendPropertyChanged("EndDate");
+					this.OnEndDateChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_AllDayEvent", DbType="Bit NOT NULL")]
+		public bool AllDayEvent
+		{
+			get
+			{
+				return this._AllDayEvent;
+			}
+			set
+			{
+				if ((this._AllDayEvent != value))
+				{
+					this.OnAllDayEventChanging(value);
+					this.SendPropertyChanging();
+					this._AllDayEvent = value;
+					this.SendPropertyChanged("AllDayEvent");
+					this.OnAllDayEventChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Recurring", DbType="Bit NOT NULL")]
+		public bool Recurring
+		{
+			get
+			{
+				return this._Recurring;
+			}
+			set
+			{
+				if ((this._Recurring != value))
+				{
+					this.OnRecurringChanging(value);
+					this.SendPropertyChanging();
+					this._Recurring = value;
+					this.SendPropertyChanged("Recurring");
+					this.OnRecurringChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_RecurringId", DbType="UniqueIdentifier")]
+		public System.Guid RecurringId
+		{
+			get
+			{
+				return this._RecurringId;
+			}
+			set
+			{
+				if ((this._RecurringId != value))
+				{
+					this.OnRecurringIdChanging(value);
+					this.SendPropertyChanging();
+					this._RecurringId = value;
+					this.SendPropertyChanged("RecurringId");
+					this.OnRecurringIdChanged();
+				}
+			}
+		}
+		
+		[Association(Name="Resource_UptimeCalendar", Storage="_Resource", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteOnNull=true, DeleteRule="CASCADE")]
+		public Resource Resource
+		{
+			get
+			{
+				return this._Resource.Entity;
+			}
+			set
+			{
+				Resource previousValue = this._Resource.Entity;
+				if (((previousValue != value) 
+							|| (this._Resource.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Resource.Entity = null;
+						previousValue.UptimeCalendars.Remove(this);
+					}
+					this._Resource.Entity = value;
+					if ((value != null))
+					{
+						value.UptimeCalendars.Add(this);
+						this._ResourceId = value.ResourceId;
+					}
+					else
+					{
+						this._ResourceId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Resource");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[Table(Name="dbo.Client")]
+	public partial class Client : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _ResourceId;
+		
+		private int _CPUSpeed;
+		
+		private int _Memory;
+		
+		private System.DateTime _Login;
+		
+		private string _Status;
+		
+		private string _CalendarSyncStatus;
+		
+		private System.Nullable<System.Guid> _UseCalendarFromResourceId;
+		
+		private System.Nullable<System.Guid> _ClientConfigId;
+		
+		private int _NumberOfCores;
+		
+		private int _NumberOfFreeCores;
+		
+		private int _FreeMemory;
+		
+		private EntitySet<UptimeStatistic> _UptimeStatistics;
+		
+		private EntitySet<Job> _Jobs;
+		
+		private EntityRef<Resource> _Resource;
+		
+		private EntityRef<ClientConfig> _ClientConfig;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnResourceIdChanging(System.Guid value);
+    partial void OnResourceIdChanged();
+    partial void OnCPUSpeedChanging(int value);
+    partial void OnCPUSpeedChanged();
+    partial void OnMemoryChanging(int value);
+    partial void OnMemoryChanged();
+    partial void OnLoginChanging(System.DateTime value);
+    partial void OnLoginChanged();
+    partial void OnStatusChanging(string value);
+    partial void OnStatusChanged();
+    partial void OnCalendarSyncStatusChanging(string value);
+    partial void OnCalendarSyncStatusChanged();
+    partial void OnUseCalendarFromResourceIdChanging(System.Nullable<System.Guid> value);
+    partial void OnUseCalendarFromResourceIdChanged();
+    partial void OnClientConfigIdChanging(System.Nullable<System.Guid> value);
+    partial void OnClientConfigIdChanged();
+    partial void OnNumberOfCoresChanging(int value);
+    partial void OnNumberOfCoresChanged();
+    partial void OnNumberOfFreeCoresChanging(int value);
+    partial void OnNumberOfFreeCoresChanged();
+    partial void OnFreeMemoryChanging(int value);
+    partial void OnFreeMemoryChanged();
+    #endregion
+		
+		public Client()
+		{
+			this._UptimeStatistics = new EntitySet<UptimeStatistic>(new Action<UptimeStatistic>(this.attach_UptimeStatistics), new Action<UptimeStatistic>(this.detach_UptimeStatistics));
+			this._Jobs = new EntitySet<Job>(new Action<Job>(this.attach_Jobs), new Action<Job>(this.detach_Jobs));
+			this._Resource = default(EntityRef<Resource>);
+			this._ClientConfig = default(EntityRef<ClientConfig>);
+			OnCreated();
+		}
+		
+		[Column(Storage="_ResourceId", DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					if (this._Resource.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_CPUSpeed", DbType="Int NOT NULL")]
+		public int CPUSpeed
+		{
+			get
+			{
+				return this._CPUSpeed;
+			}
+			set
+			{
+				if ((this._CPUSpeed != value))
+				{
+					this.OnCPUSpeedChanging(value);
+					this.SendPropertyChanging();
+					this._CPUSpeed = value;
+					this.SendPropertyChanged("CPUSpeed");
+					this.OnCPUSpeedChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Memory", DbType="Int NOT NULL")]
+		public int Memory
+		{
+			get
+			{
+				return this._Memory;
+			}
+			set
+			{
+				if ((this._Memory != value))
+				{
+					this.OnMemoryChanging(value);
+					this.SendPropertyChanging();
+					this._Memory = value;
+					this.SendPropertyChanged("Memory");
+					this.OnMemoryChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Login", DbType="DateTime NOT NULL")]
+		public System.DateTime Login
+		{
+			get
+			{
+				return this._Login;
+			}
+			set
+			{
+				if ((this._Login != value))
+				{
+					this.OnLoginChanging(value);
+					this.SendPropertyChanging();
+					this._Login = value;
+					this.SendPropertyChanged("Login");
+					this.OnLoginChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_Status", DbType="VarChar(MAX)")]
+		public string Status
+		{
+			get
+			{
+				return this._Status;
+			}
+			set
+			{
+				if ((this._Status != value))
+				{
+					this.OnStatusChanging(value);
+					this.SendPropertyChanging();
+					this._Status = value;
+					this.SendPropertyChanged("Status");
+					this.OnStatusChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_CalendarSyncStatus", DbType="VarChar(MAX)")]
+		public string CalendarSyncStatus
+		{
+			get
+			{
+				return this._CalendarSyncStatus;
+			}
+			set
+			{
+				if ((this._CalendarSyncStatus != value))
+				{
+					this.OnCalendarSyncStatusChanging(value);
+					this.SendPropertyChanging();
+					this._CalendarSyncStatus = value;
+					this.SendPropertyChanged("CalendarSyncStatus");
+					this.OnCalendarSyncStatusChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_UseCalendarFromResourceId", DbType="UniqueIdentifier")]
+		public System.Nullable<System.Guid> UseCalendarFromResourceId
+		{
+			get
+			{
+				return this._UseCalendarFromResourceId;
+			}
+			set
+			{
+				if ((this._UseCalendarFromResourceId != value))
+				{
+					this.OnUseCalendarFromResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._UseCalendarFromResourceId = value;
+					this.SendPropertyChanged("UseCalendarFromResourceId");
+					this.OnUseCalendarFromResourceIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_ClientConfigId", DbType="UniqueIdentifier")]
+		public System.Nullable<System.Guid> ClientConfigId
+		{
+			get
+			{
+				return this._ClientConfigId;
+			}
+			set
+			{
+				if ((this._ClientConfigId != value))
+				{
+					if (this._ClientConfig.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnClientConfigIdChanging(value);
+					this.SendPropertyChanging();
+					this._ClientConfigId = value;
+					this.SendPropertyChanged("ClientConfigId");
+					this.OnClientConfigIdChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_NumberOfCores", DbType="Int NOT NULL")]
+		public int NumberOfCores
+		{
+			get
+			{
+				return this._NumberOfCores;
+			}
+			set
+			{
+				if ((this._NumberOfCores != value))
+				{
+					this.OnNumberOfCoresChanging(value);
+					this.SendPropertyChanging();
+					this._NumberOfCores = value;
+					this.SendPropertyChanged("NumberOfCores");
+					this.OnNumberOfCoresChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_NumberOfFreeCores", DbType="Int NOT NULL")]
+		public int NumberOfFreeCores
+		{
+			get
+			{
+				return this._NumberOfFreeCores;
+			}
+			set
+			{
+				if ((this._NumberOfFreeCores != value))
+				{
+					this.OnNumberOfFreeCoresChanging(value);
+					this.SendPropertyChanging();
+					this._NumberOfFreeCores = value;
+					this.SendPropertyChanged("NumberOfFreeCores");
+					this.OnNumberOfFreeCoresChanged();
+				}
+			}
+		}
+		
+		[Column(Storage="_FreeMemory", DbType="Int NOT NULL")]
+		public int FreeMemory
+		{
+			get
+			{
+				return this._FreeMemory;
+			}
+			set
+			{
+				if ((this._FreeMemory != value))
+				{
+					this.OnFreeMemoryChanging(value);
+					this.SendPropertyChanging();
+					this._FreeMemory = value;
+					this.SendPropertyChanged("FreeMemory");
+					this.OnFreeMemoryChanged();
+				}
+			}
+		}
+		
+		[Association(Name="Client_UptimeStatistic", Storage="_UptimeStatistics", ThisKey="ResourceId", OtherKey="ResourceId")]
+		public EntitySet<UptimeStatistic> UptimeStatistics
+		{
+			get
+			{
+				return this._UptimeStatistics;
+			}
+			set
+			{
+				this._UptimeStatistics.Assign(value);
+			}
+		}
+		
+		[Association(Name="Client_Job", Storage="_Jobs", ThisKey="ResourceId", OtherKey="ResourceId")]
+		public EntitySet<Job> Jobs
+		{
+			get
+			{
+				return this._Jobs;
+			}
+			set
+			{
+				this._Jobs.Assign(value);
+			}
+		}
+		
+		[Association(Name="Resource_Client", Storage="_Resource", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteOnNull=true, DeleteRule="CASCADE")]
+		public Resource Resource
+		{
+			get
+			{
+				return this._Resource.Entity;
+			}
+			set
+			{
+				Resource previousValue = this._Resource.Entity;
+				if (((previousValue != value) 
+							|| (this._Resource.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Resource.Entity = null;
+						previousValue.Client = null;
+					}
+					this._Resource.Entity = value;
+					if ((value != null))
+					{
+						value.Client = this;
+						this._ResourceId = value.ResourceId;
+					}
+					else
+					{
+						this._ResourceId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Resource");
+				}
+			}
+		}
+		
+		[Association(Name="ClientConfig_Client", Storage="_ClientConfig", ThisKey="ClientConfigId", OtherKey="ClientConfigId", IsForeignKey=true, DeleteRule="SET NULL")]
+		public ClientConfig ClientConfig
+		{
+			get
+			{
+				return this._ClientConfig.Entity;
+			}
+			set
+			{
+				ClientConfig previousValue = this._ClientConfig.Entity;
+				if (((previousValue != value) 
+							|| (this._ClientConfig.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._ClientConfig.Entity = null;
+						previousValue.Clients.Remove(this);
+					}
+					this._ClientConfig.Entity = value;
+					if ((value != null))
+					{
+						value.Clients.Add(this);
+						this._ClientConfigId = value.ClientConfigId;
+					}
+					else
+					{
+						this._ClientConfigId = default(Nullable<System.Guid>);
+					}
+					this.SendPropertyChanged("ClientConfig");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_UptimeStatistics(UptimeStatistic entity)
+		{
+			this.SendPropertyChanging();
+			entity.Client = this;
+		}
+		
+		private void detach_UptimeStatistics(UptimeStatistic entity)
+		{
+			this.SendPropertyChanging();
+			entity.Client = null;
+		}
+		
+		private void attach_Jobs(Job entity)
+		{
+			this.SendPropertyChanging();
+			entity.Client = this;
+		}
+		
+		private void detach_Jobs(Job entity)
+		{
+			this.SendPropertyChanging();
+			entity.Client = null;
+		}
+	}
+}
+#pragma warning restore 1591
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HiveDataContext.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HiveDataContext.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HiveDataContext.cs	(revision 4340)
@@ -0,0 +1,2803 @@
+﻿#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess
+{
+	using System.Data.Linq;
+	using System.Data.Linq.Mapping;
+	using System.Data;
+	using System.Collections.Generic;
+	using System.Reflection;
+	using System.Linq;
+	using System.Linq.Expressions;
+	using System.ComponentModel;
+	using System;
+	
+	
+	[global::System.Data.Linq.Mapping.DatabaseAttribute(Name="HeuristicLab.Hive")]
+	public partial class HiveDataContext : System.Data.Linq.DataContext
+	{
+		
+		private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();
+		
+    #region Extensibility Method Definitions
+    partial void OnCreated();
+    partial void InsertAssignedResource(AssignedResource instance);
+    partial void UpdateAssignedResource(AssignedResource instance);
+    partial void DeleteAssignedResource(AssignedResource instance);
+    partial void InsertUptimeStatistic(UptimeStatistic instance);
+    partial void UpdateUptimeStatistic(UptimeStatistic instance);
+    partial void DeleteUptimeStatistic(UptimeStatistic instance);
+    partial void InsertSlaveConfig(SlaveConfig instance);
+    partial void UpdateSlaveConfig(SlaveConfig instance);
+    partial void DeleteSlaveConfig(SlaveConfig instance);
+    partial void InsertSlaveGroup_Resource(SlaveGroup_Resource instance);
+    partial void UpdateSlaveGroup_Resource(SlaveGroup_Resource instance);
+    partial void DeleteSlaveGroup_Resource(SlaveGroup_Resource instance);
+    partial void InsertPluginInfo(PluginInfo instance);
+    partial void UpdatePluginInfo(PluginInfo instance);
+    partial void DeletePluginInfo(PluginInfo instance);
+    partial void InsertProject(Project instance);
+    partial void UpdateProject(Project instance);
+    partial void DeleteProject(Project instance);
+    partial void InsertRequiredPlugin(RequiredPlugin instance);
+    partial void UpdateRequiredPlugin(RequiredPlugin instance);
+    partial void DeleteRequiredPlugin(RequiredPlugin instance);
+    partial void InsertResource(Resource instance);
+    partial void UpdateResource(Resource instance);
+    partial void DeleteResource(Resource instance);
+    partial void InsertJob(Job instance);
+    partial void UpdateJob(Job instance);
+    partial void DeleteJob(Job instance);
+    partial void InsertUptimeCalendar(UptimeCalendar instance);
+    partial void UpdateUptimeCalendar(UptimeCalendar instance);
+    partial void DeleteUptimeCalendar(UptimeCalendar instance);
+    #endregion
+		
+		public HiveDataContext(string connection) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public HiveDataContext(System.Data.IDbConnection connection) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public HiveDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public HiveDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
+				base(connection, mappingSource)
+		{
+			OnCreated();
+		}
+		
+		public System.Data.Linq.Table<AssignedResource> AssignedResources
+		{
+			get
+			{
+				return this.GetTable<AssignedResource>();
+			}
+		}
+		
+		public System.Data.Linq.Table<UptimeStatistic> UptimeStatistics
+		{
+			get
+			{
+				return this.GetTable<UptimeStatistic>();
+			}
+		}
+		
+		public System.Data.Linq.Table<SlaveConfig> SlaveConfigs
+		{
+			get
+			{
+				return this.GetTable<SlaveConfig>();
+			}
+		}
+		
+		public System.Data.Linq.Table<SlaveGroup_Resource> SlaveGroup_Resources
+		{
+			get
+			{
+				return this.GetTable<SlaveGroup_Resource>();
+			}
+		}
+		
+		public System.Data.Linq.Table<PluginInfo> PluginInfos
+		{
+			get
+			{
+				return this.GetTable<PluginInfo>();
+			}
+		}
+		
+		public System.Data.Linq.Table<Project> Projects
+		{
+			get
+			{
+				return this.GetTable<Project>();
+			}
+		}
+		
+		public System.Data.Linq.Table<RequiredPlugin> RequiredPlugins
+		{
+			get
+			{
+				return this.GetTable<RequiredPlugin>();
+			}
+		}
+		
+		public System.Data.Linq.Table<Resource> Resources
+		{
+			get
+			{
+				return this.GetTable<Resource>();
+			}
+		}
+		
+		public System.Data.Linq.Table<Job> Jobs
+		{
+			get
+			{
+				return this.GetTable<Job>();
+			}
+		}
+		
+		public System.Data.Linq.Table<UptimeCalendar> UptimeCalendars
+		{
+			get
+			{
+				return this.GetTable<UptimeCalendar>();
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.AssignedResources")]
+	public partial class AssignedResource : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _ResourceId;
+		
+		private System.Guid _JobId;
+		
+		private System.Guid _AssignedRessourcesId;
+		
+		private EntityRef<Resource> _Resource;
+		
+		private EntityRef<Job> _Job;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnResourceIdChanging(System.Guid value);
+    partial void OnResourceIdChanged();
+    partial void OnJobIdChanging(System.Guid value);
+    partial void OnJobIdChanged();
+    partial void OnAssignedRessourcesIdChanging(System.Guid value);
+    partial void OnAssignedRessourcesIdChanged();
+    #endregion
+		
+		public AssignedResource()
+		{
+			this._Resource = default(EntityRef<Resource>);
+			this._Job = default(EntityRef<Job>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResourceId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					if (this._Resource.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_JobId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid JobId
+		{
+			get
+			{
+				return this._JobId;
+			}
+			set
+			{
+				if ((this._JobId != value))
+				{
+					if (this._Job.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnJobIdChanging(value);
+					this.SendPropertyChanging();
+					this._JobId = value;
+					this.SendPropertyChanged("JobId");
+					this.OnJobIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_AssignedRessourcesId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid AssignedRessourcesId
+		{
+			get
+			{
+				return this._AssignedRessourcesId;
+			}
+			set
+			{
+				if ((this._AssignedRessourcesId != value))
+				{
+					this.OnAssignedRessourcesIdChanging(value);
+					this.SendPropertyChanging();
+					this._AssignedRessourcesId = value;
+					this.SendPropertyChanged("AssignedRessourcesId");
+					this.OnAssignedRessourcesIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Resource_AssignedResource", Storage="_Resource", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteRule="CASCADE")]
+		public Resource Resource
+		{
+			get
+			{
+				return this._Resource.Entity;
+			}
+			set
+			{
+				Resource previousValue = this._Resource.Entity;
+				if (((previousValue != value) 
+							|| (this._Resource.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Resource.Entity = null;
+						previousValue.AssignedResources.Remove(this);
+					}
+					this._Resource.Entity = value;
+					if ((value != null))
+					{
+						value.AssignedResources.Add(this);
+						this._ResourceId = value.ResourceId;
+					}
+					else
+					{
+						this._ResourceId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Resource");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Job_AssignedResource", Storage="_Job", ThisKey="JobId", OtherKey="JobId", IsForeignKey=true, DeleteRule="CASCADE")]
+		public Job Job
+		{
+			get
+			{
+				return this._Job.Entity;
+			}
+			set
+			{
+				Job previousValue = this._Job.Entity;
+				if (((previousValue != value) 
+							|| (this._Job.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Job.Entity = null;
+						previousValue.AssignedResources.Remove(this);
+					}
+					this._Job.Entity = value;
+					if ((value != null))
+					{
+						value.AssignedResources.Add(this);
+						this._JobId = value.JobId;
+					}
+					else
+					{
+						this._JobId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Job");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.UptimeStatistics")]
+	public partial class UptimeStatistic : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _UptimeStatisticsId;
+		
+		private System.DateTime _Login;
+		
+		private System.DateTime _Logout;
+		
+		private System.Guid _ResourceId;
+		
+		private EntityRef<Slave> _Slave;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnUptimeStatisticsIdChanging(System.Guid value);
+    partial void OnUptimeStatisticsIdChanged();
+    partial void OnLoginChanging(System.DateTime value);
+    partial void OnLoginChanged();
+    partial void OnLogoutChanging(System.DateTime value);
+    partial void OnLogoutChanged();
+    partial void OnResourceIdChanging(System.Guid value);
+    partial void OnResourceIdChanged();
+    #endregion
+		
+		public UptimeStatistic()
+		{
+			this._Slave = default(EntityRef<Slave>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UptimeStatisticsId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid UptimeStatisticsId
+		{
+			get
+			{
+				return this._UptimeStatisticsId;
+			}
+			set
+			{
+				if ((this._UptimeStatisticsId != value))
+				{
+					this.OnUptimeStatisticsIdChanging(value);
+					this.SendPropertyChanging();
+					this._UptimeStatisticsId = value;
+					this.SendPropertyChanged("UptimeStatisticsId");
+					this.OnUptimeStatisticsIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Login", DbType="DateTime")]
+		public System.DateTime Login
+		{
+			get
+			{
+				return this._Login;
+			}
+			set
+			{
+				if ((this._Login != value))
+				{
+					this.OnLoginChanging(value);
+					this.SendPropertyChanging();
+					this._Login = value;
+					this.SendPropertyChanged("Login");
+					this.OnLoginChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Logout", DbType="DateTime")]
+		public System.DateTime Logout
+		{
+			get
+			{
+				return this._Logout;
+			}
+			set
+			{
+				if ((this._Logout != value))
+				{
+					this.OnLogoutChanging(value);
+					this.SendPropertyChanging();
+					this._Logout = value;
+					this.SendPropertyChanged("Logout");
+					this.OnLogoutChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResourceId", DbType="UniqueIdentifier")]
+		public System.Guid ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					if (this._Slave.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Slave_UptimeStatistic", Storage="_Slave", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteRule="SET NULL")]
+		public Slave Slave
+		{
+			get
+			{
+				return this._Slave.Entity;
+			}
+			set
+			{
+				Slave previousValue = this._Slave.Entity;
+				if (((previousValue != value) 
+							|| (this._Slave.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Slave.Entity = null;
+						previousValue.UptimeStatistics.Remove(this);
+					}
+					this._Slave.Entity = value;
+					if ((value != null))
+					{
+						value.UptimeStatistics.Add(this);
+						this._ResourceId = value.ResourceId;
+					}
+					else
+					{
+						this._ResourceId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Slave");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.SlaveConfig")]
+	public partial class SlaveConfig : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _SlaveConfigId;
+		
+		private System.Xml.Linq.XElement _UpDownTimeCalendar;
+		
+		private System.Nullable<int> _HeartBeatIntervall;
+		
+		private EntitySet<Slave> _Slaves;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnSlaveConfigIdChanging(System.Guid value);
+    partial void OnSlaveConfigIdChanged();
+    partial void OnUpDownTimeCalendarChanging(System.Xml.Linq.XElement value);
+    partial void OnUpDownTimeCalendarChanged();
+    partial void OnHeartBeatIntervallChanging(System.Nullable<int> value);
+    partial void OnHeartBeatIntervallChanged();
+    #endregion
+		
+		public SlaveConfig()
+		{
+			this._Slaves = new EntitySet<Slave>(new Action<Slave>(this.attach_Slaves), new Action<Slave>(this.detach_Slaves));
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_SlaveConfigId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid SlaveConfigId
+		{
+			get
+			{
+				return this._SlaveConfigId;
+			}
+			set
+			{
+				if ((this._SlaveConfigId != value))
+				{
+					this.OnSlaveConfigIdChanging(value);
+					this.SendPropertyChanging();
+					this._SlaveConfigId = value;
+					this.SendPropertyChanged("SlaveConfigId");
+					this.OnSlaveConfigIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UpDownTimeCalendar", DbType="Xml", UpdateCheck=UpdateCheck.Never)]
+		public System.Xml.Linq.XElement UpDownTimeCalendar
+		{
+			get
+			{
+				return this._UpDownTimeCalendar;
+			}
+			set
+			{
+				if ((this._UpDownTimeCalendar != value))
+				{
+					this.OnUpDownTimeCalendarChanging(value);
+					this.SendPropertyChanging();
+					this._UpDownTimeCalendar = value;
+					this.SendPropertyChanged("UpDownTimeCalendar");
+					this.OnUpDownTimeCalendarChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_HeartBeatIntervall", DbType="Int")]
+		public System.Nullable<int> HeartBeatIntervall
+		{
+			get
+			{
+				return this._HeartBeatIntervall;
+			}
+			set
+			{
+				if ((this._HeartBeatIntervall != value))
+				{
+					this.OnHeartBeatIntervallChanging(value);
+					this.SendPropertyChanging();
+					this._HeartBeatIntervall = value;
+					this.SendPropertyChanged("HeartBeatIntervall");
+					this.OnHeartBeatIntervallChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="SlaveConfig_Slave", Storage="_Slaves", ThisKey="SlaveConfigId", OtherKey="SlaveConfigId")]
+		public EntitySet<Slave> Slaves
+		{
+			get
+			{
+				return this._Slaves;
+			}
+			set
+			{
+				this._Slaves.Assign(value);
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_Slaves(Slave entity)
+		{
+			this.SendPropertyChanging();
+			entity.SlaveConfig = this;
+		}
+		
+		private void detach_Slaves(Slave entity)
+		{
+			this.SendPropertyChanging();
+			entity.SlaveConfig = null;
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.SlaveGroup_Resource")]
+	public partial class SlaveGroup_Resource : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _SlaveGroup_RessourceId;
+		
+		private System.Guid _SlaveGroupId;
+		
+		private System.Guid _ResourceId;
+		
+		private EntityRef<SlaveGroup> _SlaveGroup;
+		
+		private EntityRef<Resource> _Resource;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnSlaveGroup_RessourceIdChanging(System.Guid value);
+    partial void OnSlaveGroup_RessourceIdChanged();
+    partial void OnSlaveGroupIdChanging(System.Guid value);
+    partial void OnSlaveGroupIdChanged();
+    partial void OnResourceIdChanging(System.Guid value);
+    partial void OnResourceIdChanged();
+    #endregion
+		
+		public SlaveGroup_Resource()
+		{
+			this._SlaveGroup = default(EntityRef<SlaveGroup>);
+			this._Resource = default(EntityRef<Resource>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_SlaveGroup_RessourceId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid SlaveGroup_RessourceId
+		{
+			get
+			{
+				return this._SlaveGroup_RessourceId;
+			}
+			set
+			{
+				if ((this._SlaveGroup_RessourceId != value))
+				{
+					this.OnSlaveGroup_RessourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._SlaveGroup_RessourceId = value;
+					this.SendPropertyChanged("SlaveGroup_RessourceId");
+					this.OnSlaveGroup_RessourceIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_SlaveGroupId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid SlaveGroupId
+		{
+			get
+			{
+				return this._SlaveGroupId;
+			}
+			set
+			{
+				if ((this._SlaveGroupId != value))
+				{
+					if (this._SlaveGroup.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnSlaveGroupIdChanging(value);
+					this.SendPropertyChanging();
+					this._SlaveGroupId = value;
+					this.SendPropertyChanged("SlaveGroupId");
+					this.OnSlaveGroupIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResourceId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					if (this._Resource.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="SlaveGroup_SlaveGroup_Resource", Storage="_SlaveGroup", ThisKey="SlaveGroupId", OtherKey="ResourceId", IsForeignKey=true)]
+		public SlaveGroup SlaveGroup
+		{
+			get
+			{
+				return this._SlaveGroup.Entity;
+			}
+			set
+			{
+				SlaveGroup previousValue = this._SlaveGroup.Entity;
+				if (((previousValue != value) 
+							|| (this._SlaveGroup.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._SlaveGroup.Entity = null;
+						previousValue.SlaveGroup_Resources_Children.Remove(this);
+					}
+					this._SlaveGroup.Entity = value;
+					if ((value != null))
+					{
+						value.SlaveGroup_Resources_Children.Add(this);
+						this._SlaveGroupId = value.ResourceId;
+					}
+					else
+					{
+						this._SlaveGroupId = default(System.Guid);
+					}
+					this.SendPropertyChanged("SlaveGroup");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Resource_SlaveGroup_Resource", Storage="_Resource", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteRule="CASCADE")]
+		public Resource Resource
+		{
+			get
+			{
+				return this._Resource.Entity;
+			}
+			set
+			{
+				Resource previousValue = this._Resource.Entity;
+				if (((previousValue != value) 
+							|| (this._Resource.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Resource.Entity = null;
+						previousValue.SlaveGroup_Resources_Parents.Remove(this);
+					}
+					this._Resource.Entity = value;
+					if ((value != null))
+					{
+						value.SlaveGroup_Resources_Parents.Add(this);
+						this._ResourceId = value.ResourceId;
+					}
+					else
+					{
+						this._ResourceId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Resource");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.PluginInfo")]
+	public partial class PluginInfo : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _PluginId;
+		
+		private string _Name;
+		
+		private string _Version;
+		
+		private string _BuildDate;
+		
+		private EntitySet<RequiredPlugin> _RequiredPlugins;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnPluginIdChanging(System.Guid value);
+    partial void OnPluginIdChanged();
+    partial void OnNameChanging(string value);
+    partial void OnNameChanged();
+    partial void OnVersionChanging(string value);
+    partial void OnVersionChanged();
+    partial void OnBuildDateChanging(string value);
+    partial void OnBuildDateChanged();
+    #endregion
+		
+		public PluginInfo()
+		{
+			this._RequiredPlugins = new EntitySet<RequiredPlugin>(new Action<RequiredPlugin>(this.attach_RequiredPlugins), new Action<RequiredPlugin>(this.detach_RequiredPlugins));
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_PluginId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid PluginId
+		{
+			get
+			{
+				return this._PluginId;
+			}
+			set
+			{
+				if ((this._PluginId != value))
+				{
+					this.OnPluginIdChanging(value);
+					this.SendPropertyChanging();
+					this._PluginId = value;
+					this.SendPropertyChanged("PluginId");
+					this.OnPluginIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="VarChar(MAX)")]
+		public string Name
+		{
+			get
+			{
+				return this._Name;
+			}
+			set
+			{
+				if ((this._Name != value))
+				{
+					this.OnNameChanging(value);
+					this.SendPropertyChanging();
+					this._Name = value;
+					this.SendPropertyChanged("Name");
+					this.OnNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Version", DbType="VarChar(MAX)")]
+		public string Version
+		{
+			get
+			{
+				return this._Version;
+			}
+			set
+			{
+				if ((this._Version != value))
+				{
+					this.OnVersionChanging(value);
+					this.SendPropertyChanging();
+					this._Version = value;
+					this.SendPropertyChanged("Version");
+					this.OnVersionChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_BuildDate", DbType="VarChar(20)")]
+		public string BuildDate
+		{
+			get
+			{
+				return this._BuildDate;
+			}
+			set
+			{
+				if ((this._BuildDate != value))
+				{
+					this.OnBuildDateChanging(value);
+					this.SendPropertyChanging();
+					this._BuildDate = value;
+					this.SendPropertyChanged("BuildDate");
+					this.OnBuildDateChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="PluginInfo_RequiredPlugin", Storage="_RequiredPlugins", ThisKey="PluginId", OtherKey="PluginId")]
+		public EntitySet<RequiredPlugin> RequiredPlugins
+		{
+			get
+			{
+				return this._RequiredPlugins;
+			}
+			set
+			{
+				this._RequiredPlugins.Assign(value);
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_RequiredPlugins(RequiredPlugin entity)
+		{
+			this.SendPropertyChanging();
+			entity.PluginInfo = this;
+		}
+		
+		private void detach_RequiredPlugins(RequiredPlugin entity)
+		{
+			this.SendPropertyChanging();
+			entity.PluginInfo = null;
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Project")]
+	public partial class Project : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _ProjectId;
+		
+		private string _Name;
+		
+		private EntitySet<Job> _Jobs;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnProjectIdChanging(System.Guid value);
+    partial void OnProjectIdChanged();
+    partial void OnNameChanging(string value);
+    partial void OnNameChanged();
+    #endregion
+		
+		public Project()
+		{
+			this._Jobs = new EntitySet<Job>(new Action<Job>(this.attach_Jobs), new Action<Job>(this.detach_Jobs));
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ProjectId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid ProjectId
+		{
+			get
+			{
+				return this._ProjectId;
+			}
+			set
+			{
+				if ((this._ProjectId != value))
+				{
+					this.OnProjectIdChanging(value);
+					this.SendPropertyChanging();
+					this._ProjectId = value;
+					this.SendPropertyChanged("ProjectId");
+					this.OnProjectIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="VarChar(MAX)")]
+		public string Name
+		{
+			get
+			{
+				return this._Name;
+			}
+			set
+			{
+				if ((this._Name != value))
+				{
+					this.OnNameChanging(value);
+					this.SendPropertyChanging();
+					this._Name = value;
+					this.SendPropertyChanged("Name");
+					this.OnNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Project_Job", Storage="_Jobs", ThisKey="ProjectId", OtherKey="ProjectId")]
+		public EntitySet<Job> Jobs
+		{
+			get
+			{
+				return this._Jobs;
+			}
+			set
+			{
+				this._Jobs.Assign(value);
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_Jobs(Job entity)
+		{
+			this.SendPropertyChanging();
+			entity.Project = this;
+		}
+		
+		private void detach_Jobs(Job entity)
+		{
+			this.SendPropertyChanging();
+			entity.Project = null;
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.RequiredPlugins")]
+	public partial class RequiredPlugin : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _RequiredPluginId;
+		
+		private System.Guid _JobId;
+		
+		private System.Guid _PluginId;
+		
+		private EntityRef<PluginInfo> _PluginInfo;
+		
+		private EntityRef<Job> _Job;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnRequiredPluginIdChanging(System.Guid value);
+    partial void OnRequiredPluginIdChanged();
+    partial void OnJobIdChanging(System.Guid value);
+    partial void OnJobIdChanged();
+    partial void OnPluginIdChanging(System.Guid value);
+    partial void OnPluginIdChanged();
+    #endregion
+		
+		public RequiredPlugin()
+		{
+			this._PluginInfo = default(EntityRef<PluginInfo>);
+			this._Job = default(EntityRef<Job>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_RequiredPluginId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
+		public System.Guid RequiredPluginId
+		{
+			get
+			{
+				return this._RequiredPluginId;
+			}
+			set
+			{
+				if ((this._RequiredPluginId != value))
+				{
+					this.OnRequiredPluginIdChanging(value);
+					this.SendPropertyChanging();
+					this._RequiredPluginId = value;
+					this.SendPropertyChanged("RequiredPluginId");
+					this.OnRequiredPluginIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_JobId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid JobId
+		{
+			get
+			{
+				return this._JobId;
+			}
+			set
+			{
+				if ((this._JobId != value))
+				{
+					if (this._Job.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnJobIdChanging(value);
+					this.SendPropertyChanging();
+					this._JobId = value;
+					this.SendPropertyChanged("JobId");
+					this.OnJobIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_PluginId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid PluginId
+		{
+			get
+			{
+				return this._PluginId;
+			}
+			set
+			{
+				if ((this._PluginId != value))
+				{
+					if (this._PluginInfo.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnPluginIdChanging(value);
+					this.SendPropertyChanging();
+					this._PluginId = value;
+					this.SendPropertyChanged("PluginId");
+					this.OnPluginIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="PluginInfo_RequiredPlugin", Storage="_PluginInfo", ThisKey="PluginId", OtherKey="PluginId", IsForeignKey=true, DeleteRule="CASCADE")]
+		public PluginInfo PluginInfo
+		{
+			get
+			{
+				return this._PluginInfo.Entity;
+			}
+			set
+			{
+				PluginInfo previousValue = this._PluginInfo.Entity;
+				if (((previousValue != value) 
+							|| (this._PluginInfo.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._PluginInfo.Entity = null;
+						previousValue.RequiredPlugins.Remove(this);
+					}
+					this._PluginInfo.Entity = value;
+					if ((value != null))
+					{
+						value.RequiredPlugins.Add(this);
+						this._PluginId = value.PluginId;
+					}
+					else
+					{
+						this._PluginId = default(System.Guid);
+					}
+					this.SendPropertyChanged("PluginInfo");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Job_RequiredPlugin", Storage="_Job", ThisKey="JobId", OtherKey="JobId", IsForeignKey=true)]
+		public Job Job
+		{
+			get
+			{
+				return this._Job.Entity;
+			}
+			set
+			{
+				Job previousValue = this._Job.Entity;
+				if (((previousValue != value) 
+							|| (this._Job.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Job.Entity = null;
+						previousValue.RequiredPlugins.Remove(this);
+					}
+					this._Job.Entity = value;
+					if ((value != null))
+					{
+						value.RequiredPlugins.Add(this);
+						this._JobId = value.JobId;
+					}
+					else
+					{
+						this._JobId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Job");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Resource")]
+	[global::System.Data.Linq.Mapping.InheritanceMappingAttribute(Code="RESOURCE", Type=typeof(Resource))]
+	[global::System.Data.Linq.Mapping.InheritanceMappingAttribute(Code="Slave", Type=typeof(Slave), IsDefault=true)]
+	[global::System.Data.Linq.Mapping.InheritanceMappingAttribute(Code="GROUP", Type=typeof(SlaveGroup))]
+	public partial class Resource : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		protected System.Guid _ResourceId;
+		
+		private string _Name;
+		
+		private string _ResourceType;
+		
+		private EntitySet<AssignedResource> _AssignedResources;
+		
+		private EntitySet<SlaveGroup_Resource> _SlaveGroup_Resources_Parents;
+		
+		private EntitySet<UptimeCalendar> _UptimeCalendars;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnResourceIdChanging(System.Guid value);
+    partial void OnResourceIdChanged();
+    partial void OnNameChanging(string value);
+    partial void OnNameChanged();
+    partial void OnResourceTypeChanging(string value);
+    partial void OnResourceTypeChanged();
+    #endregion
+		
+		public Resource()
+		{
+			this._AssignedResources = new EntitySet<AssignedResource>(new Action<AssignedResource>(this.attach_AssignedResources), new Action<AssignedResource>(this.detach_AssignedResources));
+			this._SlaveGroup_Resources_Parents = new EntitySet<SlaveGroup_Resource>(new Action<SlaveGroup_Resource>(this.attach_SlaveGroup_Resources_Parents), new Action<SlaveGroup_Resource>(this.detach_SlaveGroup_Resources_Parents));
+			this._UptimeCalendars = new EntitySet<UptimeCalendar>(new Action<UptimeCalendar>(this.attach_UptimeCalendars), new Action<UptimeCalendar>(this.detach_UptimeCalendars));
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResourceId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true)]
+		public System.Guid ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Name", DbType="VarChar(MAX)")]
+		public string Name
+		{
+			get
+			{
+				return this._Name;
+			}
+			set
+			{
+				if ((this._Name != value))
+				{
+					this.OnNameChanging(value);
+					this.SendPropertyChanging();
+					this._Name = value;
+					this.SendPropertyChanged("Name");
+					this.OnNameChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResourceType", IsDiscriminator=true)]
+		public string ResourceType
+		{
+			get
+			{
+				return this._ResourceType;
+			}
+			set
+			{
+				if ((this._ResourceType != value))
+				{
+					this.OnResourceTypeChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceType = value;
+					this.SendPropertyChanged("ResourceType");
+					this.OnResourceTypeChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Resource_AssignedResource", Storage="_AssignedResources", ThisKey="ResourceId", OtherKey="ResourceId")]
+		public EntitySet<AssignedResource> AssignedResources
+		{
+			get
+			{
+				return this._AssignedResources;
+			}
+			set
+			{
+				this._AssignedResources.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Resource_SlaveGroup_Resource", Storage="_SlaveGroup_Resources_Parents", ThisKey="ResourceId", OtherKey="ResourceId")]
+		public EntitySet<SlaveGroup_Resource> SlaveGroup_Resources_Parents
+		{
+			get
+			{
+				return this._SlaveGroup_Resources_Parents;
+			}
+			set
+			{
+				this._SlaveGroup_Resources_Parents.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Resource_UptimeCalendar", Storage="_UptimeCalendars", ThisKey="ResourceId", OtherKey="ResourceId")]
+		public EntitySet<UptimeCalendar> UptimeCalendars
+		{
+			get
+			{
+				return this._UptimeCalendars;
+			}
+			set
+			{
+				this._UptimeCalendars.Assign(value);
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_AssignedResources(AssignedResource entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = this;
+		}
+		
+		private void detach_AssignedResources(AssignedResource entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = null;
+		}
+		
+		private void attach_SlaveGroup_Resources_Parents(SlaveGroup_Resource entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = this;
+		}
+		
+		private void detach_SlaveGroup_Resources_Parents(SlaveGroup_Resource entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = null;
+		}
+		
+		private void attach_UptimeCalendars(UptimeCalendar entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = this;
+		}
+		
+		private void detach_UptimeCalendars(UptimeCalendar entity)
+		{
+			this.SendPropertyChanging();
+			entity.Resource = null;
+		}
+	}
+	
+	public partial class Slave : Resource
+	{
+		
+		private System.Nullable<int> _CPUSpeed;
+		
+		private System.Nullable<int> _Memory;
+		
+		private System.Nullable<System.DateTime> _Login;
+		
+		private string _Status;
+		
+		private string _CalendarSyncStatus;
+		
+		private System.Nullable<System.Guid> _UseCalendarFromResourceId;
+		
+		private System.Nullable<System.Guid> _SlaveConfigId;
+		
+		private System.Nullable<int> _NumberOfCores;
+		
+		private System.Nullable<int> _NumberOfFreeCores;
+		
+		private System.Nullable<int> _FreeMemory;
+		
+		private bool _IsAllowedToCalculate;
+		
+		private EntitySet<UptimeStatistic> _UptimeStatistics;
+		
+		private EntitySet<Job> _Jobs;
+		
+		private EntityRef<SlaveConfig> _SlaveConfig;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnCPUSpeedChanging(System.Nullable<int> value);
+    partial void OnCPUSpeedChanged();
+    partial void OnMemoryChanging(System.Nullable<int> value);
+    partial void OnMemoryChanged();
+    partial void OnLoginChanging(System.Nullable<System.DateTime> value);
+    partial void OnLoginChanged();
+    partial void OnStatusChanging(string value);
+    partial void OnStatusChanged();
+    partial void OnCalendarSyncStatusChanging(string value);
+    partial void OnCalendarSyncStatusChanged();
+    partial void OnUseCalendarFromResourceIdChanging(System.Nullable<System.Guid> value);
+    partial void OnUseCalendarFromResourceIdChanged();
+    partial void OnSlaveConfigIdChanging(System.Nullable<System.Guid> value);
+    partial void OnSlaveConfigIdChanged();
+    partial void OnNumberOfCoresChanging(System.Nullable<int> value);
+    partial void OnNumberOfCoresChanged();
+    partial void OnNumberOfFreeCoresChanging(System.Nullable<int> value);
+    partial void OnNumberOfFreeCoresChanged();
+    partial void OnFreeMemoryChanging(System.Nullable<int> value);
+    partial void OnFreeMemoryChanged();
+    partial void OnIsAllowedToCalculateChanging(bool value);
+    partial void OnIsAllowedToCalculateChanged();
+    #endregion
+		
+		public Slave()
+		{
+			this._UptimeStatistics = new EntitySet<UptimeStatistic>(new Action<UptimeStatistic>(this.attach_UptimeStatistics), new Action<UptimeStatistic>(this.detach_UptimeStatistics));
+			this._Jobs = new EntitySet<Job>(new Action<Job>(this.attach_Jobs), new Action<Job>(this.detach_Jobs));
+			this._SlaveConfig = default(EntityRef<SlaveConfig>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_CPUSpeed", DbType="Int")]
+		public System.Nullable<int> CPUSpeed
+		{
+			get
+			{
+				return this._CPUSpeed;
+			}
+			set
+			{
+				if ((this._CPUSpeed != value))
+				{
+					this.OnCPUSpeedChanging(value);
+					this.SendPropertyChanging();
+					this._CPUSpeed = value;
+					this.SendPropertyChanged("CPUSpeed");
+					this.OnCPUSpeedChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Memory", DbType="Int")]
+		public System.Nullable<int> Memory
+		{
+			get
+			{
+				return this._Memory;
+			}
+			set
+			{
+				if ((this._Memory != value))
+				{
+					this.OnMemoryChanging(value);
+					this.SendPropertyChanging();
+					this._Memory = value;
+					this.SendPropertyChanged("Memory");
+					this.OnMemoryChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Login", DbType="DateTime")]
+		public System.Nullable<System.DateTime> Login
+		{
+			get
+			{
+				return this._Login;
+			}
+			set
+			{
+				if ((this._Login != value))
+				{
+					this.OnLoginChanging(value);
+					this.SendPropertyChanging();
+					this._Login = value;
+					this.SendPropertyChanged("Login");
+					this.OnLoginChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Status", DbType="VarChar(MAX)")]
+		public string Status
+		{
+			get
+			{
+				return this._Status;
+			}
+			set
+			{
+				if ((this._Status != value))
+				{
+					this.OnStatusChanging(value);
+					this.SendPropertyChanging();
+					this._Status = value;
+					this.SendPropertyChanged("Status");
+					this.OnStatusChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_CalendarSyncStatus", DbType="VarChar(MAX)")]
+		public string CalendarSyncStatus
+		{
+			get
+			{
+				return this._CalendarSyncStatus;
+			}
+			set
+			{
+				if ((this._CalendarSyncStatus != value))
+				{
+					this.OnCalendarSyncStatusChanging(value);
+					this.SendPropertyChanging();
+					this._CalendarSyncStatus = value;
+					this.SendPropertyChanged("CalendarSyncStatus");
+					this.OnCalendarSyncStatusChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UseCalendarFromResourceId", DbType="UniqueIdentifier")]
+		public System.Nullable<System.Guid> UseCalendarFromResourceId
+		{
+			get
+			{
+				return this._UseCalendarFromResourceId;
+			}
+			set
+			{
+				if ((this._UseCalendarFromResourceId != value))
+				{
+					this.OnUseCalendarFromResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._UseCalendarFromResourceId = value;
+					this.SendPropertyChanged("UseCalendarFromResourceId");
+					this.OnUseCalendarFromResourceIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_SlaveConfigId", DbType="UniqueIdentifier")]
+		public System.Nullable<System.Guid> SlaveConfigId
+		{
+			get
+			{
+				return this._SlaveConfigId;
+			}
+			set
+			{
+				if ((this._SlaveConfigId != value))
+				{
+					if (this._SlaveConfig.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnSlaveConfigIdChanging(value);
+					this.SendPropertyChanging();
+					this._SlaveConfigId = value;
+					this.SendPropertyChanged("SlaveConfigId");
+					this.OnSlaveConfigIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_NumberOfCores", DbType="Int")]
+		public System.Nullable<int> NumberOfCores
+		{
+			get
+			{
+				return this._NumberOfCores;
+			}
+			set
+			{
+				if ((this._NumberOfCores != value))
+				{
+					this.OnNumberOfCoresChanging(value);
+					this.SendPropertyChanging();
+					this._NumberOfCores = value;
+					this.SendPropertyChanged("NumberOfCores");
+					this.OnNumberOfCoresChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_NumberOfFreeCores", DbType="Int")]
+		public System.Nullable<int> NumberOfFreeCores
+		{
+			get
+			{
+				return this._NumberOfFreeCores;
+			}
+			set
+			{
+				if ((this._NumberOfFreeCores != value))
+				{
+					this.OnNumberOfFreeCoresChanging(value);
+					this.SendPropertyChanging();
+					this._NumberOfFreeCores = value;
+					this.SendPropertyChanged("NumberOfFreeCores");
+					this.OnNumberOfFreeCoresChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_FreeMemory", DbType="Int")]
+		public System.Nullable<int> FreeMemory
+		{
+			get
+			{
+				return this._FreeMemory;
+			}
+			set
+			{
+				if ((this._FreeMemory != value))
+				{
+					this.OnFreeMemoryChanging(value);
+					this.SendPropertyChanging();
+					this._FreeMemory = value;
+					this.SendPropertyChanged("FreeMemory");
+					this.OnFreeMemoryChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_IsAllowedToCalculate", DbType="Bit")]
+		public bool IsAllowedToCalculate
+		{
+			get
+			{
+				return this._IsAllowedToCalculate;
+			}
+			set
+			{
+				if ((this._IsAllowedToCalculate != value))
+				{
+					this.OnIsAllowedToCalculateChanging(value);
+					this.SendPropertyChanging();
+					this._IsAllowedToCalculate = value;
+					this.SendPropertyChanged("IsAllowedToCalculate");
+					this.OnIsAllowedToCalculateChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Slave_UptimeStatistic", Storage="_UptimeStatistics", ThisKey="ResourceId", OtherKey="ResourceId")]
+		public EntitySet<UptimeStatistic> UptimeStatistics
+		{
+			get
+			{
+				return this._UptimeStatistics;
+			}
+			set
+			{
+				this._UptimeStatistics.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Slave_Job", Storage="_Jobs", ThisKey="ResourceId", OtherKey="ResourceId", DeleteRule="SET NULL")]
+		public EntitySet<Job> Jobs
+		{
+			get
+			{
+				return this._Jobs;
+			}
+			set
+			{
+				this._Jobs.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="SlaveConfig_Slave", Storage="_SlaveConfig", ThisKey="SlaveConfigId", OtherKey="SlaveConfigId", IsForeignKey=true, DeleteRule="SET NULL")]
+		public SlaveConfig SlaveConfig
+		{
+			get
+			{
+				return this._SlaveConfig.Entity;
+			}
+			set
+			{
+				SlaveConfig previousValue = this._SlaveConfig.Entity;
+				if (((previousValue != value) 
+							|| (this._SlaveConfig.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._SlaveConfig.Entity = null;
+						previousValue.Slaves.Remove(this);
+					}
+					this._SlaveConfig.Entity = value;
+					if ((value != null))
+					{
+						value.Slaves.Add(this);
+						this._SlaveConfigId = value.SlaveConfigId;
+					}
+					else
+					{
+						this._SlaveConfigId = default(Nullable<System.Guid>);
+					}
+					this.SendPropertyChanged("SlaveConfig");
+				}
+			}
+		}
+		
+		private void attach_UptimeStatistics(UptimeStatistic entity)
+		{
+			this.SendPropertyChanging();
+			entity.Slave = this;
+		}
+		
+		private void detach_UptimeStatistics(UptimeStatistic entity)
+		{
+			this.SendPropertyChanging();
+			entity.Slave = null;
+		}
+		
+		private void attach_Jobs(Job entity)
+		{
+			this.SendPropertyChanging();
+			entity.Slave = this;
+		}
+		
+		private void detach_Jobs(Job entity)
+		{
+			this.SendPropertyChanging();
+			entity.Slave = null;
+		}
+	}
+	
+	public partial class SlaveGroup : Resource
+	{
+		
+		private EntitySet<SlaveGroup_Resource> _SlaveGroup_Resources_Children;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    #endregion
+		
+		public SlaveGroup()
+		{
+			this._SlaveGroup_Resources_Children = new EntitySet<SlaveGroup_Resource>(new Action<SlaveGroup_Resource>(this.attach_SlaveGroup_Resources_Children), new Action<SlaveGroup_Resource>(this.detach_SlaveGroup_Resources_Children));
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="SlaveGroup_SlaveGroup_Resource", Storage="_SlaveGroup_Resources_Children", ThisKey="ResourceId", OtherKey="SlaveGroupId")]
+		public EntitySet<SlaveGroup_Resource> SlaveGroup_Resources_Children
+		{
+			get
+			{
+				return this._SlaveGroup_Resources_Children;
+			}
+			set
+			{
+				this._SlaveGroup_Resources_Children.Assign(value);
+			}
+		}
+		
+		private void attach_SlaveGroup_Resources_Children(SlaveGroup_Resource entity)
+		{
+			this.SendPropertyChanging();
+			entity.SlaveGroup = this;
+		}
+		
+		private void detach_SlaveGroup_Resources_Children(SlaveGroup_Resource entity)
+		{
+			this.SendPropertyChanging();
+			entity.SlaveGroup = null;
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Job")]
+	public partial class Job : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _JobId;
+		
+		private System.Nullable<System.Guid> _ParentJobId;
+		
+		private string _JobState;
+		
+		private System.Nullable<System.Guid> _ResourceId;
+		
+		private System.Nullable<double> _Percentage;
+		
+		private string _Exception;
+		
+		private System.Data.Linq.Link<System.Data.Linq.Binary> _SerializedJob;
+		
+		private System.Nullable<System.DateTime> _DateCreated;
+		
+		private System.Nullable<System.DateTime> _DateCalculated;
+		
+		private System.Nullable<System.DateTime> _DateFinished;
+		
+		private int _Priority;
+		
+		private System.Nullable<System.Guid> _ProjectId;
+		
+		private string _UserId;
+		
+		private int _CoresNeeded;
+		
+		private int _MemoryNeeded;
+		
+		private EntitySet<AssignedResource> _AssignedResources;
+		
+		private EntitySet<RequiredPlugin> _RequiredPlugins;
+		
+		private EntitySet<Job> _Jobs;
+		
+		private EntityRef<Job> _Job1;
+		
+		private EntityRef<Project> _Project;
+		
+		private EntityRef<Slave> _Slave;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnJobIdChanging(System.Guid value);
+    partial void OnJobIdChanged();
+    partial void OnParentJobIdChanging(System.Nullable<System.Guid> value);
+    partial void OnParentJobIdChanged();
+    partial void OnJobStateChanging(string value);
+    partial void OnJobStateChanged();
+    partial void OnResourceIdChanging(System.Nullable<System.Guid> value);
+    partial void OnResourceIdChanged();
+    partial void OnPercentageChanging(System.Nullable<double> value);
+    partial void OnPercentageChanged();
+    partial void OnExceptionChanging(string value);
+    partial void OnExceptionChanged();
+    partial void OnSerializedJobChanging(System.Data.Linq.Binary value);
+    partial void OnSerializedJobChanged();
+    partial void OnDateCreatedChanging(System.Nullable<System.DateTime> value);
+    partial void OnDateCreatedChanged();
+    partial void OnDateCalculatedChanging(System.Nullable<System.DateTime> value);
+    partial void OnDateCalculatedChanged();
+    partial void OnDateFinishedChanging(System.Nullable<System.DateTime> value);
+    partial void OnDateFinishedChanged();
+    partial void OnPriorityChanging(int value);
+    partial void OnPriorityChanged();
+    partial void OnProjectIdChanging(System.Nullable<System.Guid> value);
+    partial void OnProjectIdChanged();
+    partial void OnUserIdChanging(string value);
+    partial void OnUserIdChanged();
+    partial void OnCoresNeededChanging(int value);
+    partial void OnCoresNeededChanged();
+    partial void OnMemoryNeededChanging(int value);
+    partial void OnMemoryNeededChanged();
+    #endregion
+		
+		public Job()
+		{
+			this._AssignedResources = new EntitySet<AssignedResource>(new Action<AssignedResource>(this.attach_AssignedResources), new Action<AssignedResource>(this.detach_AssignedResources));
+			this._RequiredPlugins = new EntitySet<RequiredPlugin>(new Action<RequiredPlugin>(this.attach_RequiredPlugins), new Action<RequiredPlugin>(this.detach_RequiredPlugins));
+			this._Jobs = new EntitySet<Job>(new Action<Job>(this.attach_Jobs), new Action<Job>(this.detach_Jobs));
+			this._Job1 = default(EntityRef<Job>);
+			this._Project = default(EntityRef<Project>);
+			this._Slave = default(EntityRef<Slave>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_JobId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid JobId
+		{
+			get
+			{
+				return this._JobId;
+			}
+			set
+			{
+				if ((this._JobId != value))
+				{
+					this.OnJobIdChanging(value);
+					this.SendPropertyChanging();
+					this._JobId = value;
+					this.SendPropertyChanged("JobId");
+					this.OnJobIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ParentJobId", DbType="UniqueIdentifier")]
+		public System.Nullable<System.Guid> ParentJobId
+		{
+			get
+			{
+				return this._ParentJobId;
+			}
+			set
+			{
+				if ((this._ParentJobId != value))
+				{
+					if (this._Job1.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnParentJobIdChanging(value);
+					this.SendPropertyChanging();
+					this._ParentJobId = value;
+					this.SendPropertyChanged("ParentJobId");
+					this.OnParentJobIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_JobState", DbType="VarChar(MAX)")]
+		public string JobState
+		{
+			get
+			{
+				return this._JobState;
+			}
+			set
+			{
+				if ((this._JobState != value))
+				{
+					this.OnJobStateChanging(value);
+					this.SendPropertyChanging();
+					this._JobState = value;
+					this.SendPropertyChanged("JobState");
+					this.OnJobStateChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResourceId", DbType="UniqueIdentifier")]
+		public System.Nullable<System.Guid> ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					if (this._Slave.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Percentage", DbType="Float")]
+		public System.Nullable<double> Percentage
+		{
+			get
+			{
+				return this._Percentage;
+			}
+			set
+			{
+				if ((this._Percentage != value))
+				{
+					this.OnPercentageChanging(value);
+					this.SendPropertyChanging();
+					this._Percentage = value;
+					this.SendPropertyChanged("Percentage");
+					this.OnPercentageChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Exception", DbType="VarChar(MAX)")]
+		public string Exception
+		{
+			get
+			{
+				return this._Exception;
+			}
+			set
+			{
+				if ((this._Exception != value))
+				{
+					this.OnExceptionChanging(value);
+					this.SendPropertyChanging();
+					this._Exception = value;
+					this.SendPropertyChanged("Exception");
+					this.OnExceptionChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_SerializedJob", DbType="VarBinary(MAX)", UpdateCheck=UpdateCheck.Never)]
+		public System.Data.Linq.Binary SerializedJob
+		{
+			get
+			{
+				return this._SerializedJob.Value;
+			}
+			set
+			{
+				if ((this._SerializedJob.Value != value))
+				{
+					this.OnSerializedJobChanging(value);
+					this.SendPropertyChanging();
+					this._SerializedJob.Value = value;
+					this.SendPropertyChanged("SerializedJob");
+					this.OnSerializedJobChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DateCreated", DbType="DateTime")]
+		public System.Nullable<System.DateTime> DateCreated
+		{
+			get
+			{
+				return this._DateCreated;
+			}
+			set
+			{
+				if ((this._DateCreated != value))
+				{
+					this.OnDateCreatedChanging(value);
+					this.SendPropertyChanging();
+					this._DateCreated = value;
+					this.SendPropertyChanged("DateCreated");
+					this.OnDateCreatedChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DateCalculated", DbType="DateTime")]
+		public System.Nullable<System.DateTime> DateCalculated
+		{
+			get
+			{
+				return this._DateCalculated;
+			}
+			set
+			{
+				if ((this._DateCalculated != value))
+				{
+					this.OnDateCalculatedChanging(value);
+					this.SendPropertyChanging();
+					this._DateCalculated = value;
+					this.SendPropertyChanged("DateCalculated");
+					this.OnDateCalculatedChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_DateFinished", DbType="DateTime")]
+		public System.Nullable<System.DateTime> DateFinished
+		{
+			get
+			{
+				return this._DateFinished;
+			}
+			set
+			{
+				if ((this._DateFinished != value))
+				{
+					this.OnDateFinishedChanging(value);
+					this.SendPropertyChanging();
+					this._DateFinished = value;
+					this.SendPropertyChanged("DateFinished");
+					this.OnDateFinishedChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Priority", DbType="Int NOT NULL")]
+		public int Priority
+		{
+			get
+			{
+				return this._Priority;
+			}
+			set
+			{
+				if ((this._Priority != value))
+				{
+					this.OnPriorityChanging(value);
+					this.SendPropertyChanging();
+					this._Priority = value;
+					this.SendPropertyChanged("Priority");
+					this.OnPriorityChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ProjectId", DbType="UniqueIdentifier")]
+		public System.Nullable<System.Guid> ProjectId
+		{
+			get
+			{
+				return this._ProjectId;
+			}
+			set
+			{
+				if ((this._ProjectId != value))
+				{
+					if (this._Project.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnProjectIdChanging(value);
+					this.SendPropertyChanging();
+					this._ProjectId = value;
+					this.SendPropertyChanged("ProjectId");
+					this.OnProjectIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UserId", DbType="VarChar(MAX)")]
+		public string UserId
+		{
+			get
+			{
+				return this._UserId;
+			}
+			set
+			{
+				if ((this._UserId != value))
+				{
+					this.OnUserIdChanging(value);
+					this.SendPropertyChanging();
+					this._UserId = value;
+					this.SendPropertyChanged("UserId");
+					this.OnUserIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_CoresNeeded", DbType="Int NOT NULL")]
+		public int CoresNeeded
+		{
+			get
+			{
+				return this._CoresNeeded;
+			}
+			set
+			{
+				if ((this._CoresNeeded != value))
+				{
+					this.OnCoresNeededChanging(value);
+					this.SendPropertyChanging();
+					this._CoresNeeded = value;
+					this.SendPropertyChanged("CoresNeeded");
+					this.OnCoresNeededChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_MemoryNeeded", DbType="Int NOT NULL")]
+		public int MemoryNeeded
+		{
+			get
+			{
+				return this._MemoryNeeded;
+			}
+			set
+			{
+				if ((this._MemoryNeeded != value))
+				{
+					this.OnMemoryNeededChanging(value);
+					this.SendPropertyChanging();
+					this._MemoryNeeded = value;
+					this.SendPropertyChanged("MemoryNeeded");
+					this.OnMemoryNeededChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Job_AssignedResource", Storage="_AssignedResources", ThisKey="JobId", OtherKey="JobId")]
+		public EntitySet<AssignedResource> AssignedResources
+		{
+			get
+			{
+				return this._AssignedResources;
+			}
+			set
+			{
+				this._AssignedResources.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Job_RequiredPlugin", Storage="_RequiredPlugins", ThisKey="JobId", OtherKey="JobId")]
+		public EntitySet<RequiredPlugin> RequiredPlugins
+		{
+			get
+			{
+				return this._RequiredPlugins;
+			}
+			set
+			{
+				this._RequiredPlugins.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Job_Job", Storage="_Jobs", ThisKey="JobId", OtherKey="ParentJobId")]
+		public EntitySet<Job> Jobs
+		{
+			get
+			{
+				return this._Jobs;
+			}
+			set
+			{
+				this._Jobs.Assign(value);
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Job_Job", Storage="_Job1", ThisKey="ParentJobId", OtherKey="JobId", IsForeignKey=true)]
+		public Job Job1
+		{
+			get
+			{
+				return this._Job1.Entity;
+			}
+			set
+			{
+				Job previousValue = this._Job1.Entity;
+				if (((previousValue != value) 
+							|| (this._Job1.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Job1.Entity = null;
+						previousValue.Jobs.Remove(this);
+					}
+					this._Job1.Entity = value;
+					if ((value != null))
+					{
+						value.Jobs.Add(this);
+						this._ParentJobId = value.JobId;
+					}
+					else
+					{
+						this._ParentJobId = default(Nullable<System.Guid>);
+					}
+					this.SendPropertyChanged("Job1");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Project_Job", Storage="_Project", ThisKey="ProjectId", OtherKey="ProjectId", IsForeignKey=true, DeleteRule="SET NULL")]
+		public Project Project
+		{
+			get
+			{
+				return this._Project.Entity;
+			}
+			set
+			{
+				Project previousValue = this._Project.Entity;
+				if (((previousValue != value) 
+							|| (this._Project.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Project.Entity = null;
+						previousValue.Jobs.Remove(this);
+					}
+					this._Project.Entity = value;
+					if ((value != null))
+					{
+						value.Jobs.Add(this);
+						this._ProjectId = value.ProjectId;
+					}
+					else
+					{
+						this._ProjectId = default(Nullable<System.Guid>);
+					}
+					this.SendPropertyChanged("Project");
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Slave_Job", Storage="_Slave", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteRule="SET NULL")]
+		public Slave Slave
+		{
+			get
+			{
+				return this._Slave.Entity;
+			}
+			set
+			{
+				Slave previousValue = this._Slave.Entity;
+				if (((previousValue != value) 
+							|| (this._Slave.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Slave.Entity = null;
+						previousValue.Jobs.Remove(this);
+					}
+					this._Slave.Entity = value;
+					if ((value != null))
+					{
+						value.Jobs.Add(this);
+						this._ResourceId = value.ResourceId;
+					}
+					else
+					{
+						this._ResourceId = default(Nullable<System.Guid>);
+					}
+					this.SendPropertyChanged("Slave");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+		
+		private void attach_AssignedResources(AssignedResource entity)
+		{
+			this.SendPropertyChanging();
+			entity.Job = this;
+		}
+		
+		private void detach_AssignedResources(AssignedResource entity)
+		{
+			this.SendPropertyChanging();
+			entity.Job = null;
+		}
+		
+		private void attach_RequiredPlugins(RequiredPlugin entity)
+		{
+			this.SendPropertyChanging();
+			entity.Job = this;
+		}
+		
+		private void detach_RequiredPlugins(RequiredPlugin entity)
+		{
+			this.SendPropertyChanging();
+			entity.Job = null;
+		}
+		
+		private void attach_Jobs(Job entity)
+		{
+			this.SendPropertyChanging();
+			entity.Job1 = this;
+		}
+		
+		private void detach_Jobs(Job entity)
+		{
+			this.SendPropertyChanging();
+			entity.Job1 = null;
+		}
+	}
+	
+	[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.UptimeCalendar")]
+	public partial class UptimeCalendar : INotifyPropertyChanging, INotifyPropertyChanged
+	{
+		
+		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
+		
+		private System.Guid _UptimeCalendarId;
+		
+		private System.Guid _ResourceId;
+		
+		private System.DateTime _StartDate;
+		
+		private System.DateTime _EndDate;
+		
+		private bool _AllDayEvent;
+		
+		private bool _Recurring;
+		
+		private System.Guid _RecurringId;
+		
+		private EntityRef<Resource> _Resource;
+		
+    #region Extensibility Method Definitions
+    partial void OnLoaded();
+    partial void OnValidate(System.Data.Linq.ChangeAction action);
+    partial void OnCreated();
+    partial void OnUptimeCalendarIdChanging(System.Guid value);
+    partial void OnUptimeCalendarIdChanged();
+    partial void OnResourceIdChanging(System.Guid value);
+    partial void OnResourceIdChanged();
+    partial void OnStartDateChanging(System.DateTime value);
+    partial void OnStartDateChanged();
+    partial void OnEndDateChanging(System.DateTime value);
+    partial void OnEndDateChanged();
+    partial void OnAllDayEventChanging(bool value);
+    partial void OnAllDayEventChanged();
+    partial void OnRecurringChanging(bool value);
+    partial void OnRecurringChanged();
+    partial void OnRecurringIdChanging(System.Guid value);
+    partial void OnRecurringIdChanged();
+    #endregion
+		
+		public UptimeCalendar()
+		{
+			this._Resource = default(EntityRef<Resource>);
+			OnCreated();
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_UptimeCalendarId", AutoSync=AutoSync.OnInsert, DbType="UniqueIdentifier NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)]
+		public System.Guid UptimeCalendarId
+		{
+			get
+			{
+				return this._UptimeCalendarId;
+			}
+			set
+			{
+				if ((this._UptimeCalendarId != value))
+				{
+					this.OnUptimeCalendarIdChanging(value);
+					this.SendPropertyChanging();
+					this._UptimeCalendarId = value;
+					this.SendPropertyChanged("UptimeCalendarId");
+					this.OnUptimeCalendarIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ResourceId", DbType="UniqueIdentifier NOT NULL")]
+		public System.Guid ResourceId
+		{
+			get
+			{
+				return this._ResourceId;
+			}
+			set
+			{
+				if ((this._ResourceId != value))
+				{
+					if (this._Resource.HasLoadedOrAssignedValue)
+					{
+						throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
+					}
+					this.OnResourceIdChanging(value);
+					this.SendPropertyChanging();
+					this._ResourceId = value;
+					this.SendPropertyChanged("ResourceId");
+					this.OnResourceIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_StartDate", DbType="DateTime NOT NULL")]
+		public System.DateTime StartDate
+		{
+			get
+			{
+				return this._StartDate;
+			}
+			set
+			{
+				if ((this._StartDate != value))
+				{
+					this.OnStartDateChanging(value);
+					this.SendPropertyChanging();
+					this._StartDate = value;
+					this.SendPropertyChanged("StartDate");
+					this.OnStartDateChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_EndDate", DbType="DateTime NOT NULL")]
+		public System.DateTime EndDate
+		{
+			get
+			{
+				return this._EndDate;
+			}
+			set
+			{
+				if ((this._EndDate != value))
+				{
+					this.OnEndDateChanging(value);
+					this.SendPropertyChanging();
+					this._EndDate = value;
+					this.SendPropertyChanged("EndDate");
+					this.OnEndDateChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_AllDayEvent", DbType="Bit NOT NULL")]
+		public bool AllDayEvent
+		{
+			get
+			{
+				return this._AllDayEvent;
+			}
+			set
+			{
+				if ((this._AllDayEvent != value))
+				{
+					this.OnAllDayEventChanging(value);
+					this.SendPropertyChanging();
+					this._AllDayEvent = value;
+					this.SendPropertyChanged("AllDayEvent");
+					this.OnAllDayEventChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Recurring", DbType="Bit NOT NULL")]
+		public bool Recurring
+		{
+			get
+			{
+				return this._Recurring;
+			}
+			set
+			{
+				if ((this._Recurring != value))
+				{
+					this.OnRecurringChanging(value);
+					this.SendPropertyChanging();
+					this._Recurring = value;
+					this.SendPropertyChanged("Recurring");
+					this.OnRecurringChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_RecurringId", DbType="UniqueIdentifier")]
+		public System.Guid RecurringId
+		{
+			get
+			{
+				return this._RecurringId;
+			}
+			set
+			{
+				if ((this._RecurringId != value))
+				{
+					this.OnRecurringIdChanging(value);
+					this.SendPropertyChanging();
+					this._RecurringId = value;
+					this.SendPropertyChanged("RecurringId");
+					this.OnRecurringIdChanged();
+				}
+			}
+		}
+		
+		[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Resource_UptimeCalendar", Storage="_Resource", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteRule="CASCADE")]
+		public Resource Resource
+		{
+			get
+			{
+				return this._Resource.Entity;
+			}
+			set
+			{
+				Resource previousValue = this._Resource.Entity;
+				if (((previousValue != value) 
+							|| (this._Resource.HasLoadedOrAssignedValue == false)))
+				{
+					this.SendPropertyChanging();
+					if ((previousValue != null))
+					{
+						this._Resource.Entity = null;
+						previousValue.UptimeCalendars.Remove(this);
+					}
+					this._Resource.Entity = value;
+					if ((value != null))
+					{
+						value.UptimeCalendars.Add(this);
+						this._ResourceId = value.ResourceId;
+					}
+					else
+					{
+						this._ResourceId = default(System.Guid);
+					}
+					this.SendPropertyChanged("Resource");
+				}
+			}
+		}
+		
+		public event PropertyChangingEventHandler PropertyChanging;
+		
+		public event PropertyChangedEventHandler PropertyChanged;
+		
+		protected virtual void SendPropertyChanging()
+		{
+			if ((this.PropertyChanging != null))
+			{
+				this.PropertyChanging(this, emptyChangingEventArgs);
+			}
+		}
+		
+		protected virtual void SendPropertyChanged(String propertyName)
+		{
+			if ((this.PropertyChanged != null))
+			{
+				this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+}
+#pragma warning restore 1591
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HiveDataContext.xml
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HiveDataContext.xml	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/HiveDataContext.xml	(revision 4340)
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Database Name="HeuristicLab.Hive" Class="HiveDataContext" xmlns="http://schemas.microsoft.com/linqtosql/dbml/2007">
+  <Table Name="dbo.AssignedResources" Member="AssignedResources">
+    <Type Name="AssignedResource">
+      <Column Name="ResourceId" Member="ResourceId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid"/>
+      <Column Name="JobId" Member="JobId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" />
+      <Column Name="AssignedRessourcesId" Member="AssignedRessourcesId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" IsPrimaryKey="true" IsDbGenerated="true" AutoSync="OnInsert" />
+      <Association Name="Resource_AssignedResource" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" DeleteRule="CASCADE" IsForeignKey="true" Type="Resource"/>
+      <Association Name="Job_AssignedResource" Member="Job" ThisKey="JobId" OtherKey="JobId" DeleteRule="CASCADE" IsForeignKey="true" Type="Job"/>
+    </Type>
+  </Table>
+  <Table Name="dbo.UptimeStatistics" Member="UptimeStatistics">
+    <Type Name="UptimeStatistic">
+      <Column Name="UptimeStatisticsId" Member="UptimeStatisticsId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" IsPrimaryKey="true" IsDbGenerated="true" AutoSync="OnInsert" />
+      <Column Name="Login" Member="Login" DbType="DateTime" Type="System.DateTime" />
+      <Column Name="Logout" Member="Logout" DbType="DateTime" Type="System.DateTime" />
+      <Column Name="ResourceId" Member="ResourceId" DbType="UniqueIdentifier" Type="System.Guid" />
+      <Association Name="Slave_UptimeStatistic" Member="Slave" ThisKey="ResourceId" OtherKey="ResourceId" DeleteRule="SET NULL" IsForeignKey="true" Type="Slave"/>
+    </Type>
+  </Table>
+  <Table Name="dbo.SlaveConfig" Member="SlaveConfigs">
+    <Type Name="SlaveConfig">
+      <Column Name="SlaveConfigId" Member="SlaveConfigId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" IsPrimaryKey="true" IsDbGenerated="true" AutoSync="OnInsert" />
+      <Column Name="UpDownTimeCalendar" Member="UpDownTimeCalendar" DbType="Xml" UpdateCheck="Never" Type="System.Xml.Linq.XElement"/>
+      <Column Name="HeartBeatIntervall" Member="HeartBeatIntervall" DbType="Int" Type="System.Int32" CanBeNull="true"/>
+      <Association Name="SlaveConfig_Slave" Member="Slaves"  ThisKey="SlaveConfigId" OtherKey="SlaveConfigId" Type="Slave"/>
+    </Type>
+  </Table>
+
+  <Table Name="dbo.SlaveGroup_Resource" Member="SlaveGroup_Resources">
+    <Type Name="SlaveGroup_Resource">
+      <Column Name="SlaveGroup_RessourceId" Member="SlaveGroup_RessourceId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" IsPrimaryKey="true" IsDbGenerated="true" AutoSync="OnInsert"  />
+      <Column Name="SlaveGroupId" Member="SlaveGroupId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" />
+      <Column Name="ResourceId" Member="ResourceId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" />
+
+      <Association Name="SlaveGroup_SlaveGroup_Resource" Member="SlaveGroup" ThisKey="SlaveGroupId" OtherKey="ResourceId" IsForeignKey="true" Type="SlaveGroup" />
+      <Association Name="Resource_SlaveGroup_Resource" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" DeleteRule="CASCADE" IsForeignKey="true" Type="Resource"/>
+    </Type>
+  </Table>
+  <Table Name="dbo.PluginInfo" Member="PluginInfos">
+    <Type Name="PluginInfo">
+      <Column Name="PluginId" Member="PluginId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" IsPrimaryKey="true" IsDbGenerated="true" AutoSync="OnInsert" />
+      <Column Name="Name" Member="Name" DbType="VarChar(MAX)" Type="System.String" />
+      <Column Name="Version" Member="Version" DbType="VarChar(MAX)" Type="System.String"/>
+      <Column Name="BuildDate" Member="BuildDate" DbType="VarChar(20)" Type="System.String" />
+      <Association Name="PluginInfo_RequiredPlugin" Member="RequiredPlugins" ThisKey="PluginId" OtherKey="PluginId" Type="RequiredPlugin"/>
+    </Type>
+  </Table>
+  <Table Name="dbo.Project" Member="Projects">
+    <Type Name="Project">
+      <Column Name="ProjectId" Member="ProjectId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" IsPrimaryKey="true" IsDbGenerated="true" AutoSync="OnInsert" />
+      <Column Name="Name" Member="Name" DbType="VarChar(MAX)" Type="System.String"/>
+      <Association Name="Project_Job" Member="Jobs" ThisKey="ProjectId" OtherKey="ProjectId" Type="Job" />
+    </Type>
+  </Table>
+  <Table Name="dbo.RequiredPlugins" Member="RequiredPlugins">
+    <Type Name="RequiredPlugin">
+      <Column Name="RequiredPluginId" Member="RequiredPluginId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" IsPrimaryKey="true" IsDbGenerated="true" UpdateCheck="Never" AutoSync="OnInsert" />
+      <Column Name="JobId" Member="JobId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" />
+      <Column Name="PluginId" Member="PluginId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" />
+      <Association Name="PluginInfo_RequiredPlugin" Member="PluginInfo" ThisKey="PluginId" OtherKey="PluginId" DeleteRule="CASCADE" IsForeignKey="true" Type="PluginInfo"/>
+      <Association Name="Job_RequiredPlugin" Member="Job" ThisKey="JobId" OtherKey="JobId" IsForeignKey="true" Type="Job"/>
+    </Type>
+  </Table>
+  <Table Name="dbo.Resource" Member="Resources">
+    <Type Name="Resource" InheritanceCode="RESOURCE">
+      <Column Name="ResourceId" Member="ResourceId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" IsPrimaryKey="true" AutoSync="OnInsert" />
+      <Column Name="Name" Member="Name" DbType="VarChar(MAX)" Type="System.String" />
+      <Column Name="ResourceType" Member="ResourceType" IsDiscriminator="true" Type="System.String"/>
+      <Association Name="Resource_AssignedResource" Member="AssignedResources" ThisKey="ResourceId" OtherKey="ResourceId" Type="AssignedResource"/>
+      <Association Name="Resource_SlaveGroup_Resource" Member="SlaveGroup_Resources_Parents" ThisKey="ResourceId" OtherKey="ResourceId" Type="SlaveGroup_Resource" />
+      <Association Name="Resource_UptimeCalendar" Member="UptimeCalendars" ThisKey="ResourceId" OtherKey="ResourceId" Type="UptimeCalendar" />
+      <Type Name="Slave" InheritanceCode="Slave" IsInheritanceDefault="true">
+        <Column Name="CPUSpeed" Member="CPUSpeed" DbType="Int" Type="System.Int32" CanBeNull="true"/>
+        <Column Name="Memory" Member="Memory" DbType="Int" Type="System.Int32" CanBeNull="true"/>
+        <Column Name="Login" Member="Login" DbType="DateTime" Type="System.DateTime" CanBeNull="true"/>
+        <Column Name="Status" Member="Status" DbType="VarChar(MAX)" Type="System.String" CanBeNull="true"/>
+        <Column Name="CalendarSyncStatus" Member="CalendarSyncStatus" DbType="VarChar(MAX)" Type="System.String" CanBeNull="true"/>
+        <Column Name="UseCalendarFromResourceId" Member="UseCalendarFromResourceId" DbType="UniqueIdentifier" Type="System.Guid" CanBeNull="true"/>
+        <Column Name="SlaveConfigId" Member="SlaveConfigId" DbType="UniqueIdentifier" Type="System.Guid" CanBeNull="true"/>
+        <Column Name="NumberOfCores" Member="NumberOfCores" DbType="Int" Type="System.Int32" CanBeNull="true"/>
+        <Column Name="NumberOfFreeCores" Member="NumberOfFreeCores" DbType="Int" Type="System.Int32" CanBeNull="true"/>
+        <Column Name="FreeMemory" Member="FreeMemory" DbType="Int" Type="System.Int32" CanBeNull="true"/>
+        <Column Name="IsAllowedToCalculate" Member="IsAllowedToCalculate" DbType="Bit" Type="System.Boolean"/>
+        <Association Name="Slave_UptimeStatistic" Member="UptimeStatistics" ThisKey="ResourceId" OtherKey="ResourceId" Type="UptimeStatistic"/>
+        <Association Name="Slave_Job" Member="Jobs" ThisKey="ResourceId" OtherKey="ResourceId" Type="Job" DeleteRule="SET NULL"/>
+        <Association Name="SlaveConfig_Slave" Member="SlaveConfig" ThisKey="SlaveConfigId" OtherKey="SlaveConfigId" DeleteRule="SET NULL" IsForeignKey="true" Type="SlaveConfig"/>
+      </Type>
+      <Type Name="SlaveGroup" InheritanceCode="GROUP" IsInheritanceDefault="false">
+        <Association Name="SlaveGroup_SlaveGroup_Resource" Member="SlaveGroup_Resources_Children" ThisKey="ResourceId" OtherKey="SlaveGroupId" Type="SlaveGroup_Resource" />
+      </Type>
+    </Type>
+  </Table>
+
+  <Table Name="dbo.Job" Member="Jobs">
+    <Type Name="Job">
+      <Column Name="JobId" Member="JobId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" IsPrimaryKey="true" IsDbGenerated="true" AutoSync="OnInsert" />
+      <Column Name="ParentJobId" Member="ParentJobId" DbType="UniqueIdentifier" Type="System.Guid" CanBeNull="true" />
+      <Column Name="JobState" Member="JobState" DbType="VarChar(MAX)" Type="System.String"/>
+      <Column Name="ResourceId" Member="ResourceId" DbType="UniqueIdentifier" Type="System.Guid" CanBeNull="true"/>
+      <Column Name="Percentage" Member="Percentage" DbType="Float" Type="System.Double" CanBeNull="true"/>
+      <Column Name="Exception" Member="Exception" DbType="VarChar(MAX)" Type="System.String" CanBeNull="true"/>
+      <Column Name="SerializedJob" Member="SerializedJob" DbType="VarBinary(MAX)" UpdateCheck="Never" Type="System.Data.Linq.Binary" IsDelayLoaded="true"/>
+      <Column Name="DateCreated" Member="DateCreated" DbType="DateTime" Type="System.DateTime" CanBeNull="true"/>
+      <Column Name="DateCalculated" Member="DateCalculated" DbType="DateTime" Type="System.DateTime" CanBeNull="true"/>
+      <Column Name="DateFinished" Member="DateFinished" DbType="DateTime" Type="System.DateTime" CanBeNull="true"/>
+      <Column Name="Priority" Member="Priority" DbType="Int NOT NULL" Type="System.Int32"/>
+      <Column Name="ProjectId" Member="ProjectId" DbType="UniqueIdentifier" Type="System.Guid" CanBeNull="true"/>
+      <Column Name="UserId" Member="UserId" DbType="VarChar(MAX)" Type="System.String" CanBeNull="true"/>
+      <Column Name="CoresNeeded" Member="CoresNeeded" DbType="Int NOT NULL" Type="System.Int32"/>
+      <Column Name="MemoryNeeded" Member="MemoryNeeded" DbType="Int NOT NULL" Type="System.Int32"/>
+      <Association Name="Job_AssignedResource" Member="AssignedResources" ThisKey="JobId" OtherKey="JobId" Type="AssignedResource"/>
+      <Association Name="Job_RequiredPlugin" Member="RequiredPlugins" ThisKey="JobId" OtherKey="JobId" Type="RequiredPlugin" />
+      <Association Name="Job_Job" Member="Jobs" ThisKey="JobId" OtherKey="ParentJobId" Type="Job"/>
+      <Association Name="Job_Job" Member="Job1" ThisKey="ParentJobId" OtherKey="JobId" IsForeignKey="true" Type="Job" />
+      <Association Name="Project_Job" Member="Project" ThisKey="ProjectId" OtherKey="ProjectId" DeleteRule="SET NULL" IsForeignKey="true" Type="Project"/>
+      <Association Name="Slave_Job" Member="Slave" ThisKey="ResourceId" OtherKey="ResourceId" DeleteRule="SET NULL" IsForeignKey="true" Type="Slave"/>
+    </Type>
+  </Table>
+  <Table Name="dbo.UptimeCalendar" Member="UptimeCalendars">
+    <Type Name="UptimeCalendar">
+      <Column Name="UptimeCalendarId" Member="UptimeCalendarId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" IsPrimaryKey="true" IsDbGenerated="true" AutoSync="OnInsert" />
+      <Column Name="ResourceId" Member="ResourceId" DbType="UniqueIdentifier NOT NULL" Type="System.Guid" />
+      <Column Name="StartDate" Member="StartDate" DbType="DateTime NOT NULL" Type="System.DateTime" />
+      <Column Name="EndDate" Member="EndDate" DbType="DateTime NOT NULL" Type="System.DateTime"/>
+      <Column Name="AllDayEvent" Member="AllDayEvent" DbType="Bit NOT NULL" Type="System.Boolean"/>
+      <Column Name="Recurring" Member="Recurring" DbType="Bit NOT NULL" Type="System.Boolean"/>
+      <Column Name="RecurringId" Member="RecurringId" DbType="UniqueIdentifier" Type="System.Guid"/>
+      <Association Name="Resource_UptimeCalendar" Member="Resource" ThisKey="ResourceId" OtherKey="ResourceId" DeleteRule="CASCADE" IsForeignKey="true" Type="Resource"/>
+    </Type>
+  </Table>
+</Database>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/JobDao.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/JobDao.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/JobDao.cs	(revision 4340)
@@ -0,0 +1,211 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using System.Data.Linq;
+using HeuristicLab.Hive.Server.DataAccess;
+using System.IO;
+using System.Data.SqlClient;
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess {
+  public class JobDao : BaseDao<JobDto, Job>, IJobDao {
+
+    #region IGenericDao<JobDto,Job> Members
+
+    public JobDto FindById(Guid id) {
+      return (from job in Context.Jobs
+              where job.JobId.Equals(id)
+              select EntityToDto(job, null)).SingleOrDefault();
+    }
+
+    public IEnumerable<JobDto> FindAll() {
+      return (from job in Context.Jobs
+              select EntityToDto(job, null)).ToList();
+    }
+
+    public IEnumerable<JobDto> FindWithLimitations(JobState jobState, int offset, int count) {
+      IQueryable<JobDto> query = null;
+      if (jobState == JobState.Finished) {
+        query = from job in Context.Jobs
+                where job.JobState == Enum.GetName(typeof(JobState), jobState)
+                orderby job.DateFinished
+                select EntityToDto(job, null);
+      } else if (jobState == JobState.Calculating || jobState == JobState.SnapshotRequested || jobState == JobState.SnapshotSent) {
+        query = from job in Context.Jobs
+                where job.JobState == Enum.GetName(typeof(JobState), jobState)
+                orderby job.DateCalculated
+                select EntityToDto(job, null);
+      } else {
+        query = from job in Context.Jobs
+                where job.JobState == Enum.GetName(typeof(JobState), jobState)
+                orderby job.DateCreated
+                select EntityToDto(job, null);
+      }
+
+      return query.Skip(offset).Take(count).ToList();
+    }
+
+
+    public byte[] GetBinaryJobFile(Guid jobId) {
+      return (from job in Context.Jobs
+              where job.JobId.Equals(jobId)
+              select job.SerializedJob).SingleOrDefault().ToArray();
+    }
+
+    public JobDto Insert(JobDto bObj) {
+      Job j = DtoToEntity(bObj, null);
+      Context.Jobs.InsertOnSubmit(j);
+      CommitChanges();
+      bObj.Id = j.JobId;
+      return bObj;
+    }
+
+    public void SetBinaryJobFile(Guid jobId, byte[] data) {
+      Job j = (from job in Context.Jobs
+               where job.JobId.Equals(jobId)
+               select job).SingleOrDefault();
+      j.SerializedJob = data;
+      CommitChanges();
+    }
+
+    public SerializedJob InsertWithAttachedJob(SerializedJob job) {
+      Job j = DtoToEntity(job.JobInfo, null);
+      j.SerializedJob = job.SerializedJobData;
+      foreach (Guid assignRessourceId in job.JobInfo.AssignedResourceIds)
+        j.AssignedResources.Add(new AssignedResource { ResourceId = assignRessourceId });
+      Context.Jobs.InsertOnSubmit(j);
+      CommitChanges();
+      job.JobInfo.Id = j.JobId;
+      return job;
+    }
+
+    public void Delete(JobDto bObj) {
+      Job job = Context.Jobs.SingleOrDefault(j => j.JobId.Equals(bObj.Id));
+      Context.Jobs.DeleteOnSubmit(job);
+      CommitChanges();
+    }
+
+    public void Update(JobDto bObj) {
+      Job job = Context.Jobs.SingleOrDefault(j => j.JobId.Equals(bObj.Id));
+      DtoToEntity(bObj, job);
+      CommitChanges();
+    }
+
+    public IEnumerable<JobDto> FindActiveJobsOfSlave(SlaveDto slave) {
+      return (from j in Context.Jobs
+              where (j.JobState == Enum.GetName(typeof(JobState), JobState.Calculating) ||
+                     j.JobState == Enum.GetName(typeof(JobState), JobState.Aborted) ||
+                     j.JobState == Enum.GetName(typeof(JobState), JobState.SnapshotRequested) ||
+                     j.JobState == Enum.GetName(typeof(JobState), JobState.SnapshotSent)) &&
+                    (j.ResourceId.Equals(slave.Id))
+              select EntityToDto(j, null)).ToList();
+    }
+
+    public IEnumerable<JobDto> FindFittingJobsForSlave(JobState state, int freeCores, int freeMemory, Guid slaveId) {
+      SlaveGroupDao cgd = new SlaveGroupDao();
+
+      List<Guid> idList = new List<Guid>(cgd.FindAllGroupAndParentGroupIdsForSlave(slaveId));
+      //Add myself too - enables jobs for one specific host!
+      idList.Add(slaveId);
+
+      var q = (from ar in Context.AssignedResources
+               where ar.Job.JobState == Enum.GetName(typeof(JobState), JobState.Offline) &&
+                     ar.Job.CoresNeeded <= freeCores &&
+                     ar.Job.MemoryNeeded <= freeMemory &&
+                     idList.Contains(ar.ResourceId)
+               orderby ar.Job.Priority descending
+               select EntityToDto(ar.Job, null));
+      return q.ToList();
+    }
+
+    public IEnumerable<JobDto> GetJobsByState(JobState state) {
+      return (from j in Context.Jobs
+              where (j.JobState == Enum.GetName(typeof(JobState), state))
+              select EntityToDto(j, null)).ToList();
+    }
+
+    public void AssignSlaveToJob(Guid slaveId, Guid jobId) {
+      Slave c = Context.Resources.OfType<Slave>().SingleOrDefault(slave => slave.ResourceId.Equals(slaveId));
+      Job j = Context.Jobs.SingleOrDefault(job => job.JobId.Equals(jobId));
+      c.Jobs.Add(j);
+      j.Slave = c;
+      CommitChanges();
+    }
+
+    public void SetJobOffline(JobDto job) {
+      Job j = Context.Jobs.SingleOrDefault(jq => jq.JobId.Equals(job.Id));
+      j.Slave = null;
+      j.JobState = Enum.GetName(typeof(JobState), JobState.Offline);
+      CommitChanges();
+    }
+
+    public Stream GetSerializedJobStream(Guid jobId) {
+      VarBinarySource source = new VarBinarySource((SqlConnection)Context.Connection, null, "Job", "SerializedJob", "JobId", jobId);
+      return new VarBinaryStream(source);
+    }
+
+    public IEnumerable<JobDto> FindJobsById(IEnumerable<Guid> jobIds) {
+      IQueryable<JobDto> jobs = from job in Context.Jobs
+                                where jobIds.Contains(job.JobId)
+                                select EntityToDto(job, null);
+      return jobs.ToList();
+    }
+
+    public bool IsUserAuthorizedForJobs(string userId, params Guid[] jobIds) {
+      var jobs = from job in Context.Jobs
+                 where jobIds.Contains(job.JobId)
+                 select job;
+      return jobs.All(job => job.UserId == userId);
+    }
+    #endregion
+
+    public override Job DtoToEntity(JobDto source, Job target) {
+      if (source == null)
+        return null;
+      if (target == null)
+        target = new Job();
+
+      target.CoresNeeded = source.CoresNeeded;
+      target.MemoryNeeded = source.MemoryNeeded;
+
+      target.DateCalculated = source.DateCalculated;
+      target.DateCreated = source.DateCreated;
+      target.DateFinished = source.DateFinished;
+      target.JobId = source.Id;
+
+      target.Percentage = source.Percentage;
+      target.Exception = source.Exception;
+
+      target.Priority = source.Priority;
+      target.JobState = Enum.GetName(typeof(JobState), source.State);
+      target.UserId = source.UserId;
+      return target;
+    }
+
+    //Assigned ressources are not used atm!
+    //Slave is not used ATM - not sure when we stopped using those...
+    public override JobDto EntityToDto(Job source, JobDto target) {
+      if (source == null)
+        return null;
+      if (target == null)
+        target = new JobDto();
+
+      target.CoresNeeded = source.CoresNeeded;
+      target.MemoryNeeded = source.MemoryNeeded;
+
+      target.DateCalculated = source.DateCalculated;
+      target.DateCreated = source.DateCreated;
+      target.DateFinished = source.DateFinished;
+      target.Id = source.JobId;
+      
+      target.Exception = source.Exception;
+      target.Percentage = source.Percentage;
+
+      target.Priority = source.Priority;
+      target.State = (JobState)Enum.Parse(typeof(JobState), source.JobState, true);
+      target.UserId = source.UserId;
+      return target;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/PluginInfoDao.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/PluginInfoDao.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/PluginInfoDao.cs	(revision 4340)
@@ -0,0 +1,102 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Server.DataAccess;
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess {
+  public class PluginInfoDao: BaseDao<HivePluginInfoDto, PluginInfo>, IPluginInfoDao {
+    #region IGenericDao<HivePluginInfoDto,PluginInfo> Members
+
+    public HivePluginInfoDto FindById(Guid id) {
+      return (from pi in Context.PluginInfos
+              where pi.PluginId.Equals(id)
+              select EntityToDto(pi, null)
+             ).SingleOrDefault();  
+    }
+
+    public IEnumerable<HivePluginInfoDto> FindAll() {
+      return (from pi in Context.PluginInfos              
+              select EntityToDto(pi, null)
+       ).ToList();  
+    }
+
+    public HivePluginInfoDto Insert(HivePluginInfoDto bObj) {
+      PluginInfo pi = DtoToEntity(bObj, null);
+      Context.PluginInfos.InsertOnSubmit(pi);
+      CommitChanges();
+      bObj.Id = pi.PluginId;
+      return bObj;
+    }
+
+    public void Delete(HivePluginInfoDto bObj) {
+      PluginInfo pi = Context.PluginInfos.SingleOrDefault(p => p.PluginId.Equals(bObj.Id));
+      Context.PluginInfos.DeleteOnSubmit(pi);      
+    }
+
+    public void Update(HivePluginInfoDto bObj) {
+      PluginInfo pi = Context.PluginInfos.SingleOrDefault(p => p.PluginId.Equals(bObj.Id));
+      DtoToEntity(bObj, pi);
+      CommitChanges();
+    }
+
+    public void InsertPluginDependenciesForJob(JobDto jobDto) {
+      foreach (HivePluginInfoDto info in jobDto.PluginsNeeded) {                
+        PluginInfo dbpi =
+          Context.PluginInfos.Where(pi => pi.Name.Equals(info.Name) && pi.Version == info.Version.ToString()).SingleOrDefault();
+        if (dbpi == null) {
+          dbpi = new PluginInfo {
+                                  Name = info.Name,
+                                  Version = info.Version.ToString()
+                                };
+          Context.PluginInfos.InsertOnSubmit(dbpi);
+          CommitChanges();
+        }
+
+        RequiredPlugin rq = new RequiredPlugin();
+        rq.JobId = jobDto.Id;
+        rq.PluginInfo = dbpi;
+        Context.RequiredPlugins.InsertOnSubmit(rq);
+        CommitChanges();
+      }
+    }
+
+    public List<HivePluginInfoDto> GetPluginDependenciesForJob(JobDto jobDto) {
+      return (from rp in Context.RequiredPlugins
+              where rp.JobId.Equals(jobDto.Id)
+              select EntityToDto(rp.PluginInfo, null)).ToList();
+      
+    }
+
+    #endregion
+
+    // Build Date not mapped - won't matter anyway, it's a obsolete field.
+    public override PluginInfo DtoToEntity(HivePluginInfoDto source, PluginInfo target) {
+      if (source == null)
+        return null;
+      if (target == null)
+        target = new PluginInfo();
+
+      target.Name = source.Name;
+      target.PluginId = source.Id;
+      target.Version = source.Version.ToString();      
+
+      return target;
+
+    }
+
+    public override HivePluginInfoDto EntityToDto(PluginInfo source, HivePluginInfoDto target) {
+      if (source == null)
+        return null;
+      if (target == null)
+        target = new HivePluginInfoDto();
+
+      target.Name = source.Name;
+      target.Id = source.PluginId;
+      target.Version = new Version(source.Version);
+
+      return target;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Properties/AssemblyInfo.frame	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Properties/AssemblyInfo.frame	(revision 4340)
@@ -0,0 +1,58 @@
+#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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Hive.Server.LINQDataAccess")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("21FAA962-223D-490f-A6CC-CFC02D4BF0B8")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Properties/Settings.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Properties/Settings.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Properties/Settings.Designer.cs	(revision 4340)
@@ -0,0 +1,37 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
+        [global::System.Configuration.DefaultSettingValueAttribute("Data Source=localhost;Initial Catalog=HeuristicLab.Hive;Integrated Security=True;" +
+            "")]
+        public string HeuristicLab_Hive_LinqConnectionString {
+            get {
+                return ((string)(this["HeuristicLab_Hive_LinqConnectionString"]));
+            }
+        }
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Properties/Settings.settings
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Properties/Settings.settings	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Properties/Settings.settings	(revision 4340)
@@ -0,0 +1,14 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Hive.Server.LINQDataAccess.Properties" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="HeuristicLab_Hive_LinqConnectionString" Type="(Connection string)" Scope="Application">
+      <DesignTimeValue Profile="(Default)">&lt;?xml version="1.0" encoding="utf-16"?&gt;
+&lt;SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
+  &lt;ConnectionString&gt;Data Source=localhost;Initial Catalog=HeuristicLab.Hive;Integrated Security=True;&lt;/ConnectionString&gt;
+  &lt;ProviderName&gt;System.Data.SqlClient&lt;/ProviderName&gt;
+&lt;/SerializableConnectionString&gt;</DesignTimeValue>
+      <Value Profile="(Default)">Data Source=localhost;Initial Catalog=HeuristicLab.Hive;Integrated Security=True;</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Scripts/UpdateContext.bat
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Scripts/UpdateContext.bat	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Scripts/UpdateContext.bat	(revision 4340)
@@ -0,0 +1,1 @@
+sqlmetal /namespace:HeuristicLab.Hive.Server.LINQDataAccess /code:../HiveDataContext.cs /language:csharp ../HiveDataContext.xml
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Scripts/cleanHiveDatabase.sql
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Scripts/cleanHiveDatabase.sql	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Scripts/cleanHiveDatabase.sql	(revision 4340)
@@ -0,0 +1,9 @@
+DELETE FROM [HeuristicLab.Hive].[dbo].AssignedResources
+DELETE FROM [HeuristicLab.Hive].[dbo].RequiredPlugins
+DELETE FROM [HeuristicLab.Hive].[dbo].PluginInfo
+DELETE FROM [HeuristicLab.Hive].[dbo].UptimeStatistics
+DELETE FROM [HeuristicLab.Hive].[dbo].UptimeCalendar
+DELETE FROM [HeuristicLab.Hive].[dbo].SlaveConfig
+DELETE FROM [HeuristicLab.Hive].[dbo].SlaveGroup_Resource
+DELETE FROM [HeuristicLab.Hive].[dbo].[Resource]
+DELETE FROM [HeuristicLab.Hive].[dbo].Job
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Scripts/prepareHiveDatabase.sql
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Scripts/prepareHiveDatabase.sql	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/Scripts/prepareHiveDatabase.sql	(revision 4340)
@@ -0,0 +1,61 @@
+/* this script is supposed to be executed after the plain DB is generated by the linq-to-sql schema */
+
+/*
+use these DROP commands if you want to run this query a second time on the same db */
+/*
+ALTER TABLE dbo.AssignedResources ALTER COLUMN AssignedRessourcesId DROP ROWGUIDCOL;
+ALTER TABLE dbo.Job ALTER COLUMN JobId DROP ROWGUIDCOL;
+ALTER TABLE dbo.SlaveConfig ALTER COLUMN SlaveConfigId DROP ROWGUIDCOL;
+ALTER TABLE dbo.SlaveGroup_Resource ALTER COLUMN SlaveGroup_RessourceId DROP ROWGUIDCOL;
+ALTER TABLE dbo.PluginInfo ALTER COLUMN PluginId DROP ROWGUIDCOL;
+ALTER TABLE dbo.Project ALTER COLUMN ProjectId DROP ROWGUIDCOL;
+ALTER TABLE dbo.RequiredPlugins ALTER COLUMN RequiredPluginId DROP ROWGUIDCOL;
+ALTER TABLE dbo.Resource ALTER COLUMN ResourceId DROP ROWGUIDCOL;
+ALTER TABLE dbo.UptimeCalendar ALTER COLUMN UptimeCalendarId DROP ROWGUIDCOL;
+ALTER TABLE dbo.UptimeStatistics ALTER COLUMN UptimeStatisticsId DROP ROWGUIDCOL;
+
+ALTER TABLE dbo.AssignedResources DROP CONSTRAINT [DF_AssignedResources_AssignedRessourcesId];
+ALTER TABLE dbo.Job DROP CONSTRAINT [DF_Job_JobId];
+ALTER TABLE dbo.SlaveConfig DROP CONSTRAINT [DF_SlaveConfig_SlaveConfigId];
+ALTER TABLE dbo.SlaveGroup_Resource DROP CONSTRAINT [DF_SlaveGroup_ResourceSlaveGroup_RessourceId];
+ALTER TABLE dbo.PluginInfo DROP CONSTRAINT [DF_PluginInfo_PluginId];
+ALTER TABLE dbo.Project DROP CONSTRAINT [DF_Project_ProjectId];
+ALTER TABLE dbo.RequiredPlugins DROP CONSTRAINT [DF_RequiredPlugins_RequiredPluginId];
+ALTER TABLE dbo.Resource DROP CONSTRAINT [DF_Resource_ResourceId];
+ALTER TABLE dbo.UptimeCalendar DROP CONSTRAINT [DF_UptimeCalendar_UptimeCalendarId];
+ALTER TABLE dbo.UptimeStatistics DROP CONSTRAINT [DF_UptimeStatistics_UptimeStatisticsId];
+*/
+
+
+ALTER TABLE dbo.AssignedResources ALTER COLUMN AssignedRessourcesId ADD ROWGUIDCOL;
+ALTER TABLE dbo.AssignedResources WITH NOCHECK ADD CONSTRAINT [DF_AssignedResources_AssignedRessourcesId] DEFAULT (newid()) FOR AssignedRessourcesId;
+
+ALTER TABLE dbo.Job ALTER COLUMN JobId ADD ROWGUIDCOL;
+ALTER TABLE dbo.Job WITH NOCHECK ADD CONSTRAINT [DF_Job_JobId] DEFAULT (newid()) FOR JobId;
+
+ALTER TABLE dbo.SlaveConfig ALTER COLUMN SlaveConfigId ADD ROWGUIDCOL;
+ALTER TABLE dbo.SlaveConfig WITH NOCHECK ADD CONSTRAINT [DF_SlaveConfig_SlaveConfigId] DEFAULT (newid()) FOR SlaveConfigId;
+
+ALTER TABLE dbo.SlaveGroup_Resource ALTER COLUMN SlaveGroup_RessourceId ADD ROWGUIDCOL;
+ALTER TABLE dbo.SlaveGroup_Resource WITH NOCHECK ADD CONSTRAINT [DF_SlaveGroup_Resource_SlaveGroup_RessourceId] DEFAULT (newid()) FOR SlaveGroup_RessourceId;
+
+ALTER TABLE dbo.PluginInfo ALTER COLUMN PluginId ADD ROWGUIDCOL;
+ALTER TABLE dbo.PluginInfo WITH NOCHECK ADD CONSTRAINT [DF_PluginInfo_PluginId] DEFAULT (newid()) FOR PluginId;
+
+ALTER TABLE dbo.Project ALTER COLUMN ProjectId ADD ROWGUIDCOL;
+ALTER TABLE dbo.Project WITH NOCHECK ADD CONSTRAINT [DF_Project_ProjectId] DEFAULT (newid()) FOR ProjectId;
+
+ALTER TABLE dbo.RequiredPlugins ALTER COLUMN RequiredPluginId ADD ROWGUIDCOL;
+ALTER TABLE dbo.RequiredPlugins WITH NOCHECK ADD CONSTRAINT [DF_RequiredPlugins_RequiredPluginId] DEFAULT (newid()) FOR RequiredPluginId;
+
+ALTER TABLE dbo.Resource ALTER COLUMN ResourceId ADD ROWGUIDCOL;
+ALTER TABLE dbo.Resource WITH NOCHECK ADD CONSTRAINT [DF_Resource_ResourceId] DEFAULT (newid()) FOR ResourceId;
+
+ALTER TABLE dbo.UptimeCalendar ALTER COLUMN UptimeCalendarId ADD ROWGUIDCOL;
+ALTER TABLE dbo.UptimeCalendar WITH NOCHECK ADD CONSTRAINT [DF_UptimeCalendar_UptimeCalendarId] DEFAULT (newid()) FOR UptimeCalendarId;
+
+ALTER TABLE dbo.UptimeStatistics ALTER COLUMN UptimeStatisticsId ADD ROWGUIDCOL;
+ALTER TABLE dbo.UptimeStatistics WITH NOCHECK ADD CONSTRAINT [DF_UptimeStatistics_UptimeStatisticsId] DEFAULT (newid()) FOR UptimeStatisticsId;
+
+/* create indices */
+CREATE INDEX Index_RequiredPlugins_JobId ON RequiredPlugins(JobId);
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/SlaveConfigDao.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/SlaveConfigDao.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/SlaveConfigDao.cs	(revision 4340)
@@ -0,0 +1,70 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Server.DataAccess;
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess {
+  public class SlaveConfigDao: BaseDao<SlaveConfigDto, SlaveConfig>, ISlaveConfigDao {
+
+    #region IGenericDao<SlaveConfigDto,SlaveConfig> Members
+
+    public SlaveConfigDto FindById(Guid id) {
+      return (from cc in Context.SlaveConfigs
+              where cc.SlaveConfigId.Equals(id)
+              select EntityToDto(cc, null)).SingleOrDefault();
+    }
+
+    public IEnumerable<SlaveConfigDto> FindAll() {
+      return (from cc in Context.SlaveConfigs              
+              select EntityToDto(cc, null)).ToList();
+    }
+
+    public SlaveConfigDto Insert(SlaveConfigDto bObj) {
+      SlaveConfig c = DtoToEntity(bObj, null);
+      Context.SlaveConfigs.InsertOnSubmit(c);
+      CommitChanges();
+      bObj.Id = c.SlaveConfigId;
+      return bObj;  
+    }
+
+    public void Delete(SlaveConfigDto bObj) {
+      Context.SlaveConfigs.DeleteOnSubmit(Context.SlaveConfigs.SingleOrDefault(c => c.SlaveConfigId.Equals(bObj.Id)));
+      CommitChanges();
+    }
+
+    public void Update(SlaveConfigDto bObj) {
+      SlaveConfig cc = Context.SlaveConfigs.SingleOrDefault(c => c.SlaveConfigId.Equals(bObj.Id));
+      DtoToEntity(bObj, cc);
+      CommitChanges();
+    }
+
+    #endregion
+
+    public override SlaveConfig DtoToEntity(SlaveConfigDto source, SlaveConfig target) {
+      if (source == null)
+        return null;
+      if (target == null)
+        target = new SlaveConfig();
+
+      target.SlaveConfigId = source.Id;
+      target.HeartBeatIntervall = source.HeartBeatIntervall;
+      
+      return target;
+    }
+
+    public override SlaveConfigDto EntityToDto(SlaveConfig source, SlaveConfigDto target) {
+      if (source == null)
+        return null;
+      if (target == null)
+        target = new SlaveConfigDto();
+
+      target.Id = source.SlaveConfigId;
+      target.HeartBeatIntervall = source.HeartBeatIntervall;
+
+      return target;
+
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/SlaveDao.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/SlaveDao.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/SlaveDao.cs	(revision 4340)
@@ -0,0 +1,108 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Server.DataAccess;
+using System.Threading;
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess {
+  public class SlaveDao: BaseDao<SlaveDto, Slave>, ISlaveDao {
+
+    public SlaveDao() {      
+    }
+
+    public SlaveDto FindById(Guid id) {
+      return (from slave in Context.Resources.OfType<Slave>()                         
+              where slave.ResourceId.Equals(id)
+              select EntityToDto(slave, null)
+            ).SingleOrDefault();      
+    }
+
+    public IEnumerable<SlaveDto> FindAll() {
+      return (from slave in Context.Resources.OfType<Slave>()
+              select
+                EntityToDto(slave, null)
+             ).ToList();
+    }
+
+    public IEnumerable<SlaveDto> FindAllSlavesWithoutGroup() {
+      return (from slave in Context.Resources.OfType<Slave>()
+              where slave.SlaveGroup_Resources_Parents.Count == 0
+              select EntityToDto(slave, null)).ToList();
+    }
+
+    public SlaveDto GetSlaveForJob(Guid jobId) {
+      return (from job in Context.Jobs
+              where job.JobId.Equals(jobId)
+              select EntityToDto(job.Slave, null)).SingleOrDefault();
+    }
+
+    public void SetServerSideCalendar(SlaveDto slave, Guid slaveGroupId) {
+      Slave dbslave = Context.Resources.OfType<Slave>().SingleOrDefault(c => c.ResourceId.Equals(slave.Id));
+      dbslave.UseCalendarFromResourceId = slaveGroupId;
+      dbslave.CalendarSyncStatus = Enum.GetName(typeof(CalendarState), CalendarState.Fetch);
+      CommitChanges();
+    }
+
+    public SlaveDto Insert(SlaveDto info) {
+      Slave c = DtoToEntity(info, null);      
+      Context.Resources.InsertOnSubmit(c);
+      CommitChanges();
+      info.Id = c.ResourceId;
+      return info;
+    }
+
+    //Cascading delete takes care of the rest
+    public void Delete(SlaveDto info) {
+      Resource res = Context.Resources.SingleOrDefault(c => c.ResourceId.Equals(info.Id));            
+      Context.Resources.DeleteOnSubmit(res);
+      CommitChanges();
+    }
+
+    public void Update(SlaveDto info) {
+      Slave slave = Context.Resources.OfType<Slave>().SingleOrDefault(c => c.ResourceId.Equals(info.Id));
+      DtoToEntity(info, slave);
+      CommitChanges();      
+    }
+
+    public override Slave DtoToEntity(SlaveDto source, Slave target) {
+      if (source == null)
+        return null;
+      if (target == null) 
+        target = new Slave();
+      
+      target.CPUSpeed = source.CpuSpeedPerCore;
+      
+      target.FreeMemory = source.FreeMemory;
+      target.Name = source.Name;
+      target.ResourceId = source.Id;
+      target.CalendarSyncStatus = Enum.GetName(typeof(CalendarState), source.CalendarSyncStatus);
+      target.Login = source.Login;
+      target.Memory = source.Memory;
+      target.NumberOfCores = source.NrOfCores;
+      target.NumberOfFreeCores = source.NrOfFreeCores;
+      target.Status = source.State.ToString();
+      return target;
+    }
+
+    public override SlaveDto EntityToDto(Slave source, SlaveDto target) {
+      if (source == null)
+        return null;
+      if(target == null) 
+        target = new SlaveDto();
+      target.CpuSpeedPerCore = source.CPUSpeed;
+      target.FreeMemory = source.FreeMemory ?? 0;
+      target.Id = source.ResourceId;
+      target.CalendarSyncStatus = (CalendarState) Enum.Parse(typeof (CalendarState), source.CalendarSyncStatus);
+      target.Login = source.Login;
+      target.Memory = source.Memory ?? 0;
+      target.Name = source.Name;
+      target.NrOfCores = source.NumberOfCores ?? 0;
+      target.NrOfFreeCores = source.NumberOfFreeCores ?? 0;
+      target.State = (SlaveState)Enum.Parse(typeof(SlaveState), source.Status, true);
+      target.IsAllowedToCalculate = source.IsAllowedToCalculate;
+      return target;
+    } 
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/SlaveGroupDao.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/SlaveGroupDao.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/SlaveGroupDao.cs	(revision 4340)
@@ -0,0 +1,163 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Server.DataAccess;
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess {
+  public class SlaveGroupDao : BaseDao<SlaveGroupDto, SlaveGroup>, ISlaveGroupDao {
+
+
+    #region IGenericDao<SlaveGroupDto,SlaveGroup> Members
+
+    public SlaveGroupDto FindById(Guid id) {
+      return (from cc in Context.Resources.OfType<SlaveGroup>()
+              where cc.ResourceId.Equals(id)
+              select EntityToDto(cc, null)).SingleOrDefault();
+    }
+
+
+    public IEnumerable<SlaveGroupDto> FindAll() {
+      return (from cc in Context.Resources.OfType<SlaveGroup>()
+              select EntityToDto(cc, null)).ToList();
+    }
+
+    public SlaveGroupDto Insert(SlaveGroupDto bObj) {
+      //Auto GUID is disabled for Ressource... thx to the slaves... grml      
+      if(bObj.Id == Guid.Empty)
+        bObj.Id = Guid.NewGuid();
+
+      SlaveGroup cc = DtoToEntity(bObj, null);
+      Context.Resources.InsertOnSubmit(cc);
+      CommitChanges();
+      bObj.Id = cc.ResourceId;
+      return bObj;
+    }
+
+    public void Delete(SlaveGroupDto bObj) {
+      
+      //Deleting all references
+      Context.SlaveGroup_Resources.DeleteAllOnSubmit(Context.SlaveGroup_Resources.Where(cg => cg.SlaveGroupId.Equals(bObj.Id)));
+
+      Resource res = Context.Resources.SingleOrDefault(c => c.ResourceId.Equals(bObj.Id));
+
+      Context.Resources.DeleteOnSubmit(res);
+      CommitChanges();
+    }
+
+    public void Update(SlaveGroupDto bObj) {
+      SlaveGroup slave = Context.Resources.OfType<SlaveGroup>().SingleOrDefault(c => c.ResourceId.Equals(bObj.Id));
+      DtoToEntity(bObj, slave);
+      CommitChanges();
+    }
+
+    public void AddRessourceToSlaveGroup(Guid resource, Guid slaveGroupId) {
+      SlaveGroup cg = Context.Resources.OfType<SlaveGroup>().SingleOrDefault(c => c.ResourceId.Equals(slaveGroupId));
+      Resource res = Context.Resources.SingleOrDefault(r => r.ResourceId.Equals(resource));
+      cg.SlaveGroup_Resources_Children.Add(new SlaveGroup_Resource { SlaveGroup = cg, Resource = res });      
+      CommitChanges();
+    }
+
+    public void RemoveRessourceFromSlaveGroup(Guid resource, Guid slaveGroupId) {
+      SlaveGroup_Resource cgr =
+        Context.SlaveGroup_Resources.SingleOrDefault(
+          cg => cg.ResourceId.Equals(resource) && cg.SlaveGroupId.Equals(slaveGroupId));
+      Context.SlaveGroup_Resources.DeleteOnSubmit(cgr);
+      CommitChanges();
+    }
+
+    public IEnumerable<SlaveGroupDto> MemberOf(SlaveDto slave) {
+      return (from cgr in Context.SlaveGroup_Resources
+              where cgr.ResourceId.Equals(slave.Id)
+              select EntityToDto(cgr.SlaveGroup, null)).ToList();
+    }
+
+    public IEnumerable<SlaveGroupDto> FindAllWithSubGroupsAndSlaves() {
+      List<SlaveGroupDto> groupList = new List<SlaveGroupDto>();
+
+      var q = (from cg in Context.Resources.OfType<SlaveGroup>()
+               where !Context.SlaveGroup_Resources.Any(cgr => cgr.ResourceId.Equals(cg.ResourceId))
+               select cg);
+
+      foreach (SlaveGroup cg in q) {
+        SlaveGroupDto cgd = EntityToDto(cg, null);
+        groupList.Add(cgd);
+        FillSubGroupsAndSlavesRecursivly(cgd, cg.SlaveGroup_Resources_Children);        
+      }
+      return groupList;
+    }
+
+    private void FillSubGroupsAndSlavesRecursivly(SlaveGroupDto parentSlaveGroup, System.Data.Linq.EntitySet<SlaveGroup_Resource> parentResourceSet) {
+      SlaveDao cd = new SlaveDao();      
+      //Get all the Groups
+      
+      var qGroups = (from cg in Context.Resources.OfType<SlaveGroup>()
+               where cg.SlaveGroup_Resources_Parents.Any(cgr => cgr.SlaveGroupId.Equals(parentSlaveGroup.Id))
+               select cg);
+
+      foreach (SlaveGroup cg in qGroups) {
+        SlaveGroupDto cgd = EntityToDto(cg, null);
+        parentSlaveGroup.Resources.Add(cgd);
+        FillSubGroupsAndSlavesRecursivly(cgd, cg.SlaveGroup_Resources_Children);
+      }
+
+      //get the slaves
+      var qSlaves = (from cl in Context.Resources.OfType<Slave>()
+               where cl.SlaveGroup_Resources_Parents.Any(cgr => cgr.SlaveGroupId.Equals(parentSlaveGroup.Id))
+               select cl);
+      foreach (Slave slave in qSlaves) {
+        parentSlaveGroup.Resources.Add(cd.EntityToDto(slave, null));                        
+      }     
+    }
+
+    public IEnumerable<Guid> FindAllGroupAndParentGroupIdsForSlave(Guid slaveId) {
+      List<Guid> guids = new List<Guid>();
+      Slave c = Context.Resources.OfType<Slave>().SingleOrDefault(slave => slave.ResourceId.Equals(slaveId));
+      FindAllGroupAndParentGroupIdsForSlaveRecursive(c, guids);
+      return guids;
+    }
+
+    //Massivly error Prone
+    private void FindAllGroupAndParentGroupIdsForSlaveRecursive(Resource resource, List<Guid> guids) {
+      foreach (SlaveGroup_Resource cgr in resource.SlaveGroup_Resources_Parents) {
+        guids.Add(cgr.SlaveGroupId);
+        FindAllGroupAndParentGroupIdsForSlaveRecursive(cgr.SlaveGroup, guids);        
+      }
+    }
+
+    #endregion
+
+    public override SlaveGroup DtoToEntity(SlaveGroupDto source, SlaveGroup target) {
+      if (source == null)
+        return null;
+      if (target == null)
+        target = new SlaveGroup();
+
+      target.Name = source.Name;
+      target.ResourceId = source.Id;
+
+      return target;
+    }
+
+    public override SlaveGroupDto EntityToDto(SlaveGroup source, SlaveGroupDto target) {
+      if (source == null)
+        return null;
+      if (target == null)
+        target = new SlaveGroupDto();
+
+      target.Id = source.ResourceId;
+      target.Name = source.Name;
+
+      return target;
+    }
+
+    public IEnumerable<SlaveGroupDto> FindByName(string res) {
+      return (from cq in Context.Resources.OfType<SlaveGroup>()
+              where cq.Name == res
+              select EntityToDto(cq, null)).ToList();      
+    }
+
+
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/UptimeCalendarDao.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/UptimeCalendarDao.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/UptimeCalendarDao.cs	(revision 4340)
@@ -0,0 +1,163 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Server.DataAccess;
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess {
+  public class UptimeCalendarDao: BaseDao<AppointmentDto, UptimeCalendar>, IUptimeCalendarDao {
+    public override UptimeCalendar DtoToEntity(AppointmentDto source, UptimeCalendar target) {
+      if(source == null)
+        return null;
+      if (target == null)
+        target = new UptimeCalendar();
+
+      target.AllDayEvent = source.AllDayEvent;
+      target.EndDate = source.EndDate;
+      target.StartDate = source.StartDate;
+      target.Recurring = source.Recurring;
+      target.RecurringId = source.RecurringId;
+
+      target.ResourceId = source.ResourceId;
+
+      return target;
+      
+    }
+
+    public override AppointmentDto EntityToDto(UptimeCalendar source, AppointmentDto target) {
+      if (source == null)
+        return null;
+      if (target == null)
+        target = new AppointmentDto();
+      
+      target.AllDayEvent = source.AllDayEvent;
+      target.EndDate = source.EndDate;
+      target.StartDate = source.StartDate;
+      target.Recurring = source.Recurring;
+      target.RecurringId = source.RecurringId;
+
+      target.ResourceId = source.ResourceId;
+
+      return target;
+
+    }
+
+    #region IGenericDao<AppointmentDto> Members
+
+    public AppointmentDto FindById(Guid id) {
+      return (from app in Context.UptimeCalendars
+              where app.UptimeCalendarId.Equals(id)
+              select EntityToDto(app, null)).SingleOrDefault();
+    }
+
+    public IEnumerable<AppointmentDto> FindAll() {
+      return (from app in Context.UptimeCalendars              
+              select EntityToDto(app, null)).ToList();
+    }
+
+    public AppointmentDto Insert(AppointmentDto bObj) {
+      UptimeCalendar uc = DtoToEntity(bObj, null);
+      Context.UptimeCalendars.InsertOnSubmit(uc);
+      CommitChanges();
+      bObj.Id = uc.UptimeCalendarId;
+      return bObj;
+    }
+
+    public void Delete(AppointmentDto bObj) {
+      Context.UptimeCalendars.DeleteOnSubmit(Context.UptimeCalendars.SingleOrDefault(uc => uc.UptimeCalendarId.Equals(bObj.Id)));
+      CommitChanges();
+    }
+
+    public void Update(AppointmentDto bObj) {
+      UptimeCalendar cc = Context.UptimeCalendars.SingleOrDefault(c => c.UptimeCalendarId.Equals(bObj.Id));
+      DtoToEntity(bObj, cc);
+      CommitChanges();
+    }
+
+    public IEnumerable<AppointmentDto> GetUptimeCalendarForResource(Guid resourceId) {
+      return (from uc in Context.UptimeCalendars
+              where uc.ResourceId.Equals(resourceId)
+              select EntityToDto(uc, null)).ToList();
+    }
+
+    public void SetUptimeCalendarForResource(Guid resourceId, IEnumerable<AppointmentDto> appointments) {
+      var q = (from uc in Context.UptimeCalendars
+               where uc.ResourceId.Equals(resourceId)
+               select uc);
+      
+      Context.UptimeCalendars.DeleteAllOnSubmit(q);
+
+      foreach (AppointmentDto appdto in appointments) {      
+        UptimeCalendar uc = DtoToEntity(appdto, null);
+        uc.ResourceId = resourceId;
+        Context.UptimeCalendars.InsertOnSubmit(uc);
+      }
+
+      CommitChanges();            
+    }    
+
+    public IEnumerable<AppointmentDto> GetCalendarForSlave(SlaveDto slave) {
+      Slave dbc = Context.Resources.OfType<Slave>().SingleOrDefault(c => c.ResourceId.Equals(slave.Id));
+      IList<AppointmentDto> appointments = new List<AppointmentDto>();
+      if (dbc != null) {
+        SlaveGroup cg =
+          Context.Resources.OfType<SlaveGroup>().SingleOrDefault(cgroup => cgroup.ResourceId.Equals(dbc.UseCalendarFromResourceId));
+        //in case no plan has been set
+        if (cg == null)
+          if (dbc.SlaveGroup_Resources_Parents.FirstOrDefault() != null)
+            cg = dbc.SlaveGroup_Resources_Parents.FirstOrDefault().SlaveGroup;
+
+        if (cg == null)
+          return appointments;
+
+        while (cg.UptimeCalendars.Count == 0) {
+          if (cg.SlaveGroup_Resources_Parents.FirstOrDefault() != null)
+            cg = cg.SlaveGroup_Resources_Parents.FirstOrDefault().SlaveGroup;
+          else {
+            break;
+          }
+        }
+
+        foreach (UptimeCalendar appointment in cg.UptimeCalendars) {
+          appointments.Add(EntityToDto(appointment,null));  
+        }
+
+      }
+      return appointments;
+    }
+
+    public void NotifySlavesOfNewCalendar(Guid groupId, bool forcePush) {
+      
+      //Get the current SlaveGroup
+      SlaveGroup cg = Context.Resources.OfType<SlaveGroup>().SingleOrDefault(cgroup => cgroup.ResourceId.Equals(groupId));
+      if(cg == null)
+        return;
+
+      //Get all the affected slaves
+      List<Slave> slaves = Context.Resources.OfType<Slave>().Where(c => c.UseCalendarFromResourceId.Equals(cg.ResourceId)).ToList();
+      
+      //Set new state
+      foreach (Slave slave in slaves) {
+        slave.CalendarSyncStatus = (forcePush ? Enum.GetName(typeof(CalendarState), CalendarState.ForceFetch) : Enum.GetName(typeof(CalendarState), CalendarState.Fetch));      
+      }
+      
+      CommitChanges();
+
+      //Get all Subgroups
+      List<SlaveGroup> groups = (from cg1 in Context.Resources.OfType<SlaveGroup>()
+                                  where cg1.SlaveGroup_Resources_Parents.Any(
+                                cgr => cgr.SlaveGroupId.Equals(groupId))
+                              select cg1).ToList();
+
+      //If they have their own calendar - stop propagation
+      //otherweise - propagate
+      foreach (SlaveGroup cgroup in groups) {
+        if(cgroup.UptimeCalendars.Count == 0)
+          NotifySlavesOfNewCalendar(cgroup.ResourceId, forcePush);        
+      }
+    }
+
+    #endregion
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/VarBinaryStream.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/VarBinaryStream.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/VarBinaryStream.cs	(revision 4340)
@@ -0,0 +1,281 @@
+/* Based on: 
+ *   http://www.eggheadcafe.com/conversation.aspx?messageid=29988910&threadid=29988841
+ * */
+
+using System;
+using System.IO;
+using System.Data.SqlClient;
+using System.Data;
+using HeuristicLab.Tracing;
+
+namespace HeuristicLab.Hive.Server.LINQDataAccess {
+  /// <summary>
+  /// The VarBinaryStream class inherits from Stream. It uses a
+  /// VarBinarySource class to execute the actual TSQL.
+  /// </summary>
+  public class VarBinaryStream : Stream, IDisposable {
+    private long _position;
+    private readonly VarBinarySource _source;
+
+    public VarBinaryStream(VarBinarySource source) {
+      _position = 0;
+      _source = source;
+    }
+
+    public override bool CanRead {
+      get { return true; }
+    }
+
+    public override bool CanSeek {
+      get { return true; }
+    }
+
+    public override bool CanWrite {
+      get { return true; }
+    }
+
+    public override long Length {
+      get { return _source.Length; }
+    }
+
+    public override long Position {
+      get { return _position; }
+      set { this.Seek(value, SeekOrigin.Begin); }
+    }
+
+    public override void Flush() { }
+
+    public override long Seek(long offset, SeekOrigin origin) {
+      switch (origin) {
+        case SeekOrigin.Begin: {
+            if ((offset < 0) && (offset > this.Length))
+              throw new ArgumentException("Invalid seek origin.");
+            _position = offset;
+            break;
+          }
+        case SeekOrigin.End: {
+            if ((offset > 0) && (offset < -this.Length))
+              throw new ArgumentException("Invalid seek origin.");
+            _position = this.Length - offset;
+            break;
+          }
+        case SeekOrigin.Current: {
+            if ((_position + offset > this.Length))
+              throw new ArgumentException("Invalid seek origin.");
+            _position = _position + offset;
+            break;
+          }
+        default: {
+            throw new ArgumentOutOfRangeException("origin");
+          }
+      }
+      return _position;
+    }
+
+    public override void SetLength(long value) {
+      throw new NotSupportedException();
+    }
+
+    public override int Read(byte[] buffer, int offset, int count) {
+      if (buffer == null)
+        throw new ArgumentNullException("buffer");
+      if (offset < 0)
+        throw new ArgumentOutOfRangeException("offset");
+      if (count < 0)
+        throw new ArgumentOutOfRangeException("count");
+      if (buffer.Length - offset < count)
+        throw new ArgumentException("Offset and length were out of bounds for the array");
+
+      byte[] data = _source.Read(Position, count);
+      if (data == null)
+        return 0;
+
+      Buffer.BlockCopy(data, 0, buffer, offset, data.Length);
+      _position += data.Length;
+      return data.Length;
+    }
+
+    public override void Write(byte[] buffer, int offset, int count) {
+      if (buffer == null)
+        throw new ArgumentNullException("buffer");
+      if (offset < 0)
+        throw new ArgumentOutOfRangeException("offset");
+      if (count < 0)
+        throw new ArgumentOutOfRangeException("count");
+      if (buffer.Length - offset < count)
+        throw new ArgumentException("Offset and length were out of bounds for the array");
+
+      byte[] data = GetWriteBuffer(buffer, count, offset);
+      _source.Write(data, _position, count);
+      _position += count;
+    }
+
+    private static byte[] GetWriteBuffer(byte[] buffer, int count, int
+    offset) {
+      if (buffer.Length == count)
+        return buffer;
+      byte[] data = new byte[count];
+      Buffer.BlockCopy(buffer, offset, data, 0, count);
+      return data;
+    }
+
+    public override void Close() {
+      _source.Close();
+    }
+
+    protected override void Dispose(bool disposing) {
+      if (!disposing) {
+        if (_source != null) {
+          _source.Close();
+          _source.Dispose();
+        }
+      }
+      base.Dispose(disposing);
+    }
+  }
+
+
+  public class VarBinarySource : IDisposable {
+    private SqlCommand _readCommand;
+    private SqlCommand _writeCommand;
+    private SqlConnection _connection;
+    private SqlTransaction _transaction;
+    private bool _ownedTransaction = false;
+    private bool _ownedConnection = false;
+    private readonly long _length;
+
+    public VarBinarySource(SqlConnection connection,
+      SqlTransaction transaction,
+      string table, string
+    dataColumn, string keyColumn, Guid key) {
+      _connection = connection;
+      _transaction = (SqlTransaction) ContextFactory.Instance.CurrentContext.Transaction;
+      /*
+      if (_connection.State == ConnectionState.Closed) {
+        _connection.Open();
+        _ownedConnection = true;
+
+        _transaction =
+          _connection.BeginTransaction(IsolationLevel.RepeatableRead) as SqlTransaction;
+        _ownedTransaction = true;
+      } else {
+        _ownedConnection = false;
+
+        if (transaction != null) {
+          _transaction = transaction;
+
+          _ownedTransaction = false;
+        } else {
+          _transaction =
+            _connection.BeginTransaction(IsolationLevel.ReadCommitted) as SqlTransaction;
+
+          _ownedTransaction = true;
+        }
+      }        */
+
+      _length = GetLength(connection, table, dataColumn, keyColumn, key);
+      _readCommand = CreateReadCommand(connection, table, dataColumn,
+      keyColumn, key);
+      _writeCommand = CreateWriteCommand(connection, table, dataColumn,
+      keyColumn, key);
+    }
+
+    public long Length {
+      get { return _length; }
+    }
+
+    private static SqlCommand CreateReadCommand(SqlConnection connection,
+    string table, string dataColumn, string keyColumn,
+    Guid key) {
+      SqlCommand readCommand = connection.CreateCommand();
+      readCommand.CommandText = string.Format(@"
+select substring({0}, @offset, @length)
+from {1}
+where {2} = @key", dataColumn, table, keyColumn);
+      readCommand.Parameters.Add("@key", SqlDbType.UniqueIdentifier).Value = key;
+      readCommand.Parameters.Add("@offset", SqlDbType.BigInt);
+      readCommand.Parameters.Add("@length", SqlDbType.BigInt);
+      return readCommand;
+    }
+
+    private static SqlCommand CreateWriteCommand(SqlConnection connection,
+    string table, string dataColumn, string keyColumn,
+    Guid key) {
+      SqlCommand writecommand = connection.CreateCommand();
+      writecommand.CommandText = string.Format(@"
+update {0}
+set {1}.write(@buffer, @offset, @length)
+where {2} = @key", table, dataColumn, keyColumn);
+      writecommand.Parameters.Add("@key", SqlDbType.UniqueIdentifier).Value = key;
+      writecommand.Parameters.Add("@offset", SqlDbType.BigInt);
+      writecommand.Parameters.Add("@length", SqlDbType.BigInt);
+      writecommand.Parameters.Add("@buffer", SqlDbType.VarBinary);
+      return writecommand;
+    }
+
+    private long GetLength(SqlConnection connection,
+      string table,
+    string dataColumn, string keyColumn,
+    Guid key) {
+      using (SqlCommand command = connection.CreateCommand()) {
+        command.Transaction = _transaction;
+
+        SqlParameter length = command.Parameters.Add("@length",
+        SqlDbType.BigInt);
+        length.Direction = ParameterDirection.Output;
+
+        command.CommandText = string.Format(@"
+select @length = cast(datalength({0}) as bigint)
+from {1}
+where {2} = @key", dataColumn, table, keyColumn);
+        command.Parameters.Add("@key", SqlDbType.UniqueIdentifier).Value = key;
+        command.ExecuteNonQuery();
+        return length.Value == DBNull.Value ? 0 : (long)length.Value;
+      }
+    }
+
+    public byte[] Read(long offset, long length) {
+      _readCommand.Transaction = _transaction;
+
+      // substring is 1-based.
+      _readCommand.Parameters["@offset"].Value = offset + 1;
+      _readCommand.Parameters["@length"].Value = length;
+      return (byte[])_readCommand.ExecuteScalar();
+    }
+
+    public void Write(byte[] buffer, long offset, long length) {
+      _writeCommand.Transaction = _transaction;
+
+      _writeCommand.Parameters["@buffer"].Value = buffer;
+      _writeCommand.Parameters["@offset"].Value = offset;
+      _writeCommand.Parameters["@length"].Value = length;
+      _writeCommand.ExecuteNonQuery();
+    }
+
+    public void Close() {
+      Logger.Info("Closing Stream");
+      if (_transaction != null) {
+        _transaction.Commit();
+        _transaction = null;
+        Logger.Info("Transaction commited and closed");
+      }
+
+      if (_connection != null) {
+        _connection.Close();
+        ContextFactory.Instance.CurrentContext.Dispose();
+        ContextFactory.Instance.RemoveContext();
+        Logger.Info("Connection and Context disposed and set null");
+      }
+    }
+
+    public void Dispose() {
+      if (_readCommand != null) {
+        _readCommand.Dispose();
+      }
+      if (_writeCommand != null) {
+        _writeCommand.Dispose();
+      }
+    }
+  }
+}
+
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/app.config
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/app.config	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/app.config	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <configSections>
+    </configSections>
+    <connectionStrings>
+        <add name="HeuristicLab.Hive.Server.LINQDataAccess.Properties.Settings.HeuristicLab_Hive_LinqConnectionString"
+            connectionString="Data Source=localhost;Initial Catalog=HeuristicLab.Hive;Integrated Security=True;"
+            providerName="System.Data.SqlClient" />
+    </connectionStrings>
+</configuration>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/Copy of HeuristicLabHiveServerApplication.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/Copy of HeuristicLabHiveServerApplication.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/Copy of HeuristicLabHiveServerApplication.cs	(revision 4340)
@@ -0,0 +1,179 @@
+﻿#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.Net;
+using System.ServiceModel;
+using System.ServiceModel.Description;
+using System.Windows.Forms;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Hive.Server.Core;
+
+namespace HeuristicLab.Hive.Server {
+  [Application("Hive Server", "Server application for the distributed hive engine.", true)]
+  public class HeuristicLabHiveServerApplication : ApplicationBase {
+    public const string STR_SlaveCommunicator = "SlaveCommunicator";
+    public const string STR_ServerConsoleFacade = "ServerConsoleFacade";
+    public const string STR_ExecutionEngineFacade = "ExecutionEngineFacade";
+
+    private Dictionary<string, ServiceHost> runningServices = new Dictionary<string, ServiceHost>();
+    private NetTcpBinding binding = (NetTcpBinding)WcfSettings.GetBinding();
+    private NetTcpBinding streamedBinding = (NetTcpBinding)WcfSettings.GetStreamedBinding();
+
+    private enum Services {
+      SlaveCommunicator,
+      ServerConsoleFacade,
+      ExecutionEngineFacade,
+      All
+    }
+
+    private bool AddMexEndpoint(ServiceHost serviceHost) {
+      if (serviceHost != null) {
+        ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
+        serviceHost.Description.Behaviors.Add(behavior);
+
+        return serviceHost.AddServiceEndpoint(
+          typeof(IMetadataExchange),
+          MetadataExchangeBindings.CreateMexTcpBinding(),
+          "mex") != null;
+      } else
+        return false;
+    }
+
+    private Uri StartService(Services svc, IPAddress ipAddress, int port) {
+      string curServiceHost = "";
+      Uri uriTcp;
+      ISlaveFacade clientCommunicatorInstance = ApplicationManager.Manager.GetInstances<ISlaveFacade>().First();
+      IServerConsoleFacade serverConsoleInstance = ApplicationManager.Manager.GetInstances<IServerConsoleFacade>().First();
+      IExecutionEngineFacade executionEngineInstance = ApplicationManager.Manager.GetInstances<IExecutionEngineFacade>().First();
+      //SpringServiceHost serviceHost = null;
+      ServiceHost serviceHost = null;
+
+      switch (svc) {
+        case Services.SlaveCommunicator:
+          //  if (clientCommunicatorInstances.Count() > 0) {
+          uriTcp = new Uri("net.tcp://" + ipAddress + ":" + port + "/HiveServer/");
+          serviceHost = new ServiceHost(clientCommunicatorInstance.GetType(), uriTcp);
+          //serviceHost = new ServiceHost(typeof(SlaveFacade), uriTcp);
+          //serviceHost = new SpringServiceHost("clientFacade", uriTcp);
+          serviceHost.AddServiceEndpoint(typeof(ISlaveFacade), streamedBinding, STR_SlaveCommunicator);
+
+          ServiceDebugBehavior sdb = serviceHost.Description.Behaviors.Find<ServiceDebugBehavior>();
+          if (sdb == null) {
+            sdb = new ServiceDebugBehavior();
+            serviceHost.Description.Behaviors.Add(sdb);
+          }
+          sdb.IncludeExceptionDetailInFaults = true;
+
+
+
+          curServiceHost = STR_SlaveCommunicator;
+          //  }
+          break;
+        case Services.ServerConsoleFacade:
+          //  if (serverConsoleInstances.Count() > 0) {
+          uriTcp = new Uri("net.tcp://" + ipAddress + ":" + port + "/HiveServerConsole/");
+          serviceHost = new ServiceHost(serverConsoleInstance.GetType(), uriTcp);
+          //serviceHost = new SpringServiceHost("serverConsoleFacade", uriTcp);
+          serviceHost.AddServiceEndpoint(typeof(IServerConsoleFacade), binding, STR_ServerConsoleFacade);
+          curServiceHost = STR_ServerConsoleFacade;
+          //  }
+          break;
+        case Services.ExecutionEngineFacade:
+          //  if (executionEngineInstances.Count() > 0) {
+          uriTcp = new Uri("net.tcp://" + ipAddress + ":" + port + "/ExecutionEngine/");
+          serviceHost = new ServiceHost(executionEngineInstance.GetType(), uriTcp);
+          //serviceHost = new SpringServiceHost("executionEngineFacade", uriTcp);
+          serviceHost.AddServiceEndpoint(typeof(IExecutionEngineFacade), streamedBinding, STR_ExecutionEngineFacade);
+          curServiceHost = STR_ExecutionEngineFacade;
+          //  }
+          break;
+        case Services.All:
+          throw new InvalidOperationException("Not supported!");
+        default:
+          return null;
+      }
+      if (!String.IsNullOrEmpty(curServiceHost)) {
+        AddMexEndpoint(serviceHost);
+        //WcfSettings.SetServiceCertificate(serviceHost);
+        serviceHost.Open();
+        runningServices.Add(curServiceHost, serviceHost);
+        return serviceHost.BaseAddresses[0];
+      } else
+        return null;
+    }
+
+    private void StopService(Services svc) {
+      ServiceHost svcHost = null;
+      switch (svc) {
+        case Services.SlaveCommunicator:
+          runningServices.TryGetValue(STR_SlaveCommunicator, out svcHost);
+          break;
+        case Services.ServerConsoleFacade:
+          runningServices.TryGetValue(STR_ServerConsoleFacade, out svcHost);
+          break;
+        case Services.ExecutionEngineFacade:
+          runningServices.TryGetValue(STR_ExecutionEngineFacade, out svcHost);
+          break;
+        case Services.All:
+          foreach (KeyValuePair<string, ServiceHost> item in runningServices)
+            item.Value.Close();
+          return;
+        default:
+          throw new InvalidOperationException("Not supported!");
+      }
+      svcHost.Close();
+    }
+
+    public override void Run() {
+      IPAddress[] addresses = Dns.GetHostAddresses(Dns.GetHostName());
+      int index = 0;
+      if (System.Environment.OSVersion.Version.Major >= 6) {
+        for (index = addresses.Length - 1; index >= 0; index--)
+          if (addresses[index].AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
+            break;
+      }
+
+      
+
+      //Start services and record their base address
+      Dictionary<string, Uri> baseAddrDict = new Dictionary<string, Uri>();
+      baseAddrDict.Add(STR_SlaveCommunicator, StartService(Services.SlaveCommunicator, addresses[index], WcfSettings.DEFAULTPORT));
+      baseAddrDict.Add(STR_ServerConsoleFacade, StartService(Services.ServerConsoleFacade, addresses[index], WcfSettings.DEFAULTPORT));
+      baseAddrDict.Add(STR_ExecutionEngineFacade, StartService(Services.ExecutionEngineFacade, addresses[index], WcfSettings.DEFAULTPORT));
+
+      ILifecycleManager lifecycleManager = ServiceLocator.GetLifecycleManager();
+
+      lifecycleManager.Init();
+
+      Form mainForm = new MainForm(baseAddrDict);
+      Application.Run();
+
+      lifecycleManager.Shutdown();
+      
+      StopService(Services.All);
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/HeuristicLab.Hive.Server-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/HeuristicLab.Hive.Server-3.3.csproj	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/HeuristicLab.Hive.Server-3.3.csproj	(revision 4340)
@@ -0,0 +1,163 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Server</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Server-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <StartupObject>
+    </StartupObject>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Common.Resources-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Common.Resources-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Tracing-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Tracing-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceProcess" />
+    <Reference Include="System.Transactions" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="HeuristicLabHiveServerPlugin.cs" />
+    <Compile Include="MainForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="MainForm.Designer.cs">
+      <DependentUpon>MainForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HeuristicLabHiveServerApplication.cs" />
+    <EmbeddedResource Include="MainForm.resx">
+      <DependentUpon>MainForm.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Contracts\3.3\HeuristicLab.Hive.Contracts-3.3.csproj">
+      <Project>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</Project>
+      <Name>HeuristicLab.Hive.Contracts-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Server.Core\3.3\HeuristicLab.Hive.Server.Core-3.3.csproj">
+      <Project>{898B31CF-81DC-453B-AEB3-BDF83197A7EE}</Project>
+      <Name>HeuristicLab.Hive.Server.Core-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/HeuristicLabHiveServerApplication.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/HeuristicLabHiveServerApplication.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/HeuristicLabHiveServerApplication.cs	(revision 4340)
@@ -0,0 +1,83 @@
+﻿#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.Net;
+using System.ServiceModel;
+using System.ServiceModel.Description;
+using System.Windows.Forms;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Hive.Server.Core;
+
+namespace HeuristicLab.Hive.Server {
+  [Application("Hive Server", "Server application for the distributed hive engine.", false)]
+  public class HeuristicLabHiveServerApplication : ApplicationBase {
+    private IDictionary<string, ServiceHost> serviceHosts = new Dictionary<string, ServiceHost>();
+    ILifecycleManager lifecycleManager = null;
+
+    public override void Run() {
+      try {
+        CreateAndOpenServiceHost(typeof(ISlaveFacade), WcfSettings.SlaveServiceName);
+        CreateAndOpenServiceHost(typeof(IServerConsoleFacade), WcfSettings.ServerConsoleServiceName);
+        CreateAndOpenServiceHost(typeof(IClientFacade), WcfSettings.ClientServiceName);
+
+        lifecycleManager = ServiceLocator.GetLifecycleManager();
+        lifecycleManager.Init();
+
+        Form mainForm = new MainForm(GetBaseAddresses());
+        Application.Run();
+      } finally {
+        foreach (ServiceHost host in serviceHosts.Values) {
+          if (host.State == CommunicationState.Opened)
+            host.Close();
+        }
+        if (lifecycleManager != null)
+          lifecycleManager.Shutdown();
+      }
+    }
+
+    private ServiceHost CreateAndOpenServiceHost(Type serviceInterfaceType, string serviceName) {
+      try {
+        ServiceHost host = new ServiceHost(ApplicationManager.Manager.GetTypes(serviceInterfaceType).First());
+        host.Open();
+        serviceHosts.Add(serviceName, host);
+        return host;
+      }
+      catch (AddressAccessDeniedException ex) {
+        throw new Exception("Unable to start WCF-Services due to missing rights. Run the following command as administrator: \"netsh http add urlacl url=http://+:" + WcfSettings.DefaultPort + "/ user=MYMACHINE\\UserName\". See inner exception for more details.", ex);
+      }
+    }
+
+    private IEnumerable<Uri> GetBaseAddresses() {
+      List<Uri> list = new List<Uri>();
+      foreach (KeyValuePair<string, ServiceHost> host in serviceHosts) {
+        foreach (var addr in host.Value.BaseAddresses) {
+          list.Add(addr);
+        }
+      }
+      return list;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/HeuristicLabHiveServerPlugin.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/HeuristicLabHiveServerPlugin.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/HeuristicLabHiveServerPlugin.cs	(revision 4340)
@@ -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.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Server {
+  [Plugin("HeuristicLab.Hive.Server", "3.3")]
+  [PluginFile("HeuristicLab.Hive.Server-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.Contracts", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.Server.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Tracing", "3.3")]
+  public class HeuristicLabHiveServerPlugin : PluginBase {
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/MainForm.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/MainForm.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/MainForm.Designer.cs	(revision 4340)
@@ -0,0 +1,124 @@
+﻿namespace HeuristicLab.Hive.Server
+{
+    partial class MainForm
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+          this.components = new System.ComponentModel.Container();
+          this.label1 = new System.Windows.Forms.Label();
+          this.rtfServices = new System.Windows.Forms.RichTextBox();
+          this.ni = new System.Windows.Forms.NotifyIcon(this.components);
+          this.ctxNotifyMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
+          this.tsShowInfo = new System.Windows.Forms.ToolStripMenuItem();
+          this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
+          this.tsExit = new System.Windows.Forms.ToolStripMenuItem();
+          this.ctxNotifyMenu.SuspendLayout();
+          this.SuspendLayout();
+          // 
+          // label1
+          // 
+          this.label1.AutoSize = true;
+          this.label1.Location = new System.Drawing.Point(12, 9);
+          this.label1.Name = "label1";
+          this.label1.Size = new System.Drawing.Size(97, 13);
+          this.label1.TabIndex = 0;
+          this.label1.Text = "Available Services:";
+          // 
+          // rtfServices
+          // 
+          this.rtfServices.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                      | System.Windows.Forms.AnchorStyles.Left)
+                      | System.Windows.Forms.AnchorStyles.Right)));
+          this.rtfServices.Location = new System.Drawing.Point(12, 25);
+          this.rtfServices.Name = "rtfServices";
+          this.rtfServices.ReadOnly = true;
+          this.rtfServices.Size = new System.Drawing.Size(377, 129);
+          this.rtfServices.TabIndex = 1;
+          this.rtfServices.Text = "";
+          // 
+          // ni
+          // 
+          this.ni.ContextMenuStrip = this.ctxNotifyMenu;
+          this.ni.Text = "notifyIcon1";
+          this.ni.Visible = true;
+          this.ni.MouseClick += new System.Windows.Forms.MouseEventHandler(this.ni_MouseClick);
+          // 
+          // ctxNotifyMenu
+          // 
+          this.ctxNotifyMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.tsShowInfo,
+            this.toolStripSeparator1,
+            this.tsExit});
+          this.ctxNotifyMenu.Name = "ctxNotifyMenu";
+          this.ctxNotifyMenu.Size = new System.Drawing.Size(96, 54);
+          // 
+          // tsShowInfo
+          // 
+          this.tsShowInfo.Name = "tsShowInfo";
+          this.tsShowInfo.Size = new System.Drawing.Size(95, 22);
+          this.tsShowInfo.Text = "&Info";
+          this.tsShowInfo.Click += new System.EventHandler(this.ShowInfo);
+          // 
+          // toolStripSeparator1
+          // 
+          this.toolStripSeparator1.Name = "toolStripSeparator1";
+          this.toolStripSeparator1.Size = new System.Drawing.Size(92, 6);
+          // 
+          // tsExit
+          // 
+          this.tsExit.Name = "tsExit";
+          this.tsExit.Size = new System.Drawing.Size(95, 22);
+          this.tsExit.Text = "E&xit";
+          this.tsExit.Click += new System.EventHandler(this.CloseApp);
+          // 
+          // MainForm
+          // 
+          this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+          this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+          this.ClientSize = new System.Drawing.Size(401, 166);
+          this.Controls.Add(this.rtfServices);
+          this.Controls.Add(this.label1);
+          this.Name = "MainForm";
+          this.Text = "Hive Server";
+          this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing);
+          this.ctxNotifyMenu.ResumeLayout(false);
+          this.ResumeLayout(false);
+          this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.RichTextBox rtfServices;
+        private System.Windows.Forms.NotifyIcon ni;
+        private System.Windows.Forms.ContextMenuStrip ctxNotifyMenu;
+        private System.Windows.Forms.ToolStripMenuItem tsShowInfo;
+        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
+        private System.Windows.Forms.ToolStripMenuItem tsExit;
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/MainForm.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/MainForm.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/MainForm.cs	(revision 4340)
@@ -0,0 +1,49 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Hive.Contracts;
+
+namespace HeuristicLab.Hive.Server {
+  public partial class MainForm : Form {
+    public MainForm(IEnumerable<Uri> addresses) {
+      InitializeComponent();
+
+      StringBuilder servicesTxt = new StringBuilder();
+      foreach (Uri uri in addresses) {
+        servicesTxt.AppendLine(uri.ToString());
+      }
+
+      rtfServices.AppendText(servicesTxt.ToString());
+
+      ni.Icon = HeuristicLab.Common.Resources.HeuristicLab.Icon;
+      ni.BalloonTipTitle = "HL Hive Server Services";
+      ni.BalloonTipText = servicesTxt.ToString();
+      ni.BalloonTipIcon = ToolTipIcon.Info;
+      ni.Text = "HL Hive Server Services";
+      ni.ShowBalloonTip(10000);
+    }
+
+    private void CloseApp(object sender, EventArgs e) {
+      this.Dispose();
+      Application.Exit();
+    }
+
+    private void ShowInfo(object sender, EventArgs e) {
+      this.Visible = true;
+    }
+
+    private void MainForm_FormClosing(object sender, FormClosingEventArgs e) {
+      e.Cancel = true;
+      this.Visible = false;
+    }
+
+    private void ni_MouseClick(object sender, MouseEventArgs e) {
+      ShowInfo(sender, e);
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/MainForm.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/MainForm.resx	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/MainForm.resx	(revision 4340)
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="ni.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="ctxNotifyMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>77, 17</value>
+  </metadata>
+</root>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/Properties/AssemblyInfo.frame	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/Properties/AssemblyInfo.frame	(revision 4340)
@@ -0,0 +1,58 @@
+#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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Hive.Server")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("4B463015-5F7D-4e74-A878-56B6AD06A1AA")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/HeuristicLab.Hive.Slave.Common-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/HeuristicLab.Hive.Slave.Common-3.3.csproj	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/HeuristicLab.Hive.Slave.Common-3.3.csproj	(revision 4340)
@@ -0,0 +1,169 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{89F4BC52-C174-481E-9BD2-3814171020E8}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Slave.Common</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Slave.Common-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <DelaySign>false</DelaySign>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="HeuristicLabHiveSlaveCommonPlugin.cs" />
+    <Compile Include="MessageQueue.cs" />
+    <Compile Include="NetworkEnum.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Contracts\3.3\HeuristicLab.Hive.Contracts-3.3.csproj">
+      <Project>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</Project>
+      <Name>HeuristicLab.Hive.Contracts-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup />
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/HeuristicLabHiveSlaveCommonPlugin.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/HeuristicLabHiveSlaveCommonPlugin.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/HeuristicLabHiveSlaveCommonPlugin.cs	(revision 4340)
@@ -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.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Slave.Common {
+  [Plugin("HeuristicLab.Hive.Slave.Common", "3.3")]
+  [PluginFile("HeuristicLab.Hive.Slave.Common-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.Contracts", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  public class HeuristicLabHiveSlaveCommonPlugin: PluginBase {
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/MessageQueue.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/MessageQueue.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/MessageQueue.cs	(revision 4340)
@@ -0,0 +1,105 @@
+﻿#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.Text;
+using System.Threading;
+using HeuristicLab.Hive.Contracts;
+
+namespace HeuristicLab.Hive.Slave.Common {
+
+  /// <summary>
+  /// Queue for the communication between threads and AppDomains. The Queue is threadsafe and uses a semaphore
+  /// </summary>
+  public class MessageQueue : MarshalByRefObject {
+
+    private static MessageQueue instance = null;
+    
+    private Queue<MessageContainer> queue = null;
+    private Semaphore semaphore = null;
+
+    /// <summary>
+    /// Returns the Instance of the MessageQueue. If the instance is null, it will be created.
+    /// This is a Implementation of the Singleton pattern
+    /// </summary>
+    /// <returns>the MessageQueue Instance</returns>
+    public static MessageQueue GetInstance() {
+      if (instance == null) {
+        instance = new MessageQueue();
+      }
+      return instance;
+    }
+
+    /// <summary>
+    /// Sets Lease time to infinite
+    /// </summary>
+    /// <returns>nothing</returns>
+    public override object InitializeLifetimeService() {
+      return null;
+    }
+
+    /// <summary>
+    /// Creates a new MessageQueue Object.
+    /// A new Queue and a Semaphore is created. The Semaphore is set to a max size of 5000.
+    /// </summary>
+    private MessageQueue() {
+      queue = new Queue<MessageContainer>();
+      semaphore = new Semaphore(0, 5000);
+    }
+
+    /// <summary>
+    /// Returns the oldest MessageContainer Object from the Queue. 
+    /// </summary>
+    /// <returns>the oldest MessageContainer Object</returns>
+    public MessageContainer GetMessage() {
+      semaphore.WaitOne();
+      lock (this) {
+        if (queue.Count > 0) {
+          return queue.Dequeue();
+        }
+      }
+      return null;
+    }
+
+    /// <summary>
+    /// Adds a MessageContainer Object to the Queue 
+    /// </summary>
+    /// <param name="messageContainer">the MessageContainer</param>
+    public void AddMessage(MessageContainer messageContainer) {
+      lock (this) {
+        queue.Enqueue(messageContainer);
+        semaphore.Release();
+      }
+    }
+
+    /// <summary>
+    /// Adds a message to the Queue. The MessageContainer Object is built in the Method
+    /// </summary>
+    /// <param name="message">the Message</param>
+    public void AddMessage(MessageContainer.MessageType message) {
+      lock (this) {
+        queue.Enqueue(new MessageContainer(message));
+        semaphore.Release();
+      }
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/NetworkEnum.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/NetworkEnum.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/NetworkEnum.cs	(revision 4340)
@@ -0,0 +1,31 @@
+﻿#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;
+
+namespace HeuristicLab.Hive.Slave.Common {
+  public class NetworkEnum {
+    public enum WcfConnState { Connected, Disconnected, Failed }  
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/Properties/AssemblyInfo.frame	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/Properties/AssemblyInfo.frame	(revision 4340)
@@ -0,0 +1,60 @@
+#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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+using System.Security;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Hive.Slave.Common")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AllowPartiallyTrustedCallers]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("390a4020-8f30-4c57-b039-6f3647df86b0")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/GetJobCompletedEventArgs.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/GetJobCompletedEventArgs.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/GetJobCompletedEventArgs.cs	(revision 4340)
@@ -0,0 +1,36 @@
+﻿#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;
+
+namespace HeuristicLab.Hive.Slave.Communication.SlaveService {
+  public partial class GetJobCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+
+    /// <summary>
+    /// Contains the serialized bytestream of the job
+    /// </summary>
+    public byte[] Data {
+      get {
+        base.RaiseExceptionIfNecessary();
+        return (byte[])this.results[1];
+      }
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/HeuristicLab.Hive.Slave.Communication-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/HeuristicLab.Hive.Slave.Communication-3.3.csproj	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/HeuristicLab.Hive.Slave.Communication-3.3.csproj	(revision 4340)
@@ -0,0 +1,221 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Slave.Communication</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Slave.Communication-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.DataAccess-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Tracing-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Tracing-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="HeuristicLabHiveSlaveCommunicationPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="GetJobCompletedEventArgs.cs" />
+    <Compile Include="Service References\SlaveService\Reference.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+      <DependentUpon>Settings.settings</DependentUpon>
+    </Compile>
+    <Compile Include="SlaveServicePool.cs" />
+    <Compile Include="WcfService.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config" />
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="Properties\DataSources\HeuristicLab.Hive.Contracts.BusinessObjects.JobDto.datasource" />
+    <None Include="Properties\DataSources\HeuristicLab.Hive.Contracts.ResponseObjects.Response.datasource" />
+    <None Include="Properties\DataSources\HeuristicLab.Hive.Contracts.ResponseObjects.ResponseCalendar.datasource" />
+    <None Include="Properties\DataSources\HeuristicLab.Hive.Contracts.ResponseObjects.ResponseHeartBeat.datasource" />
+    <None Include="Properties\DataSources\HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived.datasource" />
+    <None Include="Properties\DataSources\HeuristicLab.PluginInfrastructure.CachedHivePluginInfoDto.datasource" />
+    <None Include="Service References\SlaveService\SlaveFacade.wsdl" />
+    <None Include="Service References\SlaveService\SlaveService.wsdl" />
+    <None Include="Service References\SlaveService\SlaveService.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveService\SlaveService1.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveService\SlaveService2.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveService\SlaveService3.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveService\SlaveService4.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveService\SlaveService5.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveService\SlaveService6.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveService\SlaveService7.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveService\SlaveService8.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveService\SlaveService9.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Contracts\3.3\HeuristicLab.Hive.Contracts-3.3.csproj">
+      <Project>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</Project>
+      <Name>HeuristicLab.Hive.Contracts-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Slave.Common\3.3\HeuristicLab.Hive.Slave.Common-3.3.csproj">
+      <Project>{89F4BC52-C174-481E-9BD2-3814171020E8}</Project>
+      <Name>HeuristicLab.Hive.Slave.Common-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadata Include="Service References\" />
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadataStorage Include="Service References\SlaveService\" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\SlaveService\SlaveService.disco" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\SlaveService\configuration91.svcinfo" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\SlaveService\configuration.svcinfo" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\SlaveService\Reference.svcmap">
+      <Generator>WCF Proxy Generator</Generator>
+      <LastGenOutput>Reference.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/HeuristicLabHiveSlaveCommunicationPlugin.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/HeuristicLabHiveSlaveCommunicationPlugin.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/HeuristicLabHiveSlaveCommunicationPlugin.cs	(revision 4340)
@@ -0,0 +1,41 @@
+﻿#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.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Slave.Communication {
+
+  [Plugin("HeuristicLab.Hive.Slave.Communication", "3.3")]
+  [PluginFile("HeuristicLab.Hive.Slave.Communication-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.DataAccess", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.Slave.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.Contracts", "3.3")]
+  [PluginDependency("HeuristicLab.Tracing", "3.3")]
+  public class HeuristicLabHiveSlaveCommunicationPlugin : PluginBase {
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/AssemblyInfo.frame	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/AssemblyInfo.frame	(revision 4340)
@@ -0,0 +1,58 @@
+#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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Hive.Slave.Communication")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("390a4020-8f30-4c57-b039-6f3647df86b0")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.JobDto.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.JobDto.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.BusinessObjects.JobDto.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="JobDto" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.BusinessObjects.JobDto, HeuristicLab.Hive.Contracts-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.Response.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.Response.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.Response.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="Response" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.Response, HeuristicLab.Hive.Contracts-3.2, Version=3.2.0.969, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseCalendar.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseCalendar.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseCalendar.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="ResponseCalendar" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.ResponseCalendar, HeuristicLab.Hive.Contracts-3.2, Version=3.2.0.3022, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseHB.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseHB.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseHB.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="ResponseHB" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.ResponseHB, HeuristicLab.Hive.Contracts-3.2, Version=3.2.0.969, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseHeartBeat.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseHeartBeat.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseHeartBeat.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="ResponseHeartBeat" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.ResponseHeartBeat, HeuristicLab.Hive.Contracts-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseJob.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseJob.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseJob.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="ResponseJob" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.ResponseJob, HeuristicLab.Hive.Contracts-3.2, Version=3.2.0.969, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseObjects.Response.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseObjects.Response.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseObjects.Response.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="Response" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.ResponseObjects.Response, HeuristicLab.Hive.Contracts-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseObjects.ResponseCalendar.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseObjects.ResponseCalendar.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseObjects.ResponseCalendar.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="ResponseCalendar" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.ResponseObjects.ResponseCalendar, HeuristicLab.Hive.Contracts-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseObjects.ResponseHeartBeat.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseObjects.ResponseHeartBeat.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseObjects.ResponseHeartBeat.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="ResponseHeartBeat" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.ResponseObjects.ResponseHeartBeat, HeuristicLab.Hive.Contracts-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="ResponseResultReceived" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived, HeuristicLab.Hive.Contracts-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponsePlugin.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponsePlugin.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponsePlugin.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="ResponsePlugin" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.ResponsePlugin, HeuristicLab.Hive.Contracts-3.2, Version=3.2.0.1369, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseResultReceived.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseResultReceived.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseResultReceived.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="ResponseResultReceived" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.ResponseResultReceived, HeuristicLab.Hive.Contracts-3.2, Version=3.2.0.969, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.PluginInfrastructure.CachedHivePluginInfoDto.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.PluginInfrastructure.CachedHivePluginInfoDto.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/DataSources/HeuristicLab.PluginInfrastructure.CachedHivePluginInfoDto.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="CachedHivePluginInfoDto" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.PluginInfrastructure.CachedHivePluginInfoDto, HeuristicLab.Hive.Contracts-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/Settings.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/Settings.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/Settings.Designer.cs	(revision 4340)
@@ -0,0 +1,50 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Slave.Communication.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("hiveslave")]
+        public string HiveUsername {
+            get {
+                return ((string)(this["HiveUsername"]));
+            }
+            set {
+                this["HiveUsername"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("hiveslave")]
+        public string HivePassword {
+            get {
+                return ((string)(this["HivePassword"]));
+            }
+            set {
+                this["HivePassword"] = value;
+            }
+        }
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/Settings.settings
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/Settings.settings	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/Settings.settings	(revision 4340)
@@ -0,0 +1,12 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Hive.Slave.Communication.Properties" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="HiveUsername" Type="System.String" Scope="User">
+      <Value Profile="(Default)">hiveslave</Value>
+    </Setting>
+    <Setting Name="HivePassword" Type="System.String" Scope="User">
+      <Value Profile="(Default)">hiveslave</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/Reference.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/Reference.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/Reference.cs	(revision 4340)
@@ -0,0 +1,1274 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Slave.Communication.SlaveService {
+    
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="SlaveService.ISlaveFacade")]
+    public interface ISlaveFacade {
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveCommunicator/Login", ReplyAction="http://tempuri.org/ISlaveCommunicator/LoginResponse")]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseHeartBeat))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseObject<HeuristicLab.Hive.Contracts.BusinessObjects.JobDto>))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseList<HeuristicLab.PluginInfrastructure.CachedHivePluginInfoDto>))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseCalendar))]
+        HeuristicLab.Hive.Contracts.ResponseObjects.Response Login(HeuristicLab.Hive.Contracts.BusinessObjects.SlaveDto slave);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveCommunicator/Login", ReplyAction="http://tempuri.org/ISlaveCommunicator/LoginResponse")]
+        System.IAsyncResult BeginLogin(HeuristicLab.Hive.Contracts.BusinessObjects.SlaveDto slave, System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Contracts.ResponseObjects.Response EndLogin(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveCommunicator/ProcessHeartBeat", ReplyAction="http://tempuri.org/ISlaveCommunicator/ProcessHeartBeatResponse")]
+        HeuristicLab.Hive.Contracts.ResponseObjects.ResponseHeartBeat ProcessHeartBeat(HeuristicLab.Hive.Contracts.BusinessObjects.HeartBeatData hbData);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveCommunicator/ProcessHeartBeat", ReplyAction="http://tempuri.org/ISlaveCommunicator/ProcessHeartBeatResponse")]
+        System.IAsyncResult BeginProcessHeartBeat(HeuristicLab.Hive.Contracts.BusinessObjects.HeartBeatData hbData, System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Contracts.ResponseObjects.ResponseHeartBeat EndProcessHeartBeat(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveCommunicator/GetJob", ReplyAction="http://tempuri.org/ISlaveCommunicator/GetJobResponse")]
+        HeuristicLab.Hive.Contracts.ResponseObjects.ResponseObject<HeuristicLab.Hive.Contracts.BusinessObjects.JobDto> GetJob(System.Guid clientId);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveCommunicator/GetJob", ReplyAction="http://tempuri.org/ISlaveCommunicator/GetJobResponse")]
+        System.IAsyncResult BeginGetJob(System.Guid clientId, System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Contracts.ResponseObjects.ResponseObject<HeuristicLab.Hive.Contracts.BusinessObjects.JobDto> EndGetJob(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveCommunicator/StoreFinishedJobResult", ReplyAction="http://tempuri.org/ISlaveCommunicator/StoreFinishedJobResultResponse")]
+        HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived StoreFinishedJobResult(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveCommunicator/StoreFinishedJobResult", ReplyAction="http://tempuri.org/ISlaveCommunicator/StoreFinishedJobResultResponse")]
+        System.IAsyncResult BeginStoreFinishedJobResult(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception, System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived EndStoreFinishedJobResult(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveCommunicator/ProcessSnapshot", ReplyAction="http://tempuri.org/ISlaveCommunicator/ProcessSnapshotResponse")]
+        HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived ProcessSnapshot(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveCommunicator/ProcessSnapshot", ReplyAction="http://tempuri.org/ISlaveCommunicator/ProcessSnapshotResponse")]
+        System.IAsyncResult BeginProcessSnapshot(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception, System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived EndProcessSnapshot(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveCommunicator/Logout", ReplyAction="http://tempuri.org/ISlaveCommunicator/LogoutResponse")]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseHeartBeat))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseObject<HeuristicLab.Hive.Contracts.BusinessObjects.JobDto>))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseList<HeuristicLab.PluginInfrastructure.CachedHivePluginInfoDto>))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseCalendar))]
+        HeuristicLab.Hive.Contracts.ResponseObjects.Response Logout(System.Guid clientId);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveCommunicator/Logout", ReplyAction="http://tempuri.org/ISlaveCommunicator/LogoutResponse")]
+        System.IAsyncResult BeginLogout(System.Guid clientId, System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Contracts.ResponseObjects.Response EndLogout(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveCommunicator/IsJobStillNeeded", ReplyAction="http://tempuri.org/ISlaveCommunicator/IsJobStillNeededResponse")]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseHeartBeat))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseObject<HeuristicLab.Hive.Contracts.BusinessObjects.JobDto>))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseList<HeuristicLab.PluginInfrastructure.CachedHivePluginInfoDto>))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseCalendar))]
+        HeuristicLab.Hive.Contracts.ResponseObjects.Response IsJobStillNeeded(System.Guid jobId);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveCommunicator/IsJobStillNeeded", ReplyAction="http://tempuri.org/ISlaveCommunicator/IsJobStillNeededResponse")]
+        System.IAsyncResult BeginIsJobStillNeeded(System.Guid jobId, System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Contracts.ResponseObjects.Response EndIsJobStillNeeded(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveCommunicator/GetPlugins", ReplyAction="http://tempuri.org/ISlaveCommunicator/GetPluginsResponse")]
+        HeuristicLab.Hive.Contracts.ResponseObjects.ResponseList<HeuristicLab.PluginInfrastructure.CachedHivePluginInfoDto> GetPlugins(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveCommunicator/GetPlugins", ReplyAction="http://tempuri.org/ISlaveCommunicator/GetPluginsResponse")]
+        System.IAsyncResult BeginGetPlugins(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList, System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Contracts.ResponseObjects.ResponseList<HeuristicLab.PluginInfrastructure.CachedHivePluginInfoDto> EndGetPlugins(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveCommunicator/GetCalendar", ReplyAction="http://tempuri.org/ISlaveCommunicator/GetCalendarResponse")]
+        HeuristicLab.Hive.Contracts.ResponseObjects.ResponseCalendar GetCalendar(System.Guid clientId);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveCommunicator/GetCalendar", ReplyAction="http://tempuri.org/ISlaveCommunicator/GetCalendarResponse")]
+        System.IAsyncResult BeginGetCalendar(System.Guid clientId, System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Contracts.ResponseObjects.ResponseCalendar EndGetCalendar(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveCommunicator/SetCalendarStatus", ReplyAction="http://tempuri.org/ISlaveCommunicator/SetCalendarStatusResponse")]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseHeartBeat))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseObject<HeuristicLab.Hive.Contracts.BusinessObjects.JobDto>))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseList<HeuristicLab.PluginInfrastructure.CachedHivePluginInfoDto>))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseObjects.ResponseCalendar))]
+        HeuristicLab.Hive.Contracts.ResponseObjects.Response SetCalendarStatus(System.Guid clientId, HeuristicLab.Hive.Contracts.BusinessObjects.CalendarState state);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveCommunicator/SetCalendarStatus", ReplyAction="http://tempuri.org/ISlaveCommunicator/SetCalendarStatusResponse")]
+        System.IAsyncResult BeginSetCalendarStatus(System.Guid clientId, HeuristicLab.Hive.Contracts.BusinessObjects.CalendarState state, System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Contracts.ResponseObjects.Response EndSetCalendarStatus(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveFacade/GetStreamedJob", ReplyAction="http://tempuri.org/ISlaveFacade/GetStreamedJobResponse")]
+        System.IO.Stream GetStreamedJob(System.Guid clientId);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveFacade/GetStreamedJob", ReplyAction="http://tempuri.org/ISlaveFacade/GetStreamedJobResponse")]
+        System.IAsyncResult BeginGetStreamedJob(System.Guid clientId, System.AsyncCallback callback, object asyncState);
+        
+        System.IO.Stream EndGetStreamedJob(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveFacade/GetStreamedPlugins", ReplyAction="http://tempuri.org/ISlaveFacade/GetStreamedPluginsResponse")]
+        System.IO.Stream GetStreamedPlugins(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveFacade/GetStreamedPlugins", ReplyAction="http://tempuri.org/ISlaveFacade/GetStreamedPluginsResponse")]
+        System.IAsyncResult BeginGetStreamedPlugins(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList, System.AsyncCallback callback, object asyncState);
+        
+        System.IO.Stream EndGetStreamedPlugins(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveFacade/StoreFinishedJobResultStreamed", ReplyAction="http://tempuri.org/ISlaveFacade/StoreFinishedJobResultStreamedResponse")]
+        HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived StoreFinishedJobResultStreamed(System.IO.Stream stream);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveFacade/StoreFinishedJobResultStreamed", ReplyAction="http://tempuri.org/ISlaveFacade/StoreFinishedJobResultStreamedResponse")]
+        System.IAsyncResult BeginStoreFinishedJobResultStreamed(System.IO.Stream stream, System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived EndStoreFinishedJobResultStreamed(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveFacade/ProcessSnapshotStreamed", ReplyAction="http://tempuri.org/ISlaveFacade/ProcessSnapshotStreamedResponse")]
+        HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived ProcessSnapshotStreamed(System.IO.Stream stream);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveFacade/ProcessSnapshotStreamed", ReplyAction="http://tempuri.org/ISlaveFacade/ProcessSnapshotStreamedResponse")]
+        System.IAsyncResult BeginProcessSnapshotStreamed(System.IO.Stream stream, System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived EndProcessSnapshotStreamed(System.IAsyncResult result);
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public interface ISlaveFacadeChannel : HeuristicLab.Hive.Slave.Communication.SlaveService.ISlaveFacade, System.ServiceModel.IClientChannel {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class LoginCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public LoginCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.Response Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Contracts.ResponseObjects.Response)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class ProcessHeartBeatCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public ProcessHeartBeatCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseHeartBeat Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Contracts.ResponseObjects.ResponseHeartBeat)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class GetJobCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public GetJobCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseObject<HeuristicLab.Hive.Contracts.BusinessObjects.JobDto> Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Contracts.ResponseObjects.ResponseObject<HeuristicLab.Hive.Contracts.BusinessObjects.JobDto>)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class StoreFinishedJobResultCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public StoreFinishedJobResultCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class ProcessSnapshotCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public ProcessSnapshotCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class LogoutCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public LogoutCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.Response Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Contracts.ResponseObjects.Response)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class IsJobStillNeededCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public IsJobStillNeededCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.Response Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Contracts.ResponseObjects.Response)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class GetPluginsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public GetPluginsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseList<HeuristicLab.PluginInfrastructure.CachedHivePluginInfoDto> Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Contracts.ResponseObjects.ResponseList<HeuristicLab.PluginInfrastructure.CachedHivePluginInfoDto>)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class GetCalendarCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public GetCalendarCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseCalendar Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Contracts.ResponseObjects.ResponseCalendar)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class SetCalendarStatusCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public SetCalendarStatusCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.Response Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Contracts.ResponseObjects.Response)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class GetStreamedJobCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public GetStreamedJobCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public System.IO.Stream Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((System.IO.Stream)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class GetStreamedPluginsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public GetStreamedPluginsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public System.IO.Stream Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((System.IO.Stream)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class StoreFinishedJobResultStreamedCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public StoreFinishedJobResultStreamedCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class ProcessSnapshotStreamedCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public ProcessSnapshotStreamedCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class SlaveFacadeClient : System.ServiceModel.ClientBase<HeuristicLab.Hive.Slave.Communication.SlaveService.ISlaveFacade>, HeuristicLab.Hive.Slave.Communication.SlaveService.ISlaveFacade {
+        
+        private BeginOperationDelegate onBeginLoginDelegate;
+        
+        private EndOperationDelegate onEndLoginDelegate;
+        
+        private System.Threading.SendOrPostCallback onLoginCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginProcessHeartBeatDelegate;
+        
+        private EndOperationDelegate onEndProcessHeartBeatDelegate;
+        
+        private System.Threading.SendOrPostCallback onProcessHeartBeatCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginGetJobDelegate;
+        
+        private EndOperationDelegate onEndGetJobDelegate;
+        
+        private System.Threading.SendOrPostCallback onGetJobCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginStoreFinishedJobResultDelegate;
+        
+        private EndOperationDelegate onEndStoreFinishedJobResultDelegate;
+        
+        private System.Threading.SendOrPostCallback onStoreFinishedJobResultCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginProcessSnapshotDelegate;
+        
+        private EndOperationDelegate onEndProcessSnapshotDelegate;
+        
+        private System.Threading.SendOrPostCallback onProcessSnapshotCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginLogoutDelegate;
+        
+        private EndOperationDelegate onEndLogoutDelegate;
+        
+        private System.Threading.SendOrPostCallback onLogoutCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginIsJobStillNeededDelegate;
+        
+        private EndOperationDelegate onEndIsJobStillNeededDelegate;
+        
+        private System.Threading.SendOrPostCallback onIsJobStillNeededCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginGetPluginsDelegate;
+        
+        private EndOperationDelegate onEndGetPluginsDelegate;
+        
+        private System.Threading.SendOrPostCallback onGetPluginsCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginGetCalendarDelegate;
+        
+        private EndOperationDelegate onEndGetCalendarDelegate;
+        
+        private System.Threading.SendOrPostCallback onGetCalendarCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginSetCalendarStatusDelegate;
+        
+        private EndOperationDelegate onEndSetCalendarStatusDelegate;
+        
+        private System.Threading.SendOrPostCallback onSetCalendarStatusCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginGetStreamedJobDelegate;
+        
+        private EndOperationDelegate onEndGetStreamedJobDelegate;
+        
+        private System.Threading.SendOrPostCallback onGetStreamedJobCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginGetStreamedPluginsDelegate;
+        
+        private EndOperationDelegate onEndGetStreamedPluginsDelegate;
+        
+        private System.Threading.SendOrPostCallback onGetStreamedPluginsCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginStoreFinishedJobResultStreamedDelegate;
+        
+        private EndOperationDelegate onEndStoreFinishedJobResultStreamedDelegate;
+        
+        private System.Threading.SendOrPostCallback onStoreFinishedJobResultStreamedCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginProcessSnapshotStreamedDelegate;
+        
+        private EndOperationDelegate onEndProcessSnapshotStreamedDelegate;
+        
+        private System.Threading.SendOrPostCallback onProcessSnapshotStreamedCompletedDelegate;
+        
+        public SlaveFacadeClient() {
+        }
+        
+        public SlaveFacadeClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName) {
+        }
+        
+        public SlaveFacadeClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public SlaveFacadeClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public SlaveFacadeClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress) {
+        }
+        
+        public event System.EventHandler<LoginCompletedEventArgs> LoginCompleted;
+        
+        public event System.EventHandler<ProcessHeartBeatCompletedEventArgs> ProcessHeartBeatCompleted;
+        
+        public event System.EventHandler<GetJobCompletedEventArgs> GetJobCompleted;
+        
+        public event System.EventHandler<StoreFinishedJobResultCompletedEventArgs> StoreFinishedJobResultCompleted;
+        
+        public event System.EventHandler<ProcessSnapshotCompletedEventArgs> ProcessSnapshotCompleted;
+        
+        public event System.EventHandler<LogoutCompletedEventArgs> LogoutCompleted;
+        
+        public event System.EventHandler<IsJobStillNeededCompletedEventArgs> IsJobStillNeededCompleted;
+        
+        public event System.EventHandler<GetPluginsCompletedEventArgs> GetPluginsCompleted;
+        
+        public event System.EventHandler<GetCalendarCompletedEventArgs> GetCalendarCompleted;
+        
+        public event System.EventHandler<SetCalendarStatusCompletedEventArgs> SetCalendarStatusCompleted;
+        
+        public event System.EventHandler<GetStreamedJobCompletedEventArgs> GetStreamedJobCompleted;
+        
+        public event System.EventHandler<GetStreamedPluginsCompletedEventArgs> GetStreamedPluginsCompleted;
+        
+        public event System.EventHandler<StoreFinishedJobResultStreamedCompletedEventArgs> StoreFinishedJobResultStreamedCompleted;
+        
+        public event System.EventHandler<ProcessSnapshotStreamedCompletedEventArgs> ProcessSnapshotStreamedCompleted;
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.Response Login(HeuristicLab.Hive.Contracts.BusinessObjects.SlaveDto slave) {
+            return base.Channel.Login(slave);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginLogin(HeuristicLab.Hive.Contracts.BusinessObjects.SlaveDto slave, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginLogin(slave, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Contracts.ResponseObjects.Response EndLogin(System.IAsyncResult result) {
+            return base.Channel.EndLogin(result);
+        }
+        
+        private System.IAsyncResult OnBeginLogin(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            HeuristicLab.Hive.Contracts.BusinessObjects.SlaveDto slave = ((HeuristicLab.Hive.Contracts.BusinessObjects.SlaveDto)(inValues[0]));
+            return this.BeginLogin(slave, callback, asyncState);
+        }
+        
+        private object[] OnEndLogin(System.IAsyncResult result) {
+            HeuristicLab.Hive.Contracts.ResponseObjects.Response retVal = this.EndLogin(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnLoginCompleted(object state) {
+            if ((this.LoginCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.LoginCompleted(this, new LoginCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void LoginAsync(HeuristicLab.Hive.Contracts.BusinessObjects.SlaveDto slave) {
+            this.LoginAsync(slave, null);
+        }
+        
+        public void LoginAsync(HeuristicLab.Hive.Contracts.BusinessObjects.SlaveDto slave, object userState) {
+            if ((this.onBeginLoginDelegate == null)) {
+                this.onBeginLoginDelegate = new BeginOperationDelegate(this.OnBeginLogin);
+            }
+            if ((this.onEndLoginDelegate == null)) {
+                this.onEndLoginDelegate = new EndOperationDelegate(this.OnEndLogin);
+            }
+            if ((this.onLoginCompletedDelegate == null)) {
+                this.onLoginCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnLoginCompleted);
+            }
+            base.InvokeAsync(this.onBeginLoginDelegate, new object[] {
+                        slave}, this.onEndLoginDelegate, this.onLoginCompletedDelegate, userState);
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseHeartBeat ProcessHeartBeat(HeuristicLab.Hive.Contracts.BusinessObjects.HeartBeatData hbData) {
+            return base.Channel.ProcessHeartBeat(hbData);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginProcessHeartBeat(HeuristicLab.Hive.Contracts.BusinessObjects.HeartBeatData hbData, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginProcessHeartBeat(hbData, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseHeartBeat EndProcessHeartBeat(System.IAsyncResult result) {
+            return base.Channel.EndProcessHeartBeat(result);
+        }
+        
+        private System.IAsyncResult OnBeginProcessHeartBeat(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            HeuristicLab.Hive.Contracts.BusinessObjects.HeartBeatData hbData = ((HeuristicLab.Hive.Contracts.BusinessObjects.HeartBeatData)(inValues[0]));
+            return this.BeginProcessHeartBeat(hbData, callback, asyncState);
+        }
+        
+        private object[] OnEndProcessHeartBeat(System.IAsyncResult result) {
+            HeuristicLab.Hive.Contracts.ResponseObjects.ResponseHeartBeat retVal = this.EndProcessHeartBeat(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnProcessHeartBeatCompleted(object state) {
+            if ((this.ProcessHeartBeatCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.ProcessHeartBeatCompleted(this, new ProcessHeartBeatCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void ProcessHeartBeatAsync(HeuristicLab.Hive.Contracts.BusinessObjects.HeartBeatData hbData) {
+            this.ProcessHeartBeatAsync(hbData, null);
+        }
+        
+        public void ProcessHeartBeatAsync(HeuristicLab.Hive.Contracts.BusinessObjects.HeartBeatData hbData, object userState) {
+            if ((this.onBeginProcessHeartBeatDelegate == null)) {
+                this.onBeginProcessHeartBeatDelegate = new BeginOperationDelegate(this.OnBeginProcessHeartBeat);
+            }
+            if ((this.onEndProcessHeartBeatDelegate == null)) {
+                this.onEndProcessHeartBeatDelegate = new EndOperationDelegate(this.OnEndProcessHeartBeat);
+            }
+            if ((this.onProcessHeartBeatCompletedDelegate == null)) {
+                this.onProcessHeartBeatCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnProcessHeartBeatCompleted);
+            }
+            base.InvokeAsync(this.onBeginProcessHeartBeatDelegate, new object[] {
+                        hbData}, this.onEndProcessHeartBeatDelegate, this.onProcessHeartBeatCompletedDelegate, userState);
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseObject<HeuristicLab.Hive.Contracts.BusinessObjects.JobDto> GetJob(System.Guid clientId) {
+            return base.Channel.GetJob(clientId);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginGetJob(System.Guid clientId, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginGetJob(clientId, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseObject<HeuristicLab.Hive.Contracts.BusinessObjects.JobDto> EndGetJob(System.IAsyncResult result) {
+            return base.Channel.EndGetJob(result);
+        }
+        
+        private System.IAsyncResult OnBeginGetJob(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            System.Guid clientId = ((System.Guid)(inValues[0]));
+            return this.BeginGetJob(clientId, callback, asyncState);
+        }
+        
+        private object[] OnEndGetJob(System.IAsyncResult result) {
+            HeuristicLab.Hive.Contracts.ResponseObjects.ResponseObject<HeuristicLab.Hive.Contracts.BusinessObjects.JobDto> retVal = this.EndGetJob(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnGetJobCompleted(object state) {
+            if ((this.GetJobCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.GetJobCompleted(this, new GetJobCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void GetJobAsync(System.Guid clientId) {
+            this.GetJobAsync(clientId, null);
+        }
+        
+        public void GetJobAsync(System.Guid clientId, object userState) {
+            if ((this.onBeginGetJobDelegate == null)) {
+                this.onBeginGetJobDelegate = new BeginOperationDelegate(this.OnBeginGetJob);
+            }
+            if ((this.onEndGetJobDelegate == null)) {
+                this.onEndGetJobDelegate = new EndOperationDelegate(this.OnEndGetJob);
+            }
+            if ((this.onGetJobCompletedDelegate == null)) {
+                this.onGetJobCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnGetJobCompleted);
+            }
+            base.InvokeAsync(this.onBeginGetJobDelegate, new object[] {
+                        clientId}, this.onEndGetJobDelegate, this.onGetJobCompletedDelegate, userState);
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived StoreFinishedJobResult(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception) {
+            return base.Channel.StoreFinishedJobResult(clientId, jobId, result, percentage, exception);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginStoreFinishedJobResult(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginStoreFinishedJobResult(clientId, jobId, result, percentage, exception, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived EndStoreFinishedJobResult(System.IAsyncResult result) {
+            return base.Channel.EndStoreFinishedJobResult(result);
+        }
+        
+        private System.IAsyncResult OnBeginStoreFinishedJobResult(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            System.Guid clientId = ((System.Guid)(inValues[0]));
+            System.Guid jobId = ((System.Guid)(inValues[1]));
+            byte[] result = ((byte[])(inValues[2]));
+            double percentage = ((double)(inValues[3]));
+            string exception = ((string)(inValues[4]));
+            return this.BeginStoreFinishedJobResult(clientId, jobId, result, percentage, exception, callback, asyncState);
+        }
+        
+        private object[] OnEndStoreFinishedJobResult(System.IAsyncResult result) {
+            HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived retVal = this.EndStoreFinishedJobResult(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnStoreFinishedJobResultCompleted(object state) {
+            if ((this.StoreFinishedJobResultCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.StoreFinishedJobResultCompleted(this, new StoreFinishedJobResultCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void StoreFinishedJobResultAsync(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception) {
+            this.StoreFinishedJobResultAsync(clientId, jobId, result, percentage, exception, null);
+        }
+        
+        public void StoreFinishedJobResultAsync(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception, object userState) {
+            if ((this.onBeginStoreFinishedJobResultDelegate == null)) {
+                this.onBeginStoreFinishedJobResultDelegate = new BeginOperationDelegate(this.OnBeginStoreFinishedJobResult);
+            }
+            if ((this.onEndStoreFinishedJobResultDelegate == null)) {
+                this.onEndStoreFinishedJobResultDelegate = new EndOperationDelegate(this.OnEndStoreFinishedJobResult);
+            }
+            if ((this.onStoreFinishedJobResultCompletedDelegate == null)) {
+                this.onStoreFinishedJobResultCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnStoreFinishedJobResultCompleted);
+            }
+            base.InvokeAsync(this.onBeginStoreFinishedJobResultDelegate, new object[] {
+                        clientId,
+                        jobId,
+                        result,
+                        percentage,
+                        exception}, this.onEndStoreFinishedJobResultDelegate, this.onStoreFinishedJobResultCompletedDelegate, userState);
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived ProcessSnapshot(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception) {
+            return base.Channel.ProcessSnapshot(clientId, jobId, result, percentage, exception);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginProcessSnapshot(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginProcessSnapshot(clientId, jobId, result, percentage, exception, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived EndProcessSnapshot(System.IAsyncResult result) {
+            return base.Channel.EndProcessSnapshot(result);
+        }
+        
+        private System.IAsyncResult OnBeginProcessSnapshot(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            System.Guid clientId = ((System.Guid)(inValues[0]));
+            System.Guid jobId = ((System.Guid)(inValues[1]));
+            byte[] result = ((byte[])(inValues[2]));
+            double percentage = ((double)(inValues[3]));
+            string exception = ((string)(inValues[4]));
+            return this.BeginProcessSnapshot(clientId, jobId, result, percentage, exception, callback, asyncState);
+        }
+        
+        private object[] OnEndProcessSnapshot(System.IAsyncResult result) {
+            HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived retVal = this.EndProcessSnapshot(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnProcessSnapshotCompleted(object state) {
+            if ((this.ProcessSnapshotCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.ProcessSnapshotCompleted(this, new ProcessSnapshotCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void ProcessSnapshotAsync(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception) {
+            this.ProcessSnapshotAsync(clientId, jobId, result, percentage, exception, null);
+        }
+        
+        public void ProcessSnapshotAsync(System.Guid clientId, System.Guid jobId, byte[] result, double percentage, string exception, object userState) {
+            if ((this.onBeginProcessSnapshotDelegate == null)) {
+                this.onBeginProcessSnapshotDelegate = new BeginOperationDelegate(this.OnBeginProcessSnapshot);
+            }
+            if ((this.onEndProcessSnapshotDelegate == null)) {
+                this.onEndProcessSnapshotDelegate = new EndOperationDelegate(this.OnEndProcessSnapshot);
+            }
+            if ((this.onProcessSnapshotCompletedDelegate == null)) {
+                this.onProcessSnapshotCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnProcessSnapshotCompleted);
+            }
+            base.InvokeAsync(this.onBeginProcessSnapshotDelegate, new object[] {
+                        clientId,
+                        jobId,
+                        result,
+                        percentage,
+                        exception}, this.onEndProcessSnapshotDelegate, this.onProcessSnapshotCompletedDelegate, userState);
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.Response Logout(System.Guid clientId) {
+            return base.Channel.Logout(clientId);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginLogout(System.Guid clientId, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginLogout(clientId, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Contracts.ResponseObjects.Response EndLogout(System.IAsyncResult result) {
+            return base.Channel.EndLogout(result);
+        }
+        
+        private System.IAsyncResult OnBeginLogout(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            System.Guid clientId = ((System.Guid)(inValues[0]));
+            return this.BeginLogout(clientId, callback, asyncState);
+        }
+        
+        private object[] OnEndLogout(System.IAsyncResult result) {
+            HeuristicLab.Hive.Contracts.ResponseObjects.Response retVal = this.EndLogout(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnLogoutCompleted(object state) {
+            if ((this.LogoutCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.LogoutCompleted(this, new LogoutCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void LogoutAsync(System.Guid clientId) {
+            this.LogoutAsync(clientId, null);
+        }
+        
+        public void LogoutAsync(System.Guid clientId, object userState) {
+            if ((this.onBeginLogoutDelegate == null)) {
+                this.onBeginLogoutDelegate = new BeginOperationDelegate(this.OnBeginLogout);
+            }
+            if ((this.onEndLogoutDelegate == null)) {
+                this.onEndLogoutDelegate = new EndOperationDelegate(this.OnEndLogout);
+            }
+            if ((this.onLogoutCompletedDelegate == null)) {
+                this.onLogoutCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnLogoutCompleted);
+            }
+            base.InvokeAsync(this.onBeginLogoutDelegate, new object[] {
+                        clientId}, this.onEndLogoutDelegate, this.onLogoutCompletedDelegate, userState);
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.Response IsJobStillNeeded(System.Guid jobId) {
+            return base.Channel.IsJobStillNeeded(jobId);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginIsJobStillNeeded(System.Guid jobId, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginIsJobStillNeeded(jobId, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Contracts.ResponseObjects.Response EndIsJobStillNeeded(System.IAsyncResult result) {
+            return base.Channel.EndIsJobStillNeeded(result);
+        }
+        
+        private System.IAsyncResult OnBeginIsJobStillNeeded(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            System.Guid jobId = ((System.Guid)(inValues[0]));
+            return this.BeginIsJobStillNeeded(jobId, callback, asyncState);
+        }
+        
+        private object[] OnEndIsJobStillNeeded(System.IAsyncResult result) {
+            HeuristicLab.Hive.Contracts.ResponseObjects.Response retVal = this.EndIsJobStillNeeded(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnIsJobStillNeededCompleted(object state) {
+            if ((this.IsJobStillNeededCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.IsJobStillNeededCompleted(this, new IsJobStillNeededCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void IsJobStillNeededAsync(System.Guid jobId) {
+            this.IsJobStillNeededAsync(jobId, null);
+        }
+        
+        public void IsJobStillNeededAsync(System.Guid jobId, object userState) {
+            if ((this.onBeginIsJobStillNeededDelegate == null)) {
+                this.onBeginIsJobStillNeededDelegate = new BeginOperationDelegate(this.OnBeginIsJobStillNeeded);
+            }
+            if ((this.onEndIsJobStillNeededDelegate == null)) {
+                this.onEndIsJobStillNeededDelegate = new EndOperationDelegate(this.OnEndIsJobStillNeeded);
+            }
+            if ((this.onIsJobStillNeededCompletedDelegate == null)) {
+                this.onIsJobStillNeededCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnIsJobStillNeededCompleted);
+            }
+            base.InvokeAsync(this.onBeginIsJobStillNeededDelegate, new object[] {
+                        jobId}, this.onEndIsJobStillNeededDelegate, this.onIsJobStillNeededCompletedDelegate, userState);
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseList<HeuristicLab.PluginInfrastructure.CachedHivePluginInfoDto> GetPlugins(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList) {
+            return base.Channel.GetPlugins(pluginList);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginGetPlugins(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginGetPlugins(pluginList, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseList<HeuristicLab.PluginInfrastructure.CachedHivePluginInfoDto> EndGetPlugins(System.IAsyncResult result) {
+            return base.Channel.EndGetPlugins(result);
+        }
+        
+        private System.IAsyncResult OnBeginGetPlugins(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList = ((HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[])(inValues[0]));
+            return this.BeginGetPlugins(pluginList, callback, asyncState);
+        }
+        
+        private object[] OnEndGetPlugins(System.IAsyncResult result) {
+            HeuristicLab.Hive.Contracts.ResponseObjects.ResponseList<HeuristicLab.PluginInfrastructure.CachedHivePluginInfoDto> retVal = this.EndGetPlugins(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnGetPluginsCompleted(object state) {
+            if ((this.GetPluginsCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.GetPluginsCompleted(this, new GetPluginsCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void GetPluginsAsync(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList) {
+            this.GetPluginsAsync(pluginList, null);
+        }
+        
+        public void GetPluginsAsync(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList, object userState) {
+            if ((this.onBeginGetPluginsDelegate == null)) {
+                this.onBeginGetPluginsDelegate = new BeginOperationDelegate(this.OnBeginGetPlugins);
+            }
+            if ((this.onEndGetPluginsDelegate == null)) {
+                this.onEndGetPluginsDelegate = new EndOperationDelegate(this.OnEndGetPlugins);
+            }
+            if ((this.onGetPluginsCompletedDelegate == null)) {
+                this.onGetPluginsCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnGetPluginsCompleted);
+            }
+            base.InvokeAsync(this.onBeginGetPluginsDelegate, new object[] {
+                        pluginList}, this.onEndGetPluginsDelegate, this.onGetPluginsCompletedDelegate, userState);
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseCalendar GetCalendar(System.Guid clientId) {
+            return base.Channel.GetCalendar(clientId);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginGetCalendar(System.Guid clientId, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginGetCalendar(clientId, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseCalendar EndGetCalendar(System.IAsyncResult result) {
+            return base.Channel.EndGetCalendar(result);
+        }
+        
+        private System.IAsyncResult OnBeginGetCalendar(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            System.Guid clientId = ((System.Guid)(inValues[0]));
+            return this.BeginGetCalendar(clientId, callback, asyncState);
+        }
+        
+        private object[] OnEndGetCalendar(System.IAsyncResult result) {
+            HeuristicLab.Hive.Contracts.ResponseObjects.ResponseCalendar retVal = this.EndGetCalendar(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnGetCalendarCompleted(object state) {
+            if ((this.GetCalendarCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.GetCalendarCompleted(this, new GetCalendarCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void GetCalendarAsync(System.Guid clientId) {
+            this.GetCalendarAsync(clientId, null);
+        }
+        
+        public void GetCalendarAsync(System.Guid clientId, object userState) {
+            if ((this.onBeginGetCalendarDelegate == null)) {
+                this.onBeginGetCalendarDelegate = new BeginOperationDelegate(this.OnBeginGetCalendar);
+            }
+            if ((this.onEndGetCalendarDelegate == null)) {
+                this.onEndGetCalendarDelegate = new EndOperationDelegate(this.OnEndGetCalendar);
+            }
+            if ((this.onGetCalendarCompletedDelegate == null)) {
+                this.onGetCalendarCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnGetCalendarCompleted);
+            }
+            base.InvokeAsync(this.onBeginGetCalendarDelegate, new object[] {
+                        clientId}, this.onEndGetCalendarDelegate, this.onGetCalendarCompletedDelegate, userState);
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.Response SetCalendarStatus(System.Guid clientId, HeuristicLab.Hive.Contracts.BusinessObjects.CalendarState state) {
+            return base.Channel.SetCalendarStatus(clientId, state);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginSetCalendarStatus(System.Guid clientId, HeuristicLab.Hive.Contracts.BusinessObjects.CalendarState state, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginSetCalendarStatus(clientId, state, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Contracts.ResponseObjects.Response EndSetCalendarStatus(System.IAsyncResult result) {
+            return base.Channel.EndSetCalendarStatus(result);
+        }
+        
+        private System.IAsyncResult OnBeginSetCalendarStatus(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            System.Guid clientId = ((System.Guid)(inValues[0]));
+            HeuristicLab.Hive.Contracts.BusinessObjects.CalendarState state = ((HeuristicLab.Hive.Contracts.BusinessObjects.CalendarState)(inValues[1]));
+            return this.BeginSetCalendarStatus(clientId, state, callback, asyncState);
+        }
+        
+        private object[] OnEndSetCalendarStatus(System.IAsyncResult result) {
+            HeuristicLab.Hive.Contracts.ResponseObjects.Response retVal = this.EndSetCalendarStatus(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnSetCalendarStatusCompleted(object state) {
+            if ((this.SetCalendarStatusCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.SetCalendarStatusCompleted(this, new SetCalendarStatusCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void SetCalendarStatusAsync(System.Guid clientId, HeuristicLab.Hive.Contracts.BusinessObjects.CalendarState state) {
+            this.SetCalendarStatusAsync(clientId, state, null);
+        }
+        
+        public void SetCalendarStatusAsync(System.Guid clientId, HeuristicLab.Hive.Contracts.BusinessObjects.CalendarState state, object userState) {
+            if ((this.onBeginSetCalendarStatusDelegate == null)) {
+                this.onBeginSetCalendarStatusDelegate = new BeginOperationDelegate(this.OnBeginSetCalendarStatus);
+            }
+            if ((this.onEndSetCalendarStatusDelegate == null)) {
+                this.onEndSetCalendarStatusDelegate = new EndOperationDelegate(this.OnEndSetCalendarStatus);
+            }
+            if ((this.onSetCalendarStatusCompletedDelegate == null)) {
+                this.onSetCalendarStatusCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnSetCalendarStatusCompleted);
+            }
+            base.InvokeAsync(this.onBeginSetCalendarStatusDelegate, new object[] {
+                        clientId,
+                        state}, this.onEndSetCalendarStatusDelegate, this.onSetCalendarStatusCompletedDelegate, userState);
+        }
+        
+        public System.IO.Stream GetStreamedJob(System.Guid clientId) {
+            return base.Channel.GetStreamedJob(clientId);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginGetStreamedJob(System.Guid clientId, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginGetStreamedJob(clientId, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IO.Stream EndGetStreamedJob(System.IAsyncResult result) {
+            return base.Channel.EndGetStreamedJob(result);
+        }
+        
+        private System.IAsyncResult OnBeginGetStreamedJob(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            System.Guid clientId = ((System.Guid)(inValues[0]));
+            return this.BeginGetStreamedJob(clientId, callback, asyncState);
+        }
+        
+        private object[] OnEndGetStreamedJob(System.IAsyncResult result) {
+            System.IO.Stream retVal = this.EndGetStreamedJob(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnGetStreamedJobCompleted(object state) {
+            if ((this.GetStreamedJobCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.GetStreamedJobCompleted(this, new GetStreamedJobCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void GetStreamedJobAsync(System.Guid clientId) {
+            this.GetStreamedJobAsync(clientId, null);
+        }
+        
+        public void GetStreamedJobAsync(System.Guid clientId, object userState) {
+            if ((this.onBeginGetStreamedJobDelegate == null)) {
+                this.onBeginGetStreamedJobDelegate = new BeginOperationDelegate(this.OnBeginGetStreamedJob);
+            }
+            if ((this.onEndGetStreamedJobDelegate == null)) {
+                this.onEndGetStreamedJobDelegate = new EndOperationDelegate(this.OnEndGetStreamedJob);
+            }
+            if ((this.onGetStreamedJobCompletedDelegate == null)) {
+                this.onGetStreamedJobCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnGetStreamedJobCompleted);
+            }
+            base.InvokeAsync(this.onBeginGetStreamedJobDelegate, new object[] {
+                        clientId}, this.onEndGetStreamedJobDelegate, this.onGetStreamedJobCompletedDelegate, userState);
+        }
+        
+        public System.IO.Stream GetStreamedPlugins(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList) {
+            return base.Channel.GetStreamedPlugins(pluginList);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginGetStreamedPlugins(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginGetStreamedPlugins(pluginList, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IO.Stream EndGetStreamedPlugins(System.IAsyncResult result) {
+            return base.Channel.EndGetStreamedPlugins(result);
+        }
+        
+        private System.IAsyncResult OnBeginGetStreamedPlugins(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList = ((HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[])(inValues[0]));
+            return this.BeginGetStreamedPlugins(pluginList, callback, asyncState);
+        }
+        
+        private object[] OnEndGetStreamedPlugins(System.IAsyncResult result) {
+            System.IO.Stream retVal = this.EndGetStreamedPlugins(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnGetStreamedPluginsCompleted(object state) {
+            if ((this.GetStreamedPluginsCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.GetStreamedPluginsCompleted(this, new GetStreamedPluginsCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void GetStreamedPluginsAsync(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList) {
+            this.GetStreamedPluginsAsync(pluginList, null);
+        }
+        
+        public void GetStreamedPluginsAsync(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto[] pluginList, object userState) {
+            if ((this.onBeginGetStreamedPluginsDelegate == null)) {
+                this.onBeginGetStreamedPluginsDelegate = new BeginOperationDelegate(this.OnBeginGetStreamedPlugins);
+            }
+            if ((this.onEndGetStreamedPluginsDelegate == null)) {
+                this.onEndGetStreamedPluginsDelegate = new EndOperationDelegate(this.OnEndGetStreamedPlugins);
+            }
+            if ((this.onGetStreamedPluginsCompletedDelegate == null)) {
+                this.onGetStreamedPluginsCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnGetStreamedPluginsCompleted);
+            }
+            base.InvokeAsync(this.onBeginGetStreamedPluginsDelegate, new object[] {
+                        pluginList}, this.onEndGetStreamedPluginsDelegate, this.onGetStreamedPluginsCompletedDelegate, userState);
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived StoreFinishedJobResultStreamed(System.IO.Stream stream) {
+            return base.Channel.StoreFinishedJobResultStreamed(stream);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginStoreFinishedJobResultStreamed(System.IO.Stream stream, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginStoreFinishedJobResultStreamed(stream, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived EndStoreFinishedJobResultStreamed(System.IAsyncResult result) {
+            return base.Channel.EndStoreFinishedJobResultStreamed(result);
+        }
+        
+        private System.IAsyncResult OnBeginStoreFinishedJobResultStreamed(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            System.IO.Stream stream = ((System.IO.Stream)(inValues[0]));
+            return this.BeginStoreFinishedJobResultStreamed(stream, callback, asyncState);
+        }
+        
+        private object[] OnEndStoreFinishedJobResultStreamed(System.IAsyncResult result) {
+            HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived retVal = this.EndStoreFinishedJobResultStreamed(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnStoreFinishedJobResultStreamedCompleted(object state) {
+            if ((this.StoreFinishedJobResultStreamedCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.StoreFinishedJobResultStreamedCompleted(this, new StoreFinishedJobResultStreamedCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void StoreFinishedJobResultStreamedAsync(System.IO.Stream stream) {
+            this.StoreFinishedJobResultStreamedAsync(stream, null);
+        }
+        
+        public void StoreFinishedJobResultStreamedAsync(System.IO.Stream stream, object userState) {
+            if ((this.onBeginStoreFinishedJobResultStreamedDelegate == null)) {
+                this.onBeginStoreFinishedJobResultStreamedDelegate = new BeginOperationDelegate(this.OnBeginStoreFinishedJobResultStreamed);
+            }
+            if ((this.onEndStoreFinishedJobResultStreamedDelegate == null)) {
+                this.onEndStoreFinishedJobResultStreamedDelegate = new EndOperationDelegate(this.OnEndStoreFinishedJobResultStreamed);
+            }
+            if ((this.onStoreFinishedJobResultStreamedCompletedDelegate == null)) {
+                this.onStoreFinishedJobResultStreamedCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnStoreFinishedJobResultStreamedCompleted);
+            }
+            base.InvokeAsync(this.onBeginStoreFinishedJobResultStreamedDelegate, new object[] {
+                        stream}, this.onEndStoreFinishedJobResultStreamedDelegate, this.onStoreFinishedJobResultStreamedCompletedDelegate, userState);
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived ProcessSnapshotStreamed(System.IO.Stream stream) {
+            return base.Channel.ProcessSnapshotStreamed(stream);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginProcessSnapshotStreamed(System.IO.Stream stream, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginProcessSnapshotStreamed(stream, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived EndProcessSnapshotStreamed(System.IAsyncResult result) {
+            return base.Channel.EndProcessSnapshotStreamed(result);
+        }
+        
+        private System.IAsyncResult OnBeginProcessSnapshotStreamed(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            System.IO.Stream stream = ((System.IO.Stream)(inValues[0]));
+            return this.BeginProcessSnapshotStreamed(stream, callback, asyncState);
+        }
+        
+        private object[] OnEndProcessSnapshotStreamed(System.IAsyncResult result) {
+            HeuristicLab.Hive.Contracts.ResponseObjects.ResponseResultReceived retVal = this.EndProcessSnapshotStreamed(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnProcessSnapshotStreamedCompleted(object state) {
+            if ((this.ProcessSnapshotStreamedCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.ProcessSnapshotStreamedCompleted(this, new ProcessSnapshotStreamedCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void ProcessSnapshotStreamedAsync(System.IO.Stream stream) {
+            this.ProcessSnapshotStreamedAsync(stream, null);
+        }
+        
+        public void ProcessSnapshotStreamedAsync(System.IO.Stream stream, object userState) {
+            if ((this.onBeginProcessSnapshotStreamedDelegate == null)) {
+                this.onBeginProcessSnapshotStreamedDelegate = new BeginOperationDelegate(this.OnBeginProcessSnapshotStreamed);
+            }
+            if ((this.onEndProcessSnapshotStreamedDelegate == null)) {
+                this.onEndProcessSnapshotStreamedDelegate = new EndOperationDelegate(this.OnEndProcessSnapshotStreamed);
+            }
+            if ((this.onProcessSnapshotStreamedCompletedDelegate == null)) {
+                this.onProcessSnapshotStreamedCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnProcessSnapshotStreamedCompleted);
+            }
+            base.InvokeAsync(this.onBeginProcessSnapshotStreamedDelegate, new object[] {
+                        stream}, this.onEndProcessSnapshotStreamedDelegate, this.onProcessSnapshotStreamedCompletedDelegate, userState);
+        }
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/Reference.svcmap
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/Reference.svcmap	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/Reference.svcmap	(revision 4340)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ReferenceGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="fe6220fd-6424-4b86-8ce6-6cf3e71c9d96" xmlns="urn:schemas-microsoft-com:xml-wcfservicemap">
+  <ClientOptions>
+    <GenerateAsynchronousMethods>true</GenerateAsynchronousMethods>
+    <EnableDataBinding>true</EnableDataBinding>
+    <ExcludedTypes />
+    <ImportXmlTypes>false</ImportXmlTypes>
+    <GenerateInternalTypes>false</GenerateInternalTypes>
+    <GenerateMessageContracts>false</GenerateMessageContracts>
+    <NamespaceMappings />
+    <CollectionMappings />
+    <GenerateSerializableTypes>true</GenerateSerializableTypes>
+    <Serializer>Auto</Serializer>
+    <UseSerializerForFaults>true</UseSerializerForFaults>
+    <ReferenceAllAssemblies>true</ReferenceAllAssemblies>
+    <ReferencedAssemblies />
+    <ReferencedDataContractTypes />
+    <ServiceContractMappings />
+  </ClientOptions>
+  <MetadataSources>
+    <MetadataSource Address="http://localhost:9000/SlaveService" Protocol="http" SourceId="1" />
+  </MetadataSources>
+  <Metadata>
+    <MetadataFile FileName="SlaveService.xsd" MetadataType="Schema" ID="2958ca14-4b99-44a4-87f0-2c447b0e20d5" SourceId="1" SourceUrl="http://localhost:9000/SlaveService?xsd=xsd5" />
+    <MetadataFile FileName="SlaveService.disco" MetadataType="Disco" ID="fa30ccfb-2221-422c-b5d0-c98e8f8ee4c4" SourceId="1" SourceUrl="http://localhost:9000/SlaveService?disco" />
+    <MetadataFile FileName="SlaveService1.xsd" MetadataType="Schema" ID="ff58f22f-9158-4cd0-abcb-754cce4f35ec" SourceId="1" SourceUrl="http://localhost:9000/SlaveService?xsd=xsd7" />
+    <MetadataFile FileName="SlaveService2.xsd" MetadataType="Schema" ID="cd1031d1-e26a-41e2-ae9a-f13ca89c5ff2" SourceId="1" SourceUrl="http://localhost:9000/SlaveService?xsd=xsd1" />
+    <MetadataFile FileName="SlaveFacade.wsdl" MetadataType="Wsdl" ID="b309bbb6-5a49-4529-bde0-aaa4777da64f" SourceId="1" SourceUrl="http://localhost:9000/SlaveService?wsdl" />
+    <MetadataFile FileName="SlaveService3.xsd" MetadataType="Schema" ID="c461449b-de3b-4cbb-9e58-1cb8becedfa7" SourceId="1" SourceUrl="http://localhost:9000/SlaveService?xsd=xsd9" />
+    <MetadataFile FileName="SlaveService4.xsd" MetadataType="Schema" ID="6e57914a-9e5b-4c9d-857d-2d1deac32105" SourceId="1" SourceUrl="http://localhost:9000/SlaveService?xsd=xsd4" />
+    <MetadataFile FileName="SlaveService5.xsd" MetadataType="Schema" ID="9ba06ad0-a496-4292-b67b-c24e588b8928" SourceId="1" SourceUrl="http://localhost:9000/SlaveService?xsd=xsd8" />
+    <MetadataFile FileName="SlaveService6.xsd" MetadataType="Schema" ID="3f5c7b29-fb3f-4af3-a7fa-deebefba48ce" SourceId="1" SourceUrl="http://localhost:9000/SlaveService?xsd=xsd6" />
+    <MetadataFile FileName="SlaveService7.xsd" MetadataType="Schema" ID="25348808-3181-4343-bba3-796e0172b1fd" SourceId="1" SourceUrl="http://localhost:9000/SlaveService?xsd=xsd0" />
+    <MetadataFile FileName="SlaveService8.xsd" MetadataType="Schema" ID="4c7dfc61-c84a-4378-b121-38f8f8f2a86a" SourceId="1" SourceUrl="http://localhost:9000/SlaveService?xsd=xsd3" />
+    <MetadataFile FileName="SlaveService.wsdl" MetadataType="Wsdl" ID="ef494f6e-9864-4628-b3e8-58f471d5d1bd" SourceId="1" SourceUrl="http://localhost:9000/SlaveService?wsdl=wsdl0" />
+    <MetadataFile FileName="SlaveService9.xsd" MetadataType="Schema" ID="c6237b7a-a9fd-42d5-bcc3-bb872bb61485" SourceId="1" SourceUrl="http://localhost:9000/SlaveService?xsd=xsd2" />
+  </Metadata>
+  <Extensions>
+    <ExtensionFile FileName="configuration91.svcinfo" Name="configuration91.svcinfo" />
+    <ExtensionFile FileName="configuration.svcinfo" Name="configuration.svcinfo" />
+  </Extensions>
+</ReferenceGroup>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveFacade.wsdl
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveFacade.wsdl	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveFacade.wsdl	(revision 4340)
@@ -0,0 +1,1218 @@
+<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:tns="http://tempuri.org/" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:i0="http://schemas.microsoft.com/ws/2005/02/mex/bindings" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="SlaveFacade" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:ProtectionToken>
+              <wsp:Policy>
+                <sp:SecureConversationToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                  <wsp:Policy>
+                    <sp:RequireDerivedKeys />
+                    <sp:BootstrapPolicy>
+                      <wsp:Policy>
+                        <sp:SignedParts>
+                          <sp:Body />
+                          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+                        </sp:SignedParts>
+                        <sp:EncryptedParts>
+                          <sp:Body />
+                        </sp:EncryptedParts>
+                        <sp:SymmetricBinding>
+                          <wsp:Policy>
+                            <sp:ProtectionToken>
+                              <wsp:Policy>
+                                <mssp:SslContextToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient" xmlns:mssp="http://schemas.microsoft.com/ws/2005/07/securitypolicy">
+                                  <wsp:Policy>
+                                    <sp:RequireDerivedKeys />
+                                  </wsp:Policy>
+                                </mssp:SslContextToken>
+                              </wsp:Policy>
+                            </sp:ProtectionToken>
+                            <sp:AlgorithmSuite>
+                              <wsp:Policy>
+                                <sp:Basic256 />
+                              </wsp:Policy>
+                            </sp:AlgorithmSuite>
+                            <sp:Layout>
+                              <wsp:Policy>
+                                <sp:Strict />
+                              </wsp:Policy>
+                            </sp:Layout>
+                            <sp:IncludeTimestamp />
+                            <sp:EncryptSignature />
+                            <sp:OnlySignEntireHeadersAndBody />
+                          </wsp:Policy>
+                        </sp:SymmetricBinding>
+                        <sp:SignedSupportingTokens>
+                          <wsp:Policy>
+                            <sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                              <wsp:Policy>
+                                <sp:WssUsernameToken10 />
+                              </wsp:Policy>
+                            </sp:UsernameToken>
+                          </wsp:Policy>
+                        </sp:SignedSupportingTokens>
+                        <sp:Wss11>
+                          <wsp:Policy />
+                        </sp:Wss11>
+                        <sp:Trust10>
+                          <wsp:Policy>
+                            <sp:MustSupportIssuedTokens />
+                            <sp:RequireClientEntropy />
+                            <sp:RequireServerEntropy />
+                          </wsp:Policy>
+                        </sp:Trust10>
+                      </wsp:Policy>
+                    </sp:BootstrapPolicy>
+                  </wsp:Policy>
+                </sp:SecureConversationToken>
+              </wsp:Policy>
+            </sp:ProtectionToken>
+            <sp:AlgorithmSuite>
+              <wsp:Policy>
+                <sp:Basic256 />
+              </wsp:Policy>
+            </sp:AlgorithmSuite>
+            <sp:Layout>
+              <wsp:Policy>
+                <sp:Strict />
+              </wsp:Policy>
+            </sp:Layout>
+            <sp:IncludeTimestamp />
+            <sp:EncryptSignature />
+            <sp:OnlySignEntireHeadersAndBody />
+          </wsp:Policy>
+        </sp:SymmetricBinding>
+        <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy />
+        </sp:Wss11>
+        <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:MustSupportIssuedTokens />
+            <sp:RequireClientEntropy />
+            <sp:RequireServerEntropy />
+          </wsp:Policy>
+        </sp:Trust10>
+        <wsaw:UsingAddressing />
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_Login_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_Login_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_ProcessHeartBeat_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_ProcessHeartBeat_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetJob_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetJob_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_StoreFinishedJobResult_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_StoreFinishedJobResult_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_ProcessSnapshot_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_ProcessSnapshot_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_Logout_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_Logout_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_IsJobStillNeeded_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_IsJobStillNeeded_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetPlugins_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetPlugins_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetCalendar_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetCalendar_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_SetCalendarStatus_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_SetCalendarStatus_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetStreamedJob_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetStreamedJob_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetStreamedPlugins_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_GetStreamedPlugins_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_StoreFinishedJobResultStreamed_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_StoreFinishedJobResultStreamed_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_ProcessSnapshotStreamed_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveHttpEndpoint_ProcessSnapshotStreamed_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="SlaveTcpStreamedEndpoint_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <msb:BinaryEncoding xmlns:msb="http://schemas.microsoft.com/ws/06/2004/mspolicy/netbinary1" />
+        <sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:TransportToken>
+              <wsp:Policy>
+                <msf:SslTransportSecurity xmlns:msf="http://schemas.microsoft.com/ws/2006/05/framing/policy" />
+              </wsp:Policy>
+            </sp:TransportToken>
+            <sp:AlgorithmSuite>
+              <wsp:Policy>
+                <sp:Basic256 />
+              </wsp:Policy>
+            </sp:AlgorithmSuite>
+            <sp:Layout>
+              <wsp:Policy>
+                <sp:Strict />
+              </wsp:Policy>
+            </sp:Layout>
+            <sp:IncludeTimestamp />
+          </wsp:Policy>
+        </sp:TransportBinding>
+        <sp:EndorsingSupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:SecureConversationToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+              <wsp:Policy>
+                <sp:BootstrapPolicy>
+                  <wsp:Policy>
+                    <sp:SignedParts>
+                      <sp:Body />
+                      <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+                      <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+                      <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                      <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                      <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+                      <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                      <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+                    </sp:SignedParts>
+                    <sp:EncryptedParts>
+                      <sp:Body />
+                    </sp:EncryptedParts>
+                    <sp:TransportBinding>
+                      <wsp:Policy>
+                        <sp:TransportToken>
+                          <wsp:Policy>
+                            <msf:SslTransportSecurity xmlns:msf="http://schemas.microsoft.com/ws/2006/05/framing/policy" />
+                          </wsp:Policy>
+                        </sp:TransportToken>
+                        <sp:AlgorithmSuite>
+                          <wsp:Policy>
+                            <sp:Basic256 />
+                          </wsp:Policy>
+                        </sp:AlgorithmSuite>
+                        <sp:Layout>
+                          <wsp:Policy>
+                            <sp:Strict />
+                          </wsp:Policy>
+                        </sp:Layout>
+                        <sp:IncludeTimestamp />
+                      </wsp:Policy>
+                    </sp:TransportBinding>
+                    <sp:SignedSupportingTokens>
+                      <wsp:Policy>
+                        <sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                          <wsp:Policy>
+                            <sp:WssUsernameToken10 />
+                          </wsp:Policy>
+                        </sp:UsernameToken>
+                      </wsp:Policy>
+                    </sp:SignedSupportingTokens>
+                    <sp:Wss11>
+                      <wsp:Policy />
+                    </sp:Wss11>
+                    <sp:Trust10>
+                      <wsp:Policy>
+                        <sp:MustSupportIssuedTokens />
+                        <sp:RequireClientEntropy />
+                        <sp:RequireServerEntropy />
+                      </wsp:Policy>
+                    </sp:Trust10>
+                  </wsp:Policy>
+                </sp:BootstrapPolicy>
+              </wsp:Policy>
+            </sp:SecureConversationToken>
+          </wsp:Policy>
+        </sp:EndorsingSupportingTokens>
+        <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy />
+        </sp:Wss11>
+        <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:MustSupportIssuedTokens />
+            <sp:RequireClientEntropy />
+            <sp:RequireServerEntropy />
+          </wsp:Policy>
+        </sp:Trust10>
+        <msf:Streamed xmlns:msf="http://schemas.microsoft.com/ws/2006/05/framing/policy" />
+        <wsaw:UsingAddressing />
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsdl:import namespace="http://schemas.microsoft.com/ws/2005/02/mex/bindings" location="http://localhost:9000/SlaveService?wsdl=wsdl0" />
+  <wsdl:types>
+    <xsd:schema targetNamespace="http://tempuri.org/Imports">
+      <xsd:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd0" namespace="http://tempuri.org/" />
+      <xsd:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+      <xsd:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" />
+      <xsd:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd3" namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" />
+      <xsd:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd4" namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" />
+      <xsd:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd5" namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" />
+      <xsd:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd6" namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
+      <xsd:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd7" namespace="http://schemas.datacontract.org/2004/07/System" />
+      <xsd:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd8" namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.PluginInfrastructure" />
+      <xsd:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd9" namespace="http://schemas.microsoft.com/Message" />
+    </xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="ISlaveFacade_Login_InputMessage">
+    <wsdl:part name="parameters" element="tns:Login" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_Login_OutputMessage">
+    <wsdl:part name="parameters" element="tns:LoginResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_ProcessHeartBeat_InputMessage">
+    <wsdl:part name="parameters" element="tns:ProcessHeartBeat" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_ProcessHeartBeat_OutputMessage">
+    <wsdl:part name="parameters" element="tns:ProcessHeartBeatResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_GetJob_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetJob" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_GetJob_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetJobResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_StoreFinishedJobResult_InputMessage">
+    <wsdl:part name="parameters" element="tns:StoreFinishedJobResult" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_StoreFinishedJobResult_OutputMessage">
+    <wsdl:part name="parameters" element="tns:StoreFinishedJobResultResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_ProcessSnapshot_InputMessage">
+    <wsdl:part name="parameters" element="tns:ProcessSnapshot" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_ProcessSnapshot_OutputMessage">
+    <wsdl:part name="parameters" element="tns:ProcessSnapshotResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_Logout_InputMessage">
+    <wsdl:part name="parameters" element="tns:Logout" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_Logout_OutputMessage">
+    <wsdl:part name="parameters" element="tns:LogoutResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_IsJobStillNeeded_InputMessage">
+    <wsdl:part name="parameters" element="tns:IsJobStillNeeded" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_IsJobStillNeeded_OutputMessage">
+    <wsdl:part name="parameters" element="tns:IsJobStillNeededResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_GetPlugins_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetPlugins" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_GetPlugins_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetPluginsResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_GetCalendar_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetCalendar" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_GetCalendar_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetCalendarResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_SetCalendarStatus_InputMessage">
+    <wsdl:part name="parameters" element="tns:SetCalendarStatus" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_SetCalendarStatus_OutputMessage">
+    <wsdl:part name="parameters" element="tns:SetCalendarStatusResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_GetStreamedJob_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetStreamedJob" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_GetStreamedJob_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetStreamedJobResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_GetStreamedPlugins_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetStreamedPlugins" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_GetStreamedPlugins_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetStreamedPluginsResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_StoreFinishedJobResultStreamed_InputMessage">
+    <wsdl:part name="parameters" element="tns:StoreFinishedJobResultStreamed" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_StoreFinishedJobResultStreamed_OutputMessage">
+    <wsdl:part name="parameters" element="tns:StoreFinishedJobResultStreamedResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_ProcessSnapshotStreamed_InputMessage">
+    <wsdl:part name="parameters" element="tns:ProcessSnapshotStreamed" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveFacade_ProcessSnapshotStreamed_OutputMessage">
+    <wsdl:part name="parameters" element="tns:ProcessSnapshotStreamedResponse" />
+  </wsdl:message>
+  <wsdl:portType name="ISlaveFacade">
+    <wsdl:operation name="Login">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/Login" message="tns:ISlaveFacade_Login_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/LoginResponse" message="tns:ISlaveFacade_Login_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="ProcessHeartBeat">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/ProcessHeartBeat" message="tns:ISlaveFacade_ProcessHeartBeat_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/ProcessHeartBeatResponse" message="tns:ISlaveFacade_ProcessHeartBeat_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="GetJob">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/GetJob" message="tns:ISlaveFacade_GetJob_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/GetJobResponse" message="tns:ISlaveFacade_GetJob_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="StoreFinishedJobResult">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/StoreFinishedJobResult" message="tns:ISlaveFacade_StoreFinishedJobResult_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/StoreFinishedJobResultResponse" message="tns:ISlaveFacade_StoreFinishedJobResult_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="ProcessSnapshot">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/ProcessSnapshot" message="tns:ISlaveFacade_ProcessSnapshot_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/ProcessSnapshotResponse" message="tns:ISlaveFacade_ProcessSnapshot_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="Logout">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/Logout" message="tns:ISlaveFacade_Logout_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/LogoutResponse" message="tns:ISlaveFacade_Logout_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="IsJobStillNeeded">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/IsJobStillNeeded" message="tns:ISlaveFacade_IsJobStillNeeded_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/IsJobStillNeededResponse" message="tns:ISlaveFacade_IsJobStillNeeded_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="GetPlugins">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/GetPlugins" message="tns:ISlaveFacade_GetPlugins_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/GetPluginsResponse" message="tns:ISlaveFacade_GetPlugins_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="GetCalendar">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/GetCalendar" message="tns:ISlaveFacade_GetCalendar_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/GetCalendarResponse" message="tns:ISlaveFacade_GetCalendar_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="SetCalendarStatus">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveCommunicator/SetCalendarStatus" message="tns:ISlaveFacade_SetCalendarStatus_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveCommunicator/SetCalendarStatusResponse" message="tns:ISlaveFacade_SetCalendarStatus_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="GetStreamedJob">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveFacade/GetStreamedJob" message="tns:ISlaveFacade_GetStreamedJob_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveFacade/GetStreamedJobResponse" message="tns:ISlaveFacade_GetStreamedJob_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="GetStreamedPlugins">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveFacade/GetStreamedPlugins" message="tns:ISlaveFacade_GetStreamedPlugins_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveFacade/GetStreamedPluginsResponse" message="tns:ISlaveFacade_GetStreamedPlugins_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="StoreFinishedJobResultStreamed">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveFacade/StoreFinishedJobResultStreamed" message="tns:ISlaveFacade_StoreFinishedJobResultStreamed_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveFacade/StoreFinishedJobResultStreamedResponse" message="tns:ISlaveFacade_StoreFinishedJobResultStreamed_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="ProcessSnapshotStreamed">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveFacade/ProcessSnapshotStreamed" message="tns:ISlaveFacade_ProcessSnapshotStreamed_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveFacade/ProcessSnapshotStreamedResponse" message="tns:ISlaveFacade_ProcessSnapshotStreamed_OutputMessage" />
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="SlaveHttpEndpoint" type="tns:ISlaveFacade">
+    <wsp:PolicyReference URI="#SlaveHttpEndpoint_policy" />
+    <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
+    <wsdl:operation name="Login">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/Login" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_Login_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_Login_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="ProcessHeartBeat">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/ProcessHeartBeat" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_ProcessHeartBeat_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_ProcessHeartBeat_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetJob">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/GetJob" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetJob_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetJob_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="StoreFinishedJobResult">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/StoreFinishedJobResult" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_StoreFinishedJobResult_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_StoreFinishedJobResult_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="ProcessSnapshot">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/ProcessSnapshot" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_ProcessSnapshot_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_ProcessSnapshot_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="Logout">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/Logout" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_Logout_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_Logout_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="IsJobStillNeeded">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/IsJobStillNeeded" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_IsJobStillNeeded_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_IsJobStillNeeded_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetPlugins">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/GetPlugins" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetPlugins_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetPlugins_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetCalendar">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/GetCalendar" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetCalendar_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetCalendar_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="SetCalendarStatus">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/SetCalendarStatus" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_SetCalendarStatus_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_SetCalendarStatus_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetStreamedJob">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/GetStreamedJob" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetStreamedJob_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetStreamedJob_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetStreamedPlugins">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/GetStreamedPlugins" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetStreamedPlugins_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_GetStreamedPlugins_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="StoreFinishedJobResultStreamed">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/StoreFinishedJobResultStreamed" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_StoreFinishedJobResultStreamed_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_StoreFinishedJobResultStreamed_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="ProcessSnapshotStreamed">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/ProcessSnapshotStreamed" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_ProcessSnapshotStreamed_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#SlaveHttpEndpoint_ProcessSnapshotStreamed_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:binding name="SlaveTcpStreamedEndpoint" type="tns:ISlaveFacade">
+    <wsp:PolicyReference URI="#SlaveTcpStreamedEndpoint_policy" />
+    <soap12:binding transport="http://schemas.microsoft.com/soap/tcp" />
+    <wsdl:operation name="Login">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/Login" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="ProcessHeartBeat">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/ProcessHeartBeat" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetJob">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/GetJob" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="StoreFinishedJobResult">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/StoreFinishedJobResult" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="ProcessSnapshot">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/ProcessSnapshot" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="Logout">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/Logout" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="IsJobStillNeeded">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/IsJobStillNeeded" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetPlugins">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/GetPlugins" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetCalendar">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/GetCalendar" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="SetCalendarStatus">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/SetCalendarStatus" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetStreamedJob">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/GetStreamedJob" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetStreamedPlugins">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/GetStreamedPlugins" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="StoreFinishedJobResultStreamed">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/StoreFinishedJobResultStreamed" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="ProcessSnapshotStreamed">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/ProcessSnapshotStreamed" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="SlaveFacade">
+    <wsdl:port name="SlaveHttpEndpoint" binding="tns:SlaveHttpEndpoint">
+      <soap12:address location="http://localhost:9000/SlaveService" />
+      <wsa10:EndpointReference>
+        <wsa10:Address>http://localhost:9000/SlaveService</wsa10:Address>
+        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
+          <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
+            <X509Data>
+              <X509Certificate>MIIB7jCCAVugAwIBAgIQ3s9wqCSCIrRGeccFaiyZ+jAJBgUrDgMCHQUAMBQxEjAQBgNVBAMTCWxvY2FsaG9zdDAeFw0xMDA4MjMxNTU4NDhaFw0zOTEyMzEyMzU5NTlaMBQxEjAQBgNVBAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEApjoMHgel+ErOltsW9oYNcetXIw9k+0jtHJJM5rakYQtlFpcvXQZ6JxSZoPUYzdMupdrWYVczYavA4ApJ94T4ORi91yMGF+D7F8DZnk+ovu7OqxmxErmhDL2DgECUifjE4Ab1wsKNoOZxRyAaj+FuGlNnsm8T+x+HJta0KaGBx40CAwEAAaNJMEcwRQYDVR0BBD4wPIAQEg4TvyBOxX+z6ZAlRfKFKaEWMBQxEjAQBgNVBAMTCWxvY2FsaG9zdIIQ3s9wqCSCIrRGeccFaiyZ+jAJBgUrDgMCHQUAA4GBAIcQM5tyU1e4+dY7YuT+4s0xLO/vOd+JEJaHgCQ8JSqJZHeGTJH9AYnsQtlbdSrJ8VI6ytB22yE82s5L5AJiou3T/uBvt0q1moOZUuDXKD400Mtek98wvROsmn0Wmadf6cYwtwKeOKsKuCo5dphI3hx7HYnv4eJaKME6gvRZS24K</X509Certificate>
+            </X509Data>
+          </KeyInfo>
+        </Identity>
+      </wsa10:EndpointReference>
+    </wsdl:port>
+    <wsdl:port name="SlaveMexEndpoint" binding="i0:SlaveMexEndpoint">
+      <soap12:address location="http://localhost:9000/SlaveService/mex" />
+      <wsa10:EndpointReference>
+        <wsa10:Address>http://localhost:9000/SlaveService/mex</wsa10:Address>
+      </wsa10:EndpointReference>
+    </wsdl:port>
+    <wsdl:port name="SlaveTcpStreamedEndpoint" binding="tns:SlaveTcpStreamedEndpoint">
+      <soap12:address location="net.tcp://localhost:9001/SlaveServiceStreamed" />
+      <wsa10:EndpointReference>
+        <wsa10:Address>net.tcp://localhost:9001/SlaveServiceStreamed</wsa10:Address>
+        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
+          <Dns>localhost</Dns>
+        </Identity>
+      </wsa10:EndpointReference>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService.disco
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService.disco	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService.disco	(revision 4340)
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<discovery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/disco/">
+  <contractRef ref="http://localhost:9000/SlaveService?wsdl" docRef="http://localhost:9000/SlaveService" xmlns="http://schemas.xmlsoap.org/disco/scl/" />
+</discovery>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService.wsdl
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService.wsdl	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService.wsdl	(revision 4340)
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:tns="http://schemas.microsoft.com/ws/2005/02/mex/bindings" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:i0="http://tempuri.org/" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://schemas.microsoft.com/ws/2005/02/mex/bindings" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+  <wsp:Policy wsu:Id="SlaveMexEndpoint_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <wsaw:UsingAddressing />
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsdl:import namespace="http://tempuri.org/" location="http://localhost:9000/SlaveService?wsdl" />
+  <wsdl:types />
+  <wsdl:binding name="SlaveMexEndpoint" type="i0:ISlaveFacade">
+    <wsp:PolicyReference URI="#SlaveMexEndpoint_policy" />
+    <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
+    <wsdl:operation name="Login">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/Login" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="ProcessHeartBeat">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/ProcessHeartBeat" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetJob">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/GetJob" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="StoreFinishedJobResult">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/StoreFinishedJobResult" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="ProcessSnapshot">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/ProcessSnapshot" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="Logout">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/Logout" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="IsJobStillNeeded">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/IsJobStillNeeded" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetPlugins">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/GetPlugins" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetCalendar">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/GetCalendar" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="SetCalendarStatus">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveCommunicator/SetCalendarStatus" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetStreamedJob">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/GetStreamedJob" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetStreamedPlugins">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/GetStreamedPlugins" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="StoreFinishedJobResultStreamed">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/StoreFinishedJobResultStreamed" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="ProcessSnapshotStreamed">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveFacade/ProcessSnapshotStreamed" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+</wsdl:definitions>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService.xsd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService.xsd	(revision 4340)
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:simpleType name="ResponseStatus">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Ok" />
+      <xs:enumeration value="RequestSnapshot_JobIsNotBeeingCalculated" />
+      <xs:enumeration value="RequestSnapshot_SnapshotAlreadyRequested" />
+      <xs:enumeration value="GetJobById_JobDoesNotExist" />
+      <xs:enumeration value="GetJobByIdWithDetails_JobDoesNotExist" />
+      <xs:enumeration value="AddNewJob_JobStateMustBeOffline" />
+      <xs:enumeration value="AddNewJob_JobIdMustNotBeSet" />
+      <xs:enumeration value="AddNewJob_JobNull" />
+      <xs:enumeration value="RemoveJob_JobDoesNotExist" />
+      <xs:enumeration value="GetLastSerializedResult_JobResultNotYetThere" />
+      <xs:enumeration value="AbortJob_JobDoesNotExist" />
+      <xs:enumeration value="AbortJob_AbortAlreadyRequested" />
+      <xs:enumeration value="AbortJob_JobIsNotBeeingCalculated" />
+      <xs:enumeration value="GetCalendar_ResourceNotFound" />
+      <xs:enumeration value="GetCalendar_NoCalendarFound" />
+      <xs:enumeration value="SetCalendarStatus_ResourceNotFound" />
+      <xs:enumeration value="ProcessHeartBeat_UserNotLoggedIn" />
+      <xs:enumeration value="GetJob_NoJobsAvailable" />
+      <xs:enumeration value="ProcessJobResult_JobDoesNotExist" />
+      <xs:enumeration value="ProcessJobResult_JobAborted" />
+      <xs:enumeration value="ProcessJobResult_JobIsNotBeeingCalculated" />
+      <xs:enumeration value="ProcessJobResult_WrongSlaveForJob" />
+      <xs:enumeration value="ProcessJobResult_InvalidJobState" />
+      <xs:enumeration value="Login_LoginFaild" />
+      <xs:enumeration value="Logout_SlaveNotRegistered" />
+      <xs:enumeration value="IsJobStillNeeded_JobDoesNotExist" />
+      <xs:enumeration value="IsJobStillNeeded_JobAlreadyFinished" />
+      <xs:enumeration value="GetPlugins_PluginsNotAvailable" />
+      <xs:enumeration value="AddSlaveGroup_SlaveIdMustNotBeSet" />
+      <xs:enumeration value="AddResourceToGroup_SlaveGroupDoesNotExist" />
+      <xs:enumeration value="DeleteResourceFromGroup_SlaveGroupDoesNotExist" />
+      <xs:enumeration value="GetAllGroupsOfResource_ResourceNotFound" />
+      <xs:enumeration value="DeleteSlaveGroup_SlaveGroupDoesNotExist" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="ResponseStatus" nillable="true" type="tns:ResponseStatus" />
+  <xs:complexType name="ArrayOfMessageContainer">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="MessageContainer" nillable="true" type="tns:MessageContainer" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfMessageContainer" nillable="true" type="tns:ArrayOfMessageContainer" />
+  <xs:complexType name="MessageContainer">
+    <xs:sequence>
+      <xs:element name="_x003C_JobId_x003E_k__BackingField" type="ser:guid" />
+      <xs:element name="_x003C_Message_x003E_k__BackingField" type="tns:MessageContainer.MessageType" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="MessageContainer" nillable="true" type="tns:MessageContainer" />
+  <xs:simpleType name="MessageContainer.MessageType">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="FetchJob" />
+      <xs:enumeration value="AbortJob" />
+      <xs:enumeration value="JobAborted" />
+      <xs:enumeration value="RequestSnapshot" />
+      <xs:enumeration value="FinishedJob" />
+      <xs:enumeration value="NoMessage" />
+      <xs:enumeration value="SnapshotReady" />
+      <xs:enumeration value="Shutdown" />
+      <xs:enumeration value="JobFailed" />
+      <xs:enumeration value="UptimeLimitDisconnect" />
+      <xs:enumeration value="FetchOrForceFetchCalendar" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="MessageContainer.MessageType" nillable="true" type="tns:MessageContainer.MessageType" />
+</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService1.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService1.xsd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService1.xsd	(revision 4340)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/System" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/System" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:complexType name="Version">
+    <xs:sequence>
+      <xs:element name="_Build" type="xs:int" />
+      <xs:element name="_Major" type="xs:int" />
+      <xs:element name="_Minor" type="xs:int" />
+      <xs:element name="_Revision" type="xs:int" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="Version" nillable="true" type="tns:Version" />
+</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService2.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService2.xsd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService2.xsd	(revision 4340)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="anyType" nillable="true" type="xs:anyType" />
+  <xs:element name="anyURI" nillable="true" type="xs:anyURI" />
+  <xs:element name="base64Binary" nillable="true" type="xs:base64Binary" />
+  <xs:element name="boolean" nillable="true" type="xs:boolean" />
+  <xs:element name="byte" nillable="true" type="xs:byte" />
+  <xs:element name="dateTime" nillable="true" type="xs:dateTime" />
+  <xs:element name="decimal" nillable="true" type="xs:decimal" />
+  <xs:element name="double" nillable="true" type="xs:double" />
+  <xs:element name="float" nillable="true" type="xs:float" />
+  <xs:element name="int" nillable="true" type="xs:int" />
+  <xs:element name="long" nillable="true" type="xs:long" />
+  <xs:element name="QName" nillable="true" type="xs:QName" />
+  <xs:element name="short" nillable="true" type="xs:short" />
+  <xs:element name="string" nillable="true" type="xs:string" />
+  <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" />
+  <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" />
+  <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" />
+  <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" />
+  <xs:element name="char" nillable="true" type="tns:char" />
+  <xs:simpleType name="char">
+    <xs:restriction base="xs:int" />
+  </xs:simpleType>
+  <xs:element name="duration" nillable="true" type="tns:duration" />
+  <xs:simpleType name="duration">
+    <xs:restriction base="xs:duration">
+      <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" />
+      <xs:minInclusive value="-P10675199DT2H48M5.4775808S" />
+      <xs:maxInclusive value="P10675199DT2H48M5.4775807S" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="guid" nillable="true" type="tns:guid" />
+  <xs:simpleType name="guid">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:attribute name="FactoryType" type="xs:QName" />
+  <xs:attribute name="Id" type="xs:ID" />
+  <xs:attribute name="Ref" type="xs:IDREF" />
+</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService3.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService3.xsd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService3.xsd	(revision 4340)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/Message" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/Message" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:simpleType name="StreamBody">
+    <xs:restriction base="xs:base64Binary" />
+  </xs:simpleType>
+</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService4.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService4.xsd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService4.xsd	(revision 4340)
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd5" namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" />
+  <xs:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" />
+  <xs:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd8" namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.PluginInfrastructure" />
+  <xs:complexType name="Response">
+    <xs:sequence>
+      <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="StatusMessage" type="q1:ResponseStatus" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="Response" nillable="true" type="tns:Response" />
+  <xs:complexType name="ResponseHeartBeat">
+    <xs:complexContent mixed="false">
+      <xs:extension base="tns:Response">
+        <xs:sequence>
+          <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="ActionRequest" nillable="true" type="q2:ArrayOfMessageContainer" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ResponseHeartBeat" nillable="true" type="tns:ResponseHeartBeat" />
+  <xs:complexType name="ResponseObjectOfJobDtoZAa7YIsz">
+    <xs:annotation>
+      <xs:appinfo>
+        <GenericType Name="ResponseObjectOf{0}{#}" Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
+          <GenericParameter Name="JobDto" Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" />
+        </GenericType>
+      </xs:appinfo>
+    </xs:annotation>
+    <xs:complexContent mixed="false">
+      <xs:extension base="tns:Response">
+        <xs:sequence>
+          <xs:element xmlns:q3="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="Obj" nillable="true" type="q3:JobDto" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ResponseObjectOfJobDtoZAa7YIsz" nillable="true" type="tns:ResponseObjectOfJobDtoZAa7YIsz" />
+  <xs:complexType name="ResponseResultReceived">
+    <xs:complexContent mixed="false">
+      <xs:extension base="tns:Response">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="Finished" type="xs:boolean" />
+          <xs:element minOccurs="0" name="JobId" type="ser:guid" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ResponseResultReceived" nillable="true" type="tns:ResponseResultReceived" />
+  <xs:complexType name="ResponseListOfCachedHivePluginInfoDtoZMwZop09">
+    <xs:annotation>
+      <xs:appinfo>
+        <GenericType Name="ResponseListOf{0}{#}" Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
+          <GenericParameter Name="CachedHivePluginInfoDto" Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.PluginInfrastructure" />
+        </GenericType>
+      </xs:appinfo>
+    </xs:annotation>
+    <xs:complexContent mixed="false">
+      <xs:extension base="tns:Response">
+        <xs:sequence>
+          <xs:element xmlns:q4="http://schemas.datacontract.org/2004/07/HeuristicLab.PluginInfrastructure" minOccurs="0" name="List" nillable="true" type="q4:ArrayOfCachedHivePluginInfoDto" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ResponseListOfCachedHivePluginInfoDtoZMwZop09" nillable="true" type="tns:ResponseListOfCachedHivePluginInfoDtoZMwZop09" />
+  <xs:complexType name="ResponseCalendar">
+    <xs:complexContent mixed="false">
+      <xs:extension base="tns:Response">
+        <xs:sequence>
+          <xs:element xmlns:q5="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="Appointments" nillable="true" type="q5:ArrayOfAppointmentDto" />
+          <xs:element minOccurs="0" name="ForceFetch" type="xs:boolean" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ResponseCalendar" nillable="true" type="tns:ResponseCalendar" />
+</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService5.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService5.xsd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService5.xsd	(revision 4340)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.PluginInfrastructure" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.PluginInfrastructure" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" />
+  <xs:complexType name="ArrayOfCachedHivePluginInfoDto">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="CachedHivePluginInfoDto" nillable="true" type="tns:CachedHivePluginInfoDto" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfCachedHivePluginInfoDto" nillable="true" type="tns:ArrayOfCachedHivePluginInfoDto" />
+  <xs:complexType name="CachedHivePluginInfoDto">
+    <xs:complexContent mixed="false">
+      <xs:extension xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" base="q1:HivePluginInfoDto">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="PluginFiles" nillable="true" type="q1:ArrayOfHivePluginFile" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="CachedHivePluginInfoDto" nillable="true" type="tns:CachedHivePluginInfoDto" />
+</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService6.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService6.xsd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService6.xsd	(revision 4340)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/Arrays" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:complexType name="ArrayOfKeyValueOfguiddouble">
+    <xs:annotation>
+      <xs:appinfo>
+        <IsDictionary xmlns="http://schemas.microsoft.com/2003/10/Serialization/">true</IsDictionary>
+      </xs:appinfo>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="KeyValueOfguiddouble">
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element name="Key" type="ser:guid" />
+            <xs:element name="Value" type="xs:double" />
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfKeyValueOfguiddouble" nillable="true" type="tns:ArrayOfKeyValueOfguiddouble" />
+  <xs:complexType name="ArrayOfguid">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="guid" type="ser:guid" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfguid" nillable="true" type="tns:ArrayOfguid" />
+</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService7.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService7.xsd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService7.xsd	(revision 4340)
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://tempuri.org/" elementFormDefault="qualified" targetNamespace="http://tempuri.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" />
+  <xs:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd4" namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" />
+  <xs:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd9" namespace="http://schemas.microsoft.com/Message" />
+  <xs:element name="Login">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="slave" nillable="true" type="q1:SlaveDto" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="LoginResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="LoginResult" nillable="true" type="q2:Response" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="ProcessHeartBeat">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q3="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="hbData" nillable="true" type="q3:HeartBeatData" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="ProcessHeartBeatResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q4="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="ProcessHeartBeatResult" nillable="true" type="q4:ResponseHeartBeat" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetJob">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q5="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q5:guid" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetJobResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q6="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="GetJobResult" nillable="true" type="q6:ResponseObjectOfJobDtoZAa7YIsz" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="StoreFinishedJobResult">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q7="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q7:guid" />
+        <xs:element xmlns:q8="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="jobId" type="q8:guid" />
+        <xs:element minOccurs="0" name="result" nillable="true" type="xs:base64Binary" />
+        <xs:element minOccurs="0" name="percentage" type="xs:double" />
+        <xs:element minOccurs="0" name="exception" nillable="true" type="xs:string" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="StoreFinishedJobResultResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q9="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="StoreFinishedJobResultResult" nillable="true" type="q9:ResponseResultReceived" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="ProcessSnapshot">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q10="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q10:guid" />
+        <xs:element xmlns:q11="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="jobId" type="q11:guid" />
+        <xs:element minOccurs="0" name="result" nillable="true" type="xs:base64Binary" />
+        <xs:element minOccurs="0" name="percentage" type="xs:double" />
+        <xs:element minOccurs="0" name="exception" nillable="true" type="xs:string" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="ProcessSnapshotResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q12="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="ProcessSnapshotResult" nillable="true" type="q12:ResponseResultReceived" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="Logout">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q13="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q13:guid" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="LogoutResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q14="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="LogoutResult" nillable="true" type="q14:Response" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="IsJobStillNeeded">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q15="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="jobId" type="q15:guid" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="IsJobStillNeededResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q16="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="IsJobStillNeededResult" nillable="true" type="q16:Response" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetPlugins">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q17="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="pluginList" nillable="true" type="q17:ArrayOfHivePluginInfoDto" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetPluginsResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q18="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="GetPluginsResult" nillable="true" type="q18:ResponseListOfCachedHivePluginInfoDtoZMwZop09" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetCalendar">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q19="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q19:guid" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetCalendarResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q20="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="GetCalendarResult" nillable="true" type="q20:ResponseCalendar" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SetCalendarStatus">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q21="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q21:guid" />
+        <xs:element xmlns:q22="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="state" type="q22:CalendarState" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SetCalendarStatusResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q23="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="SetCalendarStatusResult" nillable="true" type="q23:Response" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetStreamedJob">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q24="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q24:guid" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetStreamedJobResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q25="http://schemas.microsoft.com/Message" name="GetStreamedJobResult" type="q25:StreamBody" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetStreamedPlugins">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q26="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="pluginList" nillable="true" type="q26:ArrayOfHivePluginInfoDto" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetStreamedPluginsResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q27="http://schemas.microsoft.com/Message" name="GetStreamedPluginsResult" type="q27:StreamBody" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="StoreFinishedJobResultStreamed">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q28="http://schemas.microsoft.com/Message" name="stream" type="q28:StreamBody" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="StoreFinishedJobResultStreamedResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q29="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="StoreFinishedJobResultStreamedResult" nillable="true" type="q29:ResponseResultReceived" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="ProcessSnapshotStreamed">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q30="http://schemas.microsoft.com/Message" name="stream" type="q30:StreamBody" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="ProcessSnapshotStreamedResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q31="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.ResponseObjects" minOccurs="0" name="ProcessSnapshotStreamedResult" nillable="true" type="q31:ResponseResultReceived" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService8.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService8.xsd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService8.xsd	(revision 4340)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:complexType name="PersistableObject">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="ser:guid" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="PersistableObject" nillable="true" type="tns:PersistableObject" />
+</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService9.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService9.xsd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/SlaveService9.xsd	(revision 4340)
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd3" namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" />
+  <xs:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd6" namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
+  <xs:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:import schemaLocation="http://localhost:9000/SlaveService?xsd=xsd7" namespace="http://schemas.datacontract.org/2004/07/System" />
+  <xs:complexType name="SlaveDto">
+    <xs:complexContent mixed="false">
+      <xs:extension base="tns:ResourceDto">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="CalendarSyncStatus" type="tns:CalendarState" />
+          <xs:element minOccurs="0" name="Config" nillable="true" type="tns:SlaveConfigDto" />
+          <xs:element minOccurs="0" name="CpuSpeedPerCore" nillable="true" type="xs:int" />
+          <xs:element minOccurs="0" name="FreeMemory" type="xs:int" />
+          <xs:element minOccurs="0" name="IsAllowedToCalculate" type="xs:boolean" />
+          <xs:element minOccurs="0" name="Login" nillable="true" type="xs:dateTime" />
+          <xs:element minOccurs="0" name="Memory" type="xs:int" />
+          <xs:element minOccurs="0" name="NrOfCores" type="xs:int" />
+          <xs:element minOccurs="0" name="NrOfFreeCores" type="xs:int" />
+          <xs:element minOccurs="0" name="State" type="tns:SlaveState" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="SlaveDto" nillable="true" type="tns:SlaveDto" />
+  <xs:complexType name="ResourceDto">
+    <xs:complexContent mixed="false">
+      <xs:extension xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" base="q1:PersistableObject">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ResourceDto" nillable="true" type="tns:ResourceDto" />
+  <xs:simpleType name="CalendarState">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Fetch" />
+      <xs:enumeration value="ForceFetch" />
+      <xs:enumeration value="Fetching" />
+      <xs:enumeration value="Fetched" />
+      <xs:enumeration value="NotAllowedToFetch" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="CalendarState" nillable="true" type="tns:CalendarState" />
+  <xs:complexType name="SlaveConfigDto">
+    <xs:complexContent mixed="false">
+      <xs:extension xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" base="q2:PersistableObject">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="HeartBeatIntervall" nillable="true" type="xs:int" />
+          <xs:element minOccurs="0" name="UpDownTimeCalendar" nillable="true" type="xs:string" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="SlaveConfigDto" nillable="true" type="tns:SlaveConfigDto" />
+  <xs:simpleType name="SlaveState">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="NullState" />
+      <xs:enumeration value="Idle" />
+      <xs:enumeration value="Calculating" />
+      <xs:enumeration value="Offline" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="SlaveState" nillable="true" type="tns:SlaveState" />
+  <xs:complexType name="HeartBeatData">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="FreeCores" type="xs:int" />
+      <xs:element minOccurs="0" name="FreeMemory" type="xs:int" />
+      <xs:element minOccurs="0" name="IsAllowedToCalculate" type="xs:boolean" />
+      <xs:element xmlns:q3="http://schemas.microsoft.com/2003/10/Serialization/Arrays" minOccurs="0" name="JobProgress" nillable="true" type="q3:ArrayOfKeyValueOfguiddouble" />
+      <xs:element minOccurs="0" name="SlaveId" type="ser:guid" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="HeartBeatData" nillable="true" type="tns:HeartBeatData" />
+  <xs:complexType name="JobDto">
+    <xs:complexContent mixed="false">
+      <xs:extension xmlns:q4="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" base="q4:PersistableObject">
+        <xs:sequence>
+          <xs:element xmlns:q5="http://schemas.microsoft.com/2003/10/Serialization/Arrays" minOccurs="0" name="AssignedResourceIds" nillable="true" type="q5:ArrayOfguid" />
+          <xs:element minOccurs="0" name="CoresNeeded" type="xs:int" />
+          <xs:element minOccurs="0" name="DateCalculated" nillable="true" type="xs:dateTime" />
+          <xs:element minOccurs="0" name="DateCreated" nillable="true" type="xs:dateTime" />
+          <xs:element minOccurs="0" name="DateFinished" nillable="true" type="xs:dateTime" />
+          <xs:element minOccurs="0" name="Exception" nillable="true" type="xs:string" />
+          <xs:element minOccurs="0" name="MemoryNeeded" type="xs:int" />
+          <xs:element minOccurs="0" name="ParentJob" nillable="true" type="tns:JobDto" />
+          <xs:element minOccurs="0" name="Percentage" nillable="true" type="xs:double" />
+          <xs:element minOccurs="0" name="PluginsNeeded" nillable="true" type="tns:ArrayOfHivePluginInfoDto" />
+          <xs:element minOccurs="0" name="Priority" type="xs:int" />
+          <xs:element minOccurs="0" name="Project" nillable="true" type="tns:ProjectDto" />
+          <xs:element minOccurs="0" name="Slave" nillable="true" type="tns:SlaveDto" />
+          <xs:element minOccurs="0" name="State" type="tns:JobState" />
+          <xs:element minOccurs="0" name="UserId" nillable="true" type="xs:string" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="JobDto" nillable="true" type="tns:JobDto" />
+  <xs:complexType name="ArrayOfHivePluginInfoDto">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="HivePluginInfoDto" nillable="true" type="tns:HivePluginInfoDto" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfHivePluginInfoDto" nillable="true" type="tns:ArrayOfHivePluginInfoDto" />
+  <xs:complexType name="HivePluginInfoDto">
+    <xs:complexContent mixed="false">
+      <xs:extension xmlns:q6="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" base="q6:PersistableObject">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+          <xs:element minOccurs="0" name="Update" type="xs:boolean" />
+          <xs:element xmlns:q7="http://schemas.datacontract.org/2004/07/System" minOccurs="0" name="Version" nillable="true" type="q7:Version" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="HivePluginInfoDto" nillable="true" type="tns:HivePluginInfoDto" />
+  <xs:complexType name="ProjectDto">
+    <xs:complexContent mixed="false">
+      <xs:extension xmlns:q8="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" base="q8:PersistableObject">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ProjectDto" nillable="true" type="tns:ProjectDto" />
+  <xs:simpleType name="JobState">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Calculating" />
+      <xs:enumeration value="Offline" />
+      <xs:enumeration value="Finished" />
+      <xs:enumeration value="Aborted" />
+      <xs:enumeration value="SnapshotRequested" />
+      <xs:enumeration value="SnapshotSent" />
+      <xs:enumeration value="Pending" />
+      <xs:enumeration value="Failed" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="JobState" nillable="true" type="tns:JobState" />
+  <xs:complexType name="ArrayOfHivePluginFile">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="HivePluginFile" nillable="true" type="tns:HivePluginFile" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfHivePluginFile" nillable="true" type="tns:ArrayOfHivePluginFile" />
+  <xs:complexType name="HivePluginFile">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="BinaryFile" nillable="true" type="xs:base64Binary" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="HivePluginFile" nillable="true" type="tns:HivePluginFile" />
+  <xs:complexType name="ArrayOfAppointmentDto">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="AppointmentDto" nillable="true" type="tns:AppointmentDto" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfAppointmentDto" nillable="true" type="tns:ArrayOfAppointmentDto" />
+  <xs:complexType name="AppointmentDto">
+    <xs:complexContent mixed="false">
+      <xs:extension xmlns:q9="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess" base="q9:PersistableObject">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="AllDayEvent" type="xs:boolean" />
+          <xs:element minOccurs="0" name="EndDate" type="xs:dateTime" />
+          <xs:element minOccurs="0" name="Recurring" type="xs:boolean" />
+          <xs:element minOccurs="0" name="RecurringId" type="ser:guid" />
+          <xs:element minOccurs="0" name="ResourceId" type="ser:guid" />
+          <xs:element minOccurs="0" name="StartDate" type="xs:dateTime" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="AppointmentDto" nillable="true" type="tns:AppointmentDto" />
+</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/configuration.svcinfo
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/configuration.svcinfo	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/configuration.svcinfo	(revision 4340)
@@ -0,0 +1,14 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<configurationSnapshot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:xml-wcfconfigurationsnapshot">
+  <behaviors />
+  <bindings>
+    <binding digest="System.ServiceModel.Configuration.NetTcpBindingElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data hostNameComparisonMode=&quot;StrongWildcard&quot; listenBacklog=&quot;10&quot; maxBufferSize=&quot;65536&quot; maxConnections=&quot;10&quot; name=&quot;SlaveTcpStreamedEndpoint&quot; transactionFlow=&quot;false&quot; transactionProtocol=&quot;OleTransactions&quot; transferMode=&quot;Streamed&quot;&gt;&lt;readerQuotas maxArrayLength=&quot;16384&quot; maxBytesPerRead=&quot;4096&quot; maxDepth=&quot;32&quot; maxNameTableCharCount=&quot;16384&quot; maxStringContentLength=&quot;8192&quot; /&gt;&lt;reliableSession enabled=&quot;false&quot; inactivityTimeout=&quot;00:10:00&quot; ordered=&quot;true&quot; /&gt;&lt;security mode=&quot;TransportWithMessageCredential&quot;&gt;&lt;message algorithmSuite=&quot;Default&quot; clientCredentialType=&quot;UserName&quot; /&gt;&lt;transport clientCredentialType=&quot;Windows&quot; protectionLevel=&quot;EncryptAndSign&quot; /&gt;&lt;/security&gt;&lt;/Data&gt;" bindingType="netTcpBinding" name="SlaveTcpStreamedEndpoint" />
+    <binding digest="System.ServiceModel.Configuration.WSHttpBindingElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data hostNameComparisonMode=&quot;StrongWildcard&quot; messageEncoding=&quot;Text&quot; name=&quot;SlaveHttpEndpoint&quot; textEncoding=&quot;utf-8&quot; transactionFlow=&quot;false&quot;&gt;&lt;readerQuotas maxArrayLength=&quot;16384&quot; maxBytesPerRead=&quot;4096&quot; maxDepth=&quot;32&quot; maxNameTableCharCount=&quot;16384&quot; maxStringContentLength=&quot;8192&quot; /&gt;&lt;reliableSession enabled=&quot;false&quot; inactivityTimeout=&quot;00:10:00&quot; ordered=&quot;true&quot; /&gt;&lt;security mode=&quot;Message&quot;&gt;&lt;message algorithmSuite=&quot;Default&quot; clientCredentialType=&quot;UserName&quot; negotiateServiceCredential=&quot;true&quot; /&gt;&lt;transport clientCredentialType=&quot;Windows&quot; proxyCredentialType=&quot;None&quot; realm=&quot;&quot; /&gt;&lt;/security&gt;&lt;/Data&gt;" bindingType="wsHttpBinding" name="SlaveHttpEndpoint" />
+    <binding digest="System.ServiceModel.Configuration.WSHttpBindingElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data hostNameComparisonMode=&quot;StrongWildcard&quot; messageEncoding=&quot;Text&quot; name=&quot;SlaveMexEndpoint&quot; textEncoding=&quot;utf-8&quot; transactionFlow=&quot;false&quot;&gt;&lt;readerQuotas maxArrayLength=&quot;16384&quot; maxBytesPerRead=&quot;4096&quot; maxDepth=&quot;32&quot; maxNameTableCharCount=&quot;16384&quot; maxStringContentLength=&quot;8192&quot; /&gt;&lt;reliableSession enabled=&quot;false&quot; inactivityTimeout=&quot;00:10:00&quot; ordered=&quot;true&quot; /&gt;&lt;security mode=&quot;None&quot;&gt;&lt;message clientCredentialType=&quot;Windows&quot; negotiateServiceCredential=&quot;true&quot; /&gt;&lt;transport clientCredentialType=&quot;Windows&quot; proxyCredentialType=&quot;None&quot; realm=&quot;&quot; /&gt;&lt;/security&gt;&lt;/Data&gt;" bindingType="wsHttpBinding" name="SlaveMexEndpoint" />
+  </bindings>
+  <endpoints>
+    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;http://localhost:9000/SlaveService&quot; binding=&quot;wsHttpBinding&quot; bindingConfiguration=&quot;SlaveHttpEndpoint&quot; contract=&quot;SlaveService.ISlaveFacade&quot; name=&quot;SlaveHttpEndpoint&quot;&gt;&lt;identity&gt;&lt;certificate encodedValue=&quot;AwAAAAEAAAAUAAAAeBLH/0jWrlsW42fIC8VIIdAE6PUgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhDez3CoJIIitEZ5xwVqLJn6MAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMzE1NTg0OFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmOgweB6X4Ss6W2xb2hg1x61cjD2T7SO0ckkzmtqRhC2UWly9dBnonFJmg9RjN0y6l2tZhVzNhq8DgCkn3hPg5GL3XIwYX4PsXwNmeT6i+7s6rGbESuaEMvYOAQJSJ+MTgBvXCwo2g5nFHIBqP4W4aU2eybxP7H4cm1rQpoYHHjQIDAQABo0kwRzBFBgNVHQEEPjA8gBASDhO/IE7Ff7PpkCVF8oUpoRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghDez3CoJIIitEZ5xwVqLJn6MAkGBSsOAwIdBQADgYEAhxAzm3JTV7j51jti5P7izTEs7+8534kQloeAJDwlKolkd4ZMkf0BiexC2Vt1KsnxUjrK0HbbITzazkvkAmKi7dP+4G+3SrWag5lS4NcoPjTQy16T3zC9E6yafRaZp1/pxjC3Ap44qwq4Kjl2mEjeHHsdie/h4loowTqC9FlLbgo=&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;http://localhost:9000/SlaveService&quot; binding=&quot;wsHttpBinding&quot; bindingConfiguration=&quot;SlaveHttpEndpoint&quot; contract=&quot;SlaveService.ISlaveFacade&quot; name=&quot;SlaveHttpEndpoint&quot;&gt;&lt;identity&gt;&lt;certificate encodedValue=&quot;AwAAAAEAAAAUAAAAeBLH/0jWrlsW42fIC8VIIdAE6PUgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhDez3CoJIIitEZ5xwVqLJn6MAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMzE1NTg0OFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmOgweB6X4Ss6W2xb2hg1x61cjD2T7SO0ckkzmtqRhC2UWly9dBnonFJmg9RjN0y6l2tZhVzNhq8DgCkn3hPg5GL3XIwYX4PsXwNmeT6i+7s6rGbESuaEMvYOAQJSJ+MTgBvXCwo2g5nFHIBqP4W4aU2eybxP7H4cm1rQpoYHHjQIDAQABo0kwRzBFBgNVHQEEPjA8gBASDhO/IE7Ff7PpkCVF8oUpoRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghDez3CoJIIitEZ5xwVqLJn6MAkGBSsOAwIdBQADgYEAhxAzm3JTV7j51jti5P7izTEs7+8534kQloeAJDwlKolkd4ZMkf0BiexC2Vt1KsnxUjrK0HbbITzazkvkAmKi7dP+4G+3SrWag5lS4NcoPjTQy16T3zC9E6yafRaZp1/pxjC3Ap44qwq4Kjl2mEjeHHsdie/h4loowTqC9FlLbgo=&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" contractName="SlaveService.ISlaveFacade" name="SlaveHttpEndpoint" />
+    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;http://localhost:9000/SlaveService/mex&quot; binding=&quot;wsHttpBinding&quot; bindingConfiguration=&quot;SlaveMexEndpoint&quot; contract=&quot;SlaveService.ISlaveFacade&quot; name=&quot;SlaveMexEndpoint&quot; /&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;http://localhost:9000/SlaveService/mex&quot; binding=&quot;wsHttpBinding&quot; bindingConfiguration=&quot;SlaveMexEndpoint&quot; contract=&quot;SlaveService.ISlaveFacade&quot; name=&quot;SlaveMexEndpoint&quot; /&gt;" contractName="SlaveService.ISlaveFacade" name="SlaveMexEndpoint" />
+    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://localhost:9001/SlaveServiceStreamed&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;SlaveTcpStreamedEndpoint&quot; contract=&quot;SlaveService.ISlaveFacade&quot; name=&quot;SlaveTcpStreamedEndpoint&quot;&gt;&lt;identity&gt;&lt;dns value=&quot;localhost&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://localhost:9001/SlaveServiceStreamed&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;SlaveTcpStreamedEndpoint&quot; contract=&quot;SlaveService.ISlaveFacade&quot; name=&quot;SlaveTcpStreamedEndpoint&quot;&gt;&lt;identity&gt;&lt;dns value=&quot;localhost&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" contractName="SlaveService.ISlaveFacade" name="SlaveTcpStreamedEndpoint" />
+  </endpoints>
+</configurationSnapshot>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/configuration91.svcinfo
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/configuration91.svcinfo	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/SlaveService/configuration91.svcinfo	(revision 4340)
@@ -0,0 +1,625 @@
+<?xml version="1.0" encoding="utf-8"?>
+<SavedWcfConfigurationInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="9.1" CheckSum="IVbHOGoLIiHm7HALbaYOYdLHHj8=">
+  <bindingConfigurations>
+    <bindingConfiguration bindingType="netTcpBinding" name="SlaveTcpStreamedEndpoint">
+      <properties>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>SlaveTcpStreamedEndpoint</serializedValue>
+        </property>
+        <property path="/closeTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/openTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/receiveTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/sendTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/transactionFlow" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/transferMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransferMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Streamed</serializedValue>
+        </property>
+        <property path="/transactionProtocol" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransactionProtocol, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>OleTransactions</serializedValue>
+        </property>
+        <property path="/hostNameComparisonMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HostNameComparisonMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>StrongWildcard</serializedValue>
+        </property>
+        <property path="/listenBacklog" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxBufferPoolSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>524288</serializedValue>
+        </property>
+        <property path="/maxBufferSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/maxConnections" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxReceivedMessageSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/portSharingEnabled" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/readerQuotas" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxDepth" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>32</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxStringContentLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>8192</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxArrayLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxBytesPerRead" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>4096</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxNameTableCharCount" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/reliableSession" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement</serializedValue>
+        </property>
+        <property path="/reliableSession/ordered" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/reliableSession/inactivityTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/reliableSession/enabled" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/security" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.NetTcpSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.NetTcpSecurityElement</serializedValue>
+        </property>
+        <property path="/security/mode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.SecurityMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>TransportWithMessageCredential</serializedValue>
+        </property>
+        <property path="/security/transport" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.TcpTransportSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.TcpTransportSecurityElement</serializedValue>
+        </property>
+        <property path="/security/transport/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TcpClientCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/transport/protectionLevel" isComplexType="false" isExplicitlyDefined="true" clrType="System.Net.Security.ProtectionLevel, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>EncryptAndSign</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/policyEnforcement" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.PolicyEnforcement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Never</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/protectionScenario" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.ProtectionScenario, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>TransportSelected</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/customServiceNames" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ServiceNameElementCollection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>(Collection)</serializedValue>
+        </property>
+        <property path="/security/message" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.MessageSecurityOverTcpElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.MessageSecurityOverTcpElement</serializedValue>
+        </property>
+        <property path="/security/message/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.MessageCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>UserName</serializedValue>
+        </property>
+        <property path="/security/message/algorithmSuite" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Security.SecurityAlgorithmSuite, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Default</serializedValue>
+        </property>
+      </properties>
+    </bindingConfiguration>
+    <bindingConfiguration bindingType="wsHttpBinding" name="SlaveHttpEndpoint">
+      <properties>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>SlaveHttpEndpoint</serializedValue>
+        </property>
+        <property path="/closeTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/openTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/receiveTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/sendTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/bypassProxyOnLocal" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/transactionFlow" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/hostNameComparisonMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HostNameComparisonMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>StrongWildcard</serializedValue>
+        </property>
+        <property path="/maxBufferPoolSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>524288</serializedValue>
+        </property>
+        <property path="/maxReceivedMessageSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/messageEncoding" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.WSMessageEncoding, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Text</serializedValue>
+        </property>
+        <property path="/proxyAddress" isComplexType="false" isExplicitlyDefined="false" clrType="System.Uri, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/readerQuotas" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxDepth" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>32</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxStringContentLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>8192</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxArrayLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxBytesPerRead" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>4096</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxNameTableCharCount" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/reliableSession" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement</serializedValue>
+        </property>
+        <property path="/reliableSession/ordered" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/reliableSession/inactivityTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/reliableSession/enabled" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/textEncoding" isComplexType="false" isExplicitlyDefined="true" clrType="System.Text.Encoding, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.Text.UTF8Encoding</serializedValue>
+        </property>
+        <property path="/useDefaultWebProxy" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/allowCookies" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/security" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.WSHttpSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.WSHttpSecurityElement</serializedValue>
+        </property>
+        <property path="/security/mode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.SecurityMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Message</serializedValue>
+        </property>
+        <property path="/security/transport" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.WSHttpTransportSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.WSHttpTransportSecurityElement</serializedValue>
+        </property>
+        <property path="/security/transport/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HttpClientCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/transport/proxyCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HttpProxyCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>None</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/policyEnforcement" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.PolicyEnforcement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Never</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/protectionScenario" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.ProtectionScenario, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>TransportSelected</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/customServiceNames" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ServiceNameElementCollection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>(Collection)</serializedValue>
+        </property>
+        <property path="/security/transport/realm" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/security/message" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.NonDualMessageSecurityOverHttpElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.NonDualMessageSecurityOverHttpElement</serializedValue>
+        </property>
+        <property path="/security/message/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.MessageCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>UserName</serializedValue>
+        </property>
+        <property path="/security/message/negotiateServiceCredential" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/security/message/algorithmSuite" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Security.SecurityAlgorithmSuite, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Default</serializedValue>
+        </property>
+        <property path="/security/message/establishSecurityContext" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+      </properties>
+    </bindingConfiguration>
+    <bindingConfiguration bindingType="wsHttpBinding" name="SlaveMexEndpoint">
+      <properties>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>SlaveMexEndpoint</serializedValue>
+        </property>
+        <property path="/closeTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/openTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/receiveTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/sendTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/bypassProxyOnLocal" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/transactionFlow" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/hostNameComparisonMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HostNameComparisonMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>StrongWildcard</serializedValue>
+        </property>
+        <property path="/maxBufferPoolSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>524288</serializedValue>
+        </property>
+        <property path="/maxReceivedMessageSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/messageEncoding" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.WSMessageEncoding, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Text</serializedValue>
+        </property>
+        <property path="/proxyAddress" isComplexType="false" isExplicitlyDefined="false" clrType="System.Uri, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/readerQuotas" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxDepth" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>32</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxStringContentLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>8192</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxArrayLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxBytesPerRead" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>4096</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxNameTableCharCount" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/reliableSession" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement</serializedValue>
+        </property>
+        <property path="/reliableSession/ordered" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/reliableSession/inactivityTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/reliableSession/enabled" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/textEncoding" isComplexType="false" isExplicitlyDefined="true" clrType="System.Text.Encoding, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.Text.UTF8Encoding</serializedValue>
+        </property>
+        <property path="/useDefaultWebProxy" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/allowCookies" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/security" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.WSHttpSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.WSHttpSecurityElement</serializedValue>
+        </property>
+        <property path="/security/mode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.SecurityMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>None</serializedValue>
+        </property>
+        <property path="/security/transport" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.WSHttpTransportSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.WSHttpTransportSecurityElement</serializedValue>
+        </property>
+        <property path="/security/transport/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HttpClientCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/transport/proxyCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HttpProxyCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>None</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/policyEnforcement" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.PolicyEnforcement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Never</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/protectionScenario" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.ProtectionScenario, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>TransportSelected</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/customServiceNames" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ServiceNameElementCollection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>(Collection)</serializedValue>
+        </property>
+        <property path="/security/transport/realm" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/security/message" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.NonDualMessageSecurityOverHttpElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.NonDualMessageSecurityOverHttpElement</serializedValue>
+        </property>
+        <property path="/security/message/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.MessageCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/message/negotiateServiceCredential" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/security/message/algorithmSuite" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.Security.SecurityAlgorithmSuite, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Default</serializedValue>
+        </property>
+        <property path="/security/message/establishSecurityContext" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+      </properties>
+    </bindingConfiguration>
+  </bindingConfigurations>
+  <endpoints>
+    <endpoint name="SlaveHttpEndpoint" contract="SlaveService.ISlaveFacade" bindingType="wsHttpBinding" address="http://localhost:9000/SlaveService" bindingConfiguration="SlaveHttpEndpoint">
+      <properties>
+        <property path="/address" isComplexType="false" isExplicitlyDefined="true" clrType="System.Uri, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>http://localhost:9000/SlaveService</serializedValue>
+        </property>
+        <property path="/behaviorConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/binding" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>wsHttpBinding</serializedValue>
+        </property>
+        <property path="/bindingConfiguration" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>SlaveHttpEndpoint</serializedValue>
+        </property>
+        <property path="/contract" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>SlaveService.ISlaveFacade</serializedValue>
+        </property>
+        <property path="/headers" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.AddressHeaderCollectionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.AddressHeaderCollectionElement</serializedValue>
+        </property>
+        <property path="/headers/headers" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Channels.AddressHeaderCollection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>&lt;Header /&gt;</serializedValue>
+        </property>
+        <property path="/identity" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.IdentityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.IdentityElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.UserPrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.UserPrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/servicePrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.ServicePrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.ServicePrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/servicePrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/dns" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.DnsElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.DnsElement</serializedValue>
+        </property>
+        <property path="/identity/dns/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/rsa" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.RsaElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.RsaElement</serializedValue>
+        </property>
+        <property path="/identity/rsa/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificate" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateElement</serializedValue>
+        </property>
+        <property path="/identity/certificate/encodedValue" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>AwAAAAEAAAAUAAAAeBLH/0jWrlsW42fIC8VIIdAE6PUgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhDez3CoJIIitEZ5xwVqLJn6MAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMzE1NTg0OFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmOgweB6X4Ss6W2xb2hg1x61cjD2T7SO0ckkzmtqRhC2UWly9dBnonFJmg9RjN0y6l2tZhVzNhq8DgCkn3hPg5GL3XIwYX4PsXwNmeT6i+7s6rGbESuaEMvYOAQJSJ+MTgBvXCwo2g5nFHIBqP4W4aU2eybxP7H4cm1rQpoYHHjQIDAQABo0kwRzBFBgNVHQEEPjA8gBASDhO/IE7Ff7PpkCVF8oUpoRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghDez3CoJIIitEZ5xwVqLJn6MAkGBSsOAwIdBQADgYEAhxAzm3JTV7j51jti5P7izTEs7+8534kQloeAJDwlKolkd4ZMkf0BiexC2Vt1KsnxUjrK0HbbITzazkvkAmKi7dP+4G+3SrWag5lS4NcoPjTQy16T3zC9E6yafRaZp1/pxjC3Ap44qwq4Kjl2mEjeHHsdie/h4loowTqC9FlLbgo=</serializedValue>
+        </property>
+        <property path="/identity/certificateReference" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateReferenceElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateReferenceElement</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeName" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreName, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>My</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeLocation" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreLocation, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>LocalMachine</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/x509FindType" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.X509FindType, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>FindBySubjectDistinguishedName</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/findValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference/isChainIncluded" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>SlaveHttpEndpoint</serializedValue>
+        </property>
+        <property path="/kind" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/endpointConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+      </properties>
+    </endpoint>
+    <endpoint name="SlaveMexEndpoint" contract="SlaveService.ISlaveFacade" bindingType="wsHttpBinding" address="http://localhost:9000/SlaveService/mex" bindingConfiguration="SlaveMexEndpoint">
+      <properties>
+        <property path="/address" isComplexType="false" isExplicitlyDefined="true" clrType="System.Uri, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>http://localhost:9000/SlaveService/mex</serializedValue>
+        </property>
+        <property path="/behaviorConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/binding" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>wsHttpBinding</serializedValue>
+        </property>
+        <property path="/bindingConfiguration" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>SlaveMexEndpoint</serializedValue>
+        </property>
+        <property path="/contract" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>SlaveService.ISlaveFacade</serializedValue>
+        </property>
+        <property path="/headers" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.AddressHeaderCollectionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.AddressHeaderCollectionElement</serializedValue>
+        </property>
+        <property path="/headers/headers" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Channels.AddressHeaderCollection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>&lt;Header /&gt;</serializedValue>
+        </property>
+        <property path="/identity" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.IdentityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.IdentityElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.UserPrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.UserPrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/servicePrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.ServicePrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.ServicePrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/servicePrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/dns" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.DnsElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.DnsElement</serializedValue>
+        </property>
+        <property path="/identity/dns/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/rsa" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.RsaElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.RsaElement</serializedValue>
+        </property>
+        <property path="/identity/rsa/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificate" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateElement</serializedValue>
+        </property>
+        <property path="/identity/certificate/encodedValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateReferenceElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateReferenceElement</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeName" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreName, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>My</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeLocation" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreLocation, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>LocalMachine</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/x509FindType" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.X509FindType, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>FindBySubjectDistinguishedName</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/findValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference/isChainIncluded" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>SlaveMexEndpoint</serializedValue>
+        </property>
+        <property path="/kind" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/endpointConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+      </properties>
+    </endpoint>
+    <endpoint name="SlaveTcpStreamedEndpoint" contract="SlaveService.ISlaveFacade" bindingType="netTcpBinding" address="net.tcp://localhost:9001/SlaveServiceStreamed" bindingConfiguration="SlaveTcpStreamedEndpoint">
+      <properties>
+        <property path="/address" isComplexType="false" isExplicitlyDefined="true" clrType="System.Uri, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>net.tcp://localhost:9001/SlaveServiceStreamed</serializedValue>
+        </property>
+        <property path="/behaviorConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/binding" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>netTcpBinding</serializedValue>
+        </property>
+        <property path="/bindingConfiguration" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>SlaveTcpStreamedEndpoint</serializedValue>
+        </property>
+        <property path="/contract" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>SlaveService.ISlaveFacade</serializedValue>
+        </property>
+        <property path="/headers" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.AddressHeaderCollectionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.AddressHeaderCollectionElement</serializedValue>
+        </property>
+        <property path="/headers/headers" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Channels.AddressHeaderCollection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>&lt;Header /&gt;</serializedValue>
+        </property>
+        <property path="/identity" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.IdentityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.IdentityElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.UserPrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.UserPrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/servicePrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.ServicePrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.ServicePrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/servicePrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/dns" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.DnsElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.DnsElement</serializedValue>
+        </property>
+        <property path="/identity/dns/value" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>localhost</serializedValue>
+        </property>
+        <property path="/identity/rsa" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.RsaElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.RsaElement</serializedValue>
+        </property>
+        <property path="/identity/rsa/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificate" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateElement</serializedValue>
+        </property>
+        <property path="/identity/certificate/encodedValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateReferenceElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateReferenceElement</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeName" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreName, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>My</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeLocation" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreLocation, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>LocalMachine</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/x509FindType" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.X509FindType, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>FindBySubjectDistinguishedName</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/findValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference/isChainIncluded" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>SlaveTcpStreamedEndpoint</serializedValue>
+        </property>
+        <property path="/kind" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/endpointConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+      </properties>
+    </endpoint>
+  </endpoints>
+</SavedWcfConfigurationInformation>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/SlaveServicePool.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/SlaveServicePool.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/SlaveServicePool.cs	(revision 4340)
@@ -0,0 +1,88 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Slave.Communication.SlaveService;
+using HeuristicLab.Hive.Contracts;
+using System.ServiceModel;
+using HeuristicLab.Hive.Slave.Communication.Properties;
+using HeuristicLab.Tracing;
+
+namespace HeuristicLab.Hive.Slave.Communication {
+  internal class SlaveFacadeServicePool {
+    /// <summary>
+    /// Cache of SlaveFacadeClients, to check if all get disposed
+    /// </summary>
+    private SlaveFacadeClient cachedSlaveFacadeClientStreamed = null;
+    private SlaveFacadeClient cachedSlaveFacadeClient = null;
+    private int streamedClientCount = 0;
+    private int clientCount = 0;
+    private string serverIp;
+    private static object locker = new object();
+
+    public SlaveFacadeServicePool(string serverIp) {
+      this.serverIp = serverIp;
+    }
+
+    internal ISlaveFacade CreateSlaveFacade() {
+      lock (locker) {
+        if (cachedSlaveFacadeClient == null) {
+          cachedSlaveFacadeClient = new SlaveFacadeClient("SlaveHttpEndpoint");
+          WcfSettings.SetEndpointAddress(cachedSlaveFacadeClient.Endpoint, this.serverIp);
+          SetCredentials(cachedSlaveFacadeClient);
+          cachedSlaveFacadeClient.Open();
+          Logger.Debug("Created SlaveFacadeClient");
+        }
+        clientCount++;
+        Logger.Debug("SlaveFacadeClientCount: " + clientCount);
+        return cachedSlaveFacadeClient;
+      }
+    }
+
+    internal ISlaveFacade CreateStreamedSlaveFacade() {
+      lock (locker) {
+        if (cachedSlaveFacadeClientStreamed == null) {
+          cachedSlaveFacadeClientStreamed = new SlaveFacadeClient("SlaveTcpStreamedEndpoint");
+          WcfSettings.SetEndpointAddress(cachedSlaveFacadeClientStreamed.Endpoint, this.serverIp);
+          SetCredentials(cachedSlaveFacadeClientStreamed);
+          cachedSlaveFacadeClientStreamed.Open();
+          Logger.Debug("Created SlaveFacadeClientStreamed");
+        }
+        streamedClientCount++;
+        Logger.Debug("SlaveFacadeClientCount: " + streamedClientCount);
+        return cachedSlaveFacadeClientStreamed;
+      }
+    }
+
+    private void SetCredentials(SlaveFacadeClient client) {
+      client.ClientCredentials.UserName.UserName = Settings.Default.HiveUsername;
+      client.ClientCredentials.UserName.Password = Settings.Default.HivePassword;
+    }
+
+    public void DisposeSlaveClient(ISlaveFacade slaveFacade) {
+      lock (locker) {
+        if (slaveFacade == cachedSlaveFacadeClient) {
+          clientCount--;
+          Logger.Debug("Disposing SlaveFacadeClient. Count: " + clientCount);
+          if (clientCount < 0)
+            throw new Exception("SlaveFacadeClient Count is less than zero. It was released too often.");
+          if (clientCount == 0) {
+            WcfSettings.DisposeWcfClient((ICommunicationObject)slaveFacade);
+            cachedSlaveFacadeClient = null;
+          }
+        } else if (slaveFacade == cachedSlaveFacadeClientStreamed) {
+          streamedClientCount--;
+          Logger.Debug("Disposing SlaveFacadeClientStreamed. Count: " + streamedClientCount);
+          if (streamedClientCount < 0)
+            throw new Exception("SlaveFacadeClientStreamed Count is less than zero. It was released too often.");
+          if (streamedClientCount == 0) {
+            WcfSettings.DisposeWcfClient((ICommunicationObject)slaveFacade);
+            cachedSlaveFacadeClientStreamed = null;
+          }
+        } else {
+          throw new Exception("Cannot dispose slaveFacade. Cannot be found in cache.");
+        }
+      } // lock
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/WcfService.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/WcfService.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/WcfService.cs	(revision 4340)
@@ -0,0 +1,438 @@
+#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 System.ServiceModel;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Slave.Common;
+using HeuristicLab.PluginInfrastructure;
+using System.IO;
+using System.Runtime.Serialization.Formatters.Binary;
+using HeuristicLab.Tracing;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Slave.Communication.SlaveService;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+using HeuristicLab.Hive.Slave.Communication.Properties;
+
+namespace HeuristicLab.Hive.Slave.Communication {
+
+  /// <summary>
+  /// WcfService class is implemented as a Singleton and works as a communication Layer with the Server
+  /// </summary>
+  public class WcfService {
+    private static WcfService instance;
+    /// <summary>
+    /// Getter for the Instance of the WcfService
+    /// </summary>
+    /// <returns>the Instance of the WcfService class</returns>
+    public static WcfService Instance {
+      get {
+        if (instance == null) {
+          Logger.Debug("New WcfService Instance created");
+          instance = new WcfService();
+        }
+        return instance;
+      }
+    }
+
+    public DateTime ConnectedSince { get; private set; }
+    public NetworkEnum.WcfConnState ConnState { get; private set; }
+    public bool LoggedIn { get; set; }
+
+    private string serverIp;
+    public string ServerIp {
+      get { return serverIp; }
+      set {
+        if (serverIp != value) {
+          serverIp = value;
+          if (ServerChanged != null)
+            ServerChanged(this, new EventArgs());
+        }
+      }
+    }
+
+    public event EventHandler ConnectionRestored;
+    public event EventHandler ServerChanged;
+    public event EventHandler Connected;
+
+    SlaveFacadeServicePool servicePool;
+
+    /// <summary>
+    /// Constructor
+    /// </summary>
+    private WcfService() {
+      ConnState = NetworkEnum.WcfConnState.Disconnected;
+      LoggedIn = false;
+    }
+
+    /// <summary>
+    /// Connects with the Server, registers the events and fires the Connected (and quiet possibly the ConnectionRestored) Event.
+    /// </summary>
+    public void Connect() {
+      SlaveService.ISlaveFacade client = null;
+      try {
+        Logger.Debug("Starting the Connection Process");
+        if (String.Empty.Equals(ServerIp)) {
+          Logger.Info("No Server IP set!");
+          return;
+        }
+        servicePool = new SlaveFacadeServicePool(ServerIp);
+
+        Logger.Debug("Creating the new connection proxy");
+        client = servicePool.CreateStreamedSlaveFacade();
+        Logger.Debug("Created the new connection proxy");
+
+        ConnState = NetworkEnum.WcfConnState.Connected;
+        ConnectedSince = DateTime.Now;
+
+        if (Connected != null) {
+          Connected(this, new EventArgs());
+        }
+        if (ConnState == NetworkEnum.WcfConnState.Failed) {
+          ConnectionRestored(this, new EventArgs());
+        }
+      }
+      catch (Exception ex) {
+        HandleNetworkError(ex);
+      }
+      finally {
+        servicePool.DisposeSlaveClient(client);
+      }
+    }
+
+    ///// <summary>
+    ///// Disconnects the Slave from the Server
+    ///// </summary>
+    public void Disconnect() {
+      ConnState = NetworkEnum.WcfConnState.Disconnected;
+      LoggedIn = false;
+    }
+
+    /// <summary>
+    /// Network communication Error Handler - Every network error gets logged and the connection switches to faulted state
+    /// </summary>
+    /// <param name="e">The Exception</param>
+    private void HandleNetworkError(Exception e) {
+      ConnState = NetworkEnum.WcfConnState.Failed;
+      LoggedIn = false;
+      Logger.Error("Network exception occurred: " + e);
+    }
+
+    /// <summary>
+    /// Methods for the Server Login
+    /// </summary>
+    public void Login(SlaveDto slaveInfo) {
+      SlaveService.ISlaveFacade client = null;
+      try {
+        if (ConnState == NetworkEnum.WcfConnState.Connected) {
+          Logger.Debug("STARTED: Login Sync");
+          client = servicePool.CreateSlaveFacade();
+          Response res = client.Login(slaveInfo);
+          if (res.StatusMessage != ResponseStatus.Ok) {
+            Logger.Error("FAILED: Login Failed! " + res.StatusMessage);
+            throw new Exception(res.StatusMessage.ToString());
+          } else {
+            Logger.Info("ENDED: Login succeeded" + res.StatusMessage);
+            LoggedIn = true;
+          }
+        }
+      }
+      catch (Exception e) {
+        HandleNetworkError(e);
+      }
+      finally {
+        servicePool.DisposeSlaveClient(client);
+      }
+    }
+
+    /// <summary>
+    /// Pull a Job from the Server
+    /// </summary>
+    #region PullJob
+    public event System.EventHandler<GetJobCompletedEventArgs> GetJobCompleted;
+    public void GetJobAsync(Guid guid) {
+      if (LoggedIn) {
+        Logger.Debug("STARTED: Fetching of Jobs from Server for Slave");
+        SlaveService.ISlaveFacade client = servicePool.CreateStreamedSlaveFacade();
+        //client.GetStreamedJobAsync(guid);
+        client.BeginGetStreamedJob(guid, (ar => {
+          if (ar.IsCompleted) {
+            Stream stream = null;
+            MemoryStream memStream = null;
+            try {
+              Logger.Debug("ENDED: Fetching of Jobs from Server for Slave");
+              stream = client.EndGetStreamedJob(ar);
+
+              //first deserialize the response
+              BinaryFormatter formatter = new BinaryFormatter();
+              ResponseObject<JobDto> response = (ResponseObject<JobDto>)formatter.Deserialize(stream);
+
+              //second deserialize the BLOB
+              memStream = new MemoryStream();
+
+              byte[] buffer = new byte[3024];
+              int read = 0;
+              while ((read = stream.Read(buffer, 0, buffer.Length)) > 0) {
+                memStream.Write(buffer, 0, read);
+              }
+
+              memStream.Close();
+
+              GetJobCompletedEventArgs completedEventArgs = new GetJobCompletedEventArgs(new object[] { response, memStream.GetBuffer() }, null, !ar.IsCompleted, ar.AsyncState);
+              GetJobCompleted(this, completedEventArgs);
+            }
+            catch (Exception ex) {
+              Logger.Error(ex);
+            }
+            finally {
+              if (stream != null)
+                stream.Dispose();
+
+              if (memStream != null)
+                memStream.Dispose();
+            }
+          } else
+            HandleNetworkError(new FaultException("GetJobAsync did not complete"));
+
+          servicePool.DisposeSlaveClient(client);
+        }), null);
+      }
+    }
+
+    #endregion
+
+    /// <summary>
+    /// Send back finished Job Results
+    /// </summary>
+    #region SendJobResults
+    public event System.EventHandler<StoreFinishedJobResultCompletedEventArgs> GetFinishedJobResultCompleted;
+    public void GetFinishedJobResultAsync(Guid clientId, Guid jobId, byte[] result, double percentage, Exception exception, bool finished) {
+      if (LoggedIn) {
+        Logger.Debug("STARTED: Sending back the finished job results");
+        Logger.Debug("Building stream");
+        Stream stream = GetStreamedJobResult(clientId, jobId, result, percentage, exception);
+        Logger.Debug("Builded stream");
+        Logger.Debug("Making the call");
+        //proxy.StoreFinishedJobResultStreamedAsync(stream, stream);
+        SlaveService.ISlaveFacade client = servicePool.CreateStreamedSlaveFacade();
+        client.BeginStoreFinishedJobResultStreamed(stream, (ar => {
+          Logger.Debug("Finished storing the job");
+          if (stream != null)
+            stream.Dispose();
+
+          if (ar.IsCompleted) {
+            var res = client.EndStoreFinishedJobResultStreamed(ar);
+            StoreFinishedJobResultCompletedEventArgs args = new StoreFinishedJobResultCompletedEventArgs(new object[] { res }, null, false, null);
+            Logger.Debug("calling the Finished Job Event");
+            GetFinishedJobResultCompleted(this, args);
+            Logger.Debug("ENDED: Sending back the finished job results");
+          } else {
+            HandleNetworkError(new FaultException("GetFinishedJobResultAsync did not complete"));
+          }
+          servicePool.DisposeSlaveClient(client);
+        }), null);
+      }
+    }
+
+    #endregion
+
+    #region Processsnapshots
+    public event System.EventHandler<ProcessSnapshotCompletedEventArgs> ProcessSnapshotCompleted;
+    public void ProcessSnapshotAsync(Guid clientId, Guid jobId, byte[] result, double percentage, Exception exception, bool finished) {
+      if (LoggedIn) {
+        Stream stream = GetStreamedJobResult(clientId, jobId, result, percentage, exception);
+        //proxy.ProcessSnapshotStreamedAsync(stream, stream);
+        SlaveService.ISlaveFacade client = servicePool.CreateStreamedSlaveFacade();
+        client.BeginProcessSnapshotStreamed(stream, (ar => {
+          if (stream != null)
+            stream.Dispose();
+
+          if (ar.IsCompleted) {
+            var res = client.EndStoreFinishedJobResultStreamed(ar);
+            ProcessSnapshotCompletedEventArgs args = new ProcessSnapshotCompletedEventArgs(new object[] { res }, null, false, null);
+            ProcessSnapshotCompleted(this, args);
+          } else {
+            HandleNetworkError(new FaultException("ProcessSnapshotAsync did not complete"));
+          }
+          servicePool.DisposeSlaveClient(client);
+        }), null);
+      }
+    }
+
+    #endregion
+
+    /// <summary>
+    /// Methods for sending the periodically Heartbeat
+    /// </summary>
+    #region Heartbeat
+
+    public event System.EventHandler<ProcessHeartBeatCompletedEventArgs> ProcessHeartBeatCompleted;
+    public void ProcessHeartBeatAsync(HeartBeatData hbd) {
+      if (LoggedIn) {
+        Logger.Debug("STARTING: sending heartbeat");
+        //proxy.ProcessHeartBeatAsync(hbd);
+        SlaveService.ISlaveFacade client = servicePool.CreateStreamedSlaveFacade();
+        client.BeginProcessHeartBeat(hbd, (ar => {
+          if (ar.IsCompleted) {
+            var res = client.EndProcessHeartBeat(ar);
+            if (res.StatusMessage == ResponseStatus.Ok) {
+              ProcessHeartBeatCompleted(this, new ProcessHeartBeatCompletedEventArgs(new object[] { res }, null, false, null));
+              Logger.Debug("ENDED: sending heartbeats");
+            } else {
+              Logger.Error("FAILED: sending heartbeats: " + res.StatusMessage.ToString());
+            }
+          } else {
+            HandleNetworkError(new FaultException("ProcessHeartBeatAsync did not complete"));
+          }
+          servicePool.DisposeSlaveClient(client);
+        }), null);
+      }
+    }
+
+    #endregion
+
+    /// <summary>
+    /// Send back finished and Stored Job Results
+    /// </summary>
+    private Stream GetStreamedJobResult(Guid clientId, Guid jobId, byte[] result, double percentage, Exception exception) {
+      JobResult jobResult = new JobResult();
+      jobResult.SlaveId = clientId;
+      jobResult.JobId = jobId;
+      jobResult.Percentage = percentage;
+      jobResult.Exception = exception != null ? exception.Message : "";
+
+      MultiStream stream = new MultiStream();
+
+      //first send result
+      stream.AddStream(new StreamedObject<JobResult>(jobResult));
+
+      //second stream the job binary data
+      MemoryStream memStream = new MemoryStream(result, false);
+      stream.AddStream(memStream);
+
+      return stream;
+    }
+
+    public ResponseResultReceived StoreFinishedJobResultsSync(Guid clientId, Guid jobId, byte[] result, double percentage, Exception exception, bool finished) {
+      SlaveService.ISlaveFacade client = servicePool.CreateStreamedSlaveFacade();
+      ResponseResultReceived res = client.StoreFinishedJobResultStreamed(GetStreamedJobResult(clientId, jobId, result, percentage, exception));
+      servicePool.DisposeSlaveClient(client);
+      return res;
+    }
+
+    public Response IsJobStillNeeded(Guid jobId) {
+      try {
+        Logger.Debug("STARTING: Sync call: IsJobStillNeeded");
+        SlaveService.ISlaveFacade client = servicePool.CreateStreamedSlaveFacade();
+        Response res = client.IsJobStillNeeded(jobId);
+        servicePool.DisposeSlaveClient(client);
+        Logger.Debug("ENDED: Sync call: IsJobStillNeeded");
+        return res;
+      }
+      catch (Exception e) {
+        HandleNetworkError(e);
+        return null;
+      }
+    }
+
+    public ResponseResultReceived ProcessSnapshotSync(Guid clientId, Guid jobId, byte[] result, double percentage, Exception exception) {
+      try {
+        SlaveService.ISlaveFacade client = servicePool.CreateStreamedSlaveFacade();
+        var res = client.ProcessSnapshotStreamed(GetStreamedJobResult(clientId, jobId, result, percentage, exception));
+        servicePool.DisposeSlaveClient(client);
+        return res;
+      }
+      catch (Exception e) {
+        HandleNetworkError(e);
+        return null;
+      }
+    }
+
+    public IEnumerable<CachedHivePluginInfoDto> RequestPlugins(List<HivePluginInfoDto> requestedPlugins) {
+      try {
+        Logger.Debug("STARTED: Requesting Plugins for Job");
+        Logger.Debug("STARTED: Getting the stream");
+        SlaveService.ISlaveFacade client = servicePool.CreateStreamedSlaveFacade();
+        Stream stream = client.GetStreamedPlugins(requestedPlugins.ToArray());
+        servicePool.DisposeSlaveClient(client);
+        Logger.Debug("ENDED: Getting the stream");
+        BinaryFormatter formatter = new BinaryFormatter();
+        Logger.Debug("STARTED: Deserializing the stream");
+        ResponseList<CachedHivePluginInfoDto> response = (ResponseList<CachedHivePluginInfoDto>)formatter.Deserialize(stream);
+        Logger.Debug("ENDED: Deserializing the stream");
+        if (stream != null)
+          stream.Dispose();
+        return response.List;
+      }
+      catch (Exception e) {
+        HandleNetworkError(e);
+        return null;
+      }
+    }
+
+    public void Logout(Guid guid) {
+      try {
+        Logger.Debug("STARTED: Logout");
+        SlaveService.ISlaveFacade client = servicePool.CreateStreamedSlaveFacade();
+        client.Logout(guid);
+        servicePool.DisposeSlaveClient(client);
+        Logger.Debug("ENDED: Logout");
+      }
+      catch (Exception e) {
+        HandleNetworkError(e);
+      }
+    }
+
+    public ResponseCalendar GetCalendarSync(Guid clientId) {
+      try {
+        Logger.Debug("STARTED: Syncing Calendars");
+        SlaveService.ISlaveFacade client = servicePool.CreateStreamedSlaveFacade();
+        ResponseCalendar cal = client.GetCalendar(clientId);
+        servicePool.DisposeSlaveClient(client);
+        Logger.Debug("ENDED: Syncing Calendars");
+        return cal;
+      }
+      catch (Exception e) {
+        HandleNetworkError(e);
+        return null;
+      }
+    }
+
+    public Response SetCalendarStatus(Guid clientId, CalendarState state) {
+      try {
+        Logger.Debug("STARTED: Setting Calendar status to: " + state);
+        SlaveService.ISlaveFacade client = servicePool.CreateStreamedSlaveFacade();
+        Response resp = client.SetCalendarStatus(clientId, state);
+        servicePool.DisposeSlaveClient(client);
+        Logger.Debug("ENDED: Setting Calendar status to: " + state);
+        return resp;
+      }
+      catch (Exception e) {
+        HandleNetworkError(e);
+        return null;
+      }
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/app.config
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/app.config	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/app.config	(revision 4340)
@@ -0,0 +1,102 @@
+﻿<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+  <configSections>
+    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
+      <section name="HeuristicLab.Hive.Slave.Communication.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+    </sectionGroup>
+  </configSections>
+  <system.serviceModel>
+    <behaviors>
+      <endpointBehaviors>
+        <behavior name="SlaveServiceBehaviour">
+          <clientCredentials>
+            <serviceCertificate>
+              <authentication certificateValidationMode="None" />
+            </serviceCertificate>
+          </clientCredentials>
+        </behavior>
+      </endpointBehaviors>
+    </behaviors>
+    <bindings>
+      <netTcpBinding>
+        <binding name="SlaveTcpStreamedEndpoint" closeTimeout="00:01:00"
+          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
+          transactionFlow="false" transferMode="Streamed" transactionProtocol="OleTransactions"
+          hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="104857600"
+          maxBufferSize="104857600" maxReceivedMessageSize="104857600">
+          <readerQuotas maxDepth="32" maxStringContentLength="104857600"
+            maxArrayLength="104857600" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+          <reliableSession ordered="true" inactivityTimeout="00:10:00"
+            enabled="false" />
+          <security mode="TransportWithMessageCredential">
+            <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
+            <message clientCredentialType="UserName" algorithmSuite="Default" />
+          </security>
+        </binding>
+      </netTcpBinding>
+      <wsHttpBinding>
+        <binding name="SlaveHttpEndpoint" closeTimeout="00:01:00" openTimeout="00:01:00"
+          receiveTimeout="00:10:00" sendTimeout="00:10:00" bypassProxyOnLocal="false"
+          transactionFlow="false" hostNameComparisonMode="StrongWildcard"
+          maxBufferPoolSize="104857600" maxReceivedMessageSize="104857600"
+          messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
+          allowCookies="false">
+          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+          <reliableSession ordered="true" inactivityTimeout="00:10:00"
+            enabled="false" />
+          <security mode="Message">
+            <transport clientCredentialType="Windows" proxyCredentialType="None"
+              realm="" />
+            <message clientCredentialType="UserName" negotiateServiceCredential="true"
+              algorithmSuite="Default" />
+          </security>
+        </binding>
+        <binding name="SlaveMexEndpoint" closeTimeout="00:01:00" openTimeout="00:01:00"
+          receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false"
+          transactionFlow="false" hostNameComparisonMode="StrongWildcard"
+          maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
+          textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
+          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+          <reliableSession ordered="true" inactivityTimeout="00:10:00"
+            enabled="false" />
+          <security mode="None">
+            <transport clientCredentialType="Windows" proxyCredentialType="None"
+              realm="" />
+            <message clientCredentialType="Windows" negotiateServiceCredential="true" />
+          </security>
+        </binding>
+      </wsHttpBinding>
+    </bindings>
+    <client>
+      <endpoint address="http://localhost:9000/SlaveService" binding="wsHttpBinding" behaviorConfiguration="SlaveServiceBehaviour"
+        bindingConfiguration="SlaveHttpEndpoint" contract="SlaveService.ISlaveFacade"
+        name="SlaveHttpEndpoint">
+        <identity>
+          <certificate encodedValue="AwAAAAEAAAAUAAAAeBLH/0jWrlsW42fIC8VIIdAE6PUgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhDez3CoJIIitEZ5xwVqLJn6MAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMzE1NTg0OFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmOgweB6X4Ss6W2xb2hg1x61cjD2T7SO0ckkzmtqRhC2UWly9dBnonFJmg9RjN0y6l2tZhVzNhq8DgCkn3hPg5GL3XIwYX4PsXwNmeT6i+7s6rGbESuaEMvYOAQJSJ+MTgBvXCwo2g5nFHIBqP4W4aU2eybxP7H4cm1rQpoYHHjQIDAQABo0kwRzBFBgNVHQEEPjA8gBASDhO/IE7Ff7PpkCVF8oUpoRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghDez3CoJIIitEZ5xwVqLJn6MAkGBSsOAwIdBQADgYEAhxAzm3JTV7j51jti5P7izTEs7+8534kQloeAJDwlKolkd4ZMkf0BiexC2Vt1KsnxUjrK0HbbITzazkvkAmKi7dP+4G+3SrWag5lS4NcoPjTQy16T3zC9E6yafRaZp1/pxjC3Ap44qwq4Kjl2mEjeHHsdie/h4loowTqC9FlLbgo=" />
+        </identity>
+      </endpoint>
+      <endpoint address="http://localhost:9000/SlaveService/mex" binding="wsHttpBinding" behaviorConfiguration="SlaveMexEndpoint"
+        bindingConfiguration="SlaveMexEndpoint" contract="SlaveService.ISlaveFacade"
+        name="SlaveMexEndpoint" />
+      <endpoint address="net.tcp://localhost:9001/SlaveServiceStreamed" behaviorConfiguration="SlaveServiceBehaviour"
+        binding="netTcpBinding" bindingConfiguration="SlaveTcpStreamedEndpoint"
+        contract="SlaveService.ISlaveFacade" name="SlaveTcpStreamedEndpoint">
+        <identity>
+          <dns value="localhost" />
+        </identity>
+      </endpoint>
+    </client>
+  </system.serviceModel>
+  <userSettings>
+    <HeuristicLab.Hive.Slave.Communication.Properties.Settings>
+      <setting name="HiveUsername" serializeAs="String">
+        <value>hiveslave</value>
+      </setting>
+      <setting name="HivePassword" serializeAs="String">
+        <value>hiveslave</value>
+      </setting>
+    </HeuristicLab.Hive.Slave.Communication.Properties.Settings>
+  </userSettings>
+</configuration>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLab.Hive.Slave.Console-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLab.Hive.Slave.Console-3.3.csproj	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLab.Hive.Slave.Console-3.3.csproj	(revision 4340)
@@ -0,0 +1,247 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Slave.Console</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Slave.Console-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <StartupObject>
+    </StartupObject>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>TRACE;DEBUG</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>TRACE;DEBUG</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+    <Reference Include="ZedGraph, Version=5.1.4.31904, Culture=neutral, PublicKeyToken=02a83cbd123fcd60, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>.\ZedGraph.dll</HintPath>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="HiveSlaveConsole.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="HiveSlaveConsole.designer.cs">
+      <DependentUpon>HiveSlaveConsole.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HeuristicLabHiveSlaveConsolePlugin.cs" />
+    <Compile Include="HeuristicLabHiveSlaveConsoleApplication.cs" />
+    <Compile Include="LogFileReader.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Service References\SlaveConsoleService\Reference.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </Compile>
+    <EmbeddedResource Include="HiveSlaveConsole.resx">
+      <DependentUpon>HiveSlaveConsole.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Recurrence.resx">
+      <DependentUpon>Recurrence.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+      <DesignTime>True</DesignTime>
+    </Compile>
+    <None Include="app.config" />
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="Properties\DataSources\HeuristicLab.Calendar.Appointment.datasource" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <Compile Include="Recurrence.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Recurrence.Designer.cs">
+      <DependentUpon>Recurrence.cs</DependentUpon>
+    </Compile>
+    <None Include="Service References\SlaveConsoleService\HeuristicLab.Calendar.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveConsoleService\HeuristicLab.Hive.Slave.Common.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveConsoleService\HeuristicLab.Hive.Slave.Console.SlaveConsoleService.ConnectionContainer.datasource">
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </None>
+    <None Include="Service References\SlaveConsoleService\HeuristicLab.Hive.Slave.Console.SlaveConsoleService.StatusCommons.datasource">
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </None>
+    <None Include="Service References\SlaveConsoleService\HeuristicLab.Hive.Slave.Core.SlaveConsoleService.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveConsoleService\service.wsdl" />
+    <None Include="Service References\SlaveConsoleService\service.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveConsoleService\service1.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveConsoleService\System.Drawing.xsd">
+      <SubType>Designer</SubType>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Calendar\3.3\HeuristicLab.Calendar-3.3.csproj">
+      <Project>{D17A4D6A-4CAA-4470-8A19-F42463C021FD}</Project>
+      <Name>HeuristicLab.Calendar-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Contracts\3.3\HeuristicLab.Hive.Contracts-3.3.csproj">
+      <Project>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</Project>
+      <Name>HeuristicLab.Hive.Contracts-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadata Include="Service References\" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\schedule.jpg" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Properties\DataSources\Calendar.Appointment.datasource" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\Disaster-warning-48.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\Global-network-48.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\exit-48.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadataStorage Include="Service References\SlaveConsoleService\" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\SlaveConsoleService\configuration91.svcinfo" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\SlaveConsoleService\configuration.svcinfo" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\SlaveConsoleService\Reference.svcmap">
+      <Generator>WCF Proxy Generator</Generator>
+      <LastGenOutput>Reference.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLabHiveSlaveConsoleApplication.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLabHiveSlaveConsoleApplication.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLabHiveSlaveConsoleApplication.cs	(revision 4340)
@@ -0,0 +1,36 @@
+﻿#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.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Slave.Console {
+  [Application("Hive Slave Console", "Console Application for the Hive Slave.")]
+  class HeuristicLabHiveSlaveConsoleApplication : ApplicationBase {
+    public override void Run() {
+      Form mainForm = new HiveSlaveConsole();
+      Application.Run(mainForm);
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLabHiveSlaveConsolePlugin.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLabHiveSlaveConsolePlugin.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLabHiveSlaveConsolePlugin.cs	(revision 4340)
@@ -0,0 +1,35 @@
+#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.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Slave.Console {
+  [Plugin("HeuristicLab.Hive.Slave.Console", "3.3")]
+  [PluginFile("HeuristicLab.Hive.Slave.Console-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Calendar", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.Contracts", "3.3")]
+  public class HeuristicLabHiveSlaveConsolePlugin : PluginBase {
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.cs	(revision 4340)
@@ -0,0 +1,573 @@
+﻿#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.Drawing;
+using System.Linq;
+using System.Net;
+using System.Windows.Forms;
+using System.Xml.Serialization;
+using HeuristicLab.Calendar;
+using HeuristicLab.Hive.Slave.Console.SlaveConsoleService;
+using ZedGraph;
+
+namespace HeuristicLab.Hive.Slave.Console {
+
+  #region Delegates
+
+  //delegate to write text in the textbox from another process
+  public delegate void AppendTextDelegate(String message);
+
+  //delegate to remove text in the textbox from another process
+  public delegate void RemoveTextDelegate(int newLength, int maxChars);
+
+  //delegate fired, if a dialog is being closed
+  public delegate void OnDialogClosedDelegate(RecurrentEvent e);
+
+  #endregion
+
+  public partial class HiveSlaveConsole : Form {
+
+    #region Declarations
+    private static bool isfired = false;
+    //the logfilereader
+    private LogFileReader logFileReader;
+
+    //communication with the slave
+    private SlaveConsoleCommunicatorClient slaveCommunicator;
+
+    //the timer for refreshing the gui
+    private System.Windows.Forms.Timer refreshTimer;
+
+    //the list of appointments in the calender
+    [XmlArray("Appointments")]
+    [XmlArrayItem("Appointment", typeof(Appointment))]
+    public List<Appointment> onlineTimes = new List<Appointment>();
+
+    public OnDialogClosedDelegate dialogClosedDelegate;
+
+    #endregion
+
+    #region Constructor
+
+    public HiveSlaveConsole() {
+      InitializeComponent();
+      InitTimer();
+      ConnectToSlave();
+      RefreshGui();
+      InitCalender();
+      InitLogFileReader();
+    }
+
+    #endregion
+
+    #region Methods
+
+    #region Client connection
+
+    private void ConnectToSlave() {
+      try {
+        slaveCommunicator = new SlaveConsoleCommunicatorClient();
+
+        slaveCommunicator.GetStatusInfosCompleted += new EventHandler<GetStatusInfosCompletedEventArgs>(slaveCommunicator_GetStatusInfosCompleted);
+        slaveCommunicator.GetCurrentConnectionCompleted += new EventHandler<GetCurrentConnectionCompletedEventArgs>(slaveCommunicator_GetCurrentConnectionCompleted);
+        slaveCommunicator.GetUptimeCalendarCompleted += new EventHandler<GetUptimeCalendarCompletedEventArgs>(slaveCommunicator_GetUptimeCalendarCompleted);
+        slaveCommunicator.SetUptimeCalendarCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(slaveCommunicator_SetUptimeCalendarCompleted);
+      } catch (Exception ex) {
+        ManageFatalException("Connection Error, check if Hive Slave is running!", "Connection Error", ex);
+      }
+    }
+
+    #endregion
+
+    #region Logging
+
+    private void InitLogFileReader() {
+      logFileReader = new LogFileReader(AppDomain.CurrentDomain.BaseDirectory + @"/Hive.Slave.log");
+      logFileReader.MoreData += new LogFileReader.MoreDataHandler(logFileReader_MoreData);
+      logFileReader.Start();
+    }
+
+    private void logFileReader_MoreData(object sender, string newData) {
+      int maxChars = txtLog.MaxLength;
+      if (newData.Length > maxChars) {
+        newData = newData.Remove(0, newData.Length - maxChars);
+      }
+      int newLength = this.txtLog.Text.Length + newData.Length;
+      if (newLength > maxChars) {
+        RemoveText(newLength, maxChars);
+      }
+      AppendText(newData);
+    }
+
+    private void RemoveText(int newLength, int maxChars) {
+      if (this.txtLog.InvokeRequired) {
+        this.txtLog.Invoke(new
+          RemoveTextDelegate(RemoveText), new object[] { newLength, maxChars });
+      } else {
+        this.txtLog.Text = this.txtLog.Text.Remove(0, newLength - (int)maxChars);
+      }
+    }
+
+    private void AppendText(string message) {
+      if (this.txtLog.InvokeRequired) {
+        this.txtLog.Invoke(new
+          AppendTextDelegate(AppendText), new object[] { message });
+      } else {
+        this.txtLog.AppendText(message);
+      }
+    }
+
+    #endregion
+
+    #region Gui Refresh
+
+    private void InitTimer() {
+      refreshTimer = new System.Windows.Forms.Timer();
+      refreshTimer.Interval = 1000;
+      refreshTimer.Tick += new EventHandler(refreshTimer_Tick);
+      refreshTimer.Start();
+    }
+
+    private void RefreshGui() {
+      try {
+        slaveCommunicator.GetStatusInfosAsync();
+      } catch (Exception ex) {
+        ManageFatalException("Connection Error, check if Hive Slave is running!", "Connection Error", ex);
+      }
+    }
+
+    private void UpdateGraph(StatusCommons sc) {
+      ZedGraphControl zgc = new ZedGraphControl();
+      GraphPane myPane = zgc.GraphPane;
+      myPane.GraphObjList.Clear();
+
+      myPane.Title.IsVisible = false;  // no title
+      myPane.Border.IsVisible = false; // no border
+      myPane.Chart.Border.IsVisible = false; // no border around the chart
+      myPane.XAxis.IsVisible = false;  // no x-axis
+      myPane.YAxis.IsVisible = false;  // no y-axis
+      myPane.Legend.IsVisible = false; // no legend
+
+      myPane.Fill.Color = this.BackColor;
+
+      myPane.Chart.Fill.Type = FillType.None;
+      myPane.Fill.Type = FillType.Solid;
+
+      double allProgress = 0;
+      double done = 0;
+
+
+      /*if (jobs.Length == 0)
+      {
+        myPane.AddPieSlice(100, Color.Green, 0.1, "");
+      }
+      else
+      {
+        for (int i = 0; i < jobs.Length; i++)
+        {
+          allProgress += jobs[i].Progress;
+        } */
+
+      //done = allProgress / jobs.Length;
+
+      myPane.AddPieSlice((sc.FreeCores / (double)sc.TotalCores), Color.Red, 0, "");
+      myPane.AddPieSlice(((sc.TotalCores - sc.FreeCores) / (double)sc.TotalCores), Color.Green, 0, "");
+      // }
+      //Hides the slice labels
+      PieItem.Default.LabelType = PieLabelType.None;
+
+      myPane.AxisChange();
+
+      pbGraph.Image = zgc.GetImage();
+    }
+
+    #region Events
+
+    private void refreshTimer_Tick(object sender, EventArgs e) {
+      RefreshGui();
+    }
+
+    #endregion
+
+
+    #endregion
+
+    #region Calendar stuff
+
+    private void InitCalender() {
+      dvOnline.StartDate = DateTime.Now;
+      dvOnline.OnNewAppointment += new EventHandler<NewAppointmentEventArgs>(dvOnline_OnNewAppointment);
+      dvOnline.OnResolveAppointments += new EventHandler<ResolveAppointmentsEventArgs>(dvOnline_OnResolveAppointments);
+
+      //get calender from slave
+      slaveCommunicator.GetUptimeCalendarAsync();
+    }
+
+    private bool CreateAppointment() {
+      DateTime from, to;
+
+      if (!string.IsNullOrEmpty(dtpFrom.Text) && !string.IsNullOrEmpty(dtpTo.Text)) {
+        if (chbade.Checked) {
+          //whole day appointment, only dates are visible
+          if (DateTime.TryParse(dtpFrom.Text, out from) && DateTime.TryParse(dtpTo.Text, out to) && from <= to)
+            onlineTimes.Add(CreateAppointment(from, to.AddDays(1), true));
+          else
+            MessageBox.Show("Incorrect date format", "Schedule Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        } else if (!string.IsNullOrEmpty(txttimeFrom.Text) && !string.IsNullOrEmpty(txttimeTo.Text)) {
+          //Timeframe appointment
+          if (DateTime.TryParse(dtpFrom.Text + " " + txttimeFrom.Text, out from) && DateTime.TryParse(dtpTo.Text + " " + txttimeTo.Text, out to) && from < to) {
+            if (from.Date == to.Date)
+              onlineTimes.Add(CreateAppointment(from, to, false));
+            else {
+              //more than 1 day selected
+              while (from.Date != to.Date) {
+                onlineTimes.Add(CreateAppointment(from, new DateTime(from.Year, from.Month, from.Day, to.Hour, to.Minute, 0, 0), false));
+                from = from.AddDays(1);
+              }
+              onlineTimes.Add(CreateAppointment(from, new DateTime(from.Year, from.Month, from.Day, to.Hour, to.Minute, 0, 0), false));
+            }
+          } else
+            MessageBox.Show("Incorrect date format", "Schedule Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        }
+        dvOnline.Invalidate();
+        return true;
+      } else {
+        MessageBox.Show("Error in create appointment, please fill out all textboxes!", "Schedule Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        return false;
+      }
+    }
+
+    private Appointment CreateAppointment(DateTime startDate, DateTime endDate, bool allDay) {
+      Appointment App = new Appointment();
+      App.StartDate = startDate;
+      App.EndDate = endDate;
+      App.AllDayEvent = allDay;
+      App.BorderColor = Color.Red;
+      App.Locked = true;
+      App.Subject = "Online";
+      App.Recurring = false;
+      return App;
+    }
+
+    private Appointment CreateAppointment(DateTime startDate, DateTime endDate, bool allDay, bool recurring, Guid recurringId) {
+      Appointment App = new Appointment();
+      App.StartDate = startDate;
+      App.EndDate = endDate;
+      App.AllDayEvent = allDay;
+      App.BorderColor = Color.Red;
+      App.Locked = true;
+      App.Subject = "Online";
+      App.Recurring = recurring;
+      App.RecurringId = recurringId;
+      return App;
+    }
+
+    private void DeleteAppointment() {
+      onlineTimes.Remove(dvOnline.SelectedAppointment);
+    }
+
+    private void DeleteRecurringAppointment(Guid recurringId) {
+      onlineTimes.RemoveAll(a => a.RecurringId.ToString() == dvOnline.SelectedAppointment.RecurringId.ToString());
+    }
+
+    private void ChangeRecurrenceAppointment(Guid recurringId) {
+      int hourfrom = int.Parse(txttimeFrom.Text.Substring(0, txttimeFrom.Text.IndexOf(':')));
+      int hourTo = int.Parse(txttimeTo.Text.Substring(0, txttimeTo.Text.IndexOf(':')));
+      List<Appointment> recurringAppointments = onlineTimes.Where(appointment => appointment.RecurringId == recurringId).ToList();
+      recurringAppointments.ForEach(appointment => appointment.StartDate = new DateTime(appointment.StartDate.Year, appointment.StartDate.Month, appointment.StartDate.Day, hourfrom, 0, 0));
+      recurringAppointments.ForEach(appointment => appointment.EndDate = new DateTime(appointment.EndDate.Year, appointment.EndDate.Month, appointment.EndDate.Day, hourTo, 0, 0));
+
+      DeleteRecurringAppointment(recurringId);
+      onlineTimes.AddRange(recurringAppointments);
+    }
+
+    public void DialogClosed(RecurrentEvent e) {
+      CreateDailyRecurrenceAppointments(e.DateFrom, e.DateTo, e.AllDay, e.IncWeeks, e.WeekDays);
+    }
+
+    private void CreateDailyRecurrenceAppointments(DateTime dateFrom, DateTime dateTo, bool allDay, int incWeek, HashSet<DayOfWeek> daysOfWeek) {
+      DateTime incDate = dateFrom;
+      Guid guid = Guid.NewGuid();
+
+      while (incDate.Date <= dateTo.Date) {
+        if (daysOfWeek.Contains(incDate.Date.DayOfWeek))
+          onlineTimes.Add(CreateAppointment(incDate, new DateTime(incDate.Year, incDate.Month, incDate.Day, dateTo.Hour, dateTo.Minute, 0), allDay, true, guid));
+        incDate = incDate.AddDays(1);
+      }
+
+      dvOnline.Invalidate();
+    }
+
+    #region Calendar Events
+
+    private void btbDelete_Click(object sender, EventArgs e) {
+      Appointment selectedAppointment = dvOnline.SelectedAppointment;
+      if (dvOnline.SelectedAppointment != null) {
+        if (!selectedAppointment.Recurring)
+          DeleteAppointment();
+        else {
+          DialogResult res = MessageBox.Show("Delete all events in this series?", "Delete recurrences", MessageBoxButtons.YesNo);
+          if (res != DialogResult.Yes)
+            DeleteAppointment();
+          else
+            DeleteRecurringAppointment(selectedAppointment.RecurringId);
+        }
+      }
+      dvOnline.Invalidate();
+    }
+
+    private void chbade_CheckedChanged(object sender, EventArgs e) {
+      txttimeFrom.Visible = !chbade.Checked;
+      txttimeTo.Visible = !chbade.Checked;
+    }
+
+    private void dvOnline_OnSelectionChanged(object sender, EventArgs e) {
+      //btCreate.Enabled = true;
+      if (dvOnline.Selection == SelectionType.DateRange) {
+        dtpFrom.Text = dvOnline.SelectionStart.ToShortDateString();
+        dtpTo.Text = dvOnline.SelectionEnd.Date.ToShortDateString();
+        txttimeFrom.Text = dvOnline.SelectionStart.ToShortTimeString();
+        txttimeTo.Text = dvOnline.SelectionEnd.ToShortTimeString();
+
+        btCreate.Text = "Save";
+      }
+
+      if (dvOnline.Selection == SelectionType.Appointment) {
+
+        dtpFrom.Text = dvOnline.SelectedAppointment.StartDate.ToShortDateString();
+        dtpTo.Text = dvOnline.SelectedAppointment.EndDate.ToShortDateString();
+        txttimeFrom.Text = dvOnline.SelectedAppointment.StartDate.ToShortTimeString();
+        txttimeTo.Text = dvOnline.SelectedAppointment.EndDate.ToShortTimeString();
+
+        if (dvOnline.SelectedAppointment.Recurring)
+          //btCreate.Enabled = false;
+          //also change the caption of the save button
+          btCreate.Text = "Save changes";
+      }
+
+      if (dvOnline.Selection == SelectionType.None) {
+        //also change the caption of the save button
+        btCreate.Text = "Save";
+      }
+
+    }
+
+    private void mcOnline_DateChanged(object sender, DateRangeEventArgs e) {
+      dvOnline.StartDate = mcOnline.SelectionStart;
+    }
+
+    private void btCreate_Click(object sender, EventArgs e) {
+      if (dvOnline.Selection != SelectionType.Appointment) {
+        CreateAppointment();
+      } else {
+        //now we want to change an existing appointment
+        if (!dvOnline.SelectedAppointment.Recurring) {
+          if (CreateAppointment())
+            DeleteAppointment();
+        } else {
+          //change recurring appointment
+          //check, if only selected appointment has to change or whole recurrence
+          DialogResult res = MessageBox.Show("Change all events in this series?", "Change recurrences", MessageBoxButtons.YesNo);
+          if (res != DialogResult.Yes) {
+            if (CreateAppointment())
+              DeleteAppointment();
+          } else
+            ChangeRecurrenceAppointment(dvOnline.SelectedAppointment.RecurringId);
+        }
+      }
+      dvOnline.Invalidate();
+    }
+
+    private void btnRecurrence_Click(object sender, EventArgs e) {
+      Recurrence recurrence = new Recurrence();
+      recurrence.dialogClosedDelegate = new OnDialogClosedDelegate(this.DialogClosed);
+      recurrence.Show();
+    }
+
+    private void btnSaveCal_Click(object sender, EventArgs e) {
+      slaveCommunicator.SetUptimeCalendarAsync(onlineTimes.ToArray());
+    }
+
+    private void dvOnline_OnResolveAppointments(object sender, ResolveAppointmentsEventArgs e) {
+      List<Appointment> Apps = new List<Appointment>();
+
+      foreach (Appointment m_App in onlineTimes)
+        if ((m_App.StartDate >= e.StartDate) &&
+            (m_App.StartDate <= e.EndDate))
+          Apps.Add(m_App);
+      e.Appointments = Apps;
+    }
+
+    private void btnUpdateCalender_Click(object sender, EventArgs e) {
+      slaveCommunicator.GetUptimeCalendarAsync();
+    }
+
+    private void dvOnline_OnNewAppointment(object sender, NewAppointmentEventArgs e) {
+      Appointment Appointment = new Appointment();
+
+      Appointment.StartDate = e.StartDate;
+      Appointment.EndDate = e.EndDate;
+
+      onlineTimes.Add(Appointment);
+    }
+
+    #endregion
+
+    #endregion
+
+    #region Slave communicator events
+
+    void slaveCommunicator_SetUptimeCalendarCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e) {
+      if (e.Error == null) {
+        MessageBox.Show("Calendar successfully saved!", "Calender", MessageBoxButtons.OK, MessageBoxIcon.Information);
+      } else {
+        MessageBox.Show("Error saving calender \n" + e.Error.ToString(), "Calender", MessageBoxButtons.OK, MessageBoxIcon.Error);
+      }
+    }
+
+    void slaveCommunicator_GetUptimeCalendarCompleted(object sender, GetUptimeCalendarCompletedEventArgs e) {
+      if (e.Error == null) {
+        if (e.Result != null) {
+          onlineTimes = e.Result.ToList<Appointment>();
+          onlineTimes.ForEach(a => a.BorderColor = Color.Red);
+          dvOnline.Invalidate();
+
+        } else {
+          onlineTimes = new List<Appointment>();
+        }
+      }
+    }
+
+    private void slaveCommunicator_GetCurrentConnectionCompleted(object sender, GetCurrentConnectionCompletedEventArgs e) {
+      if (e.Error == null) {
+        ConnectionContainer curConnection = e.Result;
+        tbIPAdress.Text = curConnection.IPAdress;
+      } else {
+        ManageFatalException("Connection Error, check if Hive Slave is running!", "Connection Error", null);
+      }
+    }
+
+    private void slaveCommunicator_GetStatusInfosCompleted(object sender, GetStatusInfosCompletedEventArgs e) {
+      if (e.Error == null) {
+        StatusCommons sc = e.Result;
+
+        lbGuid.Text = sc.ClientGuid.ToString();
+        lbConnectionStatus.Text = sc.Status.ToString();
+        lbJobdone.Text = sc.JobsDone.ToString();
+        lbJobsAborted.Text = sc.JobsAborted.ToString();
+        lbJobsFetched.Text = sc.JobsFetched.ToString();
+
+        this.Text = "Slave Console (" + sc.Status.ToString() + ")";
+
+        ListViewItem curJobStatusItem;
+
+        if (sc.Jobs != null) {
+          lvJobDetail.Items.Clear();
+          double progress;
+          foreach (JobStatus curJob in sc.Jobs) {
+            curJobStatusItem = new ListViewItem(curJob.JobId.ToString());
+            curJobStatusItem.SubItems.Add(curJob.Since.ToString());
+            progress = curJob.Progress * 100;
+            curJobStatusItem.SubItems.Add(progress.ToString());
+            lvJobDetail.Items.Add(curJobStatusItem);
+          }
+          lvJobDetail.Sort();
+        }
+
+        UpdateGraph(sc);
+
+        if (sc.Status == NetworkEnumWcfConnState.Connected) {
+          btConnect.Enabled = false;
+          btnDisconnect.Enabled = true;
+          lbCs.Text = sc.ConnectedSince.ToString();
+          slaveCommunicator.GetCurrentConnectionAsync();
+        } else if (sc.Status == NetworkEnumWcfConnState.Disconnected) {
+          btConnect.Enabled = true;
+          btnDisconnect.Enabled = false;
+          lbCs.Text = String.Empty;
+        } else if (sc.Status == NetworkEnumWcfConnState.Failed) {
+          btConnect.Enabled = true;
+          btnDisconnect.Enabled = false;
+          lbCs.Text = String.Empty;
+        }
+
+        slaveCommunicator.GetCurrentConnection();
+      } else {
+        ManageFatalException("Connection Error, check if Hive Slave is running!", "Connection Error", null);
+      }
+    }
+
+    #endregion
+
+    #region Exception
+    private void ManageFatalException(string body, string caption, Exception e) {
+      if (!isfired) {
+        isfired = true;
+        refreshTimer.Stop();
+        DialogResult res = MessageBox.Show(body, caption, MessageBoxButtons.OK, MessageBoxIcon.Error);
+        if (res == DialogResult.OK)
+          this.Close();
+      }
+    }
+
+    #endregion
+
+    #endregion
+
+    #region GUI Events
+
+    private void btConnect_Click(object sender, EventArgs e) {
+      IPAddress ipAdress;
+      ConnectionContainer cc = new ConnectionContainer();
+      if (IPAddress.TryParse(tbIPAdress.Text, out ipAdress)) {
+        cc.IPAdress = tbIPAdress.Text;
+        slaveCommunicator.SetConnectionAsync(cc);
+      } else {
+        MessageBox.Show("IP Adress and/or Port Error", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+      }
+    }
+
+    private void btnDisconnect_Click(object sender, EventArgs e) {
+      slaveCommunicator.DisconnectAsync();
+    }
+
+    private void btn_slaveShutdown_Click(object sender, EventArgs e) {
+      DialogResult res = MessageBox.Show("Do you really want to shutdown the Hive Slace?", "Hive Slave Console", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
+      if (res == DialogResult.Yes) {
+        logFileReader.Stop();
+        slaveCommunicator.ShutdownClient();
+        this.Close();
+      }
+    }
+
+    private void Connection_KeyPress(object sender, KeyPressEventArgs e) {
+      if (e.KeyChar == (char)Keys.Return)
+        btConnect_Click(null, null);
+    }
+
+    #endregion
+
+
+
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.designer.cs	(revision 4340)
@@ -0,0 +1,688 @@
+﻿#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
+
+namespace HeuristicLab.Hive.Slave.Console {
+  partial class HiveSlaveConsole {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      Calendar.DrawTool drawTool2 = new Calendar.DrawTool();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HiveSlaveConsole));
+      this.dvOnline = new Calendar.DayView();
+      this.tcClientConsole = new System.Windows.Forms.TabControl();
+      this.tpConnection = new System.Windows.Forms.TabPage();
+      this.gbServerConnection = new System.Windows.Forms.GroupBox();
+      this.btn_clientShutdown = new System.Windows.Forms.Button();
+      this.btnDisconnect = new System.Windows.Forms.Button();
+      this.btConnect = new System.Windows.Forms.Button();
+      this.tbIPAdress = new System.Windows.Forms.TextBox();
+      this.lbServerIPCaption = new System.Windows.Forms.Label();
+      this.lbPortCaption = new System.Windows.Forms.Label();
+      this.gbJobCommon = new System.Windows.Forms.GroupBox();
+      this.lvJobDetail = new System.Windows.Forms.ListView();
+      this.chJobId = new System.Windows.Forms.ColumnHeader();
+      this.chSince = new System.Windows.Forms.ColumnHeader();
+      this.chProgress = new System.Windows.Forms.ColumnHeader();
+      this.gbCommon = new System.Windows.Forms.GroupBox();
+      this.pbGraph = new System.Windows.Forms.PictureBox();
+      this.lbJobsAborted = new System.Windows.Forms.Label();
+      this.lbJobdone = new System.Windows.Forms.Label();
+      this.lbJobsFetched = new System.Windows.Forms.Label();
+      this.lbGuid = new System.Windows.Forms.Label();
+      this.lbGuidCaption = new System.Windows.Forms.Label();
+      this.lbCs = new System.Windows.Forms.Label();
+      this.lbConnectionStatus = new System.Windows.Forms.Label();
+      this.lbConnectionStatusCaption = new System.Windows.Forms.Label();
+      this.lbJobsAbortedCaption = new System.Windows.Forms.Label();
+      this.lbJobdoneCaption = new System.Windows.Forms.Label();
+      this.lbJobsFetchedCaption = new System.Windows.Forms.Label();
+      this.lbCsCaption = new System.Windows.Forms.Label();
+      this.gbEventLog = new System.Windows.Forms.GroupBox();
+      this.txtLog = new System.Windows.Forms.TextBox();
+      this.tabPage2 = new System.Windows.Forms.TabPage();
+      this.btnSaveCal = new System.Windows.Forms.Button();
+      this.groupBox1 = new System.Windows.Forms.GroupBox();
+      this.txttimeTo = new System.Windows.Forms.DateTimePicker();
+      this.txttimeFrom = new System.Windows.Forms.DateTimePicker();
+      this.dtpTo = new System.Windows.Forms.DateTimePicker();
+      this.dtpFrom = new System.Windows.Forms.DateTimePicker();
+      this.chbade = new System.Windows.Forms.CheckBox();
+      this.btnRecurrence = new System.Windows.Forms.Button();
+      this.btbDelete = new System.Windows.Forms.Button();
+      this.label2 = new System.Windows.Forms.Label();
+      this.label1 = new System.Windows.Forms.Label();
+      this.btCreate = new System.Windows.Forms.Button();
+      this.mcOnline = new System.Windows.Forms.MonthCalendar();
+      this.pictureBox1 = new System.Windows.Forms.PictureBox();
+      this.ilEventLog = new System.Windows.Forms.ImageList(this.components);
+      this.btnUpdateCalender = new System.Windows.Forms.Button();
+      this.tcClientConsole.SuspendLayout();
+      this.tpConnection.SuspendLayout();
+      this.gbServerConnection.SuspendLayout();
+      this.gbJobCommon.SuspendLayout();
+      this.gbCommon.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pbGraph)).BeginInit();
+      this.gbEventLog.SuspendLayout();
+      this.tabPage2.SuspendLayout();
+      this.groupBox1.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // dvOnline
+      // 
+      drawTool2.DayView = this.dvOnline;
+      this.dvOnline.ActiveTool = drawTool2;
+      this.dvOnline.AmPmDisplay = false;
+      this.dvOnline.AppointmentDuration = Calendar.AppointmentSlotDuration.SixtyMinutes;
+      this.dvOnline.AppointmentHeightMode = Calendar.AppHeightDrawMode.TrueHeightAll;
+      this.dvOnline.DayHeadersHeight = 15;
+      this.dvOnline.DaysToShow = 7;
+      this.dvOnline.DrawAllAppBorder = false;
+      this.dvOnline.EnableDurationDisplay = false;
+      this.dvOnline.EnableRoundedCorners = false;
+      this.dvOnline.EnableShadows = false;
+      this.dvOnline.EnableTimeIndicator = false;
+      this.dvOnline.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F);
+      this.dvOnline.Location = new System.Drawing.Point(9, 179);
+      this.dvOnline.MinHalfHourApp = false;
+      this.dvOnline.Name = "dvOnline";
+      this.dvOnline.SelectionEnd = new System.DateTime(((long)(0)));
+      this.dvOnline.SelectionStart = new System.DateTime(((long)(0)));
+      this.dvOnline.Size = new System.Drawing.Size(823, 225);
+      this.dvOnline.StartDate = new System.DateTime(((long)(0)));
+      this.dvOnline.TabIndex = 18;
+      this.dvOnline.OnSelectionChanged += new System.EventHandler<System.EventArgs>(this.dvOnline_OnSelectionChanged);
+      // 
+      // tcClientConsole
+      // 
+      this.tcClientConsole.Controls.Add(this.tpConnection);
+      this.tcClientConsole.Controls.Add(this.tabPage2);
+      this.tcClientConsole.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tcClientConsole.ItemSize = new System.Drawing.Size(410, 21);
+      this.tcClientConsole.Location = new System.Drawing.Point(0, 0);
+      this.tcClientConsole.Name = "tcClientConsole";
+      this.tcClientConsole.SelectedIndex = 0;
+      this.tcClientConsole.Size = new System.Drawing.Size(853, 438);
+      this.tcClientConsole.SizeMode = System.Windows.Forms.TabSizeMode.Fixed;
+      this.tcClientConsole.TabIndex = 1;
+      // 
+      // tpConnection
+      // 
+      this.tpConnection.Controls.Add(this.gbServerConnection);
+      this.tpConnection.Controls.Add(this.gbJobCommon);
+      this.tpConnection.Controls.Add(this.gbCommon);
+      this.tpConnection.Controls.Add(this.gbEventLog);
+      this.tpConnection.Location = new System.Drawing.Point(4, 25);
+      this.tpConnection.Name = "tpConnection";
+      this.tpConnection.Padding = new System.Windows.Forms.Padding(3);
+      this.tpConnection.RightToLeft = System.Windows.Forms.RightToLeft.No;
+      this.tpConnection.Size = new System.Drawing.Size(845, 409);
+      this.tpConnection.TabIndex = 0;
+      this.tpConnection.Text = "Status";
+      this.tpConnection.UseVisualStyleBackColor = true;
+      // 
+      // gbServerConnection
+      // 
+      this.gbServerConnection.Controls.Add(this.btn_clientShutdown);
+      this.gbServerConnection.Controls.Add(this.btnDisconnect);
+      this.gbServerConnection.Controls.Add(this.btConnect);
+      this.gbServerConnection.Controls.Add(this.tbIPAdress);
+      this.gbServerConnection.Controls.Add(this.lbServerIPCaption);
+      this.gbServerConnection.Controls.Add(this.lbPortCaption);
+      this.gbServerConnection.Location = new System.Drawing.Point(346, 6);
+      this.gbServerConnection.Name = "gbServerConnection";
+      this.gbServerConnection.Size = new System.Drawing.Size(216, 164);
+      this.gbServerConnection.TabIndex = 15;
+      this.gbServerConnection.TabStop = false;
+      this.gbServerConnection.Text = "Connection";
+      // 
+      // btn_clientShutdown
+      // 
+      this.btn_clientShutdown.Image = global::HeuristicLab.Hive.Slave.Console.Properties.Resources.exit_48;
+      this.btn_clientShutdown.Location = new System.Drawing.Point(144, 101);
+      this.btn_clientShutdown.Name = "btn_clientShutdown";
+      this.btn_clientShutdown.Size = new System.Drawing.Size(57, 57);
+      this.btn_clientShutdown.TabIndex = 8;
+      this.btn_clientShutdown.UseVisualStyleBackColor = true;
+      this.btn_clientShutdown.Click += new System.EventHandler(this.btn_slaveShutdown_Click);
+      // 
+      // btnDisconnect
+      // 
+      this.btnDisconnect.Image = global::HeuristicLab.Hive.Slave.Console.Properties.Resources.Disaster_warning_48;
+      this.btnDisconnect.Location = new System.Drawing.Point(79, 101);
+      this.btnDisconnect.Name = "btnDisconnect";
+      this.btnDisconnect.Size = new System.Drawing.Size(57, 57);
+      this.btnDisconnect.TabIndex = 5;
+      this.btnDisconnect.UseVisualStyleBackColor = true;
+      this.btnDisconnect.Click += new System.EventHandler(this.btnDisconnect_Click);
+      // 
+      // btConnect
+      // 
+      this.btConnect.Image = global::HeuristicLab.Hive.Slave.Console.Properties.Resources.Global_network_48;
+      this.btConnect.Location = new System.Drawing.Point(14, 101);
+      this.btConnect.Name = "btConnect";
+      this.btConnect.Size = new System.Drawing.Size(57, 57);
+      this.btConnect.TabIndex = 4;
+      this.btConnect.UseVisualStyleBackColor = true;
+      this.btConnect.Click += new System.EventHandler(this.btConnect_Click);
+      // 
+      // tbIPAdress
+      // 
+      this.tbIPAdress.Location = new System.Drawing.Point(74, 25);
+      this.tbIPAdress.Name = "tbIPAdress";
+      this.tbIPAdress.Size = new System.Drawing.Size(93, 20);
+      this.tbIPAdress.TabIndex = 2;
+      this.tbIPAdress.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Connection_KeyPress);
+      // 
+      // lbServerIPCaption
+      // 
+      this.lbServerIPCaption.AutoSize = true;
+      this.lbServerIPCaption.Location = new System.Drawing.Point(17, 28);
+      this.lbServerIPCaption.Name = "lbServerIPCaption";
+      this.lbServerIPCaption.Size = new System.Drawing.Size(60, 13);
+      this.lbServerIPCaption.TabIndex = 0;
+      this.lbServerIPCaption.Text = "IP address:";
+      // 
+      // lbPortCaption
+      // 
+      this.lbPortCaption.AutoSize = true;
+      this.lbPortCaption.Location = new System.Drawing.Point(48, 62);
+      this.lbPortCaption.Name = "lbPortCaption";
+      this.lbPortCaption.Size = new System.Drawing.Size(29, 13);
+      this.lbPortCaption.TabIndex = 1;
+      this.lbPortCaption.Text = "Port:";
+      // 
+      // gbJobCommon
+      // 
+      this.gbJobCommon.Controls.Add(this.lvJobDetail);
+      this.gbJobCommon.Location = new System.Drawing.Point(568, 6);
+      this.gbJobCommon.Name = "gbJobCommon";
+      this.gbJobCommon.Size = new System.Drawing.Size(269, 164);
+      this.gbJobCommon.TabIndex = 13;
+      this.gbJobCommon.TabStop = false;
+      this.gbJobCommon.Text = "Jobs detail";
+      // 
+      // lvJobDetail
+      // 
+      this.lvJobDetail.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.chJobId,
+            this.chSince,
+            this.chProgress});
+      this.lvJobDetail.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.lvJobDetail.FullRowSelect = true;
+      this.lvJobDetail.GridLines = true;
+      this.lvJobDetail.Location = new System.Drawing.Point(3, 16);
+      this.lvJobDetail.Name = "lvJobDetail";
+      this.lvJobDetail.Size = new System.Drawing.Size(263, 145);
+      this.lvJobDetail.TabIndex = 0;
+      this.lvJobDetail.UseCompatibleStateImageBehavior = false;
+      this.lvJobDetail.View = System.Windows.Forms.View.Details;
+      // 
+      // chJobId
+      // 
+      this.chJobId.Text = "ID";
+      // 
+      // chSince
+      // 
+      this.chSince.Text = "Since";
+      this.chSince.Width = 120;
+      // 
+      // chProgress
+      // 
+      this.chProgress.Text = "Progress";
+      // 
+      // gbCommon
+      // 
+      this.gbCommon.Controls.Add(this.pbGraph);
+      this.gbCommon.Controls.Add(this.lbJobsAborted);
+      this.gbCommon.Controls.Add(this.lbJobdone);
+      this.gbCommon.Controls.Add(this.lbJobsFetched);
+      this.gbCommon.Controls.Add(this.lbGuid);
+      this.gbCommon.Controls.Add(this.lbGuidCaption);
+      this.gbCommon.Controls.Add(this.lbCs);
+      this.gbCommon.Controls.Add(this.lbConnectionStatus);
+      this.gbCommon.Controls.Add(this.lbConnectionStatusCaption);
+      this.gbCommon.Controls.Add(this.lbJobsAbortedCaption);
+      this.gbCommon.Controls.Add(this.lbJobdoneCaption);
+      this.gbCommon.Controls.Add(this.lbJobsFetchedCaption);
+      this.gbCommon.Controls.Add(this.lbCsCaption);
+      this.gbCommon.Location = new System.Drawing.Point(8, 6);
+      this.gbCommon.Name = "gbCommon";
+      this.gbCommon.Size = new System.Drawing.Size(332, 164);
+      this.gbCommon.TabIndex = 14;
+      this.gbCommon.TabStop = false;
+      this.gbCommon.Text = "Common";
+      // 
+      // pbGraph
+      // 
+      this.pbGraph.Location = new System.Drawing.Point(211, 42);
+      this.pbGraph.Name = "pbGraph";
+      this.pbGraph.Size = new System.Drawing.Size(112, 108);
+      this.pbGraph.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
+      this.pbGraph.TabIndex = 21;
+      this.pbGraph.TabStop = false;
+      // 
+      // lbJobsAborted
+      // 
+      this.lbJobsAborted.AutoSize = true;
+      this.lbJobsAborted.Location = new System.Drawing.Point(74, 137);
+      this.lbJobsAborted.Name = "lbJobsAborted";
+      this.lbJobsAborted.Size = new System.Drawing.Size(50, 13);
+      this.lbJobsAborted.TabIndex = 20;
+      this.lbJobsAborted.Text = "loading...";
+      // 
+      // lbJobdone
+      // 
+      this.lbJobdone.AutoSize = true;
+      this.lbJobdone.Location = new System.Drawing.Point(62, 114);
+      this.lbJobdone.Name = "lbJobdone";
+      this.lbJobdone.Size = new System.Drawing.Size(50, 13);
+      this.lbJobdone.TabIndex = 19;
+      this.lbJobdone.Text = "loading...";
+      // 
+      // lbJobsFetched
+      // 
+      this.lbJobsFetched.AutoSize = true;
+      this.lbJobsFetched.Location = new System.Drawing.Point(74, 90);
+      this.lbJobsFetched.Name = "lbJobsFetched";
+      this.lbJobsFetched.Size = new System.Drawing.Size(50, 13);
+      this.lbJobsFetched.TabIndex = 18;
+      this.lbJobsFetched.Text = "loading...";
+      // 
+      // lbGuid
+      // 
+      this.lbGuid.AutoSize = true;
+      this.lbGuid.Location = new System.Drawing.Point(41, 16);
+      this.lbGuid.Name = "lbGuid";
+      this.lbGuid.Size = new System.Drawing.Size(50, 13);
+      this.lbGuid.TabIndex = 15;
+      this.lbGuid.Text = "loading...";
+      // 
+      // lbGuidCaption
+      // 
+      this.lbGuidCaption.AutoSize = true;
+      this.lbGuidCaption.Location = new System.Drawing.Point(9, 16);
+      this.lbGuidCaption.Name = "lbGuidCaption";
+      this.lbGuidCaption.Size = new System.Drawing.Size(37, 13);
+      this.lbGuidCaption.TabIndex = 8;
+      this.lbGuidCaption.Text = "GUID:";
+      // 
+      // lbCs
+      // 
+      this.lbCs.AutoSize = true;
+      this.lbCs.Location = new System.Drawing.Point(94, 40);
+      this.lbCs.Name = "lbCs";
+      this.lbCs.Size = new System.Drawing.Size(50, 13);
+      this.lbCs.TabIndex = 17;
+      this.lbCs.Text = "loading...";
+      // 
+      // lbConnectionStatus
+      // 
+      this.lbConnectionStatus.AutoSize = true;
+      this.lbConnectionStatus.Location = new System.Drawing.Point(97, 66);
+      this.lbConnectionStatus.Name = "lbConnectionStatus";
+      this.lbConnectionStatus.Size = new System.Drawing.Size(50, 13);
+      this.lbConnectionStatus.TabIndex = 16;
+      this.lbConnectionStatus.Text = "loading...";
+      // 
+      // lbConnectionStatusCaption
+      // 
+      this.lbConnectionStatusCaption.AutoSize = true;
+      this.lbConnectionStatusCaption.Location = new System.Drawing.Point(9, 66);
+      this.lbConnectionStatusCaption.Name = "lbConnectionStatusCaption";
+      this.lbConnectionStatusCaption.Size = new System.Drawing.Size(93, 13);
+      this.lbConnectionStatusCaption.TabIndex = 13;
+      this.lbConnectionStatusCaption.Text = "Connected status:";
+      // 
+      // lbJobsAbortedCaption
+      // 
+      this.lbJobsAbortedCaption.AutoSize = true;
+      this.lbJobsAbortedCaption.Location = new System.Drawing.Point(8, 137);
+      this.lbJobsAbortedCaption.Name = "lbJobsAbortedCaption";
+      this.lbJobsAbortedCaption.Size = new System.Drawing.Size(71, 13);
+      this.lbJobsAbortedCaption.TabIndex = 11;
+      this.lbJobsAbortedCaption.Text = "Jobs aborted:";
+      // 
+      // lbJobdoneCaption
+      // 
+      this.lbJobdoneCaption.AutoSize = true;
+      this.lbJobdoneCaption.Location = new System.Drawing.Point(9, 114);
+      this.lbJobdoneCaption.Name = "lbJobdoneCaption";
+      this.lbJobdoneCaption.Size = new System.Drawing.Size(59, 13);
+      this.lbJobdoneCaption.TabIndex = 10;
+      this.lbJobdoneCaption.Text = "Jobs done:";
+      // 
+      // lbJobsFetchedCaption
+      // 
+      this.lbJobsFetchedCaption.AutoSize = true;
+      this.lbJobsFetchedCaption.Location = new System.Drawing.Point(9, 90);
+      this.lbJobsFetchedCaption.Name = "lbJobsFetchedCaption";
+      this.lbJobsFetchedCaption.Size = new System.Drawing.Size(71, 13);
+      this.lbJobsFetchedCaption.TabIndex = 12;
+      this.lbJobsFetchedCaption.Text = "Jobs fetched:";
+      // 
+      // lbCsCaption
+      // 
+      this.lbCsCaption.AutoSize = true;
+      this.lbCsCaption.Location = new System.Drawing.Point(9, 40);
+      this.lbCsCaption.Name = "lbCsCaption";
+      this.lbCsCaption.Size = new System.Drawing.Size(90, 13);
+      this.lbCsCaption.TabIndex = 9;
+      this.lbCsCaption.Text = "Connected since:";
+      // 
+      // gbEventLog
+      // 
+      this.gbEventLog.Controls.Add(this.txtLog);
+      this.gbEventLog.Location = new System.Drawing.Point(7, 176);
+      this.gbEventLog.Name = "gbEventLog";
+      this.gbEventLog.Size = new System.Drawing.Size(830, 230);
+      this.gbEventLog.TabIndex = 7;
+      this.gbEventLog.TabStop = false;
+      this.gbEventLog.Text = "Log";
+      // 
+      // txtLog
+      // 
+      this.txtLog.Location = new System.Drawing.Point(6, 19);
+      this.txtLog.Multiline = true;
+      this.txtLog.Name = "txtLog";
+      this.txtLog.ReadOnly = true;
+      this.txtLog.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+      this.txtLog.Size = new System.Drawing.Size(818, 205);
+      this.txtLog.TabIndex = 0;
+      // 
+      // tabPage2
+      // 
+      this.tabPage2.Controls.Add(this.btnUpdateCalender);
+      this.tabPage2.Controls.Add(this.btnSaveCal);
+      this.tabPage2.Controls.Add(this.groupBox1);
+      this.tabPage2.Controls.Add(this.mcOnline);
+      this.tabPage2.Controls.Add(this.dvOnline);
+      this.tabPage2.Controls.Add(this.pictureBox1);
+      this.tabPage2.Location = new System.Drawing.Point(4, 25);
+      this.tabPage2.Name = "tabPage2";
+      this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
+      this.tabPage2.Size = new System.Drawing.Size(845, 409);
+      this.tabPage2.TabIndex = 1;
+      this.tabPage2.Text = "Schedule";
+      this.tabPage2.UseVisualStyleBackColor = true;
+      // 
+      // btnSaveCal
+      // 
+      this.btnSaveCal.Location = new System.Drawing.Point(633, 100);
+      this.btnSaveCal.Name = "btnSaveCal";
+      this.btnSaveCal.Size = new System.Drawing.Size(199, 25);
+      this.btnSaveCal.TabIndex = 41;
+      this.btnSaveCal.Text = "Save Calender";
+      this.btnSaveCal.UseVisualStyleBackColor = true;
+      this.btnSaveCal.Click += new System.EventHandler(this.btnSaveCal_Click);
+      // 
+      // groupBox1
+      // 
+      this.groupBox1.Controls.Add(this.txttimeTo);
+      this.groupBox1.Controls.Add(this.txttimeFrom);
+      this.groupBox1.Controls.Add(this.dtpTo);
+      this.groupBox1.Controls.Add(this.dtpFrom);
+      this.groupBox1.Controls.Add(this.chbade);
+      this.groupBox1.Controls.Add(this.btnRecurrence);
+      this.groupBox1.Controls.Add(this.btbDelete);
+      this.groupBox1.Controls.Add(this.label2);
+      this.groupBox1.Controls.Add(this.label1);
+      this.groupBox1.Controls.Add(this.btCreate);
+      this.groupBox1.Location = new System.Drawing.Point(373, 7);
+      this.groupBox1.Name = "groupBox1";
+      this.groupBox1.Size = new System.Drawing.Size(254, 161);
+      this.groupBox1.TabIndex = 21;
+      this.groupBox1.TabStop = false;
+      // 
+      // txttimeTo
+      // 
+      this.txttimeTo.CustomFormat = "HH:00";
+      this.txttimeTo.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+      this.txttimeTo.Location = new System.Drawing.Point(164, 45);
+      this.txttimeTo.Name = "txttimeTo";
+      this.txttimeTo.ShowUpDown = true;
+      this.txttimeTo.Size = new System.Drawing.Size(73, 20);
+      this.txttimeTo.TabIndex = 40;
+      // 
+      // txttimeFrom
+      // 
+      this.txttimeFrom.CustomFormat = "HH:00";
+      this.txttimeFrom.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+      this.txttimeFrom.Location = new System.Drawing.Point(164, 12);
+      this.txttimeFrom.Name = "txttimeFrom";
+      this.txttimeFrom.ShowUpDown = true;
+      this.txttimeFrom.Size = new System.Drawing.Size(73, 20);
+      this.txttimeFrom.TabIndex = 39;
+      // 
+      // dtpTo
+      // 
+      this.dtpTo.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+      this.dtpTo.Location = new System.Drawing.Point(72, 45);
+      this.dtpTo.Name = "dtpTo";
+      this.dtpTo.Size = new System.Drawing.Size(89, 20);
+      this.dtpTo.TabIndex = 33;
+      // 
+      // dtpFrom
+      // 
+      this.dtpFrom.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+      this.dtpFrom.Location = new System.Drawing.Point(72, 12);
+      this.dtpFrom.Name = "dtpFrom";
+      this.dtpFrom.Size = new System.Drawing.Size(89, 20);
+      this.dtpFrom.TabIndex = 32;
+      // 
+      // chbade
+      // 
+      this.chbade.AutoSize = true;
+      this.chbade.Location = new System.Drawing.Point(135, 70);
+      this.chbade.Name = "chbade";
+      this.chbade.Size = new System.Drawing.Size(90, 17);
+      this.chbade.TabIndex = 31;
+      this.chbade.Text = "All Day Event";
+      this.chbade.UseVisualStyleBackColor = true;
+      this.chbade.CheckedChanged += new System.EventHandler(this.chbade_CheckedChanged);
+      // 
+      // btnRecurrence
+      // 
+      this.btnRecurrence.Location = new System.Drawing.Point(135, 129);
+      this.btnRecurrence.Name = "btnRecurrence";
+      this.btnRecurrence.Size = new System.Drawing.Size(113, 26);
+      this.btnRecurrence.TabIndex = 30;
+      this.btnRecurrence.Text = "Recurrence";
+      this.btnRecurrence.UseVisualStyleBackColor = true;
+      this.btnRecurrence.Click += new System.EventHandler(this.btnRecurrence_Click);
+      // 
+      // btbDelete
+      // 
+      this.btbDelete.Location = new System.Drawing.Point(8, 129);
+      this.btbDelete.Name = "btbDelete";
+      this.btbDelete.Size = new System.Drawing.Size(114, 26);
+      this.btbDelete.TabIndex = 25;
+      this.btbDelete.Text = "Delete";
+      this.btbDelete.UseVisualStyleBackColor = true;
+      this.btbDelete.Click += new System.EventHandler(this.btbDelete_Click);
+      // 
+      // label2
+      // 
+      this.label2.AutoSize = true;
+      this.label2.Location = new System.Drawing.Point(16, 46);
+      this.label2.Name = "label2";
+      this.label2.Size = new System.Drawing.Size(55, 13);
+      this.label2.TabIndex = 23;
+      this.label2.Text = "End Time:";
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(16, 15);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(58, 13);
+      this.label1.TabIndex = 21;
+      this.label1.Text = "Start Time:";
+      // 
+      // btCreate
+      // 
+      this.btCreate.Location = new System.Drawing.Point(6, 93);
+      this.btCreate.Name = "btCreate";
+      this.btCreate.Size = new System.Drawing.Size(242, 26);
+      this.btCreate.TabIndex = 20;
+      this.btCreate.Text = "Save";
+      this.btCreate.UseVisualStyleBackColor = true;
+      this.btCreate.Click += new System.EventHandler(this.btCreate_Click);
+      // 
+      // mcOnline
+      // 
+      this.mcOnline.CalendarDimensions = new System.Drawing.Size(2, 1);
+      this.mcOnline.Location = new System.Drawing.Point(9, 12);
+      this.mcOnline.Name = "mcOnline";
+      this.mcOnline.TabIndex = 19;
+      this.mcOnline.DateChanged += new System.Windows.Forms.DateRangeEventHandler(this.mcOnline_DateChanged);
+      // 
+      // pictureBox1
+      // 
+      this.pictureBox1.Image = global::HeuristicLab.Hive.Slave.Console.Properties.Resources.schedule;
+      this.pictureBox1.Location = new System.Drawing.Point(633, 12);
+      this.pictureBox1.Name = "pictureBox1";
+      this.pictureBox1.Size = new System.Drawing.Size(199, 82);
+      this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
+      this.pictureBox1.TabIndex = 22;
+      this.pictureBox1.TabStop = false;
+      // 
+      // ilEventLog
+      // 
+      this.ilEventLog.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ilEventLog.ImageStream")));
+      this.ilEventLog.TransparentColor = System.Drawing.Color.Transparent;
+      this.ilEventLog.Images.SetKeyName(0, "Info.png");
+      this.ilEventLog.Images.SetKeyName(1, "Error.png");
+      // 
+      // btnUpdateCalender
+      // 
+      this.btnUpdateCalender.Location = new System.Drawing.Point(633, 136);
+      this.btnUpdateCalender.Name = "btnUpdateCalender";
+      this.btnUpdateCalender.Size = new System.Drawing.Size(199, 26);
+      this.btnUpdateCalender.TabIndex = 42;
+      this.btnUpdateCalender.Text = "Update Calender";
+      this.btnUpdateCalender.UseVisualStyleBackColor = true;
+      this.btnUpdateCalender.Click += new System.EventHandler(this.btnUpdateCalender_Click);
+      // 
+      // HiveClientConsole
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.BackColor = System.Drawing.SystemColors.Control;
+      this.ClientSize = new System.Drawing.Size(853, 438);
+      this.Controls.Add(this.tcClientConsole);
+      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "HiveClientConsole";
+      this.Text = "Client Console (loading...)";
+      this.tcClientConsole.ResumeLayout(false);
+      this.tpConnection.ResumeLayout(false);
+      this.gbServerConnection.ResumeLayout(false);
+      this.gbServerConnection.PerformLayout();
+      this.gbJobCommon.ResumeLayout(false);
+      this.gbCommon.ResumeLayout(false);
+      this.gbCommon.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pbGraph)).EndInit();
+      this.gbEventLog.ResumeLayout(false);
+      this.gbEventLog.PerformLayout();
+      this.tabPage2.ResumeLayout(false);
+      this.groupBox1.ResumeLayout(false);
+      this.groupBox1.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TabControl tcClientConsole;
+    private System.Windows.Forms.TabPage tpConnection;
+    private System.Windows.Forms.TabPage tabPage2;
+    private System.Windows.Forms.Label lbJobdoneCaption;
+    private System.Windows.Forms.Label lbCsCaption;
+    private System.Windows.Forms.Label lbGuidCaption;
+    private System.Windows.Forms.GroupBox gbEventLog;
+    private System.Windows.Forms.Label lbJobsFetchedCaption;
+    private System.Windows.Forms.Label lbJobsAbortedCaption;
+    private System.Windows.Forms.GroupBox gbJobCommon;
+    private System.Windows.Forms.GroupBox gbCommon;
+    private System.Windows.Forms.ListView lvJobDetail;
+    private System.Windows.Forms.ColumnHeader chJobId;
+    private System.Windows.Forms.ColumnHeader chSince;
+    private System.Windows.Forms.ColumnHeader chProgress;
+    private System.Windows.Forms.Label lbConnectionStatusCaption;
+    private System.Windows.Forms.ImageList ilEventLog;
+    private System.Windows.Forms.Label lbCs;
+    private System.Windows.Forms.Label lbConnectionStatus;
+    private System.Windows.Forms.Label lbGuid;
+    private System.Windows.Forms.Label lbJobsFetched;
+    private System.Windows.Forms.Label lbJobdone;
+    private System.Windows.Forms.Label lbJobsAborted;
+    private System.Windows.Forms.PictureBox pbGraph;
+    private System.Windows.Forms.GroupBox gbServerConnection;
+    private System.Windows.Forms.Button btn_clientShutdown;
+    private System.Windows.Forms.Button btnDisconnect;
+    private System.Windows.Forms.Button btConnect;
+    private System.Windows.Forms.TextBox tbIPAdress;
+    private System.Windows.Forms.Label lbServerIPCaption;
+    private System.Windows.Forms.Label lbPortCaption;
+    private System.Windows.Forms.GroupBox groupBox1;
+    private System.Windows.Forms.Button btCreate;
+    private System.Windows.Forms.MonthCalendar mcOnline;
+    private HeuristicLab.Calendar.DayView dvOnline;
+    private System.Windows.Forms.Label label2;
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.PictureBox pictureBox1;
+    private System.Windows.Forms.Button btbDelete;
+    private System.Windows.Forms.Button btnRecurrence;
+    private System.Windows.Forms.CheckBox chbade;
+    private System.Windows.Forms.DateTimePicker dtpTo;
+    private System.Windows.Forms.DateTimePicker dtpFrom;
+    private System.Windows.Forms.DateTimePicker txttimeTo;
+    private System.Windows.Forms.DateTimePicker txttimeFrom;
+    private System.Windows.Forms.TextBox txtLog;
+    private System.Windows.Forms.Button btnSaveCal;
+    private System.Windows.Forms.Button btnUpdateCalender;
+  }
+}
+
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.resx	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.resx	(revision 4340)
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="ilEventLog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <data name="ilEventLog.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABI
+        CgAAAk1TRnQBSQFMAgEBAgEAAQwBAAEMAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
+        AwABEAMAAQEBAAEgBgABECoAAUICNAF0AWQCEwHxAy8B/wFgAh8B1AEfAh4BLCwAAUICNAF0AWQCEwHx
+        Ay8B/wFgAh8B1AEfAh4BLKQAAV8CEgHyAZMBgQEvAf8BvwGBAS8B/wG9AYEBLwH/AboBgQEvAf8BuAGB
+        AS8B/wG2AYEBLwH/AWMBTAEvAf8BOwIyAWUcAAFfAhIB8gIvAaQB/wIvAdYB/wIvAdQB/wIvAdIB/wIv
+        AdAB/wIvAc4B/wIvAWoB/wE7AjIBZZgAATkBNQEvAf8BxwGBAS8B/wHDAYEBLwH/AbEBgQEvAf8BsQGB
+        AS8B/wGxAYEBLwH/AbEBgQEvAf8BswGBAS8B/wG2AYEBLwH/AbQBgQEvAf8BYgIXAeQUAAIvAToB/wIv
+        AdwB/wIvAdkB/wIvAcoB/wIvAcoB/wIvAcoB/wIvAcoB/wIvAcsB/wIvAc4B/wIvAcwB/wFiAhcB5JAA
+        Ay8B/wHLAYEBLwH/AbsBgQEvAf8BtgGBAS8B/wG2AYEBLwH/Ae4B3AHEBf8BvgGBAUwB/wG2AYEBLwH/
+        AbYBgQEvAf8BtgGBAS8B/wG0AYEBLwH/AUgCNAGGDAADLwH/Ai8B4AH/Ai8B0gH/Ai8BzgH/AlwB1gH/
+        Ai8BzgH/Ai8BzgH/Ai8BzgH/AjIBzgH/Ai8BzgH/Ai8BzgH/Ai8BzAH/AUgCNAGGiAABKwIoAUIB0AGG
+        AS8B/wHHAYEBLwH/AboBgQEvAf8BugGBAS8B/wG6AYEBLwH/AdABnAGBBf8BugGBAS8B/wG6AYEBLwH/
+        AboBgQEvAf8BugGBAS8B/wG2AYEBLwH/AYEBXgEvAf8IAAErAigBQgIvAeQB/wIvAdwB/wIvAdIB/wKf
+        Ae0F/wJ1Ad4B/wIvAdIB/wL0Af0F/wIyAdIB/wIvAdIB/wIvAc4B/wIvAYEB/4gAAy8B/wHSAYkBLwH/
+        Ab8BgQEvAf8BvwGBAS8B/wG/AYEBLwH/Ab8BgQEvAf8B0wGfAYEF/wG/AYEBLwH/Ab8BgQEvAf8BvwGB
+        AS8B/wG/AYEBLwH/Ab4BgQEvAf8BtgGBAS8B/wE1Ai8BVwQAAy8B/wIvAeUB/wIvAdYB/wIvAdYN/wL1
+        Af0J/wLiAfoB/wIvAdYB/wIvAdUB/wIvAc4B/wE1Ai8BV4QAAXcBXwEvAf8B1AGMAS8B/wHEAYEBLwH/
+        AcQBgQEvAf8BxAGBAS8B/wHEAYEBLwH/AdcBpAGBBf8BxAGBAS8B/wHEAYEBLwH/AcQBgQEvAf8BxAGB
+        AS8B/wHEAYEBLwH/AbgBgQEvAf8BZAIUAewEAAIvAX0B/wIvAegB/wIvAdoB/wIvAdoB/wIvAdoR/wLi
+        AfoB/wIvAdoB/wIvAdoB/wIvAdoB/wIvAdAB/wFkAhQB7IQAAYEBdAEvAf8B1wGOAS8B/wHJAYEBLwH/
+        AckBgQEvAf8ByQGBAS8B/wHJAYEBLwn/AckBgQEvAf8ByQGBAS8B/wHJAYEBLwH/AckBgQEvAf8ByQGB
+        AS8B/wG6AYEBLwH/Ay8B/wQAAi8BgQH/Ai8B6QH/Ai8B3gH/Ai8B3gH/Ai8B3gH/AvQB/Q3/AnUB5wH/
+        Ai8B3gH/Ai8B3gH/Ai8B3gH/Ai8B0gH/Ay8B/4QAAYEBZQEvAf8B2QGRAS8B/wHOAYMBLwH/Ac4BgwEv
+        Af8BzgGDAS8B/wHOAYMBLwH/Ac4BgwEvAf8B1wGcAWAB/wHOAYMBLwH/Ac4BgwEvAf8BzgGDAS8B/wHO
+        AYMBLwH/Ac4BgwEvAf8BvQGBAS8B/wFiAhcB+QQAAS8BNAGBAf8CLwHsAf8CLwHiAf8CLwHiAf8C9AH9
+        Ff8CdQHqAf8CLwHiAf8CLwHiAf8CLwHUAf8BYgIXAfmEAAEyATABLwH/AdsBlAEvAf8B0gGJAS8B/wHS
+        AYkBLwH/AdIBiQEvAf8B0gGJAS8B/wHSAYkBLwH/AesBywGQAf8B0gGJAS8B/wHSAYkBLwH/AdIBiQEv
+        Af8B0gGJAS8B/wHEAYEBLwH/Ab8BgQEvAf8BUAIyAZsEAAIvATIB/wIvAe0B/wIvAeYB/wIvAeUB/wL9
+        Af4F/wLiAfwB/wIvAeUJ/wKBAfEB/wIvAeUB/wIvAdoB/wIvAdYB/wFQAjIBm4QAAVYCLQGyAd4BmAEv
+        Af8B2wGUAS8B/wHXAY4BLwH/AdcBjgEvAf8B1wGOAS8B/wH7AfYB6wX/AdcBjgEvAf8B1wGOAS8B/wHX
+        AY4BLwH/AdYBjQEvAf8BxAGBAS8B/wGpAYEBLwH/CAABVgItAbIBLwE5Ae8B/wIvAe0B/wIvAekB/wIv
+        AekB/wLhAfwB/wIvAekB/wIvAekB/wIvAekB/wKBAfMB/wIvAekB/wIvAegB/wIvAdoB/wEvATcBnQH/
+        jAABaQFOAS8B/wHdAZcBLwH/AdsBlAEvAf8B2wGUAS8B/wHbAZQBLwH/AdsBlAEvAf8B3AGXATUB/wHb
+        AZQBLwH/AdsBlAEvAf8B1QGMAS8B/wHJAYEBLwH/AdEBiAEvAf8BKwIiAfwMAAIvAWMB/wIvAe8B/wIv
+        Ae0B/wIvAe0B/wIvAe0B/wIvAe0B/wIvAe0B/wIvAe0B/wIvAe0B/wIvAegB/wIvAd4B/wEvAUIB4gH/
+        ASsCIgH8jAABGAIXASEBkAGBAS8B/wHfAZkBLwH/AdsBlAEvAf8B2QGRAS8B/wHYAZABLwH/AdgBkAEv
+        Af8B0wGKAS8B/wHQAYYBLwH/Ac4BgwEvAf8B2gGSAS8B/wE6ATUBLwH/EAABGAIXASECLwGHAf8BLwE1
+        AfEB/wIvAe0B/wIvAewB/wIvAesB/wIvAesB/wIvAeYB/wIvAeQB/wIvAeIB/wEvAUwB5gH/Ai8BOQH/
+        lAADEAEWAVQBRgEvAf8B0gGJAS8B/wHiAZ0BLwH/AdkBkQEvAf8B1wGOAS8B/wHVAYwBLwH/AeEBmwEv
+        Af8BzgGEAS8B/wFQAjAB/hgAAxABFgIvAVMB/wEvATUB0wH/AS8BRgH0Af8CLwHsAf8CLwHpAf8BLwEw
+        AegB/wEvAU4B8AH/Ai8BzAH/AVACMAH+oAABRQI0AX0DLwH/AYEBZwEvAf8CgQEvAf8BYQFSAS8B/wFQ
+        AjAB/gMTARokAAFFAjQBfQMvAf8CLwGBAf8CLwGBAf8CLwFjAf8BUAIwAf4DEwEa/wCRAAFCAU0BPgcA
+        AT4DAAEoAwABQAMAARADAAEBAQABAQUAAYAXAAP/AQAB/AEfAfwBHwQAAfABBwHwAQcEAAHgAQMB4AED
+        BAABwAEBAcABAQQAAYABAQGAAQEEAAGAAQABgAUAAYABAAGABQABgAEAAYAFAAGAAQABgAUAAYABAAGA
+        BQABgAEBAYABAQQAAcABAQHAAQEEAAHAAQMBwAEDBAAB4AEHAeABBwQAAfgBDwH4AQ8EAAT/BAAL
+</value>
+  </data>
+  <metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>46</value>
+  </metadata>
+</root>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/LogFileReader.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/LogFileReader.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/LogFileReader.cs	(revision 4340)
@@ -0,0 +1,117 @@
+﻿#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 System.IO;
+using System.Diagnostics;
+
+namespace HeuristicLab.Hive.Slave.Console {
+  class LogFileReader {
+    string filename = "";
+    FileSystemWatcher fileSystemWatcher = null;
+    long previousSeekPosition;
+
+    public delegate void MoreDataHandler(object sender, string newData);
+    public event MoreDataHandler MoreData;
+    private int maxBytes = 1024 * 16;
+    public int MaxBytes {
+      get { return this.maxBytes; }
+      set { this.maxBytes = value; }
+    }
+
+    public LogFileReader(string filename) {
+      this.filename = filename;
+    }
+
+    public void Start() {
+      FileInfo targetFile = new FileInfo(this.filename);
+
+      previousSeekPosition = 0;
+
+      fileSystemWatcher = new FileSystemWatcher();
+      fileSystemWatcher.IncludeSubdirectories = false;
+      fileSystemWatcher.Path = targetFile.DirectoryName;
+      fileSystemWatcher.Filter = targetFile.Name;
+
+      if (!targetFile.Exists) {
+        fileSystemWatcher.Created += new FileSystemEventHandler(TargetFile_Created);
+        fileSystemWatcher.EnableRaisingEvents = true;
+      } else {
+        TargetFile_Changed(null, null);
+        StartMonitoring();
+      }
+    }
+
+    public void Stop() {
+      fileSystemWatcher.EnableRaisingEvents = false;
+      fileSystemWatcher.Dispose();
+    }
+
+    public string ReadFullFile() {
+      using (StreamReader streamReader = new StreamReader(this.filename)) {
+        return streamReader.ReadToEnd();
+      }
+    }
+
+    public void StartMonitoring() {
+        fileSystemWatcher.Changed += new FileSystemEventHandler(TargetFile_Changed);
+      fileSystemWatcher.Renamed += new RenamedEventHandler(TargetFile_Renamed);
+      fileSystemWatcher.EnableRaisingEvents = true;
+    }
+
+    public void TargetFile_Renamed(object source, FileSystemEventArgs e)
+    {
+        Stop();
+        Start();
+    }
+
+    public void TargetFile_Created(object source, FileSystemEventArgs e) {
+      StartMonitoring();
+    }
+
+    public void TargetFile_Changed(object source, FileSystemEventArgs e) {
+      //lock (this)
+      {
+        //read from current seek position to end of file
+        byte[] bytesRead = new byte[maxBytes];
+        FileStream fs = new FileStream(this.filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
+        if (fs.Length > maxBytes) {
+          this.previousSeekPosition = fs.Length - maxBytes;
+        }
+        this.previousSeekPosition = (int)fs.Seek(this.previousSeekPosition, SeekOrigin.Begin);
+        int numBytes = fs.Read(bytesRead, 0, maxBytes);
+        fs.Close();
+        this.previousSeekPosition += numBytes;
+
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < numBytes; i++) {
+          sb.Append((char)bytesRead[i]);
+        }
+
+        //call delegates with the string
+        this.MoreData(this, sb.ToString());
+      }
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/AssemblyInfo.frame	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/AssemblyInfo.frame	(revision 4340)
@@ -0,0 +1,59 @@
+#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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Hive.Slave.Console")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("1131CD44-0FDC-4f7b-9D7E-8029B26EAE05")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/DataSources/Calendar.Appointment.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/DataSources/Calendar.Appointment.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/DataSources/Calendar.Appointment.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="Appointment" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>Calendar.Appointment, Calendar.DayView, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/DataSources/HeuristicLab.Calendar.Appointment.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/DataSources/HeuristicLab.Calendar.Appointment.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/DataSources/HeuristicLab.Calendar.Appointment.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="Appointment" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Calendar.Appointment, HeuristicLab.Calendar-3.3, Version=3.3.0.4105, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/Resources.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/Resources.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/Resources.Designer.cs	(revision 4340)
@@ -0,0 +1,91 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Slave.Console.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HeuristicLab.Hive.Slave.Console.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        internal static System.Drawing.Bitmap Disaster_warning_48 {
+            get {
+                object obj = ResourceManager.GetObject("Disaster_warning_48", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap exit_48 {
+            get {
+                object obj = ResourceManager.GetObject("exit_48", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap Global_network_48 {
+            get {
+                object obj = ResourceManager.GetObject("Global_network_48", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap schedule {
+            get {
+                object obj = ResourceManager.GetObject("schedule", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/Resources.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/Resources.resx	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/Resources.resx	(revision 4340)
@@ -0,0 +1,133 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="Disaster_warning_48" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Disaster-warning-48.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="exit_48" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\exit-48.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="Global_network_48" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Global-network-48.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="schedule" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\schedule.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+</root>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/Settings.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/Settings.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/Settings.Designer.cs	(revision 4340)
@@ -0,0 +1,38 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Slave.Console.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("10.0.0.1")]
+        public string IpAdress {
+            get {
+                return ((string)(this["IpAdress"]));
+            }
+            set {
+                this["IpAdress"] = value;
+            }
+        }
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/Settings.settings
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/Settings.settings	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/Settings.settings	(revision 4340)
@@ -0,0 +1,9 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Hive.Slave.Console.Properties" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="IpAdress" Type="System.String" Scope="User">
+      <Value Profile="(Default)">10.0.0.1</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Recurrence.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Recurrence.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Recurrence.Designer.cs	(revision 4340)
@@ -0,0 +1,318 @@
+﻿namespace HeuristicLab.Hive.Slave.Console
+{
+  partial class Recurrence
+  {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing)
+    {
+      if (disposing && (components != null))
+      {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent()
+    {
+      this.gbAppointment = new System.Windows.Forms.GroupBox();
+      this.chbade = new System.Windows.Forms.CheckBox();
+      this.dtpEnd = new System.Windows.Forms.DateTimePicker();
+      this.dtpToTime = new System.Windows.Forms.DateTimePicker();
+      this.label5 = new System.Windows.Forms.Label();
+      this.dtpStart = new System.Windows.Forms.DateTimePicker();
+      this.dtpFromTime = new System.Windows.Forms.DateTimePicker();
+      this.label6 = new System.Windows.Forms.Label();
+      this.txtDays = new System.Windows.Forms.TextBox();
+      this.label4 = new System.Windows.Forms.Label();
+      this.label7 = new System.Windows.Forms.Label();
+      this.btSaveRecurrence = new System.Windows.Forms.Button();
+      this.btCancelRecurrence = new System.Windows.Forms.Button();
+      this.gbWeekly = new System.Windows.Forms.GroupBox();
+      this.cbSunday = new System.Windows.Forms.CheckBox();
+      this.cbSaturday = new System.Windows.Forms.CheckBox();
+      this.cbFriday = new System.Windows.Forms.CheckBox();
+      this.cbThursday = new System.Windows.Forms.CheckBox();
+      this.cbWednesday = new System.Windows.Forms.CheckBox();
+      this.cbTuesday = new System.Windows.Forms.CheckBox();
+      this.cbMonday = new System.Windows.Forms.CheckBox();
+      this.gbAppointment.SuspendLayout();
+      this.gbWeekly.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // gbAppointment
+      // 
+      this.gbAppointment.Controls.Add(this.chbade);
+      this.gbAppointment.Controls.Add(this.dtpEnd);
+      this.gbAppointment.Controls.Add(this.dtpToTime);
+      this.gbAppointment.Controls.Add(this.label5);
+      this.gbAppointment.Controls.Add(this.dtpStart);
+      this.gbAppointment.Controls.Add(this.dtpFromTime);
+      this.gbAppointment.Controls.Add(this.label6);
+      this.gbAppointment.Location = new System.Drawing.Point(2, 2);
+      this.gbAppointment.Name = "gbAppointment";
+      this.gbAppointment.Size = new System.Drawing.Size(386, 109);
+      this.gbAppointment.TabIndex = 39;
+      this.gbAppointment.TabStop = false;
+      this.gbAppointment.Text = "Appointment";
+      // 
+      // chbade
+      // 
+      this.chbade.AutoSize = true;
+      this.chbade.Location = new System.Drawing.Point(113, 86);
+      this.chbade.Name = "chbade";
+      this.chbade.Size = new System.Drawing.Size(90, 17);
+      this.chbade.TabIndex = 39;
+      this.chbade.Text = "All Day Event";
+      this.chbade.UseVisualStyleBackColor = true;
+      // 
+      // dtpEnd
+      // 
+      this.dtpEnd.Format = System.Windows.Forms.DateTimePickerFormat.Short;
+      this.dtpEnd.Location = new System.Drawing.Point(113, 56);
+      this.dtpEnd.Name = "dtpEnd";
+      this.dtpEnd.Size = new System.Drawing.Size(91, 20);
+      this.dtpEnd.TabIndex = 29;
+      // 
+      // dtpToTime
+      // 
+      this.dtpToTime.CustomFormat = "HH:00";
+      this.dtpToTime.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+      this.dtpToTime.Location = new System.Drawing.Point(226, 56);
+      this.dtpToTime.Name = "dtpToTime";
+      this.dtpToTime.ShowUpDown = true;
+      this.dtpToTime.Size = new System.Drawing.Size(73, 20);
+      this.dtpToTime.TabIndex = 38;
+      // 
+      // label5
+      // 
+      this.label5.AutoSize = true;
+      this.label5.Location = new System.Drawing.Point(58, 60);
+      this.label5.Name = "label5";
+      this.label5.Size = new System.Drawing.Size(55, 13);
+      this.label5.TabIndex = 27;
+      this.label5.Text = "End Date:";
+      // 
+      // dtpStart
+      // 
+      this.dtpStart.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+      this.dtpStart.Location = new System.Drawing.Point(113, 19);
+      this.dtpStart.Name = "dtpStart";
+      this.dtpStart.Size = new System.Drawing.Size(89, 20);
+      this.dtpStart.TabIndex = 28;
+      // 
+      // dtpFromTime
+      // 
+      this.dtpFromTime.CustomFormat = "HH:00";
+      this.dtpFromTime.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+      this.dtpFromTime.Location = new System.Drawing.Point(226, 19);
+      this.dtpFromTime.Name = "dtpFromTime";
+      this.dtpFromTime.ShowUpDown = true;
+      this.dtpFromTime.Size = new System.Drawing.Size(73, 20);
+      this.dtpFromTime.TabIndex = 30;
+      // 
+      // label6
+      // 
+      this.label6.AutoSize = true;
+      this.label6.Location = new System.Drawing.Point(58, 23);
+      this.label6.Name = "label6";
+      this.label6.Size = new System.Drawing.Size(58, 13);
+      this.label6.TabIndex = 25;
+      this.label6.Text = "Start Date:";
+      // 
+      // txtDays
+      // 
+      this.txtDays.Location = new System.Drawing.Point(160, 13);
+      this.txtDays.Name = "txtDays";
+      this.txtDays.Size = new System.Drawing.Size(30, 20);
+      this.txtDays.TabIndex = 24;
+      this.txtDays.Text = "1";
+      this.txtDays.Visible = false;
+      // 
+      // label4
+      // 
+      this.label4.AutoSize = true;
+      this.label4.Location = new System.Drawing.Point(120, 16);
+      this.label4.Name = "label4";
+      this.label4.Size = new System.Drawing.Size(34, 13);
+      this.label4.TabIndex = 23;
+      this.label4.Text = "Every";
+      this.label4.Visible = false;
+      // 
+      // label7
+      // 
+      this.label7.AutoSize = true;
+      this.label7.Location = new System.Drawing.Point(196, 16);
+      this.label7.Name = "label7";
+      this.label7.Size = new System.Drawing.Size(59, 13);
+      this.label7.TabIndex = 25;
+      this.label7.Text = "week(s) on";
+      this.label7.Visible = false;
+      // 
+      // btSaveRecurrence
+      // 
+      this.btSaveRecurrence.Location = new System.Drawing.Point(2, 217);
+      this.btSaveRecurrence.Name = "btSaveRecurrence";
+      this.btSaveRecurrence.Size = new System.Drawing.Size(147, 23);
+      this.btSaveRecurrence.TabIndex = 43;
+      this.btSaveRecurrence.Text = "Save";
+      this.btSaveRecurrence.UseVisualStyleBackColor = true;
+      this.btSaveRecurrence.Click += new System.EventHandler(this.btSaveRecurrence_Click);
+      // 
+      // btCancelRecurrence
+      // 
+      this.btCancelRecurrence.Location = new System.Drawing.Point(241, 217);
+      this.btCancelRecurrence.Name = "btCancelRecurrence";
+      this.btCancelRecurrence.Size = new System.Drawing.Size(147, 23);
+      this.btCancelRecurrence.TabIndex = 44;
+      this.btCancelRecurrence.Text = "Cancel";
+      this.btCancelRecurrence.UseVisualStyleBackColor = true;
+      this.btCancelRecurrence.Click += new System.EventHandler(this.btCancelRecurrence_Click);
+      // 
+      // gbWeekly
+      // 
+      this.gbWeekly.Controls.Add(this.label7);
+      this.gbWeekly.Controls.Add(this.cbSunday);
+      this.gbWeekly.Controls.Add(this.txtDays);
+      this.gbWeekly.Controls.Add(this.cbSaturday);
+      this.gbWeekly.Controls.Add(this.cbFriday);
+      this.gbWeekly.Controls.Add(this.cbThursday);
+      this.gbWeekly.Controls.Add(this.label4);
+      this.gbWeekly.Controls.Add(this.cbWednesday);
+      this.gbWeekly.Controls.Add(this.cbTuesday);
+      this.gbWeekly.Controls.Add(this.cbMonday);
+      this.gbWeekly.Location = new System.Drawing.Point(2, 111);
+      this.gbWeekly.Name = "gbWeekly";
+      this.gbWeekly.Size = new System.Drawing.Size(386, 100);
+      this.gbWeekly.TabIndex = 42;
+      this.gbWeekly.TabStop = false;
+      this.gbWeekly.Text = "Days of week";
+      // 
+      // cbSunday
+      // 
+      this.cbSunday.AutoSize = true;
+      this.cbSunday.Location = new System.Drawing.Point(199, 65);
+      this.cbSunday.Name = "cbSunday";
+      this.cbSunday.Size = new System.Drawing.Size(62, 17);
+      this.cbSunday.TabIndex = 6;
+      this.cbSunday.Text = "Sunday";
+      this.cbSunday.UseVisualStyleBackColor = true;
+      // 
+      // cbSaturday
+      // 
+      this.cbSaturday.AutoSize = true;
+      this.cbSaturday.Location = new System.Drawing.Point(122, 65);
+      this.cbSaturday.Name = "cbSaturday";
+      this.cbSaturday.Size = new System.Drawing.Size(68, 17);
+      this.cbSaturday.TabIndex = 5;
+      this.cbSaturday.Text = "Saturday";
+      this.cbSaturday.UseVisualStyleBackColor = true;
+      // 
+      // cbFriday
+      // 
+      this.cbFriday.AutoSize = true;
+      this.cbFriday.Location = new System.Drawing.Point(37, 65);
+      this.cbFriday.Name = "cbFriday";
+      this.cbFriday.Size = new System.Drawing.Size(54, 17);
+      this.cbFriday.TabIndex = 4;
+      this.cbFriday.Text = "Friday";
+      this.cbFriday.UseVisualStyleBackColor = true;
+      // 
+      // cbThursday
+      // 
+      this.cbThursday.AutoSize = true;
+      this.cbThursday.Location = new System.Drawing.Point(289, 40);
+      this.cbThursday.Name = "cbThursday";
+      this.cbThursday.Size = new System.Drawing.Size(70, 17);
+      this.cbThursday.TabIndex = 3;
+      this.cbThursday.Text = "Thursday";
+      this.cbThursday.UseVisualStyleBackColor = true;
+      // 
+      // cbWednesday
+      // 
+      this.cbWednesday.AutoSize = true;
+      this.cbWednesday.Location = new System.Drawing.Point(199, 42);
+      this.cbWednesday.Name = "cbWednesday";
+      this.cbWednesday.Size = new System.Drawing.Size(86, 17);
+      this.cbWednesday.TabIndex = 2;
+      this.cbWednesday.Text = "Wednesday ";
+      this.cbWednesday.UseVisualStyleBackColor = true;
+      // 
+      // cbTuesday
+      // 
+      this.cbTuesday.AutoSize = true;
+      this.cbTuesday.Location = new System.Drawing.Point(123, 42);
+      this.cbTuesday.Name = "cbTuesday";
+      this.cbTuesday.Size = new System.Drawing.Size(67, 17);
+      this.cbTuesday.TabIndex = 1;
+      this.cbTuesday.Text = "Tuesday";
+      this.cbTuesday.UseVisualStyleBackColor = true;
+      // 
+      // cbMonday
+      // 
+      this.cbMonday.AutoSize = true;
+      this.cbMonday.Location = new System.Drawing.Point(37, 42);
+      this.cbMonday.Name = "cbMonday";
+      this.cbMonday.Size = new System.Drawing.Size(64, 17);
+      this.cbMonday.TabIndex = 0;
+      this.cbMonday.Text = "Monday";
+      this.cbMonday.UseVisualStyleBackColor = true;
+      // 
+      // Recurrence
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(393, 243);
+      this.Controls.Add(this.gbWeekly);
+      this.Controls.Add(this.btCancelRecurrence);
+      this.Controls.Add(this.btSaveRecurrence);
+      this.Controls.Add(this.gbAppointment);
+      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+      this.Name = "Recurrence";
+      this.Text = "Recurrence";
+      this.gbAppointment.ResumeLayout(false);
+      this.gbAppointment.PerformLayout();
+      this.gbWeekly.ResumeLayout(false);
+      this.gbWeekly.PerformLayout();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.GroupBox gbAppointment;
+    private System.Windows.Forms.TextBox txtDays;
+    private System.Windows.Forms.Label label4;
+    private System.Windows.Forms.DateTimePicker dtpEnd;
+    private System.Windows.Forms.DateTimePicker dtpStart;
+    private System.Windows.Forms.Label label5;
+    private System.Windows.Forms.Label label6;
+    private System.Windows.Forms.Label label7;
+    private System.Windows.Forms.Button btSaveRecurrence;
+    private System.Windows.Forms.Button btCancelRecurrence;
+    private System.Windows.Forms.DateTimePicker dtpFromTime;
+    private System.Windows.Forms.DateTimePicker dtpToTime;
+    private System.Windows.Forms.CheckBox chbade;
+    private System.Windows.Forms.GroupBox gbWeekly;
+    private System.Windows.Forms.CheckBox cbSunday;
+    private System.Windows.Forms.CheckBox cbSaturday;
+    private System.Windows.Forms.CheckBox cbFriday;
+    private System.Windows.Forms.CheckBox cbThursday;
+    private System.Windows.Forms.CheckBox cbWednesday;
+    private System.Windows.Forms.CheckBox cbTuesday;
+    private System.Windows.Forms.CheckBox cbMonday;
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Recurrence.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Recurrence.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Recurrence.cs	(revision 4340)
@@ -0,0 +1,125 @@
+﻿#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.Windows.Forms;
+
+namespace HeuristicLab.Hive.Slave.Console
+{
+
+  public enum RecurrenceMode
+  {
+    Daily,
+    Weekly
+  }
+
+  public partial class Recurrence : Form
+  {
+
+    public OnDialogClosedDelegate dialogClosedDelegate;
+
+    public Recurrence()
+    {
+      InitializeComponent();
+    }
+
+    private void btCancelRecurrence_Click(object sender, EventArgs e)
+    {
+      this.Close();
+    }
+
+    private void btSaveRecurrence_Click(object sender, EventArgs e)
+    {
+      DateTime dateFrom, dateTo;
+      RecurrenceMode mode = RecurrenceMode.Daily;
+      int incWeek = 0;
+      HashSet<DayOfWeek> days = new HashSet<DayOfWeek>();
+
+      days = GetDays();
+
+      //check if valid
+      if (InputIsValid())
+      {
+        //set entity
+
+        dateFrom = DateTime.Parse(dtpStart.Text + " " + dtpFromTime.Text);
+        dateTo = DateTime.Parse(dtpEnd.Text + " " + dtpToTime.Text);
+
+        if (int.TryParse(txtDays.Text, out incWeek))
+          mode = RecurrenceMode.Weekly;
+        else
+          mode = RecurrenceMode.Daily;
+
+        RecurrentEvent recurrentEvent = new RecurrentEvent()
+        {
+          DateFrom = dateFrom,
+          DateTo = dateTo,
+          AllDay = chbade.Checked,
+          WeekDays = days,
+          IncWeeks = incWeek,
+        };
+
+        //fire delegate and close the dialog
+        dialogClosedDelegate(recurrentEvent);
+        this.Close();
+      }
+      else
+        MessageBox.Show("Incorrect date format", "Schedule Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+    }
+
+    private HashSet<DayOfWeek> GetDays()
+    {
+      HashSet<DayOfWeek> days = new HashSet<DayOfWeek>();
+
+      if (cbMonday.Checked)
+        days.Add(DayOfWeek.Monday);
+      if (cbTuesday.Checked)
+        days.Add(DayOfWeek.Tuesday);
+      if (cbWednesday.Checked)
+        days.Add(DayOfWeek.Wednesday);
+      if (cbThursday.Checked)
+        days.Add(DayOfWeek.Thursday);
+      if (cbFriday.Checked)
+        days.Add(DayOfWeek.Friday);
+      if (cbSaturday.Checked)
+        days.Add(DayOfWeek.Saturday);
+      if (cbSunday.Checked)
+        days.Add(DayOfWeek.Sunday);
+
+      return days;
+    }
+
+    private bool InputIsValid()
+    {
+      DateTime dateFrom, dateTo;
+      int i = 0;
+
+      dateFrom = DateTime.Parse(dtpStart.Text + " " + dtpFromTime.Text);
+      dateTo = DateTime.Parse(dtpEnd.Text + " " + dtpToTime.Text);
+
+      if (dateFrom < dateTo && dateFrom.TimeOfDay < dateTo.TimeOfDay && int.TryParse(txtDays.Text, out i))
+        return true;
+      else
+        return false;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Recurrence.resx
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Recurrence.resx	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Recurrence.resx	(revision 4340)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/ServerProxy.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/ServerProxy.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/ServerProxy.cs	(revision 4340)
@@ -0,0 +1,551 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Client.Console {
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "StatusCommons", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConso" +
+      "leService")]
+  public partial class StatusCommons : object, System.Runtime.Serialization.IExtensibleDataObject {
+
+    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+
+    private System.Guid ClientGuidk__BackingFieldField;
+
+    private System.DateTime ConnectedSincek__BackingFieldField;
+
+    private int JobsAbortedk__BackingFieldField;
+
+    private int JobsDonek__BackingFieldField;
+
+    private int JobsFetchedk__BackingFieldField;
+
+    private HeuristicLab.Hive.Client.Core.ClientConsoleService.JobStatus[] Jobsk__BackingFieldField;
+
+    private HeuristicLab.Hive.Client.Common.NetworkEnumWcfConnState Statusk__BackingFieldField;
+
+    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+      get {
+        return this.extensionDataField;
+      }
+      set {
+        this.extensionDataField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute(Name = "<ClientGuid>k__BackingField", IsRequired = true)]
+    public System.Guid ClientGuidk__BackingField {
+      get {
+        return this.ClientGuidk__BackingFieldField;
+      }
+      set {
+        this.ClientGuidk__BackingFieldField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute(Name = "<ConnectedSince>k__BackingField", IsRequired = true)]
+    public System.DateTime ConnectedSincek__BackingField {
+      get {
+        return this.ConnectedSincek__BackingFieldField;
+      }
+      set {
+        this.ConnectedSincek__BackingFieldField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute(Name = "<JobsAborted>k__BackingField", IsRequired = true)]
+    public int JobsAbortedk__BackingField {
+      get {
+        return this.JobsAbortedk__BackingFieldField;
+      }
+      set {
+        this.JobsAbortedk__BackingFieldField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute(Name = "<JobsDone>k__BackingField", IsRequired = true)]
+    public int JobsDonek__BackingField {
+      get {
+        return this.JobsDonek__BackingFieldField;
+      }
+      set {
+        this.JobsDonek__BackingFieldField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute(Name = "<JobsFetched>k__BackingField", IsRequired = true)]
+    public int JobsFetchedk__BackingField {
+      get {
+        return this.JobsFetchedk__BackingFieldField;
+      }
+      set {
+        this.JobsFetchedk__BackingFieldField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute(Name = "<Jobs>k__BackingField", IsRequired = true)]
+    public HeuristicLab.Hive.Client.Core.ClientConsoleService.JobStatus[] Jobsk__BackingField {
+      get {
+        return this.Jobsk__BackingFieldField;
+      }
+      set {
+        this.Jobsk__BackingFieldField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute(Name = "<Status>k__BackingField", IsRequired = true)]
+    public HeuristicLab.Hive.Client.Common.NetworkEnumWcfConnState Statusk__BackingField {
+      get {
+        return this.Statusk__BackingFieldField;
+      }
+      set {
+        this.Statusk__BackingFieldField = value;
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "JobStatus", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConso" +
+      "leService")]
+  public partial class JobStatus : object, System.Runtime.Serialization.IExtensibleDataObject {
+
+    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+
+    private long JobIdk__BackingFieldField;
+
+    private double Progressk__BackingFieldField;
+
+    private System.DateTime Sincek__BackingFieldField;
+
+    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+      get {
+        return this.extensionDataField;
+      }
+      set {
+        this.extensionDataField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute(Name = "<JobId>k__BackingField", IsRequired = true)]
+    public long JobIdk__BackingField {
+      get {
+        return this.JobIdk__BackingFieldField;
+      }
+      set {
+        this.JobIdk__BackingFieldField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute(Name = "<Progress>k__BackingField", IsRequired = true)]
+    public double Progressk__BackingField {
+      get {
+        return this.Progressk__BackingFieldField;
+      }
+      set {
+        this.Progressk__BackingFieldField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute(Name = "<Since>k__BackingField", IsRequired = true)]
+    public System.DateTime Sincek__BackingField {
+      get {
+        return this.Sincek__BackingFieldField;
+      }
+      set {
+        this.Sincek__BackingFieldField = value;
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "ConnectionContainer", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConso" +
+      "leService")]
+  public partial class ConnectionContainer : object, System.Runtime.Serialization.IExtensibleDataObject {
+
+    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+
+    private string IPAdressk__BackingFieldField;
+
+    private int Portk__BackingFieldField;
+
+    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+      get {
+        return this.extensionDataField;
+      }
+      set {
+        this.extensionDataField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute(Name = "<IPAdress>k__BackingField", IsRequired = true)]
+    public string IPAdressk__BackingField {
+      get {
+        return this.IPAdressk__BackingFieldField;
+      }
+      set {
+        this.IPAdressk__BackingFieldField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute(Name = "<Port>k__BackingField", IsRequired = true)]
+    public int Portk__BackingField {
+      get {
+        return this.Portk__BackingFieldField;
+      }
+      set {
+        this.Portk__BackingFieldField = value;
+      }
+    }
+  }
+}
+namespace HeuristicLab.Hive.Client.Common {
+  using System.Runtime.Serialization;
+
+
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "NetworkEnum.WcfConnState", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Common")]
+  public enum NetworkEnumWcfConnState : int {
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Connected = 0,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Disconnected = 1,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Failed = 2,
+  }
+}
+
+
+[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+[System.ServiceModel.ServiceContractAttribute(ConfigurationName = "IClientConsoleCommunicator")]
+public interface IClientConsoleCommunicator {
+
+  [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IClientConsoleCommunicator/GetStatusInfos", ReplyAction = "http://tempuri.org/IClientConsoleCommunicator/GetStatusInfosResponse")]
+  HeuristicLab.Hive.Client.Core.ClientConsoleService.StatusCommons GetStatusInfos();
+
+  [System.ServiceModel.OperationContractAttribute(AsyncPattern = true, Action = "http://tempuri.org/IClientConsoleCommunicator/GetStatusInfos", ReplyAction = "http://tempuri.org/IClientConsoleCommunicator/GetStatusInfosResponse")]
+  System.IAsyncResult BeginGetStatusInfos(System.AsyncCallback callback, object asyncState);
+
+  HeuristicLab.Hive.Client.Core.ClientConsoleService.StatusCommons EndGetStatusInfos(System.IAsyncResult result);
+
+  [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IClientConsoleCommunicator/GetConnection", ReplyAction = "http://tempuri.org/IClientConsoleCommunicator/GetConnectionResponse")]
+  HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer GetConnection();
+
+  [System.ServiceModel.OperationContractAttribute(AsyncPattern = true, Action = "http://tempuri.org/IClientConsoleCommunicator/GetConnection", ReplyAction = "http://tempuri.org/IClientConsoleCommunicator/GetConnectionResponse")]
+  System.IAsyncResult BeginGetConnection(System.AsyncCallback callback, object asyncState);
+
+  HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer EndGetConnection(System.IAsyncResult result);
+
+  [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IClientConsoleCommunicator/SetConnection", ReplyAction = "http://tempuri.org/IClientConsoleCommunicator/SetConnectionResponse")]
+  void SetConnection(HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer container);
+
+  [System.ServiceModel.OperationContractAttribute(AsyncPattern = true, Action = "http://tempuri.org/IClientConsoleCommunicator/SetConnection", ReplyAction = "http://tempuri.org/IClientConsoleCommunicator/SetConnectionResponse")]
+  System.IAsyncResult BeginSetConnection(HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer container, System.AsyncCallback callback, object asyncState);
+
+  void EndSetConnection(System.IAsyncResult result);
+
+  [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IClientConsoleCommunicator/Disconnect", ReplyAction = "http://tempuri.org/IClientConsoleCommunicator/DisconnectResponse")]
+  void Disconnect();
+
+  [System.ServiceModel.OperationContractAttribute(AsyncPattern = true, Action = "http://tempuri.org/IClientConsoleCommunicator/Disconnect", ReplyAction = "http://tempuri.org/IClientConsoleCommunicator/DisconnectResponse")]
+  System.IAsyncResult BeginDisconnect(System.AsyncCallback callback, object asyncState);
+
+  void EndDisconnect(System.IAsyncResult result);
+}
+
+[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+public interface IClientConsoleCommunicatorChannel : IClientConsoleCommunicator, System.ServiceModel.IClientChannel {
+}
+
+[System.Diagnostics.DebuggerStepThroughAttribute()]
+[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+public partial class GetStatusInfosCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+
+  private object[] results;
+
+  public GetStatusInfosCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
+    base(exception, cancelled, userState) {
+    this.results = results;
+  }
+
+  public HeuristicLab.Hive.Client.Core.ClientConsoleService.StatusCommons Result {
+    get {
+      base.RaiseExceptionIfNecessary();
+      return ((HeuristicLab.Hive.Client.Core.ClientConsoleService.StatusCommons)(this.results[0]));
+    }
+  }
+}
+
+[System.Diagnostics.DebuggerStepThroughAttribute()]
+[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+public partial class GetConnectionCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+
+  private object[] results;
+
+  public GetConnectionCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
+    base(exception, cancelled, userState) {
+    this.results = results;
+  }
+
+  public HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer Result {
+    get {
+      base.RaiseExceptionIfNecessary();
+      return ((HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer)(this.results[0]));
+    }
+  }
+}
+
+[System.Diagnostics.DebuggerStepThroughAttribute()]
+[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+public partial class ClientConsoleCommunicatorClient : System.ServiceModel.ClientBase<IClientConsoleCommunicator>, IClientConsoleCommunicator {
+
+  private BeginOperationDelegate onBeginGetStatusInfosDelegate;
+
+  private EndOperationDelegate onEndGetStatusInfosDelegate;
+
+  private System.Threading.SendOrPostCallback onGetStatusInfosCompletedDelegate;
+
+  private BeginOperationDelegate onBeginGetConnectionDelegate;
+
+  private EndOperationDelegate onEndGetConnectionDelegate;
+
+  private System.Threading.SendOrPostCallback onGetConnectionCompletedDelegate;
+
+  private BeginOperationDelegate onBeginSetConnectionDelegate;
+
+  private EndOperationDelegate onEndSetConnectionDelegate;
+
+  private System.Threading.SendOrPostCallback onSetConnectionCompletedDelegate;
+
+  private BeginOperationDelegate onBeginDisconnectDelegate;
+
+  private EndOperationDelegate onEndDisconnectDelegate;
+
+  private System.Threading.SendOrPostCallback onDisconnectCompletedDelegate;
+
+  public ClientConsoleCommunicatorClient() {
+  }
+
+  public ClientConsoleCommunicatorClient(string endpointConfigurationName) :
+    base(endpointConfigurationName) {
+  }
+
+  public ClientConsoleCommunicatorClient(string endpointConfigurationName, string remoteAddress) :
+    base(endpointConfigurationName, remoteAddress) {
+  }
+
+  public ClientConsoleCommunicatorClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
+    base(endpointConfigurationName, remoteAddress) {
+  }
+
+  public ClientConsoleCommunicatorClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
+    base(binding, remoteAddress) {
+  }
+
+  public event System.EventHandler<GetStatusInfosCompletedEventArgs> GetStatusInfosCompleted;
+
+  public event System.EventHandler<GetConnectionCompletedEventArgs> GetConnectionCompleted;
+
+  public event System.EventHandler<System.ComponentModel.AsyncCompletedEventArgs> SetConnectionCompleted;
+
+  public event System.EventHandler<System.ComponentModel.AsyncCompletedEventArgs> DisconnectCompleted;
+
+  public HeuristicLab.Hive.Client.Core.ClientConsoleService.StatusCommons GetStatusInfos() {
+    return base.Channel.GetStatusInfos();
+  }
+
+  [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+  public System.IAsyncResult BeginGetStatusInfos(System.AsyncCallback callback, object asyncState) {
+    return base.Channel.BeginGetStatusInfos(callback, asyncState);
+  }
+
+  [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+  public HeuristicLab.Hive.Client.Core.ClientConsoleService.StatusCommons EndGetStatusInfos(System.IAsyncResult result) {
+    return base.Channel.EndGetStatusInfos(result);
+  }
+
+  private System.IAsyncResult OnBeginGetStatusInfos(object[] inValues, System.AsyncCallback callback, object asyncState) {
+    return this.BeginGetStatusInfos(callback, asyncState);
+  }
+
+  private object[] OnEndGetStatusInfos(System.IAsyncResult result) {
+    HeuristicLab.Hive.Client.Core.ClientConsoleService.StatusCommons retVal = this.EndGetStatusInfos(result);
+    return new object[] {
+                retVal};
+  }
+
+  private void OnGetStatusInfosCompleted(object state) {
+    if ((this.GetStatusInfosCompleted != null)) {
+      InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+      this.GetStatusInfosCompleted(this, new GetStatusInfosCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+    }
+  }
+
+  public void GetStatusInfosAsync() {
+    this.GetStatusInfosAsync(null);
+  }
+
+  public void GetStatusInfosAsync(object userState) {
+    if ((this.onBeginGetStatusInfosDelegate == null)) {
+      this.onBeginGetStatusInfosDelegate = new BeginOperationDelegate(this.OnBeginGetStatusInfos);
+    }
+    if ((this.onEndGetStatusInfosDelegate == null)) {
+      this.onEndGetStatusInfosDelegate = new EndOperationDelegate(this.OnEndGetStatusInfos);
+    }
+    if ((this.onGetStatusInfosCompletedDelegate == null)) {
+      this.onGetStatusInfosCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnGetStatusInfosCompleted);
+    }
+    base.InvokeAsync(this.onBeginGetStatusInfosDelegate, null, this.onEndGetStatusInfosDelegate, this.onGetStatusInfosCompletedDelegate, userState);
+  }
+
+  public HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer GetConnection() {
+    return base.Channel.GetConnection();
+  }
+
+  [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+  public System.IAsyncResult BeginGetConnection(System.AsyncCallback callback, object asyncState) {
+    return base.Channel.BeginGetConnection(callback, asyncState);
+  }
+
+  [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+  public HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer EndGetConnection(System.IAsyncResult result) {
+    return base.Channel.EndGetConnection(result);
+  }
+
+  private System.IAsyncResult OnBeginGetConnection(object[] inValues, System.AsyncCallback callback, object asyncState) {
+    return this.BeginGetConnection(callback, asyncState);
+  }
+
+  private object[] OnEndGetConnection(System.IAsyncResult result) {
+    HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer retVal = this.EndGetConnection(result);
+    return new object[] {
+                retVal};
+  }
+
+  private void OnGetConnectionCompleted(object state) {
+    if ((this.GetConnectionCompleted != null)) {
+      InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+      this.GetConnectionCompleted(this, new GetConnectionCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+    }
+  }
+
+  public void GetConnectionAsync() {
+    this.GetConnectionAsync(null);
+  }
+
+  public void GetConnectionAsync(object userState) {
+    if ((this.onBeginGetConnectionDelegate == null)) {
+      this.onBeginGetConnectionDelegate = new BeginOperationDelegate(this.OnBeginGetConnection);
+    }
+    if ((this.onEndGetConnectionDelegate == null)) {
+      this.onEndGetConnectionDelegate = new EndOperationDelegate(this.OnEndGetConnection);
+    }
+    if ((this.onGetConnectionCompletedDelegate == null)) {
+      this.onGetConnectionCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnGetConnectionCompleted);
+    }
+    base.InvokeAsync(this.onBeginGetConnectionDelegate, null, this.onEndGetConnectionDelegate, this.onGetConnectionCompletedDelegate, userState);
+  }
+
+  public void SetConnection(HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer container) {
+    base.Channel.SetConnection(container);
+  }
+
+  [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+  public System.IAsyncResult BeginSetConnection(HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer container, System.AsyncCallback callback, object asyncState) {
+    return base.Channel.BeginSetConnection(container, callback, asyncState);
+  }
+
+  [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+  public void EndSetConnection(System.IAsyncResult result) {
+    base.Channel.EndSetConnection(result);
+  }
+
+  private System.IAsyncResult OnBeginSetConnection(object[] inValues, System.AsyncCallback callback, object asyncState) {
+    HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer container = ((HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer)(inValues[0]));
+    return this.BeginSetConnection(container, callback, asyncState);
+  }
+
+  private object[] OnEndSetConnection(System.IAsyncResult result) {
+    this.EndSetConnection(result);
+    return null;
+  }
+
+  private void OnSetConnectionCompleted(object state) {
+    if ((this.SetConnectionCompleted != null)) {
+      InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+      this.SetConnectionCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(e.Error, e.Cancelled, e.UserState));
+    }
+  }
+
+  public void SetConnectionAsync(HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer container) {
+    this.SetConnectionAsync(container, null);
+  }
+
+  public void SetConnectionAsync(HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer container, object userState) {
+    if ((this.onBeginSetConnectionDelegate == null)) {
+      this.onBeginSetConnectionDelegate = new BeginOperationDelegate(this.OnBeginSetConnection);
+    }
+    if ((this.onEndSetConnectionDelegate == null)) {
+      this.onEndSetConnectionDelegate = new EndOperationDelegate(this.OnEndSetConnection);
+    }
+    if ((this.onSetConnectionCompletedDelegate == null)) {
+      this.onSetConnectionCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnSetConnectionCompleted);
+    }
+    base.InvokeAsync(this.onBeginSetConnectionDelegate, new object[] {
+                    container}, this.onEndSetConnectionDelegate, this.onSetConnectionCompletedDelegate, userState);
+  }
+
+  public void Disconnect() {
+    base.Channel.Disconnect();
+  }
+
+  [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+  public System.IAsyncResult BeginDisconnect(System.AsyncCallback callback, object asyncState) {
+    return base.Channel.BeginDisconnect(callback, asyncState);
+  }
+
+  [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+  public void EndDisconnect(System.IAsyncResult result) {
+    base.Channel.EndDisconnect(result);
+  }
+
+  private System.IAsyncResult OnBeginDisconnect(object[] inValues, System.AsyncCallback callback, object asyncState) {
+    return this.BeginDisconnect(callback, asyncState);
+  }
+
+  private object[] OnEndDisconnect(System.IAsyncResult result) {
+    this.EndDisconnect(result);
+    return null;
+  }
+
+  private void OnDisconnectCompleted(object state) {
+    if ((this.DisconnectCompleted != null)) {
+      InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+      this.DisconnectCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(e.Error, e.Cancelled, e.UserState));
+    }
+  }
+
+  public void DisconnectAsync() {
+    this.DisconnectAsync(null);
+  }
+
+  public void DisconnectAsync(object userState) {
+    if ((this.onBeginDisconnectDelegate == null)) {
+      this.onBeginDisconnectDelegate = new BeginOperationDelegate(this.OnBeginDisconnect);
+    }
+    if ((this.onEndDisconnectDelegate == null)) {
+      this.onEndDisconnectDelegate = new EndOperationDelegate(this.OnEndDisconnect);
+    }
+    if ((this.onDisconnectCompletedDelegate == null)) {
+      this.onDisconnectCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnDisconnectCompleted);
+    }
+    base.InvokeAsync(this.onBeginDisconnectDelegate, null, this.onEndDisconnectDelegate, this.onDisconnectCompletedDelegate, userState);
+  }
+
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/HeuristicLab.Hive.Client.Console.ClientWCFService.ConnectionContainer.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/HeuristicLab.Hive.Client.Console.ClientWCFService.ConnectionContainer.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/HeuristicLab.Hive.Client.Console.ClientWCFService.ConnectionContainer.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="ConnectionContainer" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Client.Console.ClientWCFService.ConnectionContainer, Service References.ClientWCFService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/HeuristicLab.Hive.Client.Console.ClientWCFService.StatusCommons.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/HeuristicLab.Hive.Client.Console.ClientWCFService.StatusCommons.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/HeuristicLab.Hive.Client.Console.ClientWCFService.StatusCommons.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="StatusCommons" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Client.Console.ClientWCFService.StatusCommons, Service References.ClientWCFService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/HeuristicLab.Hive.Client.Core.ClientConsoleService.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/HeuristicLab.Hive.Client.Core.ClientConsoleService.xsd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/HeuristicLab.Hive.Client.Core.ClientConsoleService.xsd	(revision 4340)
@@ -0,0 +1,45 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConsoleService" xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConsoleService" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:complexType name="StatusCommons">
+    <xs:sequence>
+      <xs:element name="_x003C_ClientGuid_x003E_k__BackingField" type="ser:guid" />
+      <xs:element name="_x003C_ConnectedSince_x003E_k__BackingField" type="xs:dateTime" />
+      <xs:element name="_x003C_JobsAborted_x003E_k__BackingField" type="xs:int" />
+      <xs:element name="_x003C_JobsDone_x003E_k__BackingField" type="xs:int" />
+      <xs:element name="_x003C_JobsFetched_x003E_k__BackingField" type="xs:int" />
+      <xs:element name="_x003C_Jobs_x003E_k__BackingField" nillable="true" type="tns:ArrayOfJobStatus" />
+      <xs:element name="_x003C_Status_x003E_k__BackingField" type="tns:StatusCommons.ClientStatusEnum" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="StatusCommons" nillable="true" type="tns:StatusCommons" />
+  <xs:complexType name="ArrayOfJobStatus">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="JobStatus" nillable="true" type="tns:JobStatus" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfJobStatus" nillable="true" type="tns:ArrayOfJobStatus" />
+  <xs:complexType name="JobStatus">
+    <xs:sequence>
+      <xs:element name="_x003C_JobId_x003E_k__BackingField" type="xs:long" />
+      <xs:element name="_x003C_Progress_x003E_k__BackingField" type="xs:double" />
+      <xs:element name="_x003C_Since_x003E_k__BackingField" type="xs:dateTime" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="JobStatus" nillable="true" type="tns:JobStatus" />
+  <xs:simpleType name="StatusCommons.ClientStatusEnum">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Connected" />
+      <xs:enumeration value="Disconnected" />
+      <xs:enumeration value="ConnInterrupted" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="StatusCommons.ClientStatusEnum" nillable="true" type="tns:StatusCommons.ClientStatusEnum" />
+  <xs:complexType name="ConnectionContainer">
+    <xs:sequence>
+      <xs:element name="_x003C_IPAdress_x003E_k__BackingField" nillable="true" type="xs:string" />
+      <xs:element name="_x003C_Port_x003E_k__BackingField" type="xs:int" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ConnectionContainer" nillable="true" type="tns:ConnectionContainer" />
+</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/Reference.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/Reference.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/Reference.cs	(revision 4340)
@@ -0,0 +1,354 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3053
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Client.Console.ClientWCFService {
+    using System.Runtime.Serialization;
+    using System;
+    
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="StatusCommons", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConso" +
+        "leService")]
+    [System.SerializableAttribute()]
+    public partial class StatusCommons : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private System.Guid ClientGuidk__BackingFieldField;
+        
+        private System.DateTime ConnectedSincek__BackingFieldField;
+        
+        private int JobsAbortedk__BackingFieldField;
+        
+        private int JobsDonek__BackingFieldField;
+        
+        private int JobsFetchedk__BackingFieldField;
+        
+        private HeuristicLab.Hive.Client.Console.ClientWCFService.JobStatus[] Jobsk__BackingFieldField;
+        
+        private HeuristicLab.Hive.Client.Console.ClientWCFService.StatusCommons.ClientStatusEnum Statusk__BackingFieldField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Name="<ClientGuid>k__BackingField", IsRequired=true)]
+        public System.Guid ClientGuidk__BackingField {
+            get {
+                return this.ClientGuidk__BackingFieldField;
+            }
+            set {
+                if ((this.ClientGuidk__BackingFieldField.Equals(value) != true)) {
+                    this.ClientGuidk__BackingFieldField = value;
+                    this.RaisePropertyChanged("ClientGuidk__BackingField");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Name="<ConnectedSince>k__BackingField", IsRequired=true)]
+        public System.DateTime ConnectedSincek__BackingField {
+            get {
+                return this.ConnectedSincek__BackingFieldField;
+            }
+            set {
+                if ((this.ConnectedSincek__BackingFieldField.Equals(value) != true)) {
+                    this.ConnectedSincek__BackingFieldField = value;
+                    this.RaisePropertyChanged("ConnectedSincek__BackingField");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Name="<JobsAborted>k__BackingField", IsRequired=true)]
+        public int JobsAbortedk__BackingField {
+            get {
+                return this.JobsAbortedk__BackingFieldField;
+            }
+            set {
+                if ((this.JobsAbortedk__BackingFieldField.Equals(value) != true)) {
+                    this.JobsAbortedk__BackingFieldField = value;
+                    this.RaisePropertyChanged("JobsAbortedk__BackingField");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Name="<JobsDone>k__BackingField", IsRequired=true)]
+        public int JobsDonek__BackingField {
+            get {
+                return this.JobsDonek__BackingFieldField;
+            }
+            set {
+                if ((this.JobsDonek__BackingFieldField.Equals(value) != true)) {
+                    this.JobsDonek__BackingFieldField = value;
+                    this.RaisePropertyChanged("JobsDonek__BackingField");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Name="<JobsFetched>k__BackingField", IsRequired=true)]
+        public int JobsFetchedk__BackingField {
+            get {
+                return this.JobsFetchedk__BackingFieldField;
+            }
+            set {
+                if ((this.JobsFetchedk__BackingFieldField.Equals(value) != true)) {
+                    this.JobsFetchedk__BackingFieldField = value;
+                    this.RaisePropertyChanged("JobsFetchedk__BackingField");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Name="<Jobs>k__BackingField", IsRequired=true)]
+        public HeuristicLab.Hive.Client.Console.ClientWCFService.JobStatus[] Jobsk__BackingField {
+            get {
+                return this.Jobsk__BackingFieldField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.Jobsk__BackingFieldField, value) != true)) {
+                    this.Jobsk__BackingFieldField = value;
+                    this.RaisePropertyChanged("Jobsk__BackingField");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Name="<Status>k__BackingField", IsRequired=true)]
+        public HeuristicLab.Hive.Client.Console.ClientWCFService.StatusCommons.ClientStatusEnum Statusk__BackingField {
+            get {
+                return this.Statusk__BackingFieldField;
+            }
+            set {
+                if ((this.Statusk__BackingFieldField.Equals(value) != true)) {
+                    this.Statusk__BackingFieldField = value;
+                    this.RaisePropertyChanged("Statusk__BackingField");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
+        [System.Runtime.Serialization.DataContractAttribute(Name="StatusCommons.ClientStatusEnum", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConso" +
+            "leService")]
+        public enum ClientStatusEnum : int {
+            
+            [System.Runtime.Serialization.EnumMemberAttribute()]
+            Connected = 0,
+            
+            [System.Runtime.Serialization.EnumMemberAttribute()]
+            Disconnected = 1,
+            
+            [System.Runtime.Serialization.EnumMemberAttribute()]
+            ConnInterrupted = 2,
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="JobStatus", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConso" +
+        "leService")]
+    [System.SerializableAttribute()]
+    public partial class JobStatus : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private long JobIdk__BackingFieldField;
+        
+        private double Progressk__BackingFieldField;
+        
+        private System.DateTime Sincek__BackingFieldField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Name="<JobId>k__BackingField", IsRequired=true)]
+        public long JobIdk__BackingField {
+            get {
+                return this.JobIdk__BackingFieldField;
+            }
+            set {
+                if ((this.JobIdk__BackingFieldField.Equals(value) != true)) {
+                    this.JobIdk__BackingFieldField = value;
+                    this.RaisePropertyChanged("JobIdk__BackingField");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Name="<Progress>k__BackingField", IsRequired=true)]
+        public double Progressk__BackingField {
+            get {
+                return this.Progressk__BackingFieldField;
+            }
+            set {
+                if ((this.Progressk__BackingFieldField.Equals(value) != true)) {
+                    this.Progressk__BackingFieldField = value;
+                    this.RaisePropertyChanged("Progressk__BackingField");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Name="<Since>k__BackingField", IsRequired=true)]
+        public System.DateTime Sincek__BackingField {
+            get {
+                return this.Sincek__BackingFieldField;
+            }
+            set {
+                if ((this.Sincek__BackingFieldField.Equals(value) != true)) {
+                    this.Sincek__BackingFieldField = value;
+                    this.RaisePropertyChanged("Sincek__BackingField");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="ConnectionContainer", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConso" +
+        "leService")]
+    [System.SerializableAttribute()]
+    public partial class ConnectionContainer : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private string IPAdressk__BackingFieldField;
+        
+        private int Portk__BackingFieldField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Name="<IPAdress>k__BackingField", IsRequired=true)]
+        public string IPAdressk__BackingField {
+            get {
+                return this.IPAdressk__BackingFieldField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.IPAdressk__BackingFieldField, value) != true)) {
+                    this.IPAdressk__BackingFieldField = value;
+                    this.RaisePropertyChanged("IPAdressk__BackingField");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Name="<Port>k__BackingField", IsRequired=true)]
+        public int Portk__BackingField {
+            get {
+                return this.Portk__BackingFieldField;
+            }
+            set {
+                if ((this.Portk__BackingFieldField.Equals(value) != true)) {
+                    this.Portk__BackingFieldField = value;
+                    this.RaisePropertyChanged("Portk__BackingField");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="ClientWCFService.IClientConsoleCommunicator")]
+    public interface IClientConsoleCommunicator {
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientConsoleCommunicator/GetStatusInfos", ReplyAction="http://tempuri.org/IClientConsoleCommunicator/GetStatusInfosResponse")]
+        HeuristicLab.Hive.Client.Console.ClientWCFService.StatusCommons GetStatusInfos();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientConsoleCommunicator/GetConnection", ReplyAction="http://tempuri.org/IClientConsoleCommunicator/GetConnectionResponse")]
+        HeuristicLab.Hive.Client.Console.ClientWCFService.ConnectionContainer GetConnection();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientConsoleCommunicator/SetConnection", ReplyAction="http://tempuri.org/IClientConsoleCommunicator/SetConnectionResponse")]
+        void SetConnection(HeuristicLab.Hive.Client.Console.ClientWCFService.ConnectionContainer container);
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    public interface IClientConsoleCommunicatorChannel : HeuristicLab.Hive.Client.Console.ClientWCFService.IClientConsoleCommunicator, System.ServiceModel.IClientChannel {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    public partial class ClientConsoleCommunicatorClient : System.ServiceModel.ClientBase<HeuristicLab.Hive.Client.Console.ClientWCFService.IClientConsoleCommunicator>, HeuristicLab.Hive.Client.Console.ClientWCFService.IClientConsoleCommunicator {
+        
+        public ClientConsoleCommunicatorClient() {
+        }
+        
+        public ClientConsoleCommunicatorClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName) {
+        }
+        
+        public ClientConsoleCommunicatorClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public ClientConsoleCommunicatorClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public ClientConsoleCommunicatorClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress) {
+        }
+        
+        public HeuristicLab.Hive.Client.Console.ClientWCFService.StatusCommons GetStatusInfos() {
+            return base.Channel.GetStatusInfos();
+        }
+        
+        public HeuristicLab.Hive.Client.Console.ClientWCFService.ConnectionContainer GetConnection() {
+            return base.Channel.GetConnection();
+        }
+        
+        public void SetConnection(HeuristicLab.Hive.Client.Console.ClientWCFService.ConnectionContainer container) {
+            base.Channel.SetConnection(container);
+        }
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/Reference.svcmap
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/Reference.svcmap	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/Reference.svcmap	(revision 4340)
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ReferenceGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="9ea57ddc-eea2-4ddf-9d73-9a67a3dd8193" xmlns="urn:schemas-microsoft-com:xml-wcfservicemap">
+  <ClientOptions>
+    <GenerateAsynchronousMethods>false</GenerateAsynchronousMethods>
+    <EnableDataBinding>true</EnableDataBinding>
+    <ExcludedTypes />
+    <ImportXmlTypes>false</ImportXmlTypes>
+    <GenerateInternalTypes>false</GenerateInternalTypes>
+    <GenerateMessageContracts>false</GenerateMessageContracts>
+    <NamespaceMappings />
+    <CollectionMappings />
+    <GenerateSerializableTypes>true</GenerateSerializableTypes>
+    <Serializer>Auto</Serializer>
+    <ReferenceAllAssemblies>true</ReferenceAllAssemblies>
+    <ReferencedAssemblies />
+    <ReferencedDataContractTypes />
+    <ServiceContractMappings />
+  </ClientOptions>
+  <MetadataSources>
+    <MetadataSource Address="net.tcp://127.0.0.1:8000/ClientConsole/mex" Protocol="mex" SourceId="1" />
+  </MetadataSources>
+  <Metadata>
+    <MetadataFile FileName="service.wsdl" MetadataType="Wsdl" ID="5425b0cf-62ce-4ca2-af78-a048e9784640" SourceId="1" SourceUrl="net.tcp://127.0.0.1:8000/ClientConsole/mex" />
+    <MetadataFile FileName="service.xsd" MetadataType="Schema" ID="0d878304-2c0b-4e74-8041-58b12e2da1e9" SourceId="1" SourceUrl="net.tcp://127.0.0.1:8000/ClientConsole/mex" />
+    <MetadataFile FileName="service1.xsd" MetadataType="Schema" ID="6a4352ef-3d11-42ef-8ebf-0c9f0978884b" SourceId="1" SourceUrl="net.tcp://127.0.0.1:8000/ClientConsole/mex" />
+    <MetadataFile FileName="HeuristicLab.Hive.Client.Core.ClientConsoleService.xsd" MetadataType="Schema" ID="af1f5bc1-1eeb-44bd-ad6a-d97746a645e5" SourceId="1" SourceUrl="net.tcp://127.0.0.1:8000/ClientConsole/mex" />
+  </Metadata>
+  <Extensions>
+    <ExtensionFile FileName="configuration91.svcinfo" Name="configuration91.svcinfo" />
+    <ExtensionFile FileName="configuration.svcinfo" Name="configuration.svcinfo" />
+  </Extensions>
+</ReferenceGroup>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/configuration.svcinfo
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/configuration.svcinfo	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/configuration.svcinfo	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<configurationSnapshot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:xml-wcfconfigurationsnapshot">
+  <behaviors />
+  <bindings>
+    <binding digest="System.ServiceModel.Configuration.NetTcpBindingElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data hostNameComparisonMode=&quot;StrongWildcard&quot; listenBacklog=&quot;10&quot; maxBufferSize=&quot;65536&quot; maxConnections=&quot;10&quot; name=&quot;NetTcpBinding_IClientConsoleCommunicator2&quot; transactionFlow=&quot;false&quot; transactionProtocol=&quot;OleTransactions&quot; transferMode=&quot;Buffered&quot;&gt;&lt;readerQuotas maxArrayLength=&quot;16384&quot; maxBytesPerRead=&quot;4096&quot; maxDepth=&quot;32&quot; maxNameTableCharCount=&quot;16384&quot; maxStringContentLength=&quot;8192&quot; /&gt;&lt;reliableSession enabled=&quot;false&quot; inactivityTimeout=&quot;00:10:00&quot; ordered=&quot;true&quot; /&gt;&lt;security mode=&quot;Transport&quot;&gt;&lt;message clientCredentialType=&quot;Windows&quot; /&gt;&lt;transport clientCredentialType=&quot;Windows&quot; protectionLevel=&quot;EncryptAndSign&quot; /&gt;&lt;/security&gt;&lt;/Data&gt;" bindingType="netTcpBinding" name="NetTcpBinding_IClientConsoleCommunicator2" />
+  </bindings>
+  <endpoints>
+    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IClientConsoleCommunicator2&quot; contract=&quot;ClientWCFService.IClientConsoleCommunicator&quot; name=&quot;NetTcpBinding_IClientConsoleCommunicator2&quot;&gt;&lt;identity&gt;&lt;userPrincipalName value=&quot;mse08004@fhs-hagenberg.ac.at&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IClientConsoleCommunicator2&quot; contract=&quot;ClientWCFService.IClientConsoleCommunicator&quot; name=&quot;NetTcpBinding_IClientConsoleCommunicator2&quot;&gt;&lt;identity&gt;&lt;userPrincipalName value=&quot;mse08004@fhs-hagenberg.ac.at&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" contractName="ClientWCFService.IClientConsoleCommunicator" name="NetTcpBinding_IClientConsoleCommunicator2" />
+  </endpoints>
+</configurationSnapshot>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/configuration91.svcinfo
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/configuration91.svcinfo	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/configuration91.svcinfo	(revision 4340)
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="utf-8"?>
+<SavedWcfConfigurationInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="9.1" CheckSum="JNLo0XZb7XeV8gd1Vd1M13/GZZM=">
+  <bindingConfigurations>
+    <bindingConfiguration bindingType="netTcpBinding" name="NetTcpBinding_IClientConsoleCommunicator2">
+      <properties>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IClientConsoleCommunicator2</serializedValue>
+        </property>
+        <property path="/closeTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/openTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/receiveTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/sendTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/transactionFlow" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/transferMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransferMode, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Buffered</serializedValue>
+        </property>
+        <property path="/transactionProtocol" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransactionProtocol, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.OleTransactionsProtocol</serializedValue>
+        </property>
+        <property path="/hostNameComparisonMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HostNameComparisonMode, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>StrongWildcard</serializedValue>
+        </property>
+        <property path="/listenBacklog" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxBufferPoolSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>524288</serializedValue>
+        </property>
+        <property path="/maxBufferSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/maxConnections" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxReceivedMessageSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/portSharingEnabled" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/readerQuotas" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxDepth" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>32</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxStringContentLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>8192</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxArrayLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxBytesPerRead" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>4096</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxNameTableCharCount" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/reliableSession" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement</serializedValue>
+        </property>
+        <property path="/reliableSession/ordered" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/reliableSession/inactivityTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/reliableSession/enabled" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/security" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.NetTcpSecurityElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.NetTcpSecurityElement</serializedValue>
+        </property>
+        <property path="/security/mode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.SecurityMode, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Transport</serializedValue>
+        </property>
+        <property path="/security/transport" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.TcpTransportSecurityElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.TcpTransportSecurityElement</serializedValue>
+        </property>
+        <property path="/security/transport/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TcpClientCredentialType, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/transport/protectionLevel" isComplexType="false" isExplicitlyDefined="true" clrType="System.Net.Security.ProtectionLevel, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>EncryptAndSign</serializedValue>
+        </property>
+        <property path="/security/message" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.MessageSecurityOverTcpElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.MessageSecurityOverTcpElement</serializedValue>
+        </property>
+        <property path="/security/message/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.MessageCredentialType, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/message/algorithmSuite" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.Security.SecurityAlgorithmSuite, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Basic256</serializedValue>
+        </property>
+      </properties>
+    </bindingConfiguration>
+  </bindingConfigurations>
+  <endpoints>
+    <endpoint name="NetTcpBinding_IClientConsoleCommunicator2" contract="ClientWCFService.IClientConsoleCommunicator" bindingType="netTcpBinding" address="net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator" bindingConfiguration="NetTcpBinding_IClientConsoleCommunicator2">
+      <properties>
+        <property path="/address" isComplexType="false" isExplicitlyDefined="true" clrType="System.Uri, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator</serializedValue>
+        </property>
+        <property path="/behaviorConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/binding" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>netTcpBinding</serializedValue>
+        </property>
+        <property path="/bindingConfiguration" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IClientConsoleCommunicator2</serializedValue>
+        </property>
+        <property path="/contract" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>ClientWCFService.IClientConsoleCommunicator</serializedValue>
+        </property>
+        <property path="/headers" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.AddressHeaderCollectionElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.AddressHeaderCollectionElement</serializedValue>
+        </property>
+        <property path="/headers/headers" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Channels.AddressHeaderCollection, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>&lt;Header /&gt;</serializedValue>
+        </property>
+        <property path="/identity" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.IdentityElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.IdentityElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.UserPrincipalNameElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.UserPrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>mse08004@fhs-hagenberg.ac.at</serializedValue>
+        </property>
+        <property path="/identity/servicePrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.ServicePrincipalNameElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.ServicePrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/servicePrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/dns" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.DnsElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.DnsElement</serializedValue>
+        </property>
+        <property path="/identity/dns/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/rsa" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.RsaElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.RsaElement</serializedValue>
+        </property>
+        <property path="/identity/rsa/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificate" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateElement</serializedValue>
+        </property>
+        <property path="/identity/certificate/encodedValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateReferenceElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateReferenceElement</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeName" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreName, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>My</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeLocation" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreLocation, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>LocalMachine</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/x509FindType" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.X509FindType, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>FindBySubjectDistinguishedName</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/findValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference/isChainIncluded" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IClientConsoleCommunicator2</serializedValue>
+        </property>
+      </properties>
+    </endpoint>
+  </endpoints>
+</SavedWcfConfigurationInformation>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/service.wsdl
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/service.wsdl	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/service.wsdl	(revision 4340)
@@ -0,0 +1,118 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:tns="http://tempuri.org/" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" name="ClientConsoleCommunicator" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+  <wsp:Policy wsu:Id="NetTcpBinding_IClientConsoleCommunicator_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <msb:BinaryEncoding xmlns:msb="http://schemas.microsoft.com/ws/06/2004/mspolicy/netbinary1">
+        </msb:BinaryEncoding>
+        <sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:TransportToken>
+              <wsp:Policy>
+                <msf:WindowsTransportSecurity xmlns:msf="http://schemas.microsoft.com/ws/2006/05/framing/policy">
+                  <msf:ProtectionLevel>EncryptAndSign</msf:ProtectionLevel>
+                </msf:WindowsTransportSecurity>
+              </wsp:Policy>
+            </sp:TransportToken>
+            <sp:AlgorithmSuite>
+              <wsp:Policy>
+                <sp:Basic256>
+                </sp:Basic256>
+              </wsp:Policy>
+            </sp:AlgorithmSuite>
+            <sp:Layout>
+              <wsp:Policy>
+                <sp:Strict>
+                </sp:Strict>
+              </wsp:Policy>
+            </sp:Layout>
+          </wsp:Policy>
+        </sp:TransportBinding>
+        <wsaw:UsingAddressing>
+        </wsaw:UsingAddressing>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsdl:types>
+    <xsd:schema targetNamespace="http://tempuri.org/Imports">
+      <xsd:import namespace="http://tempuri.org/" />
+      <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConsoleService" />
+    </xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="IClientConsoleCommunicator_GetStatusInfos_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetStatusInfos" />
+  </wsdl:message>
+  <wsdl:message name="IClientConsoleCommunicator_GetStatusInfos_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetStatusInfosResponse" />
+  </wsdl:message>
+  <wsdl:message name="IClientConsoleCommunicator_GetConnection_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetConnection" />
+  </wsdl:message>
+  <wsdl:message name="IClientConsoleCommunicator_GetConnection_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetConnectionResponse" />
+  </wsdl:message>
+  <wsdl:message name="IClientConsoleCommunicator_SetConnection_InputMessage">
+    <wsdl:part name="parameters" element="tns:SetConnection" />
+  </wsdl:message>
+  <wsdl:message name="IClientConsoleCommunicator_SetConnection_OutputMessage">
+    <wsdl:part name="parameters" element="tns:SetConnectionResponse" />
+  </wsdl:message>
+  <wsdl:portType name="IClientConsoleCommunicator">
+    <wsdl:operation name="GetStatusInfos">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientConsoleCommunicator/GetStatusInfos" message="tns:IClientConsoleCommunicator_GetStatusInfos_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientConsoleCommunicator/GetStatusInfosResponse" message="tns:IClientConsoleCommunicator_GetStatusInfos_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="GetConnection">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientConsoleCommunicator/GetConnection" message="tns:IClientConsoleCommunicator_GetConnection_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientConsoleCommunicator/GetConnectionResponse" message="tns:IClientConsoleCommunicator_GetConnection_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="SetConnection">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientConsoleCommunicator/SetConnection" message="tns:IClientConsoleCommunicator_SetConnection_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientConsoleCommunicator/SetConnectionResponse" message="tns:IClientConsoleCommunicator_SetConnection_OutputMessage" />
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="NetTcpBinding_IClientConsoleCommunicator" type="tns:IClientConsoleCommunicator">
+    <wsp:PolicyReference URI="#NetTcpBinding_IClientConsoleCommunicator_policy">
+    </wsp:PolicyReference>
+    <soap12:binding transport="http://schemas.microsoft.com/soap/tcp" />
+    <wsdl:operation name="GetStatusInfos">
+      <soap12:operation soapAction="http://tempuri.org/IClientConsoleCommunicator/GetStatusInfos" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetConnection">
+      <soap12:operation soapAction="http://tempuri.org/IClientConsoleCommunicator/GetConnection" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="SetConnection">
+      <soap12:operation soapAction="http://tempuri.org/IClientConsoleCommunicator/SetConnection" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="ClientConsoleCommunicator">
+    <wsdl:port name="NetTcpBinding_IClientConsoleCommunicator" binding="tns:NetTcpBinding_IClientConsoleCommunicator">
+      <soap12:address location="net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator" />
+      <wsa10:EndpointReference>
+        <wsa10:Address>net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator</wsa10:Address>
+        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
+          <Upn>mse08004@fhs-hagenberg.ac.at</Upn>
+        </Identity>
+      </wsa10:EndpointReference>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/service.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/service.xsd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/service.xsd	(revision 4340)
@@ -0,0 +1,40 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://tempuri.org/" elementFormDefault="qualified" targetNamespace="http://tempuri.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConsoleService" />
+  <xs:element name="GetStatusInfos">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetStatusInfosResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConsoleService" minOccurs="0" name="GetStatusInfosResult" nillable="true" type="q1:StatusCommons" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetConnection">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetConnectionResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConsoleService" minOccurs="0" name="GetConnectionResult" nillable="true" type="q2:ConnectionContainer" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SetConnection">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q3="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConsoleService" minOccurs="0" name="container" nillable="true" type="q3:ConnectionContainer" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SetConnectionResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/service1.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/service1.xsd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/ClientWCFService/service1.xsd	(revision 4340)
@@ -0,0 +1,42 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="anyType" nillable="true" type="xs:anyType" />
+  <xs:element name="anyURI" nillable="true" type="xs:anyURI" />
+  <xs:element name="base64Binary" nillable="true" type="xs:base64Binary" />
+  <xs:element name="boolean" nillable="true" type="xs:boolean" />
+  <xs:element name="byte" nillable="true" type="xs:byte" />
+  <xs:element name="dateTime" nillable="true" type="xs:dateTime" />
+  <xs:element name="decimal" nillable="true" type="xs:decimal" />
+  <xs:element name="double" nillable="true" type="xs:double" />
+  <xs:element name="float" nillable="true" type="xs:float" />
+  <xs:element name="int" nillable="true" type="xs:int" />
+  <xs:element name="long" nillable="true" type="xs:long" />
+  <xs:element name="QName" nillable="true" type="xs:QName" />
+  <xs:element name="short" nillable="true" type="xs:short" />
+  <xs:element name="string" nillable="true" type="xs:string" />
+  <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" />
+  <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" />
+  <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" />
+  <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" />
+  <xs:element name="char" nillable="true" type="tns:char" />
+  <xs:simpleType name="char">
+    <xs:restriction base="xs:int" />
+  </xs:simpleType>
+  <xs:element name="duration" nillable="true" type="tns:duration" />
+  <xs:simpleType name="duration">
+    <xs:restriction base="xs:duration">
+      <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" />
+      <xs:minInclusive value="-P10675199DT2H48M5.4775808S" />
+      <xs:maxInclusive value="P10675199DT2H48M5.4775807S" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="guid" nillable="true" type="tns:guid" />
+  <xs:simpleType name="guid">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:attribute name="FactoryType" type="xs:QName" />
+  <xs:attribute name="Id" type="xs:ID" />
+  <xs:attribute name="Ref" type="xs:IDREF" />
+</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/HeuristicLab.Calendar.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/HeuristicLab.Calendar.xsd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/HeuristicLab.Calendar.xsd	(revision 4340)
@@ -0,0 +1,32 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Calendar" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Calendar" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/System.Drawing" />
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:complexType name="ArrayOfAppointment">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="Appointment" nillable="true" type="tns:Appointment" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfAppointment" nillable="true" type="tns:ArrayOfAppointment" />
+  <xs:complexType name="Appointment">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="AllDayEvent" type="xs:boolean" />
+      <xs:element minOccurs="0" name="AppointmentId" type="xs:int" />
+      <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/System.Drawing" minOccurs="0" name="BorderColor" type="q1:Color" />
+      <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/System.Drawing" minOccurs="0" name="Color" type="q2:Color" />
+      <xs:element minOccurs="0" name="DrawBorder" type="xs:boolean" />
+      <xs:element minOccurs="0" name="EndDate" type="xs:dateTime" />
+      <xs:element minOccurs="0" name="Group" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Layer" type="xs:int" />
+      <xs:element minOccurs="0" name="Location" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Locked" type="xs:boolean" />
+      <xs:element minOccurs="0" name="Note" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Recurring" type="xs:boolean" />
+      <xs:element minOccurs="0" name="RecurringId" type="ser:guid" />
+      <xs:element minOccurs="0" name="StartDate" type="xs:dateTime" />
+      <xs:element minOccurs="0" name="Subject" nillable="true" type="xs:string" />
+      <xs:element xmlns:q3="http://schemas.datacontract.org/2004/07/System.Drawing" minOccurs="0" name="TextColor" type="q3:Color" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="Appointment" nillable="true" type="tns:Appointment" />
+</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/HeuristicLab.Hive.Slave.Common.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/HeuristicLab.Hive.Slave.Common.xsd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/HeuristicLab.Hive.Slave.Common.xsd	(revision 4340)
@@ -0,0 +1,11 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Slave.Common" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Slave.Common" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:simpleType name="NetworkEnum.WcfConnState">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Connected" />
+      <xs:enumeration value="Disconnected" />
+      <xs:enumeration value="Failed" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="NetworkEnum.WcfConnState" nillable="true" type="tns:NetworkEnum.WcfConnState" />
+</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/HeuristicLab.Hive.Slave.Console.SlaveConsoleService.ConnectionContainer.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/HeuristicLab.Hive.Slave.Console.SlaveConsoleService.ConnectionContainer.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/HeuristicLab.Hive.Slave.Console.SlaveConsoleService.ConnectionContainer.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="ConnectionContainer" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Slave.Console.SlaveConsoleService.ConnectionContainer, Service References.SlaveConsoleService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/HeuristicLab.Hive.Slave.Console.SlaveConsoleService.StatusCommons.datasource
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/HeuristicLab.Hive.Slave.Console.SlaveConsoleService.StatusCommons.datasource	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/HeuristicLab.Hive.Slave.Console.SlaveConsoleService.StatusCommons.datasource	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="StatusCommons" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Slave.Console.SlaveConsoleService.StatusCommons, Service References.SlaveConsoleService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/HeuristicLab.Hive.Slave.Core.SlaveConsoleService.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/HeuristicLab.Hive.Slave.Core.SlaveConsoleService.xsd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/HeuristicLab.Hive.Slave.Core.SlaveConsoleService.xsd	(revision 4340)
@@ -0,0 +1,39 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Slave.Core.SlaveConsoleService" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Slave.Core.SlaveConsoleService" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Slave.Common" />
+  <xs:complexType name="StatusCommons">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ClientGuid" type="ser:guid" />
+      <xs:element minOccurs="0" name="ConnectedSince" type="xs:dateTime" />
+      <xs:element minOccurs="0" name="FreeCores" type="xs:int" />
+      <xs:element minOccurs="0" name="Jobs" nillable="true" type="tns:ArrayOfJobStatus" />
+      <xs:element minOccurs="0" name="JobsAborted" type="xs:int" />
+      <xs:element minOccurs="0" name="JobsDone" type="xs:int" />
+      <xs:element minOccurs="0" name="JobsFetched" type="xs:int" />
+      <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Slave.Common" minOccurs="0" name="Status" type="q1:NetworkEnum.WcfConnState" />
+      <xs:element minOccurs="0" name="TotalCores" type="xs:int" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="StatusCommons" nillable="true" type="tns:StatusCommons" />
+  <xs:complexType name="ArrayOfJobStatus">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="JobStatus" nillable="true" type="tns:JobStatus" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfJobStatus" nillable="true" type="tns:ArrayOfJobStatus" />
+  <xs:complexType name="JobStatus">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="JobId" type="ser:guid" />
+      <xs:element minOccurs="0" name="Progress" type="xs:double" />
+      <xs:element minOccurs="0" name="Since" type="xs:dateTime" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="JobStatus" nillable="true" type="tns:JobStatus" />
+  <xs:complexType name="ConnectionContainer">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="IPAdress" nillable="true" type="xs:string" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ConnectionContainer" nillable="true" type="tns:ConnectionContainer" />
+</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/Reference.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/Reference.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/Reference.cs	(revision 4340)
@@ -0,0 +1,865 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Slave.Console.SlaveConsoleService {
+    using System.Runtime.Serialization;
+    using System;
+    
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="StatusCommons", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Slave.Core.SlaveConsole" +
+        "Service")]
+    [System.SerializableAttribute()]
+    public partial class StatusCommons : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid ClientGuidField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.DateTime ConnectedSinceField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int FreeCoresField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.Hive.Slave.Console.SlaveConsoleService.JobStatus[] JobsField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int JobsAbortedField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int JobsDoneField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int JobsFetchedField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.Hive.Slave.Console.SlaveConsoleService.NetworkEnumWcfConnState StatusField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int TotalCoresField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid ClientGuid {
+            get {
+                return this.ClientGuidField;
+            }
+            set {
+                if ((this.ClientGuidField.Equals(value) != true)) {
+                    this.ClientGuidField = value;
+                    this.RaisePropertyChanged("ClientGuid");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.DateTime ConnectedSince {
+            get {
+                return this.ConnectedSinceField;
+            }
+            set {
+                if ((this.ConnectedSinceField.Equals(value) != true)) {
+                    this.ConnectedSinceField = value;
+                    this.RaisePropertyChanged("ConnectedSince");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int FreeCores {
+            get {
+                return this.FreeCoresField;
+            }
+            set {
+                if ((this.FreeCoresField.Equals(value) != true)) {
+                    this.FreeCoresField = value;
+                    this.RaisePropertyChanged("FreeCores");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Hive.Slave.Console.SlaveConsoleService.JobStatus[] Jobs {
+            get {
+                return this.JobsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.JobsField, value) != true)) {
+                    this.JobsField = value;
+                    this.RaisePropertyChanged("Jobs");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int JobsAborted {
+            get {
+                return this.JobsAbortedField;
+            }
+            set {
+                if ((this.JobsAbortedField.Equals(value) != true)) {
+                    this.JobsAbortedField = value;
+                    this.RaisePropertyChanged("JobsAborted");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int JobsDone {
+            get {
+                return this.JobsDoneField;
+            }
+            set {
+                if ((this.JobsDoneField.Equals(value) != true)) {
+                    this.JobsDoneField = value;
+                    this.RaisePropertyChanged("JobsDone");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int JobsFetched {
+            get {
+                return this.JobsFetchedField;
+            }
+            set {
+                if ((this.JobsFetchedField.Equals(value) != true)) {
+                    this.JobsFetchedField = value;
+                    this.RaisePropertyChanged("JobsFetched");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Hive.Slave.Console.SlaveConsoleService.NetworkEnumWcfConnState Status {
+            get {
+                return this.StatusField;
+            }
+            set {
+                if ((this.StatusField.Equals(value) != true)) {
+                    this.StatusField = value;
+                    this.RaisePropertyChanged("Status");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int TotalCores {
+            get {
+                return this.TotalCoresField;
+            }
+            set {
+                if ((this.TotalCoresField.Equals(value) != true)) {
+                    this.TotalCoresField = value;
+                    this.RaisePropertyChanged("TotalCores");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="JobStatus", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Slave.Core.SlaveConsole" +
+        "Service")]
+    [System.SerializableAttribute()]
+    public partial class JobStatus : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid JobIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private double ProgressField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.DateTime SinceField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid JobId {
+            get {
+                return this.JobIdField;
+            }
+            set {
+                if ((this.JobIdField.Equals(value) != true)) {
+                    this.JobIdField = value;
+                    this.RaisePropertyChanged("JobId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public double Progress {
+            get {
+                return this.ProgressField;
+            }
+            set {
+                if ((this.ProgressField.Equals(value) != true)) {
+                    this.ProgressField = value;
+                    this.RaisePropertyChanged("Progress");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.DateTime Since {
+            get {
+                return this.SinceField;
+            }
+            set {
+                if ((this.SinceField.Equals(value) != true)) {
+                    this.SinceField = value;
+                    this.RaisePropertyChanged("Since");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="NetworkEnum.WcfConnState", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Slave.Common")]
+    public enum NetworkEnumWcfConnState : int {
+        
+        [System.Runtime.Serialization.EnumMemberAttribute()]
+        Connected = 0,
+        
+        [System.Runtime.Serialization.EnumMemberAttribute()]
+        Disconnected = 1,
+        
+        [System.Runtime.Serialization.EnumMemberAttribute()]
+        Failed = 2,
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="ConnectionContainer", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Slave.Core.SlaveConsole" +
+        "Service")]
+    [System.SerializableAttribute()]
+    public partial class ConnectionContainer : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string IPAdressField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string IPAdress {
+            get {
+                return this.IPAdressField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.IPAdressField, value) != true)) {
+                    this.IPAdressField = value;
+                    this.RaisePropertyChanged("IPAdress");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="SlaveConsoleService.ISlaveConsoleCommunicator")]
+    public interface ISlaveConsoleCommunicator {
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveConsoleCommunicator/GetStatusInfos", ReplyAction="http://tempuri.org/ISlaveConsoleCommunicator/GetStatusInfosResponse")]
+        HeuristicLab.Hive.Slave.Console.SlaveConsoleService.StatusCommons GetStatusInfos();
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveConsoleCommunicator/GetStatusInfos", ReplyAction="http://tempuri.org/ISlaveConsoleCommunicator/GetStatusInfosResponse")]
+        System.IAsyncResult BeginGetStatusInfos(System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Slave.Console.SlaveConsoleService.StatusCommons EndGetStatusInfos(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveConsoleCommunicator/SetConnection", ReplyAction="http://tempuri.org/ISlaveConsoleCommunicator/SetConnectionResponse")]
+        void SetConnection(HeuristicLab.Hive.Slave.Console.SlaveConsoleService.ConnectionContainer container);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveConsoleCommunicator/SetConnection", ReplyAction="http://tempuri.org/ISlaveConsoleCommunicator/SetConnectionResponse")]
+        System.IAsyncResult BeginSetConnection(HeuristicLab.Hive.Slave.Console.SlaveConsoleService.ConnectionContainer container, System.AsyncCallback callback, object asyncState);
+        
+        void EndSetConnection(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveConsoleCommunicator/Disconnect", ReplyAction="http://tempuri.org/ISlaveConsoleCommunicator/DisconnectResponse")]
+        void Disconnect();
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveConsoleCommunicator/Disconnect", ReplyAction="http://tempuri.org/ISlaveConsoleCommunicator/DisconnectResponse")]
+        System.IAsyncResult BeginDisconnect(System.AsyncCallback callback, object asyncState);
+        
+        void EndDisconnect(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveConsoleCommunicator/GetCurrentConnection", ReplyAction="http://tempuri.org/ISlaveConsoleCommunicator/GetCurrentConnectionResponse")]
+        HeuristicLab.Hive.Slave.Console.SlaveConsoleService.ConnectionContainer GetCurrentConnection();
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveConsoleCommunicator/GetCurrentConnection", ReplyAction="http://tempuri.org/ISlaveConsoleCommunicator/GetCurrentConnectionResponse")]
+        System.IAsyncResult BeginGetCurrentConnection(System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Slave.Console.SlaveConsoleService.ConnectionContainer EndGetCurrentConnection(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveConsoleCommunicator/ShutdownClient", ReplyAction="http://tempuri.org/ISlaveConsoleCommunicator/ShutdownClientResponse")]
+        void ShutdownClient();
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveConsoleCommunicator/ShutdownClient", ReplyAction="http://tempuri.org/ISlaveConsoleCommunicator/ShutdownClientResponse")]
+        System.IAsyncResult BeginShutdownClient(System.AsyncCallback callback, object asyncState);
+        
+        void EndShutdownClient(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveConsoleCommunicator/SetUptimeCalendar", ReplyAction="http://tempuri.org/ISlaveConsoleCommunicator/SetUptimeCalendarResponse")]
+        void SetUptimeCalendar(HeuristicLab.Calendar.Appointment[] appointments);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveConsoleCommunicator/SetUptimeCalendar", ReplyAction="http://tempuri.org/ISlaveConsoleCommunicator/SetUptimeCalendarResponse")]
+        System.IAsyncResult BeginSetUptimeCalendar(HeuristicLab.Calendar.Appointment[] appointments, System.AsyncCallback callback, object asyncState);
+        
+        void EndSetUptimeCalendar(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ISlaveConsoleCommunicator/GetUptimeCalendar", ReplyAction="http://tempuri.org/ISlaveConsoleCommunicator/GetUptimeCalendarResponse")]
+        HeuristicLab.Calendar.Appointment[] GetUptimeCalendar();
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/ISlaveConsoleCommunicator/GetUptimeCalendar", ReplyAction="http://tempuri.org/ISlaveConsoleCommunicator/GetUptimeCalendarResponse")]
+        System.IAsyncResult BeginGetUptimeCalendar(System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Calendar.Appointment[] EndGetUptimeCalendar(System.IAsyncResult result);
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public interface ISlaveConsoleCommunicatorChannel : HeuristicLab.Hive.Slave.Console.SlaveConsoleService.ISlaveConsoleCommunicator, System.ServiceModel.IClientChannel {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class GetStatusInfosCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public GetStatusInfosCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Slave.Console.SlaveConsoleService.StatusCommons Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Slave.Console.SlaveConsoleService.StatusCommons)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class GetCurrentConnectionCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public GetCurrentConnectionCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Slave.Console.SlaveConsoleService.ConnectionContainer Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Slave.Console.SlaveConsoleService.ConnectionContainer)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class GetUptimeCalendarCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public GetUptimeCalendarCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Calendar.Appointment[] Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Calendar.Appointment[])(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class SlaveConsoleCommunicatorClient : System.ServiceModel.ClientBase<HeuristicLab.Hive.Slave.Console.SlaveConsoleService.ISlaveConsoleCommunicator>, HeuristicLab.Hive.Slave.Console.SlaveConsoleService.ISlaveConsoleCommunicator {
+        
+        private BeginOperationDelegate onBeginGetStatusInfosDelegate;
+        
+        private EndOperationDelegate onEndGetStatusInfosDelegate;
+        
+        private System.Threading.SendOrPostCallback onGetStatusInfosCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginSetConnectionDelegate;
+        
+        private EndOperationDelegate onEndSetConnectionDelegate;
+        
+        private System.Threading.SendOrPostCallback onSetConnectionCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginDisconnectDelegate;
+        
+        private EndOperationDelegate onEndDisconnectDelegate;
+        
+        private System.Threading.SendOrPostCallback onDisconnectCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginGetCurrentConnectionDelegate;
+        
+        private EndOperationDelegate onEndGetCurrentConnectionDelegate;
+        
+        private System.Threading.SendOrPostCallback onGetCurrentConnectionCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginShutdownClientDelegate;
+        
+        private EndOperationDelegate onEndShutdownClientDelegate;
+        
+        private System.Threading.SendOrPostCallback onShutdownClientCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginSetUptimeCalendarDelegate;
+        
+        private EndOperationDelegate onEndSetUptimeCalendarDelegate;
+        
+        private System.Threading.SendOrPostCallback onSetUptimeCalendarCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginGetUptimeCalendarDelegate;
+        
+        private EndOperationDelegate onEndGetUptimeCalendarDelegate;
+        
+        private System.Threading.SendOrPostCallback onGetUptimeCalendarCompletedDelegate;
+        
+        public SlaveConsoleCommunicatorClient() {
+        }
+        
+        public SlaveConsoleCommunicatorClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName) {
+        }
+        
+        public SlaveConsoleCommunicatorClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public SlaveConsoleCommunicatorClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public SlaveConsoleCommunicatorClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress) {
+        }
+        
+        public event System.EventHandler<GetStatusInfosCompletedEventArgs> GetStatusInfosCompleted;
+        
+        public event System.EventHandler<System.ComponentModel.AsyncCompletedEventArgs> SetConnectionCompleted;
+        
+        public event System.EventHandler<System.ComponentModel.AsyncCompletedEventArgs> DisconnectCompleted;
+        
+        public event System.EventHandler<GetCurrentConnectionCompletedEventArgs> GetCurrentConnectionCompleted;
+        
+        public event System.EventHandler<System.ComponentModel.AsyncCompletedEventArgs> ShutdownClientCompleted;
+        
+        public event System.EventHandler<System.ComponentModel.AsyncCompletedEventArgs> SetUptimeCalendarCompleted;
+        
+        public event System.EventHandler<GetUptimeCalendarCompletedEventArgs> GetUptimeCalendarCompleted;
+        
+        public HeuristicLab.Hive.Slave.Console.SlaveConsoleService.StatusCommons GetStatusInfos() {
+            return base.Channel.GetStatusInfos();
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginGetStatusInfos(System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginGetStatusInfos(callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Slave.Console.SlaveConsoleService.StatusCommons EndGetStatusInfos(System.IAsyncResult result) {
+            return base.Channel.EndGetStatusInfos(result);
+        }
+        
+        private System.IAsyncResult OnBeginGetStatusInfos(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            return this.BeginGetStatusInfos(callback, asyncState);
+        }
+        
+        private object[] OnEndGetStatusInfos(System.IAsyncResult result) {
+            HeuristicLab.Hive.Slave.Console.SlaveConsoleService.StatusCommons retVal = this.EndGetStatusInfos(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnGetStatusInfosCompleted(object state) {
+            if ((this.GetStatusInfosCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.GetStatusInfosCompleted(this, new GetStatusInfosCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void GetStatusInfosAsync() {
+            this.GetStatusInfosAsync(null);
+        }
+        
+        public void GetStatusInfosAsync(object userState) {
+            if ((this.onBeginGetStatusInfosDelegate == null)) {
+                this.onBeginGetStatusInfosDelegate = new BeginOperationDelegate(this.OnBeginGetStatusInfos);
+            }
+            if ((this.onEndGetStatusInfosDelegate == null)) {
+                this.onEndGetStatusInfosDelegate = new EndOperationDelegate(this.OnEndGetStatusInfos);
+            }
+            if ((this.onGetStatusInfosCompletedDelegate == null)) {
+                this.onGetStatusInfosCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnGetStatusInfosCompleted);
+            }
+            base.InvokeAsync(this.onBeginGetStatusInfosDelegate, null, this.onEndGetStatusInfosDelegate, this.onGetStatusInfosCompletedDelegate, userState);
+        }
+        
+        public void SetConnection(HeuristicLab.Hive.Slave.Console.SlaveConsoleService.ConnectionContainer container) {
+            base.Channel.SetConnection(container);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginSetConnection(HeuristicLab.Hive.Slave.Console.SlaveConsoleService.ConnectionContainer container, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginSetConnection(container, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public void EndSetConnection(System.IAsyncResult result) {
+            base.Channel.EndSetConnection(result);
+        }
+        
+        private System.IAsyncResult OnBeginSetConnection(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            HeuristicLab.Hive.Slave.Console.SlaveConsoleService.ConnectionContainer container = ((HeuristicLab.Hive.Slave.Console.SlaveConsoleService.ConnectionContainer)(inValues[0]));
+            return this.BeginSetConnection(container, callback, asyncState);
+        }
+        
+        private object[] OnEndSetConnection(System.IAsyncResult result) {
+            this.EndSetConnection(result);
+            return null;
+        }
+        
+        private void OnSetConnectionCompleted(object state) {
+            if ((this.SetConnectionCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.SetConnectionCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void SetConnectionAsync(HeuristicLab.Hive.Slave.Console.SlaveConsoleService.ConnectionContainer container) {
+            this.SetConnectionAsync(container, null);
+        }
+        
+        public void SetConnectionAsync(HeuristicLab.Hive.Slave.Console.SlaveConsoleService.ConnectionContainer container, object userState) {
+            if ((this.onBeginSetConnectionDelegate == null)) {
+                this.onBeginSetConnectionDelegate = new BeginOperationDelegate(this.OnBeginSetConnection);
+            }
+            if ((this.onEndSetConnectionDelegate == null)) {
+                this.onEndSetConnectionDelegate = new EndOperationDelegate(this.OnEndSetConnection);
+            }
+            if ((this.onSetConnectionCompletedDelegate == null)) {
+                this.onSetConnectionCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnSetConnectionCompleted);
+            }
+            base.InvokeAsync(this.onBeginSetConnectionDelegate, new object[] {
+                        container}, this.onEndSetConnectionDelegate, this.onSetConnectionCompletedDelegate, userState);
+        }
+        
+        public void Disconnect() {
+            base.Channel.Disconnect();
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginDisconnect(System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginDisconnect(callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public void EndDisconnect(System.IAsyncResult result) {
+            base.Channel.EndDisconnect(result);
+        }
+        
+        private System.IAsyncResult OnBeginDisconnect(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            return this.BeginDisconnect(callback, asyncState);
+        }
+        
+        private object[] OnEndDisconnect(System.IAsyncResult result) {
+            this.EndDisconnect(result);
+            return null;
+        }
+        
+        private void OnDisconnectCompleted(object state) {
+            if ((this.DisconnectCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.DisconnectCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void DisconnectAsync() {
+            this.DisconnectAsync(null);
+        }
+        
+        public void DisconnectAsync(object userState) {
+            if ((this.onBeginDisconnectDelegate == null)) {
+                this.onBeginDisconnectDelegate = new BeginOperationDelegate(this.OnBeginDisconnect);
+            }
+            if ((this.onEndDisconnectDelegate == null)) {
+                this.onEndDisconnectDelegate = new EndOperationDelegate(this.OnEndDisconnect);
+            }
+            if ((this.onDisconnectCompletedDelegate == null)) {
+                this.onDisconnectCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnDisconnectCompleted);
+            }
+            base.InvokeAsync(this.onBeginDisconnectDelegate, null, this.onEndDisconnectDelegate, this.onDisconnectCompletedDelegate, userState);
+        }
+        
+        public HeuristicLab.Hive.Slave.Console.SlaveConsoleService.ConnectionContainer GetCurrentConnection() {
+            return base.Channel.GetCurrentConnection();
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginGetCurrentConnection(System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginGetCurrentConnection(callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Slave.Console.SlaveConsoleService.ConnectionContainer EndGetCurrentConnection(System.IAsyncResult result) {
+            return base.Channel.EndGetCurrentConnection(result);
+        }
+        
+        private System.IAsyncResult OnBeginGetCurrentConnection(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            return this.BeginGetCurrentConnection(callback, asyncState);
+        }
+        
+        private object[] OnEndGetCurrentConnection(System.IAsyncResult result) {
+            HeuristicLab.Hive.Slave.Console.SlaveConsoleService.ConnectionContainer retVal = this.EndGetCurrentConnection(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnGetCurrentConnectionCompleted(object state) {
+            if ((this.GetCurrentConnectionCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.GetCurrentConnectionCompleted(this, new GetCurrentConnectionCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void GetCurrentConnectionAsync() {
+            this.GetCurrentConnectionAsync(null);
+        }
+        
+        public void GetCurrentConnectionAsync(object userState) {
+            if ((this.onBeginGetCurrentConnectionDelegate == null)) {
+                this.onBeginGetCurrentConnectionDelegate = new BeginOperationDelegate(this.OnBeginGetCurrentConnection);
+            }
+            if ((this.onEndGetCurrentConnectionDelegate == null)) {
+                this.onEndGetCurrentConnectionDelegate = new EndOperationDelegate(this.OnEndGetCurrentConnection);
+            }
+            if ((this.onGetCurrentConnectionCompletedDelegate == null)) {
+                this.onGetCurrentConnectionCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnGetCurrentConnectionCompleted);
+            }
+            base.InvokeAsync(this.onBeginGetCurrentConnectionDelegate, null, this.onEndGetCurrentConnectionDelegate, this.onGetCurrentConnectionCompletedDelegate, userState);
+        }
+        
+        public void ShutdownClient() {
+            base.Channel.ShutdownClient();
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginShutdownClient(System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginShutdownClient(callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public void EndShutdownClient(System.IAsyncResult result) {
+            base.Channel.EndShutdownClient(result);
+        }
+        
+        private System.IAsyncResult OnBeginShutdownClient(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            return this.BeginShutdownClient(callback, asyncState);
+        }
+        
+        private object[] OnEndShutdownClient(System.IAsyncResult result) {
+            this.EndShutdownClient(result);
+            return null;
+        }
+        
+        private void OnShutdownClientCompleted(object state) {
+            if ((this.ShutdownClientCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.ShutdownClientCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void ShutdownClientAsync() {
+            this.ShutdownClientAsync(null);
+        }
+        
+        public void ShutdownClientAsync(object userState) {
+            if ((this.onBeginShutdownClientDelegate == null)) {
+                this.onBeginShutdownClientDelegate = new BeginOperationDelegate(this.OnBeginShutdownClient);
+            }
+            if ((this.onEndShutdownClientDelegate == null)) {
+                this.onEndShutdownClientDelegate = new EndOperationDelegate(this.OnEndShutdownClient);
+            }
+            if ((this.onShutdownClientCompletedDelegate == null)) {
+                this.onShutdownClientCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnShutdownClientCompleted);
+            }
+            base.InvokeAsync(this.onBeginShutdownClientDelegate, null, this.onEndShutdownClientDelegate, this.onShutdownClientCompletedDelegate, userState);
+        }
+        
+        public void SetUptimeCalendar(HeuristicLab.Calendar.Appointment[] appointments) {
+            base.Channel.SetUptimeCalendar(appointments);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginSetUptimeCalendar(HeuristicLab.Calendar.Appointment[] appointments, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginSetUptimeCalendar(appointments, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public void EndSetUptimeCalendar(System.IAsyncResult result) {
+            base.Channel.EndSetUptimeCalendar(result);
+        }
+        
+        private System.IAsyncResult OnBeginSetUptimeCalendar(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            HeuristicLab.Calendar.Appointment[] appointments = ((HeuristicLab.Calendar.Appointment[])(inValues[0]));
+            return this.BeginSetUptimeCalendar(appointments, callback, asyncState);
+        }
+        
+        private object[] OnEndSetUptimeCalendar(System.IAsyncResult result) {
+            this.EndSetUptimeCalendar(result);
+            return null;
+        }
+        
+        private void OnSetUptimeCalendarCompleted(object state) {
+            if ((this.SetUptimeCalendarCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.SetUptimeCalendarCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void SetUptimeCalendarAsync(HeuristicLab.Calendar.Appointment[] appointments) {
+            this.SetUptimeCalendarAsync(appointments, null);
+        }
+        
+        public void SetUptimeCalendarAsync(HeuristicLab.Calendar.Appointment[] appointments, object userState) {
+            if ((this.onBeginSetUptimeCalendarDelegate == null)) {
+                this.onBeginSetUptimeCalendarDelegate = new BeginOperationDelegate(this.OnBeginSetUptimeCalendar);
+            }
+            if ((this.onEndSetUptimeCalendarDelegate == null)) {
+                this.onEndSetUptimeCalendarDelegate = new EndOperationDelegate(this.OnEndSetUptimeCalendar);
+            }
+            if ((this.onSetUptimeCalendarCompletedDelegate == null)) {
+                this.onSetUptimeCalendarCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnSetUptimeCalendarCompleted);
+            }
+            base.InvokeAsync(this.onBeginSetUptimeCalendarDelegate, new object[] {
+                        appointments}, this.onEndSetUptimeCalendarDelegate, this.onSetUptimeCalendarCompletedDelegate, userState);
+        }
+        
+        public HeuristicLab.Calendar.Appointment[] GetUptimeCalendar() {
+            return base.Channel.GetUptimeCalendar();
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginGetUptimeCalendar(System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginGetUptimeCalendar(callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Calendar.Appointment[] EndGetUptimeCalendar(System.IAsyncResult result) {
+            return base.Channel.EndGetUptimeCalendar(result);
+        }
+        
+        private System.IAsyncResult OnBeginGetUptimeCalendar(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            return this.BeginGetUptimeCalendar(callback, asyncState);
+        }
+        
+        private object[] OnEndGetUptimeCalendar(System.IAsyncResult result) {
+            HeuristicLab.Calendar.Appointment[] retVal = this.EndGetUptimeCalendar(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnGetUptimeCalendarCompleted(object state) {
+            if ((this.GetUptimeCalendarCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.GetUptimeCalendarCompleted(this, new GetUptimeCalendarCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void GetUptimeCalendarAsync() {
+            this.GetUptimeCalendarAsync(null);
+        }
+        
+        public void GetUptimeCalendarAsync(object userState) {
+            if ((this.onBeginGetUptimeCalendarDelegate == null)) {
+                this.onBeginGetUptimeCalendarDelegate = new BeginOperationDelegate(this.OnBeginGetUptimeCalendar);
+            }
+            if ((this.onEndGetUptimeCalendarDelegate == null)) {
+                this.onEndGetUptimeCalendarDelegate = new EndOperationDelegate(this.OnEndGetUptimeCalendar);
+            }
+            if ((this.onGetUptimeCalendarCompletedDelegate == null)) {
+                this.onGetUptimeCalendarCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnGetUptimeCalendarCompleted);
+            }
+            base.InvokeAsync(this.onBeginGetUptimeCalendarDelegate, null, this.onEndGetUptimeCalendarDelegate, this.onGetUptimeCalendarCompletedDelegate, userState);
+        }
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/Reference.svcmap
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/Reference.svcmap	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/Reference.svcmap	(revision 4340)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ReferenceGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="5a09b234-1770-45e9-b9ea-a48c9fa8d6ac" xmlns="urn:schemas-microsoft-com:xml-wcfservicemap">
+  <ClientOptions>
+    <GenerateAsynchronousMethods>true</GenerateAsynchronousMethods>
+    <EnableDataBinding>true</EnableDataBinding>
+    <ExcludedTypes />
+    <ImportXmlTypes>false</ImportXmlTypes>
+    <GenerateInternalTypes>false</GenerateInternalTypes>
+    <GenerateMessageContracts>false</GenerateMessageContracts>
+    <NamespaceMappings />
+    <CollectionMappings />
+    <GenerateSerializableTypes>true</GenerateSerializableTypes>
+    <Serializer>Auto</Serializer>
+    <UseSerializerForFaults>true</UseSerializerForFaults>
+    <ReferenceAllAssemblies>true</ReferenceAllAssemblies>
+    <ReferencedAssemblies />
+    <ReferencedDataContractTypes />
+    <ServiceContractMappings />
+  </ClientOptions>
+  <MetadataSources>
+    <MetadataSource Address="net.tcp://localhost:8000/SlaveConsoleService/mex" Protocol="mex" SourceId="1" />
+  </MetadataSources>
+  <Metadata>
+    <MetadataFile FileName="service.wsdl" MetadataType="Wsdl" ID="3e8daf1a-b94a-49d2-bd35-f30f54ee9742" SourceId="1" SourceUrl="net.tcp://localhost:8000/SlaveConsoleService/mex" />
+    <MetadataFile FileName="service.xsd" MetadataType="Schema" ID="17e3ca58-5ed5-47a0-96bd-7f96f60046ff" SourceId="1" SourceUrl="net.tcp://localhost:8000/SlaveConsoleService/mex" />
+    <MetadataFile FileName="service1.xsd" MetadataType="Schema" ID="81873a9d-b6bf-45f9-956f-4825bc13f083" SourceId="1" SourceUrl="net.tcp://localhost:8000/SlaveConsoleService/mex" />
+    <MetadataFile FileName="HeuristicLab.Hive.Slave.Core.SlaveConsoleService.xsd" MetadataType="Schema" ID="3ecdc6ab-cdf8-4066-be0b-3cf75d96d82e" SourceId="1" SourceUrl="net.tcp://localhost:8000/SlaveConsoleService/mex" />
+    <MetadataFile FileName="HeuristicLab.Hive.Slave.Common.xsd" MetadataType="Schema" ID="2d78ef3d-1be8-450d-a4eb-ea354ebc04ca" SourceId="1" SourceUrl="net.tcp://localhost:8000/SlaveConsoleService/mex" />
+    <MetadataFile FileName="HeuristicLab.Calendar.xsd" MetadataType="Schema" ID="d6c22e40-4e4f-4549-bf7d-df34f00ddab5" SourceId="1" SourceUrl="net.tcp://localhost:8000/SlaveConsoleService/mex" />
+    <MetadataFile FileName="System.Drawing.xsd" MetadataType="Schema" ID="bc68bc42-889a-42a3-b9f5-9c3fc446495c" SourceId="1" SourceUrl="net.tcp://localhost:8000/SlaveConsoleService/mex" />
+  </Metadata>
+  <Extensions>
+    <ExtensionFile FileName="configuration91.svcinfo" Name="configuration91.svcinfo" />
+    <ExtensionFile FileName="configuration.svcinfo" Name="configuration.svcinfo" />
+  </Extensions>
+</ReferenceGroup>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/System.Drawing.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/System.Drawing.xsd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/System.Drawing.xsd	(revision 4340)
@@ -0,0 +1,18 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/System.Drawing" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/System.Drawing" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:complexType name="Color">
+    <xs:annotation>
+      <xs:appinfo>
+        <IsValueType xmlns="http://schemas.microsoft.com/2003/10/Serialization/">true</IsValueType>
+      </xs:appinfo>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="knownColor" type="xs:short" />
+      <xs:element name="name" nillable="true" type="xs:string" />
+      <xs:element name="state" type="xs:short" />
+      <xs:element name="value" type="xs:long" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="Color" nillable="true" type="tns:Color" />
+</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/configuration.svcinfo
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/configuration.svcinfo	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/configuration.svcinfo	(revision 4340)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<configurationSnapshot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:xml-wcfconfigurationsnapshot">
+  <behaviors />
+  <bindings>
+    <binding digest="System.ServiceModel.Configuration.NetTcpBindingElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data hostNameComparisonMode=&quot;StrongWildcard&quot; listenBacklog=&quot;10&quot; maxBufferSize=&quot;65536&quot; maxConnections=&quot;10&quot; name=&quot;SlaveConsoleTcpEndpoint&quot; transactionFlow=&quot;false&quot; transactionProtocol=&quot;OleTransactions&quot; transferMode=&quot;Buffered&quot;&gt;&lt;readerQuotas maxArrayLength=&quot;16384&quot; maxBytesPerRead=&quot;4096&quot; maxDepth=&quot;32&quot; maxNameTableCharCount=&quot;16384&quot; maxStringContentLength=&quot;8192&quot; /&gt;&lt;reliableSession enabled=&quot;false&quot; inactivityTimeout=&quot;00:10:00&quot; ordered=&quot;true&quot; /&gt;&lt;security mode=&quot;None&quot;&gt;&lt;message clientCredentialType=&quot;Windows&quot; /&gt;&lt;transport clientCredentialType=&quot;Windows&quot; protectionLevel=&quot;EncryptAndSign&quot; /&gt;&lt;/security&gt;&lt;/Data&gt;" bindingType="netTcpBinding" name="SlaveConsoleTcpEndpoint" />
+  </bindings>
+  <endpoints>
+    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://localhost:8000/SlaveConsoleService&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;SlaveConsoleTcpEndpoint&quot; contract=&quot;SlaveConsoleService.ISlaveConsoleCommunicator&quot; name=&quot;SlaveConsoleTcpEndpoint&quot; /&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://localhost:8000/SlaveConsoleService&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;SlaveConsoleTcpEndpoint&quot; contract=&quot;SlaveConsoleService.ISlaveConsoleCommunicator&quot; name=&quot;SlaveConsoleTcpEndpoint&quot; /&gt;" contractName="SlaveConsoleService.ISlaveConsoleCommunicator" name="SlaveConsoleTcpEndpoint" />
+  </endpoints>
+</configurationSnapshot>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/configuration91.svcinfo
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/configuration91.svcinfo	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/configuration91.svcinfo	(revision 4340)
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="utf-8"?>
+<SavedWcfConfigurationInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="9.1" CheckSum="Ch5G4pEgxepltiHkF2QeQAktyXM=">
+  <bindingConfigurations>
+    <bindingConfiguration bindingType="netTcpBinding" name="SlaveConsoleTcpEndpoint">
+      <properties>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>SlaveConsoleTcpEndpoint</serializedValue>
+        </property>
+        <property path="/closeTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/openTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/receiveTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/sendTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/transactionFlow" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/transferMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransferMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Buffered</serializedValue>
+        </property>
+        <property path="/transactionProtocol" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransactionProtocol, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>OleTransactions</serializedValue>
+        </property>
+        <property path="/hostNameComparisonMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HostNameComparisonMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>StrongWildcard</serializedValue>
+        </property>
+        <property path="/listenBacklog" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxBufferPoolSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>524288</serializedValue>
+        </property>
+        <property path="/maxBufferSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/maxConnections" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxReceivedMessageSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/portSharingEnabled" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/readerQuotas" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxDepth" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>32</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxStringContentLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>8192</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxArrayLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxBytesPerRead" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>4096</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxNameTableCharCount" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/reliableSession" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement</serializedValue>
+        </property>
+        <property path="/reliableSession/ordered" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/reliableSession/inactivityTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/reliableSession/enabled" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/security" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.NetTcpSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.NetTcpSecurityElement</serializedValue>
+        </property>
+        <property path="/security/mode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.SecurityMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>None</serializedValue>
+        </property>
+        <property path="/security/transport" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.TcpTransportSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.TcpTransportSecurityElement</serializedValue>
+        </property>
+        <property path="/security/transport/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TcpClientCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/transport/protectionLevel" isComplexType="false" isExplicitlyDefined="true" clrType="System.Net.Security.ProtectionLevel, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>EncryptAndSign</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/policyEnforcement" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.PolicyEnforcement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Never</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/protectionScenario" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.ProtectionScenario, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>TransportSelected</serializedValue>
+        </property>
+        <property path="/security/transport/extendedProtectionPolicy/customServiceNames" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ServiceNameElementCollection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>(Collection)</serializedValue>
+        </property>
+        <property path="/security/message" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.MessageSecurityOverTcpElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.MessageSecurityOverTcpElement</serializedValue>
+        </property>
+        <property path="/security/message/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.MessageCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/message/algorithmSuite" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.Security.SecurityAlgorithmSuite, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Default</serializedValue>
+        </property>
+      </properties>
+    </bindingConfiguration>
+  </bindingConfigurations>
+  <endpoints>
+    <endpoint name="SlaveConsoleTcpEndpoint" contract="SlaveConsoleService.ISlaveConsoleCommunicator" bindingType="netTcpBinding" address="net.tcp://localhost:8000/SlaveConsoleService" bindingConfiguration="SlaveConsoleTcpEndpoint">
+      <properties>
+        <property path="/address" isComplexType="false" isExplicitlyDefined="true" clrType="System.Uri, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>net.tcp://localhost:8000/SlaveConsoleService</serializedValue>
+        </property>
+        <property path="/behaviorConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/binding" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>netTcpBinding</serializedValue>
+        </property>
+        <property path="/bindingConfiguration" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>SlaveConsoleTcpEndpoint</serializedValue>
+        </property>
+        <property path="/contract" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>SlaveConsoleService.ISlaveConsoleCommunicator</serializedValue>
+        </property>
+        <property path="/headers" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.AddressHeaderCollectionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.AddressHeaderCollectionElement</serializedValue>
+        </property>
+        <property path="/headers/headers" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Channels.AddressHeaderCollection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>&lt;Header /&gt;</serializedValue>
+        </property>
+        <property path="/identity" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.IdentityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.IdentityElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.UserPrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.UserPrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/servicePrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.ServicePrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.ServicePrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/servicePrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/dns" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.DnsElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.DnsElement</serializedValue>
+        </property>
+        <property path="/identity/dns/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/rsa" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.RsaElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.RsaElement</serializedValue>
+        </property>
+        <property path="/identity/rsa/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificate" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateElement</serializedValue>
+        </property>
+        <property path="/identity/certificate/encodedValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateReferenceElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateReferenceElement</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeName" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreName, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>My</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeLocation" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreLocation, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>LocalMachine</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/x509FindType" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.X509FindType, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>FindBySubjectDistinguishedName</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/findValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference/isChainIncluded" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>SlaveConsoleTcpEndpoint</serializedValue>
+        </property>
+        <property path="/kind" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/endpointConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+      </properties>
+    </endpoint>
+  </endpoints>
+</SavedWcfConfigurationInformation>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/service.wsdl
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/service.wsdl	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/service.wsdl	(revision 4340)
@@ -0,0 +1,171 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:tns="http://tempuri.org/" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="SlaveConsoleCommunicator" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+  <wsp:Policy wsu:Id="SlaveConsoleTcpEndpoint_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <msb:BinaryEncoding xmlns:msb="http://schemas.microsoft.com/ws/06/2004/mspolicy/netbinary1">
+        </msb:BinaryEncoding>
+        <wsaw:UsingAddressing>
+        </wsaw:UsingAddressing>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsdl:types>
+    <xsd:schema targetNamespace="http://tempuri.org/Imports">
+      <xsd:import namespace="http://tempuri.org/" />
+      <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Slave.Core.SlaveConsoleService" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Slave.Common" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Calendar" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/System.Drawing" />
+    </xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="ISlaveConsoleCommunicator_GetStatusInfos_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetStatusInfos" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveConsoleCommunicator_GetStatusInfos_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetStatusInfosResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveConsoleCommunicator_SetConnection_InputMessage">
+    <wsdl:part name="parameters" element="tns:SetConnection" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveConsoleCommunicator_SetConnection_OutputMessage">
+    <wsdl:part name="parameters" element="tns:SetConnectionResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveConsoleCommunicator_Disconnect_InputMessage">
+    <wsdl:part name="parameters" element="tns:Disconnect" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveConsoleCommunicator_Disconnect_OutputMessage">
+    <wsdl:part name="parameters" element="tns:DisconnectResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveConsoleCommunicator_GetCurrentConnection_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetCurrentConnection" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveConsoleCommunicator_GetCurrentConnection_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetCurrentConnectionResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveConsoleCommunicator_ShutdownClient_InputMessage">
+    <wsdl:part name="parameters" element="tns:ShutdownClient" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveConsoleCommunicator_ShutdownClient_OutputMessage">
+    <wsdl:part name="parameters" element="tns:ShutdownClientResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveConsoleCommunicator_SetUptimeCalendar_InputMessage">
+    <wsdl:part name="parameters" element="tns:SetUptimeCalendar" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveConsoleCommunicator_SetUptimeCalendar_OutputMessage">
+    <wsdl:part name="parameters" element="tns:SetUptimeCalendarResponse" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveConsoleCommunicator_GetUptimeCalendar_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetUptimeCalendar" />
+  </wsdl:message>
+  <wsdl:message name="ISlaveConsoleCommunicator_GetUptimeCalendar_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetUptimeCalendarResponse" />
+  </wsdl:message>
+  <wsdl:portType name="ISlaveConsoleCommunicator">
+    <wsdl:operation name="GetStatusInfos">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveConsoleCommunicator/GetStatusInfos" message="tns:ISlaveConsoleCommunicator_GetStatusInfos_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveConsoleCommunicator/GetStatusInfosResponse" message="tns:ISlaveConsoleCommunicator_GetStatusInfos_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="SetConnection">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveConsoleCommunicator/SetConnection" message="tns:ISlaveConsoleCommunicator_SetConnection_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveConsoleCommunicator/SetConnectionResponse" message="tns:ISlaveConsoleCommunicator_SetConnection_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="Disconnect">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveConsoleCommunicator/Disconnect" message="tns:ISlaveConsoleCommunicator_Disconnect_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveConsoleCommunicator/DisconnectResponse" message="tns:ISlaveConsoleCommunicator_Disconnect_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="GetCurrentConnection">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveConsoleCommunicator/GetCurrentConnection" message="tns:ISlaveConsoleCommunicator_GetCurrentConnection_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveConsoleCommunicator/GetCurrentConnectionResponse" message="tns:ISlaveConsoleCommunicator_GetCurrentConnection_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="ShutdownClient">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveConsoleCommunicator/ShutdownClient" message="tns:ISlaveConsoleCommunicator_ShutdownClient_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveConsoleCommunicator/ShutdownClientResponse" message="tns:ISlaveConsoleCommunicator_ShutdownClient_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="SetUptimeCalendar">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveConsoleCommunicator/SetUptimeCalendar" message="tns:ISlaveConsoleCommunicator_SetUptimeCalendar_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveConsoleCommunicator/SetUptimeCalendarResponse" message="tns:ISlaveConsoleCommunicator_SetUptimeCalendar_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="GetUptimeCalendar">
+      <wsdl:input wsaw:Action="http://tempuri.org/ISlaveConsoleCommunicator/GetUptimeCalendar" message="tns:ISlaveConsoleCommunicator_GetUptimeCalendar_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/ISlaveConsoleCommunicator/GetUptimeCalendarResponse" message="tns:ISlaveConsoleCommunicator_GetUptimeCalendar_OutputMessage" />
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="SlaveConsoleTcpEndpoint" type="tns:ISlaveConsoleCommunicator">
+    <wsp:PolicyReference URI="#SlaveConsoleTcpEndpoint_policy">
+    </wsp:PolicyReference>
+    <soap12:binding transport="http://schemas.microsoft.com/soap/tcp" />
+    <wsdl:operation name="GetStatusInfos">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveConsoleCommunicator/GetStatusInfos" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="SetConnection">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveConsoleCommunicator/SetConnection" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="Disconnect">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveConsoleCommunicator/Disconnect" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetCurrentConnection">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveConsoleCommunicator/GetCurrentConnection" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="ShutdownClient">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveConsoleCommunicator/ShutdownClient" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="SetUptimeCalendar">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveConsoleCommunicator/SetUptimeCalendar" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetUptimeCalendar">
+      <soap12:operation soapAction="http://tempuri.org/ISlaveConsoleCommunicator/GetUptimeCalendar" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="SlaveConsoleCommunicator">
+    <wsdl:port name="SlaveConsoleTcpEndpoint" binding="tns:SlaveConsoleTcpEndpoint">
+      <soap12:address location="net.tcp://localhost:8000/SlaveConsoleService" />
+      <wsa10:EndpointReference>
+        <wsa10:Address>net.tcp://localhost:8000/SlaveConsoleService</wsa10:Address>
+      </wsa10:EndpointReference>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/service.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/service.xsd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/service.xsd	(revision 4340)
@@ -0,0 +1,85 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://tempuri.org/" elementFormDefault="qualified" targetNamespace="http://tempuri.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Slave.Core.SlaveConsoleService" />
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Calendar" />
+  <xs:element name="GetStatusInfos">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetStatusInfosResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Slave.Core.SlaveConsoleService" minOccurs="0" name="GetStatusInfosResult" nillable="true" type="q1:StatusCommons" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SetConnection">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Slave.Core.SlaveConsoleService" minOccurs="0" name="container" nillable="true" type="q2:ConnectionContainer" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SetConnectionResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="Disconnect">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="DisconnectResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetCurrentConnection">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetCurrentConnectionResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q3="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Slave.Core.SlaveConsoleService" minOccurs="0" name="GetCurrentConnectionResult" nillable="true" type="q3:ConnectionContainer" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="ShutdownClient">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="ShutdownClientResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SetUptimeCalendar">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q4="http://schemas.datacontract.org/2004/07/HeuristicLab.Calendar" minOccurs="0" name="appointments" nillable="true" type="q4:ArrayOfAppointment" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SetUptimeCalendarResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetUptimeCalendar">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetUptimeCalendarResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q5="http://schemas.datacontract.org/2004/07/HeuristicLab.Calendar" minOccurs="0" name="GetUptimeCalendarResult" nillable="true" type="q5:ArrayOfAppointment" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/service1.xsd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/service1.xsd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Service References/SlaveConsoleService/service1.xsd	(revision 4340)
@@ -0,0 +1,42 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="anyType" nillable="true" type="xs:anyType" />
+  <xs:element name="anyURI" nillable="true" type="xs:anyURI" />
+  <xs:element name="base64Binary" nillable="true" type="xs:base64Binary" />
+  <xs:element name="boolean" nillable="true" type="xs:boolean" />
+  <xs:element name="byte" nillable="true" type="xs:byte" />
+  <xs:element name="dateTime" nillable="true" type="xs:dateTime" />
+  <xs:element name="decimal" nillable="true" type="xs:decimal" />
+  <xs:element name="double" nillable="true" type="xs:double" />
+  <xs:element name="float" nillable="true" type="xs:float" />
+  <xs:element name="int" nillable="true" type="xs:int" />
+  <xs:element name="long" nillable="true" type="xs:long" />
+  <xs:element name="QName" nillable="true" type="xs:QName" />
+  <xs:element name="short" nillable="true" type="xs:short" />
+  <xs:element name="string" nillable="true" type="xs:string" />
+  <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" />
+  <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" />
+  <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" />
+  <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" />
+  <xs:element name="char" nillable="true" type="tns:char" />
+  <xs:simpleType name="char">
+    <xs:restriction base="xs:int" />
+  </xs:simpleType>
+  <xs:element name="duration" nillable="true" type="tns:duration" />
+  <xs:simpleType name="duration">
+    <xs:restriction base="xs:duration">
+      <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" />
+      <xs:minInclusive value="-P10675199DT2H48M5.4775808S" />
+      <xs:maxInclusive value="P10675199DT2H48M5.4775807S" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="guid" nillable="true" type="tns:guid" />
+  <xs:simpleType name="guid">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:attribute name="FactoryType" type="xs:QName" />
+  <xs:attribute name="Id" type="xs:ID" />
+  <xs:attribute name="Ref" type="xs:IDREF" />
+</xs:schema>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/ServiceLocator.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/ServiceLocator.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/ServiceLocator.cs	(revision 4340)
@@ -0,0 +1,23 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ServiceModel;
+//using HeuristicLab.Hive.Client.ClientConsole;
+
+namespace HeuristicLab.Hive.Client.Console {
+  public class ServiceLocator {
+    private static ClientConsoleCommunicatorClient proxy = null;
+
+    public static ClientConsoleCommunicatorClient ClientConsoleCommunicatorClient() {
+      if (proxy == null) {
+        proxy = new ClientConsoleCommunicatorClient(
+          new NetTcpBinding(),
+          new EndpointAddress("net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator")
+          );
+      }
+
+      return proxy;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/app.config
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/app.config	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/app.config	(revision 4340)
@@ -0,0 +1,40 @@
+﻿<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+  <configSections>
+    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
+      <section name="HeuristicLab.Hive.Slave.Console.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+    </sectionGroup>
+  </configSections>
+  <userSettings>
+    <HeuristicLab.Hive.Slave.Console.Properties.Settings>
+      <setting name="IpAdress" serializeAs="String">
+        <value>10.0.0.1</value>
+      </setting>
+    </HeuristicLab.Hive.Slave.Console.Properties.Settings>
+  </userSettings>
+  <system.serviceModel>
+    <bindings>
+      <netTcpBinding>
+        <binding name="SlaveConsoleTcpEndpoint" closeTimeout="00:01:00"
+          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+          transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
+          hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288"
+          maxBufferSize="65536" maxReceivedMessageSize="65536">
+          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+          <reliableSession ordered="true" inactivityTimeout="00:10:00"
+            enabled="false" />
+          <security mode="None">
+            <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
+            <message clientCredentialType="Windows" />
+          </security>
+        </binding>
+      </netTcpBinding>
+    </bindings>
+    <client>
+      <endpoint address="net.tcp://localhost:8000/SlaveConsoleService"
+        binding="netTcpBinding" bindingConfiguration="SlaveConsoleTcpEndpoint"
+        contract="SlaveConsoleService.ISlaveConsoleCommunicator" name="SlaveConsoleTcpEndpoint" />
+    </client>
+  </system.serviceModel>
+</configuration>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/AppointmentContainer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/AppointmentContainer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/AppointmentContainer.cs	(revision 4340)
@@ -0,0 +1,18 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Calendar;
+
+namespace HeuristicLab.Hive.Slave.Core.ConfigurationManager {
+  public class AppointmentContainer {
+    public DateTime Updated { get; set; }
+    public List<Appointment> Appointments { get; set; }
+    public bool IsLocal { get; set; }
+
+    public AppointmentContainer() {
+      Appointments = new List<Appointment>();
+      IsLocal = false;
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/ConfigManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/ConfigManager.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/ConfigManager.cs	(revision 4340)
@@ -0,0 +1,153 @@
+﻿#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;
+using HeuristicLab.Hive.Slave.ExecutionEngine;
+using HeuristicLab.Hive.Slave.Core.SlaveConsoleService;
+using HeuristicLab.Hive.Slave.Communication;
+using HeuristicLab.Hive.Slave.Core.Properties;
+using HeuristicLab.Hive.Contracts;
+
+namespace HeuristicLab.Hive.Slave.Core.ConfigurationManager {
+  /// <summary>
+  /// accesses the Server and sends his data (uuid, uptimes, hardware config) 
+  /// </summary>
+  public class ConfigManager {
+    private static ConfigManager instance = null;
+    public static ConfigManager Instance {
+      get {
+        if (instance == null) {
+          instance = new ConfigManager();
+        }
+        return instance;
+      }
+    }
+
+    public Core Core { get; set; }
+    private SlaveDto hardwareInfo;
+
+    /// <summary>
+    /// Constructor for the singleton, must recover Guid, Calendar, ...
+    /// </summary>
+    private ConfigManager() {
+      hardwareInfo = new SlaveDto();
+
+      if (Settings.Default.Guid == Guid.Empty) {
+        hardwareInfo.Id = Guid.NewGuid();
+        Settings.Default.Guid = hardwareInfo.Id;
+        Settings.Default.Save();
+      } else
+        hardwareInfo.Id = Settings.Default.Guid;
+
+      hardwareInfo.NrOfCores = Environment.ProcessorCount;
+      hardwareInfo.Memory = 1024;
+      hardwareInfo.Name = Environment.MachineName;
+    }
+
+    /// <summary>
+    /// Get all the Information about the client
+    /// </summary>
+    /// <returns>the ClientInfo object</returns>
+    public SlaveDto GetClientInfo() {
+      hardwareInfo.Login = WcfService.Instance.ConnectedSince;
+      return hardwareInfo;
+    }
+
+    /// <summary>
+    /// Returns the connectioncontainer with the IP and Port, storred in the Settings framework
+    /// </summary>
+    /// <returns>The IP and Port of the server</returns>
+    public ConnectionContainer GetServerIP() {
+      ConnectionContainer cc = new ConnectionContainer();
+      cc.IPAdress = Settings.Default.ServerIP;
+      return cc;
+    }
+
+    /// <summary>
+    /// Sets and saves IP in the Settings framework
+    /// </summary>
+    /// <param name="cc"></param>
+    public void SetServerIP(ConnectionContainer cc) {
+      Settings.Default.ServerIP = cc.IPAdress;
+      Settings.Default.Save();
+    }
+
+    /// <summary>
+    /// collects and returns information that get displayed by the Client Console
+    /// </summary>
+    /// <returns></returns>
+    public StatusCommons GetStatusForClientConsole() {
+      //Todo: Locking
+      StatusCommons st = new StatusCommons();
+      st.ClientGuid = hardwareInfo.Id;
+
+      st.Status = WcfService.Instance.ConnState;
+      st.ConnectedSince = WcfService.Instance.ConnectedSince;
+
+      st.TotalCores = hardwareInfo.NrOfCores;
+      st.FreeCores = hardwareInfo.NrOfCores - GetUsedCores();
+
+      st.JobsAborted = SlaveStatusInfo.JobsAborted;
+      st.JobsDone = SlaveStatusInfo.JobsProcessed;
+      st.JobsFetched = SlaveStatusInfo.JobsFetched;
+
+      Dictionary<Guid, Executor> engines = Core.ExecutionEngines;
+      st.Jobs = new List<JobStatus>();
+
+      lock (engines) {
+        foreach (KeyValuePair<Guid, Executor> kvp in engines) {
+          Executor e = kvp.Value;
+          st.Jobs.Add(new JobStatus { JobId = e.JobId, Progress = e.Progress, Since = e.CreationTime });
+        }
+      }
+      return st;
+    }
+
+    public Dictionary<Guid, double> GetProgressOfAllJobs() {
+      Dictionary<Guid, double> prog = new Dictionary<Guid, double>();
+      Dictionary<Guid, Executor> engines = Core.ExecutionEngines;
+      lock (engines) {
+        foreach (KeyValuePair<Guid, Executor> kvp in engines) {
+          Executor e = kvp.Value;
+          //if (!e.JobIsFinished) 
+          prog[e.JobId] = e.Progress;
+        }
+      }
+      return prog;
+    }
+
+    public int GetUsedCores() {
+      Dictionary<Guid, Executor> engines = Core.ExecutionEngines;
+      Dictionary<Guid, JobDto> jobs = Core.Jobs;
+      int usedCores = 0;
+      lock (engines) {
+        foreach (KeyValuePair<Guid, JobDto> kvp in jobs)
+          usedCores += kvp.Value.CoresNeeded;
+      }
+      return usedCores;
+    }
+
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/SlaveStatusInfo.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/SlaveStatusInfo.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/SlaveStatusInfo.cs	(revision 4340)
@@ -0,0 +1,14 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Slave.Core.ConfigurationManager {
+  public class SlaveStatusInfo {
+    static public int JobsProcessed { get; set; }
+    static public int JobsAborted { get; set; }
+    static public int JobsFetched { get; set; }
+    static public DateTime LoginTime { get; set; }
+    
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/UptimeManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/UptimeManager.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/UptimeManager.cs	(revision 4340)
@@ -0,0 +1,121 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Calendar;
+using System.Xml.Serialization;
+using System.IO;
+using HeuristicLab.Hive.Slave.Common;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Tracing;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+
+namespace HeuristicLab.Hive.Slave.Core.ConfigurationManager {
+  public class UptimeManager {
+
+    private AppointmentContainer appContainer = null;
+    public AppointmentContainer AppContainer {
+      get {
+        if (appContainer == null)
+          RestoreFromHDD();
+        return appContainer;
+      }
+    }    
+    public bool CalendarAvailable { get; set; }
+
+    private static String path = System.IO.Directory.GetCurrentDirectory() + "\\plugins\\Hive.Slave.Jobs\\";
+
+    private static UptimeManager instance = null;
+    public static UptimeManager Instance {
+      get {
+        if (instance == null) {
+          instance = new UptimeManager();
+        }
+        return instance;
+      }
+    }
+
+    public UptimeManager() {
+      RestoreFromHDD();
+    }
+
+    private void PersistToHDD() {
+      XmlSerializer s = new XmlSerializer(typeof(AppointmentContainer));
+      if (!Directory.Exists(path))
+        Directory.CreateDirectory(path);
+      TextWriter w = null;
+      try {
+        w = new StreamWriter(path + "calendar.xml");
+        s.Serialize(w, AppContainer);
+      }
+      catch (Exception e) {
+        Logger.Error("Persistance of the Calendar failed!", e);
+      }
+      finally {
+        if (w != null)
+          w.Close();
+      }
+    }
+
+    private void RestoreFromHDD() {
+      XmlSerializer s = new XmlSerializer(typeof(AppointmentContainer));
+      if (File.Exists(Path.Combine(path, "calendar.xml"))) {
+        TextReader r = null;
+
+        try {
+          r = new StreamReader(path + "calendar.xml");
+          appContainer = (AppointmentContainer)s.Deserialize(r);
+          CalendarAvailable = true;
+        }
+        catch (Exception e) {
+          Logger.Error("Deserialization of Calendar failed", e);
+          Logger.Info("Starting with a new one");
+          appContainer = new AppointmentContainer();
+          CalendarAvailable = false;
+        }
+        finally {
+          if (r != null)
+            r.Close();
+        }
+      } else {
+        appContainer = new AppointmentContainer();
+      }
+    }
+
+    public bool IsAllowedToCalculate() {
+      return AppContainer.Appointments.Any(app => (DateTime.Now >= app.StartDate) && (DateTime.Now <= app.EndDate));
+    }
+
+    public bool SetAppointments(bool isLocal, bool isForced, IEnumerable<Appointment> appointments) {
+      if (!isForced && !isLocal && AppContainer.IsLocal)
+        return false;
+
+      AppContainer.Appointments = new List<Appointment>(appointments);
+      AppContainer.IsLocal = isLocal;
+      AppContainer.Updated = DateTime.Now;
+      CalendarAvailable = true;
+     
+      PersistToHDD();
+      
+      return true;
+    }
+
+    internal bool SetAppointments(bool isLocal, ResponseCalendar response) {
+      IList<Appointment> app = new List<Appointment>();
+      foreach (AppointmentDto appointmentDto in response.Appointments) {
+        app.Add(new Appointment {
+          AllDayEvent = appointmentDto.AllDayEvent,
+          EndDate = appointmentDto.EndDate,
+          StartDate = appointmentDto.StartDate,
+          Recurring = appointmentDto.Recurring,
+
+          RecurringId = appointmentDto.RecurringId,
+          Locked = true,
+          Subject = "Online",
+        });
+      }
+      return SetAppointments(isLocal, response.ForceFetch, app);
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Core.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Core.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Core.cs	(revision 4340)
@@ -0,0 +1,478 @@
+﻿#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.IO;
+using System.Threading;
+using HeuristicLab.Core;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+using HeuristicLab.Hive.Slave.Common;
+using HeuristicLab.Hive.Slave.Communication;
+using HeuristicLab.Hive.Slave.Core.SlaveConsoleService;
+using HeuristicLab.Hive.Slave.Core.ConfigurationManager;
+using HeuristicLab.Hive.Slave.Core.JobStorage;
+using HeuristicLab.Hive.Slave.ExecutionEngine;
+using HeuristicLab.Tracing;
+using HeuristicLab.Hive.Slave.Communication.SlaveService;
+
+namespace HeuristicLab.Hive.Slave.Core {
+  /// <summary>
+  /// The core component of the Hive Client
+  /// </summary>
+  public class Core : MarshalByRefObject {
+    public static bool abortRequested { get; set; }
+
+    private bool currentlyFetching;
+    private bool CurrentlyFetching {
+      get {
+        return currentlyFetching;
+      }
+      set {
+        currentlyFetching = value;
+        Logger.Debug("Set CurrentlyFetching to " + currentlyFetching);
+      }
+    }
+
+    private Dictionary<Guid, Executor> engines = new Dictionary<Guid, Executor>();
+    private Dictionary<Guid, AppDomain> appDomains = new Dictionary<Guid, AppDomain>();
+    private Dictionary<Guid, JobDto> jobs = new Dictionary<Guid, JobDto>();
+
+    private WcfService wcfService;
+    private HeartbeatManager beat;
+
+    /// <summary>
+    /// Main Method for the client
+    /// </summary>
+    public void Start() {
+      abortRequested = false;
+      Logger.Info("Hive Slave started");
+      SlaveConsoleServer server = new SlaveConsoleServer();
+      server.Start();
+      
+      ConfigManager manager = ConfigManager.Instance;
+      manager.Core = this;
+
+      wcfService = WcfService.Instance;
+      RegisterServiceEvents();
+
+      RecoverSettings(); // recover server IP from the settings framework
+      StartHeartbeats(); // Start heartbeats thread
+      DispatchMessageQueue(); // dispatch messages until abortRequested
+
+      DeRegisterServiceEvents();
+      server.Close();
+      Logger.Info("Program shutdown");
+    }
+
+    private void RecoverSettings() {
+      ConnectionContainer cc = ConfigManager.Instance.GetServerIP();
+      if (cc.IPAdress != String.Empty) {
+        wcfService.ServerIp = cc.IPAdress;
+      }
+    }
+
+    private void StartHeartbeats() {
+      //Initialize the heartbeat
+      beat = new HeartbeatManager { Interval = new TimeSpan(0, 0, 10) };
+      beat.StartHeartbeat();
+    }
+
+    private void DispatchMessageQueue() {
+      MessageQueue queue = MessageQueue.GetInstance();
+      while (!abortRequested) {
+        MessageContainer container = queue.GetMessage();
+        DetermineAction(container);
+      }
+    }
+
+    private void RegisterServiceEvents() {
+      wcfService.GetJobCompleted += new EventHandler<GetJobCompletedEventArgs>(wcfService_GetJobCompleted);
+      wcfService.GetFinishedJobResultCompleted += new EventHandler<StoreFinishedJobResultCompletedEventArgs>(wcfService_StoreFinishedJobResultCompleted);
+      wcfService.ProcessSnapshotCompleted += new EventHandler<ProcessSnapshotCompletedEventArgs>(wcfService_ProcessSnapshotCompleted);
+      wcfService.ConnectionRestored += new EventHandler(wcfService_ConnectionRestored);
+      //wcfService.ServerChanged += new EventHandler(wcfService_ServerChanged);
+      wcfService.Connected += new EventHandler(wcfService_Connected);
+    }
+
+    private void DeRegisterServiceEvents() {
+      wcfService.GetJobCompleted -= new EventHandler<GetJobCompletedEventArgs>(wcfService_GetJobCompleted);
+      wcfService.GetFinishedJobResultCompleted -= new EventHandler<StoreFinishedJobResultCompletedEventArgs>(wcfService_StoreFinishedJobResultCompleted);
+      wcfService.ProcessSnapshotCompleted -= new EventHandler<ProcessSnapshotCompletedEventArgs>(wcfService_ProcessSnapshotCompleted);
+      wcfService.ConnectionRestored -= new EventHandler(wcfService_ConnectionRestored);
+      //wcfService.ServerChanged -= new EventHandler(wcfService_ServerChanged);
+      wcfService.Connected -= new EventHandler(wcfService_Connected);
+    }
+
+    /// <summary>
+    /// Reads and analyzes the Messages from the MessageQueue and starts corresponding actions
+    /// </summary>
+    /// <param name="container">The Container, containing the message</param>
+    private void DetermineAction(MessageContainer container) {
+      Logger.Info("Message: " + container.Message.ToString() + " for job: " + container.JobId);
+      switch (container.Message) {
+        //Server requests to abort a job
+        case MessageContainer.MessageType.AbortJob:
+          if (engines.ContainsKey(container.JobId))
+            engines[container.JobId].Abort();
+          else
+            Logger.Error("AbortJob: Engine doesn't exist");
+          break;
+
+        //Job has been successfully aborted
+        case MessageContainer.MessageType.JobAborted:
+          Guid jobId = new Guid(container.JobId.ToString());
+          KillAppDomain(jobId);
+          break;
+
+        //Request a Snapshot from the Execution Engine
+        case MessageContainer.MessageType.RequestSnapshot:
+          if (engines.ContainsKey(container.JobId))
+            engines[container.JobId].RequestSnapshot();
+          else
+            Logger.Error("RequestSnapshot: Engine with Job doesn't exist");
+          break;
+
+        //Snapshot is ready and can be sent back to the Server
+        case MessageContainer.MessageType.SnapshotReady:
+          ThreadPool.QueueUserWorkItem(new WaitCallback(GetSnapshot), container.JobId);
+          break;
+
+        //Pull a Job from the Server
+        case MessageContainer.MessageType.FetchJob:
+          if (!CurrentlyFetching) {
+            wcfService.GetJobAsync(ConfigManager.Instance.GetClientInfo().Id);
+            CurrentlyFetching = true;
+          } else
+            Logger.Info("Currently fetching, won't fetch this time!");
+          break;
+
+
+        //A Job has finished and can be sent back to the server
+        case MessageContainer.MessageType.FinishedJob:
+          ThreadPool.QueueUserWorkItem(new WaitCallback(GetFinishedJob), container.JobId);
+          break;
+
+
+        //When the timeslice is up
+        case MessageContainer.MessageType.UptimeLimitDisconnect:
+          Logger.Info("Uptime Limit reached, storing jobs and sending them back");
+
+          ShutdownRunningJobsAndSubmitSnapshots();
+          break;
+
+        //Fetch or Force Fetch Calendar!
+        case MessageContainer.MessageType.FetchOrForceFetchCalendar:
+          Logger.Info("Fetch Calendar from Server");
+          FetchCalendarFromServer();
+          break;
+
+        //Hard shutdown of the client
+        case MessageContainer.MessageType.Shutdown:
+          Logger.Info("Shutdown Signal received");
+          lock (engines) {
+            Logger.Debug("engines locked");
+            foreach (KeyValuePair<Guid, AppDomain> kvp in appDomains) {
+              Logger.Debug("Shutting down Appdomain for " + kvp.Key);
+              appDomains[kvp.Key].UnhandledException -= new UnhandledExceptionEventHandler(appDomain_UnhandledException);
+              AppDomain.Unload(kvp.Value);
+            }
+          }
+          Logger.Debug("Stopping heartbeat");
+          abortRequested = true;
+          beat.StopHeartBeat();
+          Logger.Debug("Logging out");
+          WcfService.Instance.Logout(ConfigManager.Instance.GetClientInfo().Id);
+          break;
+      }
+    }
+
+    private void ShutdownRunningJobsAndSubmitSnapshots() {
+      //check if there are running jobs
+      if (engines.Count > 0) {
+        //make sure there is no more fetching of jobs while the snapshots get processed
+        CurrentlyFetching = true;
+        //request a snapshot of each running job
+        foreach (KeyValuePair<Guid, Executor> kvp in engines) {
+          kvp.Value.RequestSnapshot();
+        }
+      }
+    }
+
+    //Asynchronous Threads for interaction with the Execution Engine
+    #region Async Threads for the EE
+
+    /// <summary>
+    /// serializes the finished job and submits it to the server. If, at the time, a network connection is unavailable, the Job gets stored on the disk. 
+    /// once the connection gets reestablished, the job gets submitted
+    /// </summary>
+    /// <param name="jobId"></param>
+    private void GetFinishedJob(object jobId) {
+      Guid jId = (Guid)jobId;
+      Logger.Info("Getting the finished job with id: " + jId);
+      try {
+        if (!engines.ContainsKey(jId)) {
+          Logger.Info("Engine doesn't exist");
+          return;
+        }
+
+        byte[] sJob = engines[jId].GetFinishedJob();
+
+        if (WcfService.Instance.LoggedIn) {
+          Logger.Info("Sending the finished job with id: " + jId);
+          wcfService.GetFinishedJobResultAsync(ConfigManager.Instance.GetClientInfo().Id, jId, sJob, 1.0, engines[jId].CurrentException, true);
+        } else {
+          Logger.Info("Storing the finished job with id: " + jId + " to hdd");
+          JobStorageManager.PersistObjectToDisc(wcfService.ServerIp, 0, jId, sJob); // [chn] Port is not unique anymore (since we need two ports for http and net.tcp-streaming). also the port is now specified only in app.config. use port 0 for the moment
+          KillAppDomain(jId);
+        }
+      }
+      catch (InvalidStateException ise) {
+        Logger.Error("Invalid State while Snapshoting:", ise);
+      }
+    }
+
+    private void GetSnapshot(object jobId) {
+      Logger.Info("Fetching a snapshot for job " + jobId);
+      Guid jId = (Guid)jobId;
+      byte[] obj = engines[jId].GetSnapshot();
+      Logger.Debug("BEGIN: Sending snapshot sync");
+      wcfService.ProcessSnapshotSync(ConfigManager.Instance.GetClientInfo().Id,
+        jId,
+        obj,
+        engines[jId].Progress,
+        null);
+      Logger.Debug("END: Sended snapshot sync");
+      //Uptime Limit reached, now is a good time to destroy this jobs.
+      Logger.Debug("Checking if uptime limit is reached");
+      if (!UptimeManager.Instance.IsAllowedToCalculate()) {
+        Logger.Debug("Uptime limit reached");
+        Logger.Debug("Killing Appdomain");
+        KillAppDomain(jId);
+        //Still anything running?  
+        if (engines.Count == 0) {
+          Logger.Info("All jobs snapshotted and sent back, disconnecting");
+          WcfService.Instance.Disconnect();
+        } else {
+          Logger.Debug("There are still active Jobs in the Field, not disconnecting");
+        }
+
+      } else {
+        Logger.Debug("Restarting the job" + jobId);
+        engines[jId].StartOnlyJob();
+        Logger.Info("Restarted the job" + jobId);
+      }
+    }
+
+    #endregion
+
+    //Eventhandlers for the communication with the wcf Layer 
+    #region wcfService Events
+    /// <summary>
+    /// Login has returned
+    /// </summary>
+    /// <param name="sender"></param>
+    /// <param name="e"></param>
+    void wcfService_LoginCompleted(object sender, LoginCompletedEventArgs e) {
+      if (e.Result.StatusMessage == ResponseStatus.Ok) {
+        CurrentlyFetching = false;
+        Logger.Info("Login completed to Hive Server @ " + DateTime.Now);
+      } else
+        Logger.Error("Error during login: " + e.Result.StatusMessage.ToString());
+    }
+
+    /// <summary>
+    /// A new Job from the wcfService has been received and will be started within a AppDomain.
+    /// </summary>
+    /// <param name="sender"></param>
+    /// <param name="e"></param>
+    void wcfService_GetJobCompleted(object sender, GetJobCompletedEventArgs e) {
+      if (e.Result.StatusMessage != ResponseStatus.GetJob_NoJobsAvailable) {
+        Logger.Info("Received new job with id " + e.Result.Obj.Id);
+        bool sandboxed = false;
+        Logger.Debug("Fetching plugins for job " + e.Result.Obj.Id);
+        try {
+
+          PluginCache.Instance.PreparePlugins(e.Result.Obj.PluginsNeeded);
+          PluginCache.Instance.CopyPluginsForJob(e.Result.Obj.PluginsNeeded, e.Result.Obj.Id);
+
+          //        foreach (CachedHivePluginInfoDto plugininfo in PluginCache.Instance.GetPlugins(e.Result.Job.PluginsNeeded))
+          //        files.AddRange(plugininfo.PluginFiles);
+          Logger.Debug("Plugins fetched for job " + e.Result.Obj.Id);
+          String pluginDir = Path.Combine(PluginCache.Instance.PluginRepositoryDir, e.Result.Obj.Id.ToString());
+
+          AppDomain appDomain = HeuristicLab.PluginInfrastructure.Sandboxing.SandboxManager.CreateAndInitSandbox(pluginDir, null);
+          appDomain.UnhandledException += new UnhandledExceptionEventHandler(appDomain_UnhandledException);
+          lock (engines) {
+            if (!jobs.ContainsKey(e.Result.Obj.Id)) {
+              jobs.Add(e.Result.Obj.Id, e.Result.Obj);
+              appDomains.Add(e.Result.Obj.Id, appDomain);
+              Logger.Debug("Creating AppDomain");
+              Executor engine = (Executor)appDomain.CreateInstanceAndUnwrap(typeof(Executor).Assembly.GetName().Name, typeof(Executor).FullName);
+              Logger.Debug("Created AppDomain");
+              engine.JobId = e.Result.Obj.Id;
+              engine.Queue = MessageQueue.GetInstance();
+              Logger.Debug("Starting Engine for job " + e.Result.Obj.Id);
+              engine.Start(e.Data);
+              engines.Add(e.Result.Obj.Id, engine);
+
+              SlaveStatusInfo.JobsFetched++;
+              Logger.Info("Increment FetchedJobs to:" + SlaveStatusInfo.JobsFetched);
+            }
+          }
+          beat.InterruptHeartBeatThread();
+        }
+        catch (Exception exception) {
+          Logger.Error("Creating the Appdomain and loading the job failed for job " + e.Result.Obj.Id);
+          Logger.Error("Error thrown is: ", exception);
+          CurrentlyFetching = false;
+          KillAppDomain(e.Result.Obj.Id);
+          wcfService.StoreFinishedJobResultsSync(ConfigManager.Instance.GetClientInfo().Id, e.Result.Obj.Id, new byte[] { }, 1, exception, true);
+        }
+      } else {
+        Logger.Info("No more jobs left!");
+      }
+      CurrentlyFetching = false;
+    }
+
+    /// <summary>
+    /// A finished job has been stored on the server
+    /// </summary>
+    /// <param name="sender"></param>
+    /// <param name="e"></param>
+    void wcfService_StoreFinishedJobResultCompleted(object sender, StoreFinishedJobResultCompletedEventArgs e) {
+      Logger.Info("Job submitted with id " + e.Result.JobId);
+      KillAppDomain(e.Result.JobId);
+      if (e.Result.StatusMessage == ResponseStatus.Ok) {
+        SlaveStatusInfo.JobsProcessed++;
+        Logger.Info("Increased ProcessedJobs to:" + SlaveStatusInfo.JobsProcessed);
+        beat.InterruptHeartBeatThread();
+      } else {
+        Logger.Error("Sending of job " + e.Result.JobId + " failed, job has been wasted. Message: " + e.Result.StatusMessage);
+      }
+    }
+
+    /// <summary>
+    /// A snapshot has been stored on the server
+    /// </summary>
+    /// <param name="sender"></param>
+    /// <param name="e"></param>
+    void wcfService_ProcessSnapshotCompleted(object sender, ProcessSnapshotCompletedEventArgs e) {
+      Logger.Info("Snapshot " + e.Result.JobId + " has been transmitted according to plan.");
+    }
+
+
+    /// <summary>
+    /// Connnection to the server has been estabilshed => Login and Send the persistet Jobs from the harddisk.
+    /// </summary>
+    /// <param name="sender"></param>
+    /// <param name="e"></param>
+    void wcfService_Connected(object sender, EventArgs e) {
+      Logger.Info("WCF Service got a connection");
+      if (!UptimeManager.Instance.CalendarAvailable) {
+        Logger.Info("No local calendar available, fetch it");
+        FetchCalendarFromServer();
+      }
+      //if the fetching from the server failed - still set the client online... maybe we get 
+      //a result within the next few heartbeats      
+      //if (!UptimeManager.Instance.CalendarAvailable || UptimeManager.Instance.IsOnline()) {
+      Logger.Info("CalendarAvailable is " + UptimeManager.Instance.CalendarAvailable + " and IsOnline is: " + UptimeManager.Instance.IsAllowedToCalculate());
+      Logger.Info("Setting client online");
+      wcfService.Login(ConfigManager.Instance.GetClientInfo());
+      JobStorageManager.CheckAndSubmitJobsFromDisc();
+      CurrentlyFetching = false;
+    }
+
+    private void FetchCalendarFromServer() {
+      ResponseCalendar calres = wcfService.GetCalendarSync(ConfigManager.Instance.GetClientInfo().Id);
+      if (calres.StatusMessage == ResponseStatus.Ok) {
+        if (UptimeManager.Instance.SetAppointments(false, calres)) {
+          Logger.Info("Remote calendar installed");
+          wcfService.SetCalendarStatus(ConfigManager.Instance.GetClientInfo().Id, CalendarState.Fetched);
+        } else {
+          Logger.Info("Remote calendar installation failed, setting state to " + CalendarState.NotAllowedToFetch);
+          wcfService.SetCalendarStatus(ConfigManager.Instance.GetClientInfo().Id, CalendarState.NotAllowedToFetch);
+        }
+      } else {
+        Logger.Info("Remote calendar installation failed, setting state to " + CalendarState.NotAllowedToFetch);
+        wcfService.SetCalendarStatus(ConfigManager.Instance.GetClientInfo().Id, CalendarState.NotAllowedToFetch);
+      }
+    }
+
+    //this is a little bit tricky - 
+    void wcfService_ConnectionRestored(object sender, EventArgs e) {
+      Logger.Info("Reconnected to old server - checking currently running appdomains");
+
+      foreach (KeyValuePair<Guid, Executor> execKVP in engines) {
+        if (execKVP.Value.ExecutionState != ExecutionState.Started && execKVP.Value.CurrentMessage == MessageContainer.MessageType.NoMessage) {
+          Logger.Info("Checking for JobId: " + execKVP.Value.JobId);
+          Thread finThread = new Thread(new ParameterizedThreadStart(GetFinishedJob));
+          finThread.Start(execKVP.Value.JobId);
+        }
+      }
+    }
+
+    #endregion
+
+    public Dictionary<Guid, Executor> ExecutionEngines {
+      get { return engines; }
+    }
+
+    internal Dictionary<Guid, JobDto> Jobs {
+      get { return jobs; }
+    }
+
+    void appDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) {
+      Logger.Error("Exception in AppDomain: " + e.ExceptionObject.ToString());
+    }
+
+    /// <summary>
+    /// Kill a appdomain with a specific id.
+    /// </summary>
+    /// <param name="id">the GUID of the job</param>
+    private void KillAppDomain(Guid id) {
+      Logger.Debug("Shutting down Appdomain for Job " + id);
+      lock (engines) {
+        try {
+          if (engines.ContainsKey(id))
+            engines[id].Dispose();
+          if (appDomains.ContainsKey(id)) {
+            appDomains[id].UnhandledException -= new UnhandledExceptionEventHandler(appDomain_UnhandledException);
+            AppDomain.Unload(appDomains[id]);
+            appDomains.Remove(id);
+          }
+          engines.Remove(id);
+          jobs.Remove(id);
+          PluginCache.Instance.DeletePluginsForJob(id);
+          GC.Collect();
+        }
+        catch (Exception ex) {
+          Logger.Error("Exception when unloading the appdomain: ", ex);
+        }
+      }
+      GC.Collect();
+    }
+  }
+
+
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/HeartbeatManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/HeartbeatManager.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/HeartbeatManager.cs	(revision 4340)
@@ -0,0 +1,167 @@
+#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 System.Timers;
+using HeuristicLab.Hive.Slave.Common;
+using HeuristicLab.Hive.Slave.Communication;
+using System.Diagnostics;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.Slave.Core.ConfigurationManager;
+using HeuristicLab.Tracing;
+using System.Threading;
+using HeuristicLab.Hive.Slave.Communication.SlaveService;
+
+namespace HeuristicLab.Hive.Slave.Core {
+  /// <summary>
+  /// Heartbeat class. It sends every x ms a heartbeat to the server and receives a Message
+  /// </summary>
+  public class HeartbeatManager {
+
+    private bool offline;
+
+    public TimeSpan Interval { get; set; }
+
+    private Thread heartBeatThread;
+
+    private static object locker = new object();
+
+    public HeartbeatManager() {
+      Interval = new TimeSpan(0,0,10);
+    }
+
+    public HeartbeatManager(TimeSpan interval) {
+      Interval = interval;
+    }
+
+    private WcfService wcfService;
+
+    private bool abortThreadPending;
+
+    ReaderWriterLockSlim heartBeatThreadIsSleepingLock = new ReaderWriterLockSlim();
+    private bool heartBeatThreadIsSleeping = false;
+
+    /// <summary>
+    /// Starts the Heartbeat signal.
+    /// </summary>
+    public void StartHeartbeat() {
+      wcfService = WcfService.Instance;
+      wcfService.ProcessHeartBeatCompleted += new EventHandler<ProcessHeartBeatCompletedEventArgs>(wcfService_ProcessHeartBeatCompleted);
+      abortThreadPending = false;
+      heartBeatThread = GetHeartBeatThread();
+      heartBeatThread.Start();
+    }
+
+    private Thread GetHeartBeatThread() {
+      return new Thread(() => {
+        while (!abortThreadPending) {
+          try {
+            lock (locker) {
+              if (wcfService.ConnState != NetworkEnum.WcfConnState.Connected) {
+                wcfService.Connect(); // Login happens automatically upon successufl connection
+              }
+              if (!wcfService.LoggedIn) {
+                wcfService.Login(ConfigManager.Instance.GetClientInfo()); // if login faild previously try again
+              }
+
+              if (wcfService.LoggedIn) {
+                SlaveDto info = ConfigManager.Instance.GetClientInfo();
+
+                HeartBeatData heartBeatData = new HeartBeatData {
+                  SlaveId = info.Id,
+                  FreeCores = info.NrOfCores - ConfigManager.Instance.GetUsedCores(),
+                  FreeMemory = GetFreeMemory(),
+                  JobProgress = ConfigManager.Instance.GetProgressOfAllJobs(),
+                  IsAllowedToCalculate = UptimeManager.Instance.IsAllowedToCalculate() && UptimeManager.Instance.CalendarAvailable
+                };
+
+                if (!heartBeatData.IsAllowedToCalculate) {
+                  // stop all running jobs and send snapshots to server
+                  MessageQueue.GetInstance().AddMessage(MessageContainer.MessageType.UptimeLimitDisconnect);
+                }
+
+                Logger.Debug("Sending Heartbeat: " + heartBeatData);
+                wcfService.ProcessHeartBeatAsync(heartBeatData);
+              }
+
+            } // lock
+            try {
+              heartBeatThreadIsSleepingLock.EnterWriteLock();
+              heartBeatThreadIsSleeping = true;
+              heartBeatThreadIsSleepingLock.ExitWriteLock();
+
+              Thread.Sleep(Interval);
+
+              heartBeatThreadIsSleepingLock.EnterWriteLock();
+              heartBeatThreadIsSleeping = false;
+              heartBeatThreadIsSleepingLock.ExitWriteLock();
+            }
+            catch (ThreadInterruptedException e) {
+              Logger.Debug("Heartbeat sleep interrupted");
+            }
+          }
+          catch (Exception e) {
+            Logger.Error("Heartbeat Thread failed badly: " + e.Message);
+          }
+        } // while
+        abortThreadPending = false;
+        Logger.Debug("Heartbeat thread stopped");
+      });
+    }
+
+    private int GetFreeMemory() {
+      PerformanceCounter counter = new PerformanceCounter("Memory", "Available Bytes", true);
+      int mb = (int)(counter.NextValue() / 1024 / 1024);
+      return mb;
+    }
+
+    void wcfService_ProcessHeartBeatCompleted(object sender, ProcessHeartBeatCompletedEventArgs e) {
+      Logger.Debug("Heartbeat Response received");
+      e.Result.ActionRequest.ForEach(mc => MessageQueue.GetInstance().AddMessage(mc));
+    }
+
+    public void StopHeartBeat() {
+      abortThreadPending = true;
+      heartBeatThread.Interrupt();
+      heartBeatThread.Join();
+    }
+
+    /// <summary>
+    /// use this method to singalize there is work to do (to avoid the waiting period if its clear that actions are required)
+    /// </summary>
+    public void InterruptHeartBeatThread() {
+      // deal with ReadWriteLock to avoid interrupting the thread while it is in SleepOrWait due to another reason (like waiting for a resource in a lock-statement)
+      heartBeatThreadIsSleepingLock.EnterReadLock();
+      Debug.WriteLine("InterruptHeartBeatThread");
+      if (heartBeatThreadIsSleeping) {
+        Debug.WriteLine("will interrupt heartbeatthread");
+        heartBeatThread.Interrupt();
+      } else {
+        Debug.WriteLine("will not interrupt heartbeatthread");
+      }
+      heartBeatThreadIsSleepingLock.ExitReadLock();
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/HeuristicLab.Hive.Slave.Core-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/HeuristicLab.Hive.Slave.Core-3.3.csproj	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/HeuristicLab.Hive.Slave.Core-3.3.csproj	(revision 4340)
@@ -0,0 +1,203 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{5010BD86-23B7-4F8C-888A-76D21AD5266A}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Slave.Core</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Slave.Core-3.3</AssemblyName>
+    <ProjectTypeGuids>{3D9AD99F-2412-4246-B90B-4EAA41C64699};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Tracing-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Tracing-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="SlaveConsoleService\SlaveConsoleCommunicator.cs" />
+    <Compile Include="SlaveConsoleService\SlaveConsoleServer.cs" />
+    <Compile Include="SlaveConsoleService\Interfaces\ISlaveConsoleCommunicator.cs" />
+    <Compile Include="SlaveConsoleService\TransferObjects\ConnectionContainer.cs" />
+    <Compile Include="SlaveConsoleService\TransferObjects\JobStatus.cs" />
+    <Compile Include="SlaveConsoleService\TransferObjects\StatusCommons.cs" />
+    <Compile Include="ConfigurationManager\AppointmentContainer.cs" />
+    <Compile Include="ConfigurationManager\SlaveStatusInfo.cs" />
+    <Compile Include="ConfigurationManager\ConfigManager.cs" />
+    <Compile Include="ConfigurationManager\UptimeManager.cs" />
+    <Compile Include="Core.cs" />
+    <Compile Include="HeuristicLabHiveSlaveCoreApplication.cs" />
+    <Compile Include="HeuristicLabHiveSlaveCorePlugin.cs" />
+    <Compile Include="HeartbeatManager.cs" />
+    <Compile Include="JobStorage\JobStorageInfo.cs" />
+    <Compile Include="JobStorage\JobStorageManager.cs" />
+    <Compile Include="PluginCache.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+      <DependentUpon>Settings.settings</DependentUpon>
+    </Compile>
+    <Compile Include="Settings.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config" />
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="Properties\Settings.settings">
+      <Generator>PublicSettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadata Include="Service References\" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Calendar\3.3\HeuristicLab.Calendar-3.3.csproj">
+      <Project>{D17A4D6A-4CAA-4470-8A19-F42463C021FD}</Project>
+      <Name>HeuristicLab.Calendar-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.DataAccess\3.3\HeuristicLab.DataAccess-3.3.csproj">
+      <Project>{9076697B-C151-46CD-95BC-1D059492B478}</Project>
+      <Name>HeuristicLab.DataAccess-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Slave.Common\3.3\HeuristicLab.Hive.Slave.Common-3.3.csproj">
+      <Project>{89F4BC52-C174-481E-9BD2-3814171020E8}</Project>
+      <Name>HeuristicLab.Hive.Slave.Common-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Contracts\3.3\HeuristicLab.Hive.Contracts-3.3.csproj">
+      <Project>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</Project>
+      <Name>HeuristicLab.Hive.Contracts-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.JobBase\3.3\HeuristicLab.Hive.JobBase-3.3.csproj">
+      <Project>{21187322-52DD-4243-80A4-A85F0263E63B}</Project>
+      <Name>HeuristicLab.Hive.JobBase-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Slave.Communication\3.3\HeuristicLab.Hive.Slave.Communication-3.3.csproj">
+      <Project>{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}</Project>
+      <Name>HeuristicLab.Hive.Slave.Communication-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Slave.ExecutionEngine\3.3\HeuristicLab.Hive.Slave.ExecutionEngine-3.3.csproj">
+      <Project>{1605256A-1CB3-44AB-AAFF-577093EE5789}</Project>
+      <Name>HeuristicLab.Hive.Slave.ExecutionEngine-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <ProjectExtensions>
+    <VisualStudio>
+      <FlavorProperties GUID="{3D9AD99F-2412-4246-B90B-4EAA41C64699}">
+        <WcfProjectProperties>
+          <AutoStart>False</AutoStart>
+        </WcfProjectProperties>
+      </FlavorProperties>
+    </VisualStudio>
+  </ProjectExtensions>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/HeuristicLabHiveSlaveCoreApplication.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/HeuristicLabHiveSlaveCoreApplication.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/HeuristicLabHiveSlaveCoreApplication.cs	(revision 4340)
@@ -0,0 +1,40 @@
+﻿#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.PluginInfrastructure;
+using System.Diagnostics;
+using HeuristicLab.Hive.Slave.Common;
+using System.Timers;
+using System.Threading;
+
+namespace HeuristicLab.Hive.Slave.Core {
+  [Application("Hive Slave", "Hive Slave Core")]
+  public class HeuristicLabHiveSlaveCoreApplication : ApplicationBase {
+    public override void Run() {
+      Core core = new Core();
+      core.Start();
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/HeuristicLabHiveSlaveCorePlugin.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/HeuristicLabHiveSlaveCorePlugin.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/HeuristicLabHiveSlaveCorePlugin.cs	(revision 4340)
@@ -0,0 +1,42 @@
+﻿#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.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Slave.Core {
+  [Plugin("HeuristicLab.Hive.Slave.Core", "3.3")]
+  [PluginFile("HeuristicLab.Hive.Slave.Core-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Calendar", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.DataAccess", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.Slave.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.Slave.Communication", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.Slave.ExecutionEngine", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.Contracts", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.JobBase", "3.3")]
+  [PluginDependency("HeuristicLab.Tracing", "3.3")]
+  public class HeuristicLabHiveSlaveCorePlugin: PluginBase {
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/JobStorage/JobStorageInfo.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/JobStorage/JobStorageInfo.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/JobStorage/JobStorageInfo.cs	(revision 4340)
@@ -0,0 +1,13 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Slave.Core.JobStorage {
+  public class JobStorageInfo {
+    public String ServerIP { get; set; }
+    public long ServerPort { get; set; }
+    public DateTime TimeFinished { get; set; }
+    public Guid JobID { get; set; }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/JobStorage/JobStorageManager.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/JobStorage/JobStorageManager.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/JobStorage/JobStorageManager.cs	(revision 4340)
@@ -0,0 +1,103 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.IO;
+using HeuristicLab.Hive.Slave.Common;
+using HeuristicLab.Hive.Slave.Communication;
+using HeuristicLab.Hive.Slave.Core.ConfigurationManager;
+using HeuristicLab.Hive.Contracts;
+using System.Xml.Serialization;
+using System.Diagnostics;
+using System.Xml;
+using HeuristicLab.Tracing;
+using HeuristicLab.Hive.Contracts.ResponseObjects;
+
+namespace HeuristicLab.Hive.Slave.Core.JobStorage {
+  public class JobStorageManager {
+
+    private static List<JobStorageInfo> storedJobsList = new List<JobStorageInfo>();
+
+    private static String path = System.IO.Directory.GetCurrentDirectory() + "\\Hive.Slave.Jobs\\";
+
+    public static void PersistObjectToDisc(String serverIP, long serverPort, Guid jobId, byte[] job) {
+      String filename = serverIP + "." + serverPort + "." + jobId.ToString();
+      JobStorageInfo info = new JobStorageInfo { JobID = jobId, ServerIP = serverIP, ServerPort = serverPort, TimeFinished = DateTime.Now };
+
+      Stream jobstream = null;
+      try {
+        jobstream = File.Create(path + filename + ".dat");
+        jobstream.Write(job, 0, job.Length);
+        storedJobsList.Add(info);
+        Logger.Info("Job " + info.JobID + " stored on the harddisc");
+      }
+      catch (Exception e) {
+        Logger.Error("Exception: ", e);
+      }
+      finally {
+        if (jobstream != null)
+          jobstream.Close();
+      }
+
+      StoreJobList();
+    }
+
+    public static void CheckAndSubmitJobsFromDisc() {
+      for (int index = storedJobsList.Count; index > 0; index--) {
+        if (WcfService.Instance.LoggedIn && (storedJobsList[index - 1].ServerIP == WcfService.Instance.ServerIp)) {
+          String filename = storedJobsList[index - 1].ServerIP + "." + storedJobsList[index - 1].ServerPort + "." + storedJobsList[index - 1].JobID.ToString();
+          Logger.Info("Sending stored job " + storedJobsList[index - 1].JobID + " to the server");
+          try {
+            byte[] job = File.ReadAllBytes(path + filename + ".dat");
+            if (WcfService.Instance.IsJobStillNeeded(storedJobsList[index - 1].JobID).StatusMessage == ResponseStatus.Ok) {
+              ResponseResultReceived res = WcfService.Instance.StoreFinishedJobResultsSync(ConfigManager.Instance.GetClientInfo().Id, storedJobsList[index - 1].JobID, job, 1.00, null, true);
+              Logger.Info("Sending of job " + storedJobsList[index - 1].JobID + " done");
+            }
+            SlaveStatusInfo.JobsProcessed++;
+            storedJobsList.Remove(storedJobsList[index - 1]);
+            File.Delete(path + filename + ".dat");
+          }
+          catch (Exception e) {
+            Logger.Error("Job not on hdd but on list - deleting job from list ", e);
+            storedJobsList.Remove(storedJobsList[index - 1]);
+            StoreJobList();
+          }
+        }
+      }
+    }
+
+    public static void StoreJobList() {
+      XmlSerializer serializer = new XmlSerializer(typeof(List<JobStorageInfo>));
+      TextWriter writer = new StreamWriter(Path.Combine(path, "list.xml"));
+      serializer.Serialize(writer, storedJobsList);
+      writer.Close();
+    }
+
+    static JobStorageManager() {
+      Logger.Info("Restoring Joblist from Harddisk");
+      if (!Directory.Exists(path))
+        Directory.CreateDirectory(path);
+
+      XmlSerializer serializer = new XmlSerializer(typeof(List<JobStorageInfo>));
+      FileStream stream = null;
+      if (File.Exists(Path.Combine(path, "list.xml"))) {
+        try {
+          stream = new FileStream(Path.Combine(path, "list.xml"), FileMode.Open);
+          XmlTextReader reader = new XmlTextReader(stream);
+          storedJobsList = (List<JobStorageInfo>)serializer.Deserialize(reader);
+          Logger.Info("Loaded " + storedJobsList.Count + " Elements");
+        }
+        catch (Exception e) {
+          Logger.Error("Exception while loading the Stored Job List", e);
+        }
+        finally {
+          if (stream != null)
+            stream.Dispose();
+        }
+      } else {
+        Logger.Info("no stored jobs on harddisk, starting new list");
+        storedJobsList = new List<JobStorageInfo>();
+      }
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/PluginCache.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/PluginCache.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/PluginCache.cs	(revision 4340)
@@ -0,0 +1,143 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Runtime.CompilerServices;
+using HeuristicLab.Hive.Slave.Communication;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.PluginInfrastructure.Manager;
+using HeuristicLab.Tracing;
+using System.Reflection;
+
+namespace HeuristicLab.Hive.Slave.Core {
+  public class PluginCache {
+
+    private static PluginCache instance = null;
+
+    public string PluginRepositoryDir { get; set; }
+
+    private List<PluginDescription> cachedPlugins = new List<PluginDescription>();
+
+    private PluginManager pm;
+
+    public static PluginCache Instance {
+      get {
+        if (instance == null)
+          instance = new PluginCache();
+        return instance;
+      }
+    }
+
+    public PluginCache() {
+      PluginRepositoryDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "plugins");
+      
+      this.pm = new PluginManager(PluginRepositoryDir);
+      DoUpdateRun();
+    }
+
+    private void DoUpdateRun() {
+      if (!Directory.Exists(PluginRepositoryDir)) {
+        Directory.CreateDirectory(PluginRepositoryDir);
+      }
+      pm.DiscoverAndCheckPlugins();
+      cachedPlugins = new List<PluginDescription>(pm.Plugins);
+    }
+
+    [MethodImpl(MethodImplOptions.Synchronized)]
+    public bool CopyPluginsForJob(List<HivePluginInfoDto> requests, Guid jobId) {
+      String targetDir = Path.Combine(PluginRepositoryDir, jobId.ToString());
+
+      if (Directory.Exists(targetDir)) {
+        Directory.Delete(targetDir, true);
+      }
+
+      DirectoryInfo di = Directory.CreateDirectory(targetDir);
+
+      foreach (HivePluginInfoDto requestedPlugin in requests) {
+        PluginDescription pd = cachedPlugins.Where(cp =>
+          cp.Name == requestedPlugin.Name &&
+          cp.Version.Major == requestedPlugin.Version.Major &&
+          cp.Version.Minor == requestedPlugin.Version.Minor &&
+          cp.Version.Revision >= requestedPlugin.Version.Revision).
+          SingleOrDefault();
+        if (pd == null) {
+          return false;
+        }
+
+        foreach (IPluginFile ipf in pd.Files) {
+          string x = targetDir + ipf.Name.Split('\\').Last();
+          string y = Path.Combine(targetDir, Path.GetFileName(ipf.Name));
+
+          //File.Copy(ipf.Name, targetDir + ipf.Name.Split('\\').Last());
+          File.Copy(ipf.Name, Path.Combine(targetDir, Path.GetFileName(ipf.Name)));
+        }
+      }
+      return true;
+    }
+
+    [MethodImpl(MethodImplOptions.Synchronized)]
+    internal void PreparePlugins(List<HivePluginInfoDto> requiredPlugins) {
+      Logger.Debug("Fetching plugins for job");
+      List<HivePluginInfoDto> localPlugins = new List<HivePluginInfoDto>();
+      List<HivePluginInfoDto> neededPlugins = new List<HivePluginInfoDto>();
+      List<HivePluginInfoDto> missingPlugins = new List<HivePluginInfoDto>();
+      bool found = false;
+
+      foreach (HivePluginInfoDto info in requiredPlugins) {
+        //we MAY run in problems here - if there is a plugin twice in requests, there may be added two different versions of the plugin
+        foreach (PluginDescription cachedPlugin in cachedPlugins) {
+          if (info.Name.Equals(cachedPlugin.Name)) {
+            Logger.Debug("Found plugin " + info.Name + ", " + info.Version);
+            localPlugins.Add(new HivePluginInfoDto() { Id = new Guid(), Name = info.Name, Version = info.Version, Update = true });
+            neededPlugins.Add(info);
+            found = true;
+
+            break;
+          }
+        }
+        if (!found) {
+          Logger.Debug("Plugin NOT found " + info.Name + ", " + info.Version);
+          missingPlugins.Add(info);
+        }
+        found = false;
+      }
+
+      Logger.Debug("First run - Update the plugins in the cache");
+      localPlugins.AddRange(missingPlugins);
+      IEnumerable<CachedHivePluginInfoDto> updateablePlugins = WcfService.Instance.RequestPlugins(localPlugins);
+
+      foreach (CachedHivePluginInfoDto updateablePlugin in updateablePlugins) {
+        PluginDescription pd = cachedPlugins.Where(cachedPlugin => cachedPlugin.Name.Equals(updateablePlugin.Name)).SingleOrDefault();
+
+        if (pd != null) {
+          Logger.Debug("deleting old files");
+          foreach (IPluginFile ipf in pd.Files) {
+            File.Delete(ipf.Name);
+          }
+        }
+
+        Logger.Debug("deleted old files");
+        Logger.Debug("creating new files");
+        foreach (HivePluginFile pf in updateablePlugin.PluginFiles) {
+          string x = PluginRepositoryDir + pf.Name.Split('\\').Last();
+          string y = Path.Combine(PluginRepositoryDir, Path.GetFileName(pf.Name));
+          File.WriteAllBytes(Path.Combine(PluginRepositoryDir, Path.GetFileName(pf.Name)), pf.BinaryFile);
+        }
+
+        Logger.Debug("created new files");
+        DoUpdateRun();
+      }
+    }
+
+    internal void DeletePluginsForJob(Guid id) {
+      try {
+        Logger.Debug("unloading...");
+        Directory.Delete(Path.Combine(PluginRepositoryDir, id.ToString()), true);
+      }
+      catch (Exception ex) {
+        Logger.Debug("failed while unloading " + id + " with exception " + ex);
+      }
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Properties/AssemblyInfo.frame	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Properties/AssemblyInfo.frame	(revision 4340)
@@ -0,0 +1,60 @@
+#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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Security;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Hive.Slave.Core")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AllowPartiallyTrustedCallers]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("390a4020-8f30-4c57-b039-6f3647df86b0")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Properties/Settings.Designer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Properties/Settings.Designer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Properties/Settings.Designer.cs	(revision 4340)
@@ -0,0 +1,50 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Slave.Core.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+    public sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("")]
+        public string ServerIP {
+            get {
+                return ((string)(this["ServerIP"]));
+            }
+            set {
+                this["ServerIP"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("00000000-0000-0000-0000-000000000000")]
+        public global::System.Guid Guid {
+            get {
+                return ((global::System.Guid)(this["Guid"]));
+            }
+            set {
+                this["Guid"] = value;
+            }
+        }
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Properties/Settings.settings
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Properties/Settings.settings	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Properties/Settings.settings	(revision 4340)
@@ -0,0 +1,12 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Hive.Slave.Core.Properties" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="ServerIP" Type="System.String" Scope="User">
+      <Value Profile="(Default)" />
+    </Setting>
+    <Setting Name="Guid" Type="System.Guid" Scope="User">
+      <Value Profile="(Default)">00000000-0000-0000-0000-000000000000</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Settings.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Settings.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Settings.cs	(revision 4340)
@@ -0,0 +1,28 @@
+﻿namespace HeuristicLab.Hive.Slave.Core.Properties {
+    
+    
+    // This class allows you to handle specific events on the settings class:
+    //  The SettingChanging event is raised before a setting's value is changed.
+    //  The PropertyChanged event is raised after a setting's value is changed.
+    //  The SettingsLoaded event is raised after the setting values are loaded.
+    //  The SettingsSaving event is raised before the setting values are saved.
+    public sealed partial class Settings {
+        
+        public Settings() {
+            // // To add event handlers for saving and changing settings, uncomment the lines below:
+            //
+            // this.SettingChanging += this.SettingChangingEventHandler;
+            //
+            // this.SettingsSaving += this.SettingsSavingEventHandler;
+            //
+        }
+        
+        private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) {
+            // Add code to handle the SettingChangingEvent event here.
+        }
+        
+        private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) {
+            // Add code to handle the SettingsSaving event here.
+        }
+    }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/Interfaces/ISlaveConsoleCommunicator.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/Interfaces/ISlaveConsoleCommunicator.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/Interfaces/ISlaveConsoleCommunicator.cs	(revision 4340)
@@ -0,0 +1,71 @@
+﻿#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 System.ServiceModel;
+using HeuristicLab.Calendar;
+
+namespace HeuristicLab.Hive.Slave.Core.SlaveConsoleService.Interfaces {
+  /// <summary>
+  /// Defines the interfaces for the Client Console
+  /// </summary>
+  [ServiceContract]
+  public interface ISlaveConsoleCommunicator {
+    /// <summary>
+    /// Gets all status information concerning the client Service
+    /// </summary>
+    /// <returns>the StatusCommons Object, filled with the client details</returns>
+    [OperationContract]
+    StatusCommons GetStatusInfos();
+    /// <summary>
+    /// Set the connection settings in the wcfService
+    /// </summary>
+    /// <param name="container">the container with the connection details</param>
+    [OperationContract]
+    void SetConnection(ConnectionContainer container);
+    /// <summary>
+    /// Signals the client to disconnect from the server
+    /// </summary>
+    //[OperationContract]
+    //void Disconnect();
+    /// <summary>
+    /// Get the current connection details
+    /// </summary>
+    /// <returns>the ConnectionContainer Object</returns>
+    [OperationContract]
+    ConnectionContainer GetCurrentConnection();
+    /// <summary>
+    /// Signals the client to exit all jobs and shutdown
+    /// </summary>
+    [OperationContract]
+    void ShutdownClient();
+
+    [OperationContract]
+    void SetUptimeCalendar(List<Appointment> appointments);
+
+    [OperationContract]
+    List<Appointment> GetUptimeCalendar();
+
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/SlaveConsoleCommunicator.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/SlaveConsoleCommunicator.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/SlaveConsoleCommunicator.cs	(revision 4340)
@@ -0,0 +1,48 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Slave.Core.SlaveConsoleService.Interfaces;
+using HeuristicLab.Hive.Slave.Core.ConfigurationManager;
+using HeuristicLab.Hive.Slave.Communication;
+using HeuristicLab.Hive.Slave.Common;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Calendar;
+
+namespace HeuristicLab.Hive.Slave.Core.SlaveConsoleService {
+  public class SlaveConsoleCommunicator: ISlaveConsoleCommunicator {
+    #region IClientConsoleCommunicator Members
+
+    public StatusCommons GetStatusInfos() {      
+        return ConfigManager.Instance.GetStatusForClientConsole();
+    }
+
+    public void SetConnection(ConnectionContainer container) {
+      ConfigManager.Instance.SetServerIP(container);
+      //WcfService.Instance.Connect(container.IPAdress);
+      WcfService.Instance.ServerIp = container.IPAdress;
+    }
+
+    //public void Disconnect() {
+    //  WcfService.Instance.Disconnect();
+    //}   
+
+    public ConnectionContainer GetCurrentConnection() {
+      return new ConnectionContainer { IPAdress = WcfService.Instance.ServerIp };
+    }
+
+    public void ShutdownClient() {
+      MessageQueue.GetInstance().AddMessage(MessageContainer.MessageType.Shutdown);
+    }    
+
+    public void SetUptimeCalendar(List<Appointment> appointments) {
+      UptimeManager.Instance.SetAppointments(true, false, appointments);
+    }
+
+    public List<Appointment> GetUptimeCalendar() {
+      return UptimeManager.Instance.AppContainer.Appointments;
+    }
+
+    #endregion
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/SlaveConsoleServer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/SlaveConsoleServer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/SlaveConsoleServer.cs	(revision 4340)
@@ -0,0 +1,24 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ServiceModel.Description;
+using System.ServiceModel;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Hive.Slave.Core.SlaveConsoleService.Interfaces;
+using HeuristicLab.Hive.Contracts;
+
+namespace HeuristicLab.Hive.Slave.Core.SlaveConsoleService {
+  public class SlaveConsoleServer {
+    ServiceHost host = null;
+
+    public void Start() {
+      host = new ServiceHost(ApplicationManager.Manager.GetTypes(typeof(ISlaveConsoleCommunicator)).First());
+      host.Open();
+    }
+
+    public void Close() {
+      host.Close();
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/TransferObjects/ConnectionContainer.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/TransferObjects/ConnectionContainer.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/TransferObjects/ConnectionContainer.cs	(revision 4340)
@@ -0,0 +1,34 @@
+﻿#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 System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Slave.Core.SlaveConsoleService {
+  [DataContract]
+  public class ConnectionContainer {
+    [DataMember]
+    public string IPAdress { get; set; }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/TransferObjects/JobStatus.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/TransferObjects/JobStatus.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/TransferObjects/JobStatus.cs	(revision 4340)
@@ -0,0 +1,47 @@
+﻿#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 System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Slave.Core.SlaveConsoleService {
+  [DataContract]
+  public class JobStatus {
+    /// <summary>
+    /// Id of the Job
+    /// </summary>
+    [DataMember]
+    public Guid JobId { get; set; }
+    /// <summary>
+    /// When has the calculation of the Job begun?
+    /// </summary>
+    [DataMember]
+    public DateTime Since { get; set; }
+    /// <summary>
+    /// Current progress
+    /// </summary>
+    [DataMember]
+    public double Progress { get; set; }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/TransferObjects/StatusCommons.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/TransferObjects/StatusCommons.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/SlaveConsoleService/TransferObjects/StatusCommons.cs	(revision 4340)
@@ -0,0 +1,54 @@
+﻿#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.Slave.Common;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Slave.Core.SlaveConsoleService {
+  /// <summary>
+  /// Various Status Information for the ClientConsole
+  /// </summary>
+  [DataContract]
+  public class StatusCommons {    
+    [DataMember]
+    public Guid ClientGuid { get; set; }
+    [DataMember]
+    public NetworkEnum.WcfConnState Status { get; set; }
+    [DataMember]    
+    public DateTime ConnectedSince { get; set; }
+    [DataMember]
+    public int TotalCores { get; set; }
+    [DataMember]
+    public int FreeCores { get; set; }
+    [DataMember]
+    public int JobsFetched { get; set; }
+    [DataMember]
+    public int JobsDone { get; set; }
+    [DataMember]
+    public int JobsAborted { get; set; }
+    [DataMember]
+    public List<JobStatus> Jobs { get; set; }   
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/app.config
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/app.config	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/app.config	(revision 4340)
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+  <configSections>
+    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
+      <section name="HeuristicLab.Hive.Slave.Core.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+    </sectionGroup>
+  </configSections>
+  <userSettings>
+    <HeuristicLab.Hive.Slave.Core.Properties.Settings>
+      <setting name="ServerIP" serializeAs="String">
+        <value />
+      </setting>
+      <setting name="Guid" serializeAs="String">
+        <value>00000000-0000-0000-0000-000000000000</value>
+      </setting>
+    </HeuristicLab.Hive.Slave.Core.Properties.Settings>
+  </userSettings>
+  <system.serviceModel>
+    <behaviors>
+      <serviceBehaviors>
+        <behavior name="SlaveConsoleServiceBehaviour">
+          <serviceMetadata />
+        </behavior>
+      </serviceBehaviors>
+    </behaviors>
+    <bindings>
+      <netTcpBinding>
+        <binding name="SlaveConsoleTcpBinding">
+          <security mode="None">
+            <transport/>
+          </security>
+        </binding>
+      </netTcpBinding>
+    </bindings>
+    <services>
+      <service behaviorConfiguration="SlaveConsoleServiceBehaviour"
+        name="HeuristicLab.Hive.Slave.Core.SlaveConsoleService.SlaveConsoleCommunicator">
+        <endpoint binding="netTcpBinding" bindingConfiguration="SlaveConsoleTcpBinding"
+          name="SlaveConsoleTcpEndpoint" contract="HeuristicLab.Hive.Slave.Core.SlaveConsoleService.Interfaces.ISlaveConsoleCommunicator" />
+        <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
+          name="SlaveConsoleTcpMexEndpoint" contract="IMetadataExchange" />
+        <host>
+          <baseAddresses>
+            <add baseAddress="net.tcp://localhost:8000/SlaveConsoleService" />
+          </baseAddresses>
+        </host>
+      </service>
+    </services>
+  </system.serviceModel>
+</configuration>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/Executor.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/Executor.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/Executor.cs	(revision 4340)
@@ -0,0 +1,152 @@
+﻿#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 HeuristicLab.Hive.Slave.Common;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.JobBase;
+using HeuristicLab.Persistence.Core;
+using HeuristicLab.Common;
+using System.Xml.Serialization;
+using HeuristicLab.Persistence.Default.Xml;
+using System.IO;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Hive.Slave.ExecutionEngine {
+  public class Executor : MarshalByRefObject, IDisposable {
+    public Guid JobId { get; set; }
+    public IJob Job { get; set; }
+    public MessageContainer.MessageType CurrentMessage { get; set; }
+    public Exception CurrentException { get; set; }
+    public MessageQueue Queue { get; set; }
+
+    public bool JobIsFinished { get; set; }
+
+    public ExecutionState ExecutionState {
+      get {
+        return Job.ExecutionState;
+      }
+    }
+
+    public double Progress {
+      get {
+        return Job.Progress;
+      }
+    }
+
+    public DateTime CreationTime { get; set; }
+
+    public void Start(byte[] serializedJob) {
+      CreationTime = DateTime.Now;
+      Job = XmlParser.Deserialize<IJob>(new MemoryStream(serializedJob));
+
+      Job.JobStopped += new EventHandler(Job_JobStopped);
+      Job.JobFailed += new EventHandler(Job_JobFailed);
+      Job.Prepare();
+      Job.Start();
+    }
+
+    void Job_JobFailed(object sender, EventArgs e) {
+      HeuristicLab.Common.EventArgs<Exception> ex = (HeuristicLab.Common.EventArgs<Exception>)e;
+      CurrentException = ex.Value;
+      Queue.AddMessage(new MessageContainer(MessageContainer.MessageType.FinishedJob, JobId));
+    }
+
+    public void StartOnlyJob() {
+      Job.Start();
+    }
+
+    public void Abort() {
+      CurrentMessage = MessageContainer.MessageType.AbortJob;
+      if (Job.ExecutionState != Core.ExecutionState.Stopped) {
+        Job.Stop();
+      }
+    }
+
+    void Job_JobStopped(object sender, EventArgs e) {
+      if (CurrentMessage == MessageContainer.MessageType.NoMessage) {
+        Queue.AddMessage(new MessageContainer(MessageContainer.MessageType.FinishedJob, JobId));
+        JobIsFinished = true;
+      } else if (CurrentMessage == MessageContainer.MessageType.RequestSnapshot) {
+        Queue.AddMessage(new MessageContainer(MessageContainer.MessageType.SnapshotReady, JobId));
+      } else if (CurrentMessage == MessageContainer.MessageType.AbortJob) {
+        Queue.AddMessage(new MessageContainer(MessageContainer.MessageType.JobAborted, JobId));
+      }
+    }
+
+    public byte[] GetSnapshot() {
+      //if the job is still running, something went VERY bad.
+      if (Job.ExecutionState == Core.ExecutionState.Started) {
+        return null;
+      } else {
+        // Clear the Status message
+        CurrentMessage = MessageContainer.MessageType.NoMessage;
+        // Pack the whole job inside an xml document
+        byte[] job = SerializeJobObject();
+        // Restart the job
+        // Return the Snapshot
+        return job;
+      }
+    }
+
+    public byte[] GetFinishedJob() {
+      //Job isn't finished!
+      if (Job.ExecutionState == Core.ExecutionState.Started) {
+        throw new InvalidStateException("Job is still running");
+      } else {
+        byte[] jobArr = SerializeJobObject();
+        return jobArr;
+      }
+    }
+
+    public void RequestSnapshot() {
+      CurrentMessage = MessageContainer.MessageType.RequestSnapshot;
+      Job.Stop();
+    }
+
+    private byte[] SerializeJobObject() {
+      MemoryStream stream = new MemoryStream();
+      XmlGenerator.Serialize(Job, stream);
+      return stream.ToArray();
+    }
+
+    private void RestoreJobObject(byte[] sjob) {
+      Job = XmlParser.Deserialize<IJob>(new MemoryStream(sjob));
+    }
+
+    public Executor() {
+      CurrentMessage = MessageContainer.MessageType.NoMessage;
+      JobIsFinished = false;
+      //Job = new TestJob();
+    }
+
+    #region IDisposable Members
+
+    public void Dispose() {
+      Job.JobFailed -= new EventHandler(Job_JobFailed);
+      Job.JobFailed -= new EventHandler(Job_JobStopped);
+      Queue = null;
+      Job = null;
+    }
+
+    #endregion
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/HeuristicLab.Hive.Slave.ExecutionEngine-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/HeuristicLab.Hive.Slave.ExecutionEngine-3.3.csproj	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/HeuristicLab.Hive.Slave.ExecutionEngine-3.3.csproj	(revision 4340)
@@ -0,0 +1,143 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{1605256A-1CB3-44AB-AAFF-577093EE5789}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Slave.ExecutionEngine</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Slave.ExecutionEngine-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3" >
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Executor.cs" />
+    <Compile Include="HeuristicLabHiveSlaveExecutionEnginePlugin.cs" />
+    <Compile Include="InvalidStateException.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Contracts\3.3\HeuristicLab.Hive.Contracts-3.3.csproj">
+      <Project>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</Project>
+      <Name>HeuristicLab.Hive.Contracts-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.JobBase\3.3\HeuristicLab.Hive.JobBase-3.3.csproj">
+      <Project>{21187322-52DD-4243-80A4-A85F0263E63B}</Project>
+      <Name>HeuristicLab.Hive.JobBase-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Hive.Slave.Common\3.3\HeuristicLab.Hive.Slave.Common-3.3.csproj">
+      <Project>{89F4BC52-C174-481E-9BD2-3814171020E8}</Project>
+      <Name>HeuristicLab.Hive.Slave.Common-3.3</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/HeuristicLabHiveSlaveExecutionEnginePlugin.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/HeuristicLabHiveSlaveExecutionEnginePlugin.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/HeuristicLabHiveSlaveExecutionEnginePlugin.cs	(revision 4340)
@@ -0,0 +1,39 @@
+﻿#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.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Slave.ExecutionEngine {
+  [Plugin("HeuristicLab.Hive.Slave.ExecutionEngine", "3.3")]
+  [PluginFile("HeuristicLab.Hive.Slave.ExecutionEngine-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.Slave.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.Contracts", "3.3")]
+  [PluginDependency("HeuristicLab.Hive.JobBase", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")] 
+  public class HeuristicLabHiveSlaveExecutionEnginePlugin: PluginBase {
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/InvalidStateException.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/InvalidStateException.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/InvalidStateException.cs	(revision 4340)
@@ -0,0 +1,24 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Slave.ExecutionEngine {
+  [global::System.Serializable]
+  public class InvalidStateException : Exception {
+    //
+    // For guidelines regarding the creation of new exception types, see
+    //    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconerrorraisinghandlingguidelines.asp
+    // and
+    //    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncscol/html/csharp07192001.asp
+    //
+
+    public InvalidStateException() { }
+    public InvalidStateException(string message) : base(message) { }
+    public InvalidStateException(string message, Exception inner) : base(message, inner) { }
+    protected InvalidStateException(
+    System.Runtime.Serialization.SerializationInfo info,
+    System.Runtime.Serialization.StreamingContext context)
+      : base(info, context) { }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/Properties/AssemblyInfo.frame	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/Properties/AssemblyInfo.frame	(revision 4340)
@@ -0,0 +1,60 @@
+#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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+using System.Security;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Hive.Slave.ExecutionEngine")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AllowPartiallyTrustedCallers]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("B6BA196A-F2E3-4de2-AE8A-02D4995F8B57")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/HeuristicLab.Hive.Tracing-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/HeuristicLab.Hive.Tracing-3.3.csproj	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/HeuristicLab.Hive.Tracing-3.3.csproj	(revision 4340)
@@ -0,0 +1,82 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{CDAD2510-299C-4FA2-B351-9D71A5AF20B7}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Tracing</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Tracing-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Tracing-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.Tracing-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="log4net">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\log4net.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="HeuristicLabHiveTracingPlugin.cs" />
+    <Compile Include="MethodCallPatternConverter.cs" />
+    <Compile Include="MethodCallPatternLayout.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="HeuristicLab.Hive.log4net.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/HeuristicLab.Hive.log4net.xml
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/HeuristicLab.Hive.log4net.xml	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/HeuristicLab.Hive.log4net.xml	(revision 4340)
@@ -0,0 +1,92 @@
+﻿<log4net>
+  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
+    <file value="Hive.log" />
+    <appendToFile value="true" />
+    <rollingStyle value="Size" />
+    <maxSizeRollBackups value="10" />
+    <maximumFileSize value="100MB" />
+    <staticLogFileName value="true" />
+    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
+    <layout type="HeuristicLab.Hive.Tracing.MethodCallPatternLayout, HeuristicLab.Hive.Tracing-3.3">
+      <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss.ffff} %-4timestamp %-5level %-5thread %logger.%RM - %message%newline%exception" />
+    </layout>
+  </appender>
+
+  <appender name="ServerRollingFileAppender" type="log4net.Appender.RollingFileAppender">
+    <file value="Hive.Server.log" />
+    <appendToFile value="true" />
+    <rollingStyle value="Size" />
+    <maxSizeRollBackups value="10" />
+    <maximumFileSize value="100MB" />
+    <staticLogFileName value="true" />
+    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
+    <layout type="HeuristicLab.Hive.Tracing.MethodCallPatternLayout, HeuristicLab.Hive.Tracing-3.3">
+      <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss.ffff} %-4timestamp %-5level %-5thread %logger.%RM - %message%newline%exception" />
+    </layout>
+  </appender>
+
+  <appender name="ClientRollingFileAppender" type="log4net.Appender.RollingFileAppender">
+    <file value="Hive.Slave.log" />
+    <appendToFile value="true" />
+    <rollingStyle value="Size" />
+    <maxSizeRollBackups value="10" />
+    <maximumFileSize value="100MB" />
+    <staticLogFileName value="true" />
+    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
+    <layout type="HeuristicLab.Hive.Tracing.MethodCallPatternLayout, HeuristicLab.Hive.Tracing-3.3">
+      <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss.ffff} %-4timestamp %-5level %-5thread %logger.%RM - %message%newline%exception" />
+    </layout>
+  </appender>
+  
+  <appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
+    <bufferSize value="128" />
+    <lossy value="true" />
+    <evaluator type="log4net.Core.LevelEvaluator">
+        <threshold value="DEBUG"/>
+    </evaluator>
+    <appender-ref ref="RollingFileAppender" />
+  </appender>
+
+  <appender name="ClientBufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
+    <bufferSize value="128" />
+    <lossy value="true" />
+    <evaluator type="log4net.Core.LevelEvaluator">
+      <threshold value="DEBUG"/>
+    </evaluator>
+    <appender-ref ref="ClientRollingFileAppender" />
+  </appender>
+
+  <appender name="ServerBufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
+    <bufferSize value="128" />
+    <lossy value="true" />
+    <evaluator type="log4net.Core.LevelEvaluator">
+      <threshold value="DEBUG"/>
+    </evaluator>
+    <appender-ref ref="ServerRollingFileAppender" />
+  </appender>
+  
+  <appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
+    <bufferSize value="128" />
+    <lossy value="true" />
+    <evaluator type="log4net.Core.LevelEvaluator">
+      <threshold value="DEBUG"/>
+    </evaluator>
+    <appender-ref ref="RollingFileAppender" />
+  </appender>
+  
+  <root>
+    <level value="DEBUG" />
+    <appender-ref ref="BufferingForwardingAppender" />
+  </root>
+
+  <logger name="HeuristicLab.Hive.Server">
+    <level value="DEBUG" />
+    <appender-ref ref="ServerBufferingForwardingAppender" />    
+  </logger>
+
+  <logger name="HeuristicLab.Hive.Slave">
+    <level value="DEBUG" />
+    <appender-ref ref="ClientBufferingForwardingAppender" />  
+  </logger>
+  
+</log4net>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/HeuristicLabHiveTracingPlugin.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/HeuristicLabHiveTracingPlugin.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/HeuristicLabHiveTracingPlugin.cs	(revision 4340)
@@ -0,0 +1,15 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.JobBase {
+  [Plugin("HeuristicLab.Hive.Tracing", "3.3")]
+  [PluginFile("HeuristicLab.Hive.Tracing-3.3.dll", PluginFileType.Assembly)]
+  [PluginFile("HeuristicLab.Hive.log4net.xml", PluginFileType.Data)]
+  [PluginDependency("HeuristicLab.Tracing", "3.3")]
+  [PluginDependency("HeuristicLab.log4net", "1.2.10.0")]
+  public class HeuristicLabHiveTracingPlugin : PluginBase {
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/MethodCallPatternConverter.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/MethodCallPatternConverter.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/MethodCallPatternConverter.cs	(revision 4340)
@@ -0,0 +1,23 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using log4net.Util;
+using System.Diagnostics;
+
+namespace HeuristicLab.Hive.Tracing {
+  class MethodCallPatternConverter: PatternConverter {
+    protected override void Convert(System.IO.TextWriter writer, object state) {
+      StackTrace callStack = new StackTrace();
+      int i = 1;
+      while (i < callStack.FrameCount && !callStack.GetFrame(i).GetMethod().DeclaringType.FullName.StartsWith("HeuristicLab.Hive")) {
+        i++; 
+      }
+      StackFrame stack = new StackFrame(i);
+      var method = stack.GetMethod();
+      if (method != null) {
+        writer.Write(stack.GetMethod().Name);
+      }
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/MethodCallPatternLayout.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/MethodCallPatternLayout.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/MethodCallPatternLayout.cs	(revision 4340)
@@ -0,0 +1,17 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using log4net.Layout;
+using log4net.Util;
+
+namespace HeuristicLab.Hive.Tracing {
+  class MethodCallPatternLayout: PatternLayout {
+    protected override PatternParser CreatePatternParser(string pattern) {
+       PatternParser pp = base.CreatePatternParser(pattern);
+      pp.PatternConverters["RM"] = typeof (MethodCallPatternConverter);
+      return pp;
+      
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/Properties/AssemblyInfo.frame	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/Properties/AssemblyInfo.frame	(revision 4340)
@@ -0,0 +1,60 @@
+#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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+using System.Security;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Hive.Tracing")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AllowPartiallyTrustedCallers]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("B6BA196A-F2E3-4de2-AE8A-02D4995F8B57")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/app.config
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/app.config	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/app.config	(revision 4340)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+  <configSections>
+    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+      <section name="HeuristicLab.Tracing.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+    </sectionGroup>
+  </configSections>
+  <connectionStrings>
+  </connectionStrings>
+  <system.serviceModel>
+  </system.serviceModel>
+  <runtime>
+    <gcServer enabled="true"/>
+  </runtime>
+  
+  <userSettings>
+    <HeuristicLab.Tracing.Properties.Settings>
+      <setting name="TracingLog4netConfigFile" serializeAs="String">
+        <value>HeuristicLab.Hive.log4net.xml</value>
+      </setting>
+    </HeuristicLab.Tracing.Properties.Settings>
+  </userSettings>
+</configuration>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/CopyAssemblies.cmd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/CopyAssemblies.cmd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/CopyAssemblies.cmd	(revision 4340)
@@ -0,0 +1,21 @@
+FOR /F "skip=1 tokens=1-2 delims=: usebackq" %%G IN ("%ProjectDir%\Files.txt") DO echo "%%H" && copy "%SolutionDir%\%%G\%Outdir%\%%H" .\
+
+
+echo "Platform: %Platform%, architecture: %PROCESSOR_ARCHITECTURE%"
+if "%Platform%" == "x86" (   
+  FOR /F "skip=1 tokens=* usebackq" %%G IN ("%ProjectDir%\Files.x86.txt") DO echo "%%G" && copy "%SolutionDir%\%%G" .\
+) else if "%Platform%" == "x64" ( 
+  FOR /F "skip=1 tokens=* usebackq" %%G IN ("%ProjectDir%\Files.x64.txt") DO echo "%%G" && copy "%SolutionDir%\%%G" .\
+) else if "%Platform%" == "AnyCPU" (
+  if "%PROCESSOR_ARCHITECTURE%" == "x64" (
+  FOR /F "skip=1 tokens=* usebackq" %%G IN ("%ProjectDir%\Files.x64.txt") DO echo "%%G" && copy "%SolutionDir%\%%G" .\
+  ) else if "%PROCESSOR_ARCHITECTURE%" == "x86" (
+  FOR /F "skip=1 tokens=* usebackq" %%G IN ("%ProjectDir%\Files.x86.txt") DO echo "%%G" && copy "%SolutionDir%\%%G" .\
+  ) else (
+    echo "ERROR: unknown architecture: "%PROCESSOR_ARCHITECTURE%"
+  ) 
+) else (
+  echo "ERROR: unknown platform: %Platform%"
+)
+
+echo "CopyAssemblies done"
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/CustomPostBuild.cmd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/CustomPostBuild.cmd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/CustomPostBuild.cmd	(revision 4340)
@@ -0,0 +1,26 @@
+set target=C:\Program Files\HeuristicLab 3.3
+
+;copy "HeuristicLab 3.3.exe" "%target%"
+copy "HeuristicLab 3.3.exe.config" "%target%"
+;copy HeuristicLab.PluginInfrastructure-3.3.dll "%target%"
+
+FOR /F "skip=1 tokens=1-2 delims=: usebackq" %%G IN ("%ProjectDir%\Files.txt") DO copy "%SolutionDir%\%%G\%Outdir%\%%H" "%target%" >nul
+
+echo "Platform: %Platform%, architecture: %PROCESSOR_ARCHITECTURE%"
+if "%Platform%" == "x86" (   
+  FOR /F "skip=1 tokens=* usebackq" %%G IN ("%ProjectDir%\Files.x86.txt") DO copy "%SolutionDir%\%%G" "%target%" >nul
+) else if "%Platform%" == "x64" ( 
+  FOR /F "skip=1 tokens=* usebackq" %%G IN ("%ProjectDir%\Files.x64.txt") DO copy "%SolutionDir%\%%G" "%target%" >nul
+) else if "%Platform%" == "AnyCPU" (
+  if "%PROCESSOR_ARCHITECTURE%" == "x64" (
+  FOR /F "skip=1 tokens=* usebackq" %%G IN ("%ProjectDir%\Files.x64.txt") DO copy "%SolutionDir%\%%G" "%target%" >nul
+  ) else if "%PROCESSOR_ARCHITECTURE%" == "x86" (
+  FOR /F "skip=1 tokens=* usebackq" %%G IN ("%ProjectDir%\Files.x86.txt") DO copy "%SolutionDir%\%%G" "%target%" >nul
+  ) else (
+    echo "ERROR: unknown architecture: "%PROCESSOR_ARCHITECTURE%"
+  ) 
+) else (
+  echo "ERROR: unknown platform: %Platform%"
+)
+
+echo "CustomPostBuild done"
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/CustomPostBuildTemplate_UpdateLocalInstallation.cmd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/CustomPostBuildTemplate_UpdateLocalInstallation.cmd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/CustomPostBuildTemplate_UpdateLocalInstallation.cmd	(revision 4340)
@@ -0,0 +1,27 @@
+set target=C:\Program Files\HeuristicLab 3.3
+
+copy "HeuristicLab 3.3.exe" "%target%"
+copy "HeuristicLab 3.3.exe.config" "%target%"
+copy HeuristicLab.PluginInfrastructure-3.3.dll "%target%"
+
+FOR /F "skip=1 tokens=1-2 delims=: usebackq" %%G IN ("%ProjectDir%\Files.txt") DO copy "%SolutionDir%\%%G\%Outdir%\%%H" "%target%" >nul
+
+
+echo "Platform: %Platform%, architecture: %PROCESSOR_ARCHITECTURE%"
+if "%Platform%" == "x86" (   
+  FOR /F "skip=1 tokens=* usebackq" %%G IN ("%ProjectDir%\Files.x86.txt") DO copy "%SolutionDir%\%%G" "%target%" >nul
+) else if "%Platform%" == "x64" ( 
+  FOR /F "skip=1 tokens=* usebackq" %%G IN ("%ProjectDir%\Files.x64.txt") DO copy "%SolutionDir%\%%G" "%target%" >nul
+) else if "%Platform%" == "AnyCPU" (
+  if "%PROCESSOR_ARCHITECTURE%" == "x64" (
+  FOR /F "skip=1 tokens=* usebackq" %%G IN ("%ProjectDir%\Files.x64.txt") DO copy "%SolutionDir%\%%G" "%target%" >nul
+  ) else if "%PROCESSOR_ARCHITECTURE%" == "x86" (
+  FOR /F "skip=1 tokens=* usebackq" %%G IN ("%ProjectDir%\Files.x86.txt") DO copy "%SolutionDir%\%%G" "%target%" >nul
+  ) else (
+    echo "ERROR: unknown architecture: "%PROCESSOR_ARCHITECTURE%"
+  ) 
+) else (
+  echo "ERROR: unknown platform: %Platform%"
+)
+
+echo "CustomPostBuild done"
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/Files.txt
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/Files.txt	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/Files.txt	(revision 4340)
@@ -0,0 +1,29 @@
+﻿; This line is skipped. DO NOT TOUCH THIS line!
+; List of project directories and file names separated by ':' that are part of the installation
+
+HeuristicLab.Calendar\3.3:HeuristicLab.Calendar-3.3.dll
+
+HeuristicLab.DataAccess\3.3:HeuristicLab.DataAccess-3.3.dll
+HeuristicLab.DataAccess.ADOHelper\3.3:HeuristicLab.DataAccess.ADOHelper-3.3.dll
+
+HeuristicLab.Hive.Slave.Common\3.3:HeuristicLab.Hive.Slave.Common-3.3.dll
+HeuristicLab.Hive.Slave.Communication\3.3:HeuristicLab.Hive.Slave.Communication-3.3.dll
+HeuristicLab.Hive.Slave.Console\3.3:HeuristicLab.Hive.Slave.Console-3.3.dll
+HeuristicLab.Hive.Slave.Console\3.3:ZedGraph.dll
+HeuristicLab.Hive.Slave.Core\3.3:HeuristicLab.Hive.Slave.Core-3.3.dll
+HeuristicLab.Hive.Slave.ExecutionEngine\3.3:HeuristicLab.Hive.Slave.ExecutionEngine-3.3.dll
+
+HeuristicLab.Hive.Experiment\3.3:HeuristicLab.Hive.Experiment-3.3.dll
+HeuristicLab.Hive.Experiment.Views\3.3:HeuristicLab.Hive.Experiment.Views-3.3.dll
+HeuristicLab.Hive.JobBase\3.3:HeuristicLab.Hive.JobBase-3.3.dll
+
+HeuristicLab.Hive.Server\3.3:HeuristicLab.Hive.Server-3.3.dll
+HeuristicLab.Hive.Server.Console\3.3:HeuristicLab.Hive.Server.Console-3.3.dll
+HeuristicLab.Hive.Server.Core\3.3:HeuristicLab.Hive.Contracts-3.3.dll
+HeuristicLab.Hive.Server.Core\3.3:HeuristicLab.Hive.Server.Core-3.3.dll
+HeuristicLab.Hive.Server.DataAccess\3.3:HeuristicLab.Hive.Server.DataAccess-3.3.dll
+HeuristicLab.Hive.Server.LINQDataAccess\3.3:HeuristicLab.Hive.Server.LINQDataAccess-3.3.dll
+HeuristicLab.Hive.Server.Scheduler\3.3:HeuristicLab.Hive.Server.Scheduler-3.3.dll
+
+HeuristicLab.Hive.Tracing\3.3:HeuristicLab.Hive.Tracing-3.3.dll
+HeuristicLab.Hive.Tracing\3.3:HeuristicLab.Hive.log4net.xml
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/Files.x64.txt
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/Files.x64.txt	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/Files.x64.txt	(revision 4340)
@@ -0,0 +1,3 @@
+﻿; This line is skipped. DO NOT TOUCH THIS line!
+; This file contains a list of all x86 specific files
+
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/Files.x86.txt
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/Files.x86.txt	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/Files.x86.txt	(revision 4340)
@@ -0,0 +1,3 @@
+﻿; This line is skipped. DO NOT TOUCH THIS line!
+; This file contains a list of all x86 specific files
+
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/HeuristicLab 3.3.exe.config
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/HeuristicLab 3.3.exe.config	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/HeuristicLab 3.3.exe.config	(revision 4340)
@@ -0,0 +1,132 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <configSections>
+    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+      <section name="HeuristicLab.PluginInfrastructure.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+      <section name="HeuristicLab.Optimizer.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+      <section name="HeuristicLab.Persistence.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+    </sectionGroup>
+  </configSections>
+  <connectionStrings>
+  </connectionStrings>
+  
+  <!-- [chn] TODO: system.web should be located in HeuristicLab.Hive.Server.Core/app.config, but the ConfigMerger does not merge system.web (yet) -->
+  <system.web>
+    <membership>
+      <providers>
+        <clear/>
+        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="HeuristicLab.Authentication"
+             enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
+             maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
+             applicationName="HeuristicLab.Authentication" />
+      </providers>
+    </membership>
+
+    <roleManager enabled="true">
+      <providers>
+        <clear/>
+        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="HeuristicLab.Authentication" applicationName="HeuristicLab.Authentication" />
+      </providers>
+    </roleManager>
+  </system.web>
+  
+  <system.serviceModel>
+    <behaviors>
+      <endpointBehaviors>
+        <behavior name="SerializationBehavior">
+          <dataContractSerializer maxItemsInObjectGraph="1000000" />
+        </behavior>
+      </endpointBehaviors>
+    </behaviors>
+    <bindings>
+      <wsHttpBinding>
+        <binding name="WSHttpBinding_IUpdate" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="200000000" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
+          <readerQuotas maxDepth="32" maxStringContentLength="32000" maxArrayLength="200000000" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+          <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
+          <security mode="Message">
+            <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" />
+            <message clientCredentialType="UserName" negotiateServiceCredential="true" algorithmSuite="Default" establishSecurityContext="true" />
+          </security>
+        </binding>
+        <binding name="WSHttpBinding_IAdmin" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="200000000" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
+          <readerQuotas maxDepth="32" maxStringContentLength="32000" maxArrayLength="200000000" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+          <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
+          <security mode="Message">
+            <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" />
+            <message clientCredentialType="UserName" negotiateServiceCredential="true" algorithmSuite="Default" establishSecurityContext="true" />
+          </security>
+        </binding>
+      </wsHttpBinding>
+    </bindings>
+    <client>
+      <endpoint address="http://services.heuristiclab.com/Deployment-3.3/Update.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IUpdate" contract="HeuristicLab.PluginInfrastructure.Advanced.DeploymentService.IUpdate" name="WSHttpBinding_IUpdate">
+        <identity>
+          <certificate encodedValue="AwAAAAEAAAAUAAAAwK1+2oAmcy/mI2P2QjyiJRh0y60gAAAAAQAAACoCAAAwggImMIIBj6ADAgECAhAIkseQ2EEhgU720qJA61gqMA0GCSqGSIb3DQEBBAUAMCQxIjAgBgNVBAMTGXNlcnZpY2VzLmhldXJpc3RpY2xhYi5jb20wHhcNMTAwNTExMTExNDAyWhcNMzkxMjMxMjM1OTU5WjAkMSIwIAYDVQQDExlzZXJ2aWNlcy5oZXVyaXN0aWNsYWIuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq26Bwmwc7k+4W30qLQ2j+FInEL5BuH6opDY6CSlrtt3xQS/anrhvpbf3QghLDVINzcHkzbPmm/SguG4F85QLB6xO+tJaOvRo0iEK5g3c307vMIru7FJwk/OhplEQ5J1hbDgL3zOJlrWlgtqRVxCtVdF3XroI9BctOt1NkeKv9ewIDAQABo1kwVzBVBgNVHQEETjBMgBCjbgdYd4j5JgUuJ1Wo/GxroSYwJDEiMCAGA1UEAxMZc2VydmljZXMuaGV1cmlzdGljbGFiLmNvbYIQCJLHkNhBIYFO9tKiQOtYKjANBgkqhkiG9w0BAQQFAAOBgQAb/2xk2uQad68shSPl/uixWgvFI8WkxOTBopOLaLtDxwCeZ3mWVHdV9VnixHtThubnEBXAhYOCQSIXWtQuXFWO+gH3YyjTRJY5kTmXyuvBRTn3/so5SrQ7Rdlm9hf6E5YVX3tCjAy7ybUyaDUkQfmH5vmvgvpMzRfsJ1qhnUpJiQ==" />
+        </identity>
+      </endpoint>
+      <endpoint address="http://services.heuristiclab.com/Deployment-3.3/Admin.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IAdmin" contract="HeuristicLab.PluginInfrastructure.Advanced.DeploymentService.IAdmin" name="WSHttpBinding_IAdmin">
+        <identity>
+          <certificate encodedValue="AwAAAAEAAAAUAAAAwK1+2oAmcy/mI2P2QjyiJRh0y60gAAAAAQAAACoCAAAwggImMIIBj6ADAgECAhAIkseQ2EEhgU720qJA61gqMA0GCSqGSIb3DQEBBAUAMCQxIjAgBgNVBAMTGXNlcnZpY2VzLmhldXJpc3RpY2xhYi5jb20wHhcNMTAwNTExMTExNDAyWhcNMzkxMjMxMjM1OTU5WjAkMSIwIAYDVQQDExlzZXJ2aWNlcy5oZXVyaXN0aWNsYWIuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq26Bwmwc7k+4W30qLQ2j+FInEL5BuH6opDY6CSlrtt3xQS/anrhvpbf3QghLDVINzcHkzbPmm/SguG4F85QLB6xO+tJaOvRo0iEK5g3c307vMIru7FJwk/OhplEQ5J1hbDgL3zOJlrWlgtqRVxCtVdF3XroI9BctOt1NkeKv9ewIDAQABo1kwVzBVBgNVHQEETjBMgBCjbgdYd4j5JgUuJ1Wo/GxroSYwJDEiMCAGA1UEAxMZc2VydmljZXMuaGV1cmlzdGljbGFiLmNvbYIQCJLHkNhBIYFO9tKiQOtYKjANBgkqhkiG9w0BAQQFAAOBgQAb/2xk2uQad68shSPl/uixWgvFI8WkxOTBopOLaLtDxwCeZ3mWVHdV9VnixHtThubnEBXAhYOCQSIXWtQuXFWO+gH3YyjTRJY5kTmXyuvBRTn3/so5SrQ7Rdlm9hf6E5YVX3tCjAy7ybUyaDUkQfmH5vmvgvpMzRfsJ1qhnUpJiQ==" />
+        </identity>
+      </endpoint>
+    </client>
+  </system.serviceModel>
+  <runtime>
+    <gcServer enabled="true" />
+  </runtime>
+  <system.data>
+    <DbProviderFactories>
+      <remove invariant="System.Data.SQLite" />
+      <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
+      <remove invariant="System.Data.SqlServerCe.3.5" />
+      <add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
+    </DbProviderFactories>
+  </system.data>
+  <userSettings>
+    <HeuristicLab.PluginInfrastructure.Properties.Settings>
+      <setting name="UpdateLocation" serializeAs="String">
+        <value>http://services.heuristiclab.com/Deployment-3.3/Update.svc</value>
+      </setting>
+      <setting name="UpdateLocationUserName" serializeAs="String">
+        <value>anonymous</value>
+      </setting>
+      <setting name="UpdateLocationPassword" serializeAs="String">
+        <value>GetTheLab!</value>
+      </setting>
+      <setting name="UpdateLocationAdministrationAddress" serializeAs="String">
+        <value>http://services.heuristiclab.com/Deployment-3.3/Admin.svc</value>
+      </setting>
+      <setting name="ShowPluginUploadControls" serializeAs="String">
+        <value>False</value>
+      </setting>
+    </HeuristicLab.PluginInfrastructure.Properties.Settings>
+    <HeuristicLab.Optimizer.Properties.Settings>
+      <setting name="ShowStartPage" serializeAs="String">
+        <value>True</value>
+      </setting>
+      <setting name="ShowOperatorsSidebar" serializeAs="String">
+        <value>False</value>
+      </setting>
+      <setting name="ShowClipboard" serializeAs="String">
+        <value>True</value>
+      </setting>
+      <setting name="ShowMaximized" serializeAs="String">
+        <value>True</value>
+      </setting>
+      <setting name="CollapseClipboard" serializeAs="String">
+        <value>True</value>
+      </setting>
+      <setting name="CollapseOperatorsSidebar" serializeAs="String">
+        <value>False</value>
+      </setting>
+    </HeuristicLab.Optimizer.Properties.Settings>
+    <HeuristicLab.Persistence.Properties.Settings>
+      <setting name="CustomConfigurations" serializeAs="String">
+        <value />
+      </setting>
+      <setting name="CustomConfigurationsTypeCache" serializeAs="String">
+        <value />
+      </setting>
+    </HeuristicLab.Persistence.Properties.Settings>
+  </userSettings>
+</configuration>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj	(revision 4340)
@@ -0,0 +1,118 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{C92AAC8C-4D88-449C-ABA5-2B935D769842}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive-3.3</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <PlatformTarget>x86</PlatformTarget>
+    <OutputPath>bin\Debug\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <PlatformTarget>x86</PlatformTarget>
+    <OutputPath>bin\x86\Release\</OutputPath>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>C:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup />
+  <ItemGroup>
+    <None Include="HeuristicLab.Hive-3.3.dll.config">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
+    <None Include="CopyAssemblies.cmd" />
+    <None Include="CustomPostBuild.cmd" />
+    <None Include="CustomPostBuildTemplate_UpdateLocalInstallation.cmd" />
+    <None Include="HeuristicLab 3.3.exe.config">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="HeuristicLab.snk" />
+    <None Include="MergeConfigs.cmd" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="Files.txt" />
+    <Content Include="Files.x64.txt" />
+    <Content Include="Files.x86.txt" />
+    <Content Include="HeuristicLab.ico" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+set Configuration=$(ConfigurationName)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PostBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+set Platform=$(PlatformName)
+set Configuration=$(ConfigurationName)
+
+call MergeConfigs.cmd
+call CopyAssemblies.cmd
+if exist "%25ProjectDir%25CustomPostBuild.cmd" call CustomPostBuild.cmd</PostBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.dll.config
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.dll.config	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.dll.config	(revision 4340)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+  <configSections>
+  </configSections>
+  <connectionStrings>
+  </connectionStrings>
+  <system.serviceModel>
+  </system.serviceModel>
+  <runtime>
+    <gcServer enabled="true"/>
+  </runtime>
+</configuration>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/MergeConfigs.cmd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/MergeConfigs.cmd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/MergeConfigs.cmd	(revision 4340)
@@ -0,0 +1,12 @@
+
+
+ConfigMerger "%SolutionDir%HeuristicLab.Hive.Experiment\3.3\app.config" "HeuristicLab.Hive-3.3.dll.config"
+ConfigMerger "%SolutionDir%HeuristicLab.Hive.Server.Core\3.3\app.config" "HeuristicLab.Hive-3.3.dll.config"
+ConfigMerger "%SolutionDir%HeuristicLab.Hive.Server.Console\3.3\app.config" "HeuristicLab.Hive-3.3.dll.config"
+ConfigMerger "%SolutionDir%HeuristicLab.Hive.Server.LINQDataAccess\3.3\app.config" "HeuristicLab.Hive-3.3.dll.config"
+ConfigMerger "%SolutionDir%HeuristicLab.Hive.Slave.Core\3.3\app.config" "HeuristicLab.Hive-3.3.dll.config"
+ConfigMerger "%SolutionDir%HeuristicLab.Hive.Slave.Communication\3.3\app.config" "HeuristicLab.Hive-3.3.dll.config"
+ConfigMerger "%SolutionDir%HeuristicLab.Hive.Slave.Console\3.3\app.config" "HeuristicLab.Hive-3.3.dll.config"
+ConfigMerger "%SolutionDir%HeuristicLab.Hive.Tracing\3.3\app.config" "HeuristicLab.Hive-3.3.dll.config"
+
+ConfigMerger "HeuristicLab.Hive-3.3.dll.config" "HeuristicLab 3.3.exe.config"
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/Program.cs
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/Program.cs	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/Program.cs	(revision 4340)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Hive {
+  static class Program {
+    [STAThread]
+    static void Main(string[] args) {
+      HeuristicLab.PluginInfrastructure.Main.Run(args);
+    }
+  }
+}
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/Properties/AssemblyInfo.frame	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/Properties/AssemblyInfo.frame	(revision 4340)
@@ -0,0 +1,54 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Hive 3.3")]
+[assembly: AssemblyDescription("HeuristicLab.Hive 3.3")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2010 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("0add4132-8872-4c5c-bba5-1de2f6486dd8")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+[assembly: AssemblyVersion("3.3.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/LocalTestRun.testrunconfig
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/LocalTestRun.testrunconfig	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/LocalTestRun.testrunconfig	(revision 4340)
@@ -0,0 +1,5 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<TestRunConfiguration name="Local Test Run" id="f9392825-866f-4434-be36-358db28f0c59" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
+  <Description>This is a default test run configuration for a local test run.</Description>
+  <TestTypeSpecific />
+</TestRunConfiguration>
Index: /branches/3.3-Hive/sources/HeuristicLab.Hive/PreBuildEvent.cmd
===================================================================
--- /branches/3.3-Hive/sources/HeuristicLab.Hive/PreBuildEvent.cmd	(revision 4340)
+++ /branches/3.3-Hive/sources/HeuristicLab.Hive/PreBuildEvent.cmd	(revision 4340)
@@ -0,0 +1,1 @@
+SubWCRev "%ProjectDir%\" "%ProjectDir%\Properties\AssemblyInfo.frame" "%ProjectDir%\Properties\AssemblyInfo.cs"
