Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive 3.3.sln
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive 3.3.sln	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive 3.3.sln	(revision 4253)
@@ -2,6 +2,4 @@
 Microsoft Visual Studio Solution File, Format Version 11.00
 # Visual Studio 2010
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Client.Core-3.3", "HeuristicLab.Hive.Client.Core\3.3\HeuristicLab.Hive.Client.Core-3.3.csproj", "{5010BD86-23B7-4F8C-888A-76D21AD5266A}"
-EndProject
 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
@@ -52,10 +50,4 @@
 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.Client.Communication-3.3", "HeuristicLab.Hive.Client.Communication\3.3\HeuristicLab.Hive.Client.Communication-3.3.csproj", "{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Client.Console-3.3", "HeuristicLab.Hive.Client.Console\3.3\HeuristicLab.Hive.Client.Console-3.3.csproj", "{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Client.ExecutionEngine-3.3", "HeuristicLab.Hive.Client.ExecutionEngine\3.3\HeuristicLab.Hive.Client.ExecutionEngine-3.3.csproj", "{1605256A-1CB3-44AB-AAFF-577093EE5789}"
-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
@@ -70,6 +62,4 @@
 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.Client.Common-3.3", "HeuristicLab.Hive.Client.Common\3.3\HeuristicLab.Hive.Client.Common-3.3.csproj", "{89F4BC52-C174-481E-9BD2-3814171020E8}"
-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
@@ -97,4 +87,14 @@
 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}"
+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}"
+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
@@ -110,18 +110,4 @@
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{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|x86
-		{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|x86
-		{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
 		{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
@@ -231,46 +217,4 @@
 		{5CDACE54-5FB2-4344-A21C-963F63CB7C2B}.Release|x86.ActiveCfg = Release|x86
 		{5CDACE54-5FB2-4344-A21C-963F63CB7C2B}.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|x86
-		{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|x86
-		{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|x86
-		{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|x86
-		{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
-		{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|x86
-		{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|x86
-		{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
 		{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
@@ -367,18 +311,4 @@
 		{9076697B-C151-46CD-95BC-1D059492B478}.Release|x86.ActiveCfg = Release|x86
 		{9076697B-C151-46CD-95BC-1D059492B478}.Release|x86.Build.0 = Release|x86
-		{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|x86
-		{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|x86
-		{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
 		{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
@@ -477,4 +407,84 @@
 		{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
@@ -482,9 +492,9 @@
 	EndGlobalSection
 	GlobalSection(NestedProjects) = preSolution
+		{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}
-		{89F4BC52-C174-481E-9BD2-3814171020E8} = {DC8C63A5-7B57-4B3A-A74A-6F42C7DD1668}
-		{5010BD86-23B7-4F8C-888A-76D21AD5266A} = {DC8C63A5-7B57-4B3A-A74A-6F42C7DD1668}
 		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F} = {E7D8EFDA-B0CB-4B62-8EAE-2CF473F14D74}
 		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119} = {E7D8EFDA-B0CB-4B62-8EAE-2CF473F14D74}
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HeartBeatData.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HeartBeatData.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/BusinessObjects/HeartBeatData.cs	(revision 4253)
@@ -31,5 +31,5 @@
   public class HeartBeatData {
     [DataMember]
-    public Guid ClientId { get; set; }
+    public Guid SlaveId { get; set; }
     [DataMember]
     public int FreeMemory { get; set; }
@@ -40,5 +40,5 @@
 
     public override string ToString() {
-      String val = "ClientId: " + ClientId + ", FreeCores: " + FreeCores;
+      String val = "SlaveId: " + SlaveId + ", FreeCores: " + FreeCores;
       foreach (KeyValuePair<Guid, double> kvp in JobProgress) {
         val += "\nId" + kvp.Key + " Progress " + kvp.Value;
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HeuristicLab.Hive.Contracts-3.3.csproj
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HeuristicLab.Hive.Contracts-3.3.csproj	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/HeuristicLab.Hive.Contracts-3.3.csproj	(revision 4253)
@@ -137,8 +137,8 @@
     <Compile Include="ResponseSerializedJob.cs" />
     <Compile Include="MultiStream.cs" />
-    <Compile Include="Interfaces\IClientFacade.cs" />
+    <Compile Include="Interfaces\ISlaveFacade.cs" />
     <Compile Include="Interfaces\IExecutionEngineFacade.cs" />
     <Compile Include="ResponseObject.cs" />
-    <Compile Include="Interfaces\IClientManager.cs" />
+    <Compile Include="Interfaces\ISlaveManager.cs" />
     <Compile Include="Interfaces\IJobManager.cs" />
     <Compile Include="Interfaces\ILifecycleManager.cs" />
@@ -147,5 +147,5 @@
     <Compile Include="ResponseJob.cs" />
     <Compile Include="HeuristicLabHiveContractsPlugin.cs" />
-    <Compile Include="Interfaces\IClientCommunicator.cs" />
+    <Compile Include="Interfaces\ISlaveCommunicator.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Response.cs" />
Index: anches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IClientCommunicator.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IClientCommunicator.cs	(revision 4252)
+++ 	(revision )
@@ -1,69 +1,0 @@
-#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;
-
-namespace HeuristicLab.Hive.Contracts.Interfaces {
-  /// <summary>
-  /// This is the facade for the client communication
-  /// </summary>
-  [ServiceContract]
-  public interface IClientCommunicator {
-    [OperationContract]
-    Response Login(ClientDto clientInfo);
-    [OperationContract]
-    ResponseHB ProcessHeartBeat(HeartBeatData hbData);
-    [OperationContract]
-    ResponseJob SendJob(Guid clientId);
-    //[OperationContract]
-    //ResponseSerializedJob SendSerializedJob(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]
-    ResponsePlugin SendPlugins(List<HivePluginInfoDto> pluginList);
-
-    [OperationContract]
-    ResponseCalendar GetCalendar(Guid clientId);
-    [OperationContract]
-    Response SetCalendarStatus(Guid clientId, CalendarState state);
-
-  }
-}
Index: anches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IClientFacade.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IClientFacade.cs	(revision 4252)
+++ 	(revision )
@@ -1,45 +1,0 @@
-﻿#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;
-
-namespace HeuristicLab.Hive.Contracts.Interfaces {
-  [ServiceContract]
-  public interface IClientFacade: IClientCommunicator {
-    [OperationContract]
-    Stream SendStreamedJob(Guid clientId);
-
-    [OperationContract]
-    Stream SendStreamedPlugins(List<HivePluginInfoDto> pluginList);
-
-    [OperationContract]
-    ResponseResultReceived StoreFinishedJobResultStreamed(Stream stream);
-
-    [OperationContract]
-    ResponseResultReceived ProcessSnapshotStreamed(Stream stream);
-  }
-}
Index: anches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IClientManager.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IClientManager.cs	(revision 4252)
+++ 	(revision )
@@ -1,62 +1,0 @@
-#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;
-
-namespace HeuristicLab.Hive.Contracts.Interfaces {
-  /// <summary>
-  /// This is the faced for the management console
-  /// </summary>
-  [ServiceContract]
-  public interface IClientManager {
-    [OperationContract]
-    ResponseList<ClientDto> GetAllClients();
-    [OperationContract]
-    [ServiceKnownType(typeof (ResourceDto))]
-    [ServiceKnownType(typeof(ClientDto))]
-    [ServiceKnownType(typeof(ClientGroupDto))]
-    ResponseList<ClientGroupDto> GetAllClientGroups();
-    [OperationContract]
-    ResponseObject<ClientGroupDtoList> GetAllGroupsOfResource(Guid resourceId);
-    [OperationContract]
-    ResponseObject<ClientGroupDto> AddClientGroup(ClientGroupDto clientGroup);
-    [OperationContract]
-    Response DeleteClientGroup(Guid clientGroupId);
-    [OperationContract]
-    [ServiceKnownType(typeof(ResourceDto))]
-    [ServiceKnownType(typeof(ClientDto))]
-    [ServiceKnownType(typeof(ClientGroupDto))]
-    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-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IServerConsoleFacade.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IServerConsoleFacade.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/IServerConsoleFacade.cs	(revision 4253)
@@ -32,5 +32,5 @@
   /// </summary>
   [ServiceContract(SessionMode=SessionMode.Required)]
-  public interface IServerConsoleFacade : IClientManager, 
+  public interface IServerConsoleFacade : ISlaveManager, 
     IJobManager {
     [OperationContract]
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ISlaveCommunicator.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ISlaveCommunicator.cs	(revision 4253)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ISlaveCommunicator.cs	(revision 4253)
@@ -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 System.ServiceModel;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Contracts.Interfaces {
+  /// <summary>
+  /// This is the facade for the client communication
+  /// </summary>
+  [ServiceContract]
+  public interface ISlaveCommunicator {
+    [OperationContract]
+    Response Login(ClientDto clientInfo);
+    [OperationContract]
+    ResponseHB ProcessHeartBeat(HeartBeatData hbData);
+    [OperationContract]
+    ResponseJob SendJob(Guid clientId);
+    //[OperationContract]
+    //ResponseSerializedJob SendSerializedJob(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]
+    ResponsePlugin SendPlugins(List<HivePluginInfoDto> pluginList);
+
+    [OperationContract]
+    ResponseCalendar GetCalendar(Guid clientId);
+    [OperationContract]
+    Response SetCalendarStatus(Guid clientId, CalendarState state);
+
+  }
+}
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ISlaveFacade.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ISlaveFacade.cs	(revision 4253)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ISlaveFacade.cs	(revision 4253)
@@ -0,0 +1,45 @@
+﻿#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;
+
+namespace HeuristicLab.Hive.Contracts.Interfaces {
+  [ServiceContract]
+  public interface ISlaveFacade: ISlaveCommunicator {
+    [OperationContract]
+    Stream SendStreamedJob(Guid clientId);
+
+    [OperationContract]
+    Stream SendStreamedPlugins(List<HivePluginInfoDto> pluginList);
+
+    [OperationContract]
+    ResponseResultReceived StoreFinishedJobResultStreamed(Stream stream);
+
+    [OperationContract]
+    ResponseResultReceived ProcessSnapshotStreamed(Stream stream);
+  }
+}
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ISlaveManager.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ISlaveManager.cs	(revision 4253)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/Interfaces/ISlaveManager.cs	(revision 4253)
@@ -0,0 +1,62 @@
+#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;
+
+namespace HeuristicLab.Hive.Contracts.Interfaces {
+  /// <summary>
+  /// This is the faced for the management console
+  /// </summary>
+  [ServiceContract]
+  public interface ISlaveManager {
+    [OperationContract]
+    ResponseList<ClientDto> GetAllClients();
+    [OperationContract]
+    [ServiceKnownType(typeof (ResourceDto))]
+    [ServiceKnownType(typeof(ClientDto))]
+    [ServiceKnownType(typeof(ClientGroupDto))]
+    ResponseList<ClientGroupDto> GetAllClientGroups();
+    [OperationContract]
+    ResponseObject<ClientGroupDtoList> GetAllGroupsOfResource(Guid resourceId);
+    [OperationContract]
+    ResponseObject<ClientGroupDto> AddClientGroup(ClientGroupDto clientGroup);
+    [OperationContract]
+    Response DeleteClientGroup(Guid clientGroupId);
+    [OperationContract]
+    [ServiceKnownType(typeof(ResourceDto))]
+    [ServiceKnownType(typeof(ClientDto))]
+    [ServiceKnownType(typeof(ClientGroupDto))]
+    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-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/RecurrentEvent.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/RecurrentEvent.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Contracts/3.3/RecurrentEvent.cs	(revision 4253)
@@ -23,5 +23,5 @@
 using System.Collections.Generic;
 
-namespace HeuristicLab.Hive.Client.Console
+namespace HeuristicLab.Hive.Slave.Console
 {
   public class RecurrentEvent
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddJobForm.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddJobForm.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/AddJobForm.cs	(revision 4253)
@@ -45,5 +45,5 @@
     ResponseList<ProjectDto> projects = null;
     IJobManager jobManager;
-    IClientManager clientManager; 
+    ISlaveManager clientManager; 
     ResponseList<ClientGroupDto> clientGroups;
 
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/CgCalendar.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/CgCalendar.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/CgCalendar.cs	(revision 4253)
@@ -9,5 +9,5 @@
 using System.Xml.Serialization;
 using HeuristicLab.Calendar;
-using HeuristicLab.Hive.Client.Console;
+using HeuristicLab.Hive.Slave.Console;
 using HeuristicLab.Hive.Contracts.BusinessObjects;
 using HeuristicLab.Hive.Contracts;
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerManagementConsole.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerManagementConsole.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/HiveServerManagementConsole.cs	(revision 4253)
@@ -76,5 +76,5 @@
 
     #region Properties
-    private IClientManager ClientManager {
+    private ISlaveManager ClientManager {
       get {
         try {
@@ -169,5 +169,5 @@
       //adding group
       menuItemDeleteGroup.Click += (s, e) => {
-        IClientManager clientManager = ServiceLocator.GetClientManager();
+        ISlaveManager clientManager = ServiceLocator.GetClientManager();
         if (tvClientControl.SelectedNode != null) {
           Response resp = clientManager.DeleteClientGroup(((ClientGroupDto)tvClientControl.SelectedNode.Tag).Id);
@@ -254,5 +254,5 @@
     /// <param name="clientgroupID">group of clients</param>
     private void ChangeGroup(Dictionary<ClientDto, Guid> clients, Guid clientgroupID) {
-      IClientManager clientManager = ServiceLocator.GetClientManager();
+      ISlaveManager clientManager = ServiceLocator.GetClientManager();
       foreach (KeyValuePair<ClientDto, Guid> client in clients) {
         if (client.Key.Id != Guid.Empty) {
@@ -696,5 +696,5 @@
 
     private void addgroup_addGroupEvent(string name) {
-      IClientManager clientManager = ServiceLocator.GetClientManager();
+      ISlaveManager clientManager = ServiceLocator.GetClientManager();
 
       if (parentgroup != Guid.Empty) {
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Recurrence.Designer.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Recurrence.Designer.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Recurrence.Designer.cs	(revision 4253)
@@ -1,3 +1,3 @@
-﻿namespace HeuristicLab.Hive.Client.Console
+﻿namespace HeuristicLab.Hive.Slave.Console
 {
   partial class Recurrence
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Recurrence.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Recurrence.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/Recurrence.cs	(revision 4253)
@@ -25,5 +25,5 @@
 using HeuristicLab.Hive.Server.ServerConsole;
 
-namespace HeuristicLab.Hive.Client.Console
+namespace HeuristicLab.Hive.Slave.Console
 {
 
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/ServiceLocator.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/ServiceLocator.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Console/3.3/ServiceLocator.cs	(revision 4253)
@@ -15,6 +15,6 @@
     internal static string Port { get; set; }
 
-    internal static IClientManager GetClientManager() {
-      return GetServerConsoleFacade() as IClientManager;
+    internal static ISlaveManager GetClientManager() {
+      return GetServerConsoleFacade() as ISlaveManager;
     }
 
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/HivePermissionManager.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/HivePermissionManager.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Authorization/HivePermissionManager.cs	(revision 4253)
@@ -19,5 +19,5 @@
     private IPermissionManager permManager = ServiceLocator.GetPermissionManager();
 
-    private IClientManager clientManager = ServiceLocator.GetClientManager();
+    private ISlaveManager slaveManager = ServiceLocator.GetSlaveManager();
 
     private PermissionCollection permissions = HivePermissions.GetPermissions();
@@ -92,5 +92,5 @@
     private bool CheckPermissionHelper(Guid sessionId, Guid actionId, Guid entityId) {
       if (entityId == Guid.Empty) return true;
-      IList<ClientGroupDto> groups = clientManager.GetAllGroupsOfResource(entityId).Obj;
+      IList<ClientGroupDto> groups = slaveManager.GetAllGroupsOfResource(entityId).Obj;
       foreach (ClientGroupDto group in groups)
         if (CheckPermission(sessionId, actionId, group.Id)) return true;
Index: anches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/ClientCommunicator.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/ClientCommunicator.cs	(revision 4252)
+++ 	(revision )
@@ -1,755 +1,0 @@
-﻿#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;
-
-namespace HeuristicLab.Hive.Server.Core {
-  /// <summary>
-  /// The ClientCommunicator manages the whole communication with the client
-  /// </summary>
-  public class ClientCommunicator : IClientCommunicator,
-    IInternalClientCommunicator {
-    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 ClientCommunicator() {
-      //factory = ServiceLocator.GetSessionFactory();
-
-      lifecycleManager = ServiceLocator.GetLifecycleManager();
-      jobManager = ServiceLocator.GetJobManager() as IInternalJobManager;
-      scheduler = ServiceLocator.GetScheduler();
-
-      lifecycleManager.RegisterHeartbeat(new EventHandler(lifecycleManager_OnServerHeartbeat));
-    }
-
-    /// <summary>
-    /// Check if online clients 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<ClientDto> allClients = new List<ClientDto>(DaoLocator.ClientDao.FindAll());
-
-        foreach (ClientDto client in allClients) {
-          if (client.State != State.Offline && client.State != State.NullState) {
-            heartbeatLock.EnterUpgradeableReadLock();
-
-            if (!lastHeartbeats.ContainsKey(client.Id)) {
-              Logger.Info("Client " + client.Id +
-                              " wasn't offline but hasn't sent heartbeats - setting offline");
-              client.State = State.Offline;
-              DaoLocator.ClientDao.Update(client);
-              Logger.Info("Client " + client.Id +
-                              " wasn't offline but hasn't sent heartbeats - Resetting all his jobs");
-              foreach (JobDto job in DaoLocator.JobDao.FindActiveJobsOfClient(client)) {
-                //maybe implementa n additional Watchdog? Till then, just set them offline..
-                DaoLocator.JobDao.SetJobOffline(job);
-              }
-            } else {
-              DateTime lastHbOfClient = lastHeartbeats[client.Id];
-
-              TimeSpan dif = DateTime.Now.Subtract(lastHbOfClient);
-              // check if time between last hearbeat and now is greather than HEARTBEAT_MAX_DIF
-              if (dif.TotalSeconds > ApplicationConstants.HEARTBEAT_MAX_DIF) {
-                // if client calculated jobs, the job must be reset
-                Logger.Info("Client timed out and is on RESET");
-                foreach (JobDto job in DaoLocator.JobDao.FindActiveJobsOfClient(client)) {
-                  DaoLocator.JobDao.SetJobOffline(job);
-                  lock (newAssignedJobs) {
-                    if (newAssignedJobs.ContainsKey(job.Id))
-                      newAssignedJobs.Remove(job.Id);
-                  }
-                }
-                Logger.Debug("setting client offline");
-                // client must be set offline
-                client.State = State.Offline;
-
-                //clientAdapter.Update(client);
-                DaoLocator.ClientDao.Update(client);
-
-                Logger.Debug("removing it from the heartbeats list");
-                heartbeatLock.EnterWriteLock();
-                lastHeartbeats.Remove(client.Id);
-                heartbeatLock.ExitWriteLock();
-              }
-            }
-
-            heartbeatLock.ExitUpgradeableReadLock();
-          } else {
-            //TODO: RLY neccesary?
-            //HiveLogger.Info(this.ToString() + ": Client " + client.Id + " has wrong state: Shouldn't have offline or nullstate, has " + client.State);
-            heartbeatLock.EnterWriteLock();
-            //HiveLogger.Info(this.ToString() + ": Client " + client.Id + " has wrong state: Resetting all his jobs");
-            if (lastHeartbeats.ContainsKey(client.Id))
-              lastHeartbeats.Remove(client.Id);
-            foreach (JobDto job in DaoLocator.JobDao.FindActiveJobsOfClient(client)) {
-              DaoLocator.JobDao.SetJobOffline(job);
-            }
-            heartbeatLock.ExitWriteLock();
-          }
-        }
-        CheckForPendingJobs();
-        //        DaoLocator.DestroyContext();
-        scope.Complete();
-      }
-    }
-
-    private void CheckForPendingJobs() {
-      IList<JobDto> pendingJobsInDB = new List<JobDto>(DaoLocator.JobDao.GetJobsByState(State.Pending));
-
-      foreach (JobDto currJob in pendingJobsInDB) {
-        lock (pendingJobs) {
-          if (pendingJobs.ContainsKey(currJob.Id)) {
-            if (pendingJobs[currJob.Id] <= 0) {
-              currJob.State = State.Offline;
-              DaoLocator.JobDao.Update(currJob);
-            } else {
-              pendingJobs[currJob.Id]--;
-            }
-          }
-        }
-      }
-    }
-
-    #region IClientCommunicator Members
-
-    /// <summary>
-    /// Login process for the client
-    /// A hearbeat entry is created as well (login is the first hearbeat)
-    /// </summary>
-    /// <param name="clientInfo"></param>
-    /// <returns></returns>
-    public Response Login(ClientDto clientInfo) {
-      Response response = new Response();
-
-      heartbeatLock.EnterWriteLock();
-      if (lastHeartbeats.ContainsKey(clientInfo.Id)) {
-        lastHeartbeats[clientInfo.Id] = DateTime.Now;
-      } else {
-        lastHeartbeats.Add(clientInfo.Id, DateTime.Now);
-      }
-      heartbeatLock.ExitWriteLock();
-
-      ClientDto dbClient = DaoLocator.ClientDao.FindById(clientInfo.Id);
-
-      //Really set offline? 
-      //Reconnect issues with the currently calculating jobs
-      clientInfo.State = State.Idle;
-      clientInfo.CalendarSyncStatus = dbClient != null ? dbClient.CalendarSyncStatus : CalendarState.NotAllowedToFetch;
-
-      if (dbClient == null)
-        DaoLocator.ClientDao.Insert(clientInfo);
-      else
-        DaoLocator.ClientDao.Update(clientInfo);
-      response.Success = true;
-      response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_LOGIN_SUCCESS;
-      return response;
-    }
-
-    public ResponseCalendar GetCalendar(Guid clientId) {
-      ResponseCalendar response = new ResponseCalendar();
-
-      ClientDto client = DaoLocator.ClientDao.FindById(clientId);
-      if (client == null) {
-        response.Success = false;
-        response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_RESOURCE_NOT_FOUND;
-        return response;
-      }
-
-      response.ForceFetch = (client.CalendarSyncStatus == CalendarState.ForceFetch);
-
-      IEnumerable<AppointmentDto> appointments = DaoLocator.UptimeCalendarDao.GetCalendarForClient(client);
-      if (appointments.Count() == 0) {
-        response.StatusMessage = ApplicationConstants.RESPONSE_UPTIMECALENDAR_NO_CALENDAR_FOUND;
-        response.Success = false;
-      } else {
-        response.Success = true;
-        response.Appointments = appointments;
-      }
-
-      client.CalendarSyncStatus = CalendarState.Fetched;
-      DaoLocator.ClientDao.Update(client);
-      return response;
-    }
-
-    public Response SetCalendarStatus(Guid clientId, CalendarState state) {
-      Response response = new Response();
-      ClientDto client = DaoLocator.ClientDao.FindById(clientId);
-      if (client == null) {
-        response.Success = false;
-        response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_RESOURCE_NOT_FOUND;
-        return response;
-      }
-
-      client.CalendarSyncStatus = state;
-      DaoLocator.ClientDao.Update(client);
-
-      response.Success = true;
-      response.StatusMessage = ApplicationConstants.RESPONSE_UPTIMECALENDAR_STATUS_UPDATED;
-
-      return response;
-    }
-
-    /// <summary>
-    /// The client has to send regulary heartbeats
-    /// this hearbeats will be stored in the heartbeats dictionary
-    /// check if there is work for the client and send the client a response if he should pull a job
-    /// </summary>
-    /// <param name="hbData"></param>
-    /// <returns></returns>
-    public ResponseHB ProcessHeartBeat(HeartBeatData hbData) {
-      Logger.Debug("BEGIN Processing Heartbeat for Client " + hbData.ClientId);
-
-      ResponseHB response = new ResponseHB();
-      response.ActionRequest = new List<MessageContainer>();
-
-      Logger.Debug("BEGIN Started Client Fetching");
-      ClientDto client = DaoLocator.ClientDao.FindById(hbData.ClientId);
-      Logger.Debug("END Finished Client Fetching");
-      // check if the client is logged in
-      if (client.State == State.Offline || client.State == State.NullState) {
-        response.Success = false;
-        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_USER_NOT_LOGGED_IN;
-        response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.NoMessage));
-
-        Logger.Error("ProcessHeartBeat: Client state null or offline: " + client);
-
-        return response;
-      }
-
-      client.NrOfFreeCores = hbData.FreeCores;
-      client.FreeMemory = hbData.FreeMemory;
-
-      // save timestamp of this heartbeat
-      Logger.Debug("BEGIN Locking for Heartbeats");
-      heartbeatLock.EnterWriteLock();
-      Logger.Debug("END Locked for Heartbeats");
-      if (lastHeartbeats.ContainsKey(hbData.ClientId)) {
-        lastHeartbeats[hbData.ClientId] = DateTime.Now;
-      } else {
-        lastHeartbeats.Add(hbData.ClientId, DateTime.Now);
-      }
-      heartbeatLock.ExitWriteLock();
-
-      Logger.Debug("BEGIN Processing Heartbeat Jobs");
-      ProcessJobProcess(hbData, response);
-      Logger.Debug("END Processed Heartbeat Jobs");
-
-      //check if new Cal must be loaded
-      if (client.CalendarSyncStatus == CalendarState.Fetch || client.CalendarSyncStatus == CalendarState.ForceFetch) {
-        response.Success = true;
-        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_FETCH_OR_FORCEFETCH_CALENDAR;
-        response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.FetchOrForceFetchCalendar));
-
-        //client.CalendarSyncStatus = CalendarState.Fetching;
-
-        Logger.Info("fetch or forcefetch sent");
-      }
-
-      // check if client has a free core for a new job
-      // if true, ask scheduler for a new job for this client
-      Logger.Debug(" BEGIN Looking for Client Jobs");
-      if (hbData.FreeCores > 0 && scheduler.ExistsJobForClient(hbData)) {
-        response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.FetchJob));
-      } else {
-        response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.NoMessage));
-      }
-      Logger.Debug(" END Looked for Client Jobs");
-      response.Success = true;
-      response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_HEARTBEAT_RECEIVED;
-
-      DaoLocator.ClientDao.Update(client);
-
-      //tx.Commit();
-      Logger.Debug(" END Processed Heartbeat for Client " + hbData.ClientId);
-      return response;
-    }
-
-    /// <summary>
-    /// Process the Job progress sent by a client
-    /// [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 client (from db) and compare if they are consistent with what the joblist the client sent
-    /// (2) find out if every job from the joblist really should be calculated by this client
-    /// (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 client (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 client
-    /// 
-    /// 
-    /// 
-    /// 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="clientAdapter"></param>
-    /// <param name="response"></param>
-    private void ProcessJobProcess(HeartBeatData hbData, ResponseHB response) {
-      Logger.Debug("Started for Client " + hbData.ClientId);
-      List<JobDto> jobsOfClient = new List<JobDto>(DaoLocator.JobDao.FindActiveJobsOfClient(DaoLocator.ClientDao.FindById(hbData.ClientId)));
-      if (hbData.JobProgress != null && hbData.JobProgress.Count > 0) {
-        if (jobsOfClient == null || jobsOfClient.Count == 0) {
-          response.Success = false;
-          response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOB_IS_NOT_BEEING_CALCULATED;
-
-          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.ClientId + ", advise him to abort all");
-          return;
-        }
-
-        foreach (KeyValuePair<Guid, double> jobProgress in hbData.JobProgress) {
-          JobDto curJob = DaoLocator.JobDao.FindById(jobProgress.Key);
-          curJob.Client = DaoLocator.ClientDao.GetClientForJob(curJob.Id);
-          if (curJob.Client == null || curJob.Client.Id != hbData.ClientId) {
-            response.Success = false;
-            response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOB_IS_NOT_BEEING_CALCULATED;
-            response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, curJob.Id));
-            Logger.Error("There is no job calculated by this user " + hbData.ClientId + " Job: " + curJob);
-          } else if (curJob.State == State.Abort) {
-            // a request to abort the job has been set
-            response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, curJob.Id));
-            curJob.State = State.Finished;
-          } else {
-            // save job progress
-            curJob.Percentage = jobProgress.Value;
-
-            if (curJob.State == State.RequestSnapshot) {
-              // a request for a snapshot has been set
-              response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.RequestSnapshot, curJob.Id));
-              curJob.State = State.RequestSnapshotSent;
-            }
-          }
-          DaoLocator.JobDao.Update(curJob);
-        }
-      }
-      foreach (JobDto currJob in jobsOfClient) {
-        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.Client);
-              if (newAssignedJobs[currJob.Id] <= 0) {
-                Logger.Error("Job TTL reached Zero, Job gets removed: " + currJob + " and set back to offline. User that sucks: " + currJob.Client);
-
-                currJob.State = State.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 = State.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 client was told to pull a job he calls this method
-    /// the server selects a job and sends it to the client
-    /// </summary>
-    /// <param name="clientId"></param>
-    /// <returns></returns>
-    public ResponseJob SendJob(Guid clientId) {
-
-      ResponseJob response = new ResponseJob();
-
-      JobDto job2Calculate = scheduler.GetNextJobForClient(clientId);
-      if (job2Calculate != null) {
-        response.Job = job2Calculate;
-        response.Job.PluginsNeeded = DaoLocator.PluginInfoDao.GetPluginDependenciesForJob(response.Job);
-        response.Success = true;
-        Logger.Info("Job pulled: " + job2Calculate + " for user " + clientId);
-        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOB_PULLED;
-        lock (newAssignedJobs) {
-          if (!newAssignedJobs.ContainsKey(job2Calculate.Id))
-            newAssignedJobs.Add(job2Calculate.Id, ApplicationConstants.JOB_TIME_TO_LIVE);
-        }
-      } else {
-        response.Success = false;
-        response.Job = null;
-        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_NO_JOBS_LEFT;
-        Logger.Info("No more Jobs left for " + clientId);
-      }
-
-
-
-      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.ClientId, result.JobId, new byte[] { }, result.Percentage, result.Exception, finished);
-
-      if (response.Success) {
-        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 clientId,
-      Guid jobId,
-      byte[] result,
-      double? percentage,
-      string exception,
-      bool finished) {
-
-      Logger.Info("BEGIN Job received for Storage - SUB method: " + jobId);
-
-      ResponseResultReceived response = new ResponseResultReceived();
-      ClientDto client = DaoLocator.ClientDao.FindById(clientId);
-
-      SerializedJob job = new SerializedJob();
-
-      if (job != null) {
-        job.JobInfo = DaoLocator.JobDao.FindById(jobId);
-        if (job.JobInfo != null) {
-          job.JobInfo.Client = job.JobInfo.Client = DaoLocator.ClientDao.GetClientForJob(jobId);
-        }
-      }
-      
-      if (job != null && job.JobInfo == null) {
-        response.Success = false;
-        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_NO_JOB_WITH_THIS_ID;
-        response.JobId = jobId;
-        Logger.Error("No job with Id " + jobId);
-
-        //tx.Rollback();
-        return response;
-      }
-      if (job.JobInfo.State == State.Abort) {
-        response.Success = false;
-        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOB_WAS_ABORTED;
-
-        Logger.Error("Job was aborted! " + job.JobInfo);
-
-        //tx.Rollback();
-        return response;
-      }
-      if (job.JobInfo.Client == null) {
-        response.Success = false;
-        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOB_IS_NOT_BEEING_CALCULATED;
-        response.JobId = jobId;
-
-        Logger.Error("Job is not being calculated (client = null)! " + job.JobInfo);
-
-        //tx.Rollback();
-        return response;
-      }
-      if (job.JobInfo.Client.Id != clientId) {
-        response.Success = false;
-        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_WRONG_CLIENT_FOR_JOB;
-        response.JobId = jobId;
-
-        Logger.Error("Wrong Client for this Job! " + job.JobInfo + ", Sending Client is: " + clientId);
-
-        //tx.Rollback();
-        return response;
-      }
-      if (job.JobInfo.State == State.Finished) {
-        response.Success = true;
-        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOBRESULT_RECEIVED;
-        response.JobId = jobId;
-
-        Logger.Error("Job already finished! " + job.JobInfo + ", Sending Client is: " + clientId);
-
-        //tx.Rollback();
-        return response;
-      }
-      //Todo: RequestsnapshotSent => calculating?
-      if (job.JobInfo.State == State.RequestSnapshotSent) {
-        job.JobInfo.State = State.Calculating;
-      }
-      if (job.JobInfo.State != State.Calculating &&
-        job.JobInfo.State != State.Pending) {
-        response.Success = false;
-        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_WRONG_JOB_STATE;
-        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 = State.Failed;
-        job.JobInfo.Exception = exception;
-        job.JobInfo.DateFinished = DateTime.Now;
-      } else if (finished) {
-        job.JobInfo.State = State.Finished;
-        job.JobInfo.DateFinished = DateTime.Now;
-      }
-
-      job.SerializedJobData = result;
-
-      DaoLocator.JobDao.Update(job.JobInfo);
-
-      response.Success = true;
-      response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOBRESULT_RECEIVED;
-      response.JobId = jobId;
-      response.Finished = finished;
-
-      Logger.Info("END Job received for Storage - SUB method: " + jobId);
-      return response;
-
-    }
-
-    /// <summary>
-    /// the client 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="clientId"></param>
-    /// <param name="jobId"></param>
-    /// <param name="result"></param>
-    /// <param name="exception"></param>
-    /// <param name="finished"></param>
-    /// <returns></returns>
-    public ResponseResultReceived StoreFinishedJobResult(Guid clientId,
-      Guid jobId,
-      byte[] result,
-      double percentage,
-      string exception) {
-
-      return ProcessJobResult(clientId, jobId, result, percentage, exception, true);
-    }
-
-    public ResponseResultReceived ProcessSnapshot(Guid clientId, Guid jobId, byte[] result, double percentage, string exception) {
-      return ProcessJobResult(clientId, jobId, result, percentage, exception, false);
-    }
-
-    /// <summary>
-    /// when a client logs out the state will be set
-    /// and the entry in the last hearbeats dictionary will be removed
-    /// </summary>
-    /// <param name="clientId"></param>
-    /// <returns></returns>                       
-    public Response Logout(Guid clientId) {
-      Logger.Info("Client logged out " + clientId);
-
-      Response response = new Response();
-
-      heartbeatLock.EnterWriteLock();
-      if (lastHeartbeats.ContainsKey(clientId))
-        lastHeartbeats.Remove(clientId);
-      heartbeatLock.ExitWriteLock();
-
-      ClientDto client = DaoLocator.ClientDao.FindById(clientId);
-      if (client == null) {
-        response.Success = false;
-        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_LOGOUT_CLIENT_NOT_REGISTERED;
-        return response;
-      }
-      if (client.State == State.Calculating) {
-        // check wich job the client was calculating and reset it
-        IEnumerable<JobDto> jobsOfClient = DaoLocator.JobDao.FindActiveJobsOfClient(client);
-        foreach (JobDto job in jobsOfClient) {
-          if (job.State != State.Finished)
-            DaoLocator.JobDao.SetJobOffline(job);
-        }
-      }
-
-      client.State = State.Offline;
-      DaoLocator.ClientDao.Update(client);
-
-      response.Success = true;
-      response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_LOGOUT_SUCCESS;
-
-      return response;
-    }
-
-    /// <summary>
-    /// If a client goes offline and restores a job he was calculating 
-    /// he can ask the client 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 = ApplicationConstants.RESPONSE_COMMUNICATOR_JOB_DOESNT_EXIST;
-        Logger.Error("Job doesn't exist (anymore)! " + jobId);
-        return response;
-      }
-      if (job.State == State.Finished) {
-        response.Success = true;
-        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOB_ALLREADY_FINISHED;
-        Logger.Error("already finished! " + job);
-        return response;
-      }
-      job.State = State.Pending;
-      lock (pendingJobs) {
-        pendingJobs.Add(job.Id, PENDING_TIMEOUT);
-      }
-
-      DaoLocator.JobDao.Update(job);
-
-      response.Success = true;
-      response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_SEND_JOBRESULT;
-      return response;
-    }
-
-    public ResponsePlugin SendPlugins(List<HivePluginInfoDto> pluginList) {
-      ResponsePlugin response = new ResponsePlugin();
-      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.Plugins.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.Plugins.Add(convertPluginDescriptorToDto(ipd));
-          } else {
-            response.Success = false;
-            response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_PLUGINS_NOT_AVAIL;
-            return response;
-          }
-        }
-      }
-      response.Success = true;
-      response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_PLUGINS_SENT;
-
-      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: anches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/ClientManager.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/ClientManager.cs	(revision 4252)
+++ 	(revision )
@@ -1,220 +1,0 @@
-#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 ClientGroup=HeuristicLab.Hive.Contracts.BusinessObjects.ClientGroupDto;
-
-namespace HeuristicLab.Hive.Server.Core {
-  internal class ClientManager : IClientManager {
-    private List<ClientGroup> clientGroups;
-
-    public ClientManager() {
-      clientGroups = new List<ClientGroup>();
-    }
-
-    #region IClientManager Members
-
-    /// <summary>
-    /// Returns all clients stored in the database
-    /// </summary>
-    /// <returns></returns>
-    public ResponseList<ClientDto> GetAllClients() {
-      ResponseList<ClientDto> response = new ResponseList<ClientDto>();
-
-      response.List = new List<ClientDto>(DaoLocator.ClientDao.FindAll());
-      response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_GET_ALL_CLIENTS;
-      response.Success = true;
-
-      return response;
-    }
-
-    /// <summary>
-    /// returns all client groups stored in the database
-    /// </summary>
-    /// <returns></returns>
-    public ResponseList<ClientGroup> GetAllClientGroups() {
-      ResponseList<ClientGroup> response = new ResponseList<ClientGroup>();
-
-      List<ClientGroup> allClientGroups =
-        new List<ClientGroup>(DaoLocator.ClientGroupDao.FindAllWithSubGroupsAndClients());
-      ClientGroup emptyClientGroup = new ClientGroup();
-      IEnumerable<ClientDto> groupLessClients = DaoLocator.ClientDao.FindAllClientsWithoutGroup();
-      if (groupLessClients != null) {
-        foreach (ClientDto currClient in groupLessClients) {
-          emptyClientGroup.Resources.Add(currClient);
-        }
-      }
-      emptyClientGroup.Id = Guid.Empty;
-      allClientGroups.Add(emptyClientGroup);
-
-      response.List = allClientGroups;
-      response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_GET_ALL_CLIENTGROUPS;
-      response.Success = true;
-
-      return response;
-    }
-
-    public ResponseList<UpTimeStatisticsDto> GetAllUpTimeStatistics() {
-      ResponseList<UpTimeStatisticsDto> response = new ResponseList<UpTimeStatisticsDto>();
-      response.Success = true;
-      return response;
-    }
-
-    /// <summary>
-    /// Add a client group into the database
-    /// </summary>
-    /// <param name="clientGroup"></param>
-    /// <returns></returns>
-    public ResponseObject<ClientGroup> AddClientGroup(ClientGroup clientGroup) {
-      ResponseObject<ClientGroup> response = new ResponseObject<ClientGroup>();
-
-      if (clientGroup.Id != Guid.Empty) {
-        response.Success = false;
-        response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_ID_MUST_NOT_BE_SET;
-      }
-      else {
-        clientGroup = DaoLocator.ClientGroupDao.Insert(clientGroup);
-        //clientGroupAdapter.Update(clientGroup);
-        response.Obj = clientGroup;
-        response.Success = true;
-        response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_CLIENTGROUP_ADDED;
-      }
-
-      return response;
-    }
-
-    /// <summary>
-    ///  Add a resource to a group
-    /// </summary>
-    /// <param name="clientGroupId"></param>
-    /// <param name="resource"></param>
-    /// <returns></returns>
-    public Response AddResourceToGroup(Guid clientGroupId, ResourceDto resource) {
-      Response response = new Response();
-
-      ClientGroup clientGroup = DaoLocator.ClientGroupDao.FindById(clientGroupId);
-      if (clientGroup == null) {
-        response.Success = false;
-        response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_CLIENTGROUP_DOESNT_EXIST;
-        return response;
-      }
-
-      clientGroup.Resources.Add(resource);
-      DaoLocator.ClientGroupDao.AddRessourceToClientGroup(resource.Id, clientGroup.Id);
-
-      //If our resource is in fact a client => set the callendar from the resource as current one.
-      
-      ClientDto dbr = DaoLocator.ClientDao.FindById(resource.Id);
-      if(dbr != null) {
-        DaoLocator.ClientDao.SetServerSideCalendar(dbr, clientGroup.Id);  
-      }
-
-      response.Success = true;
-      response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_RESOURCE_ADDED_TO_GROUP;
-
-      return response;
-    }
-
-    /// <summary>
-    /// Remove a resource from a group
-    /// </summary>
-    /// <param name="clientGroupId"></param>
-    /// <param name="resourceId"></param>
-    /// <returns></returns>
-    public Response DeleteResourceFromGroup(Guid clientGroupId, Guid resourceId) {
-      Response response = new Response();
-
-      ClientGroup clientGroup = DaoLocator.ClientGroupDao.FindById(clientGroupId);
-      if (clientGroup == null) {
-        response.Success = false;
-        response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_CLIENTGROUP_DOESNT_EXIST;
-        return response;
-      }
-     
-      DaoLocator.ClientGroupDao.RemoveRessourceFromClientGroup(resourceId, clientGroup.Id);
-      
-      response.Success = true;
-      response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_RESOURCE_REMOVED;
-      return response;                
-    }
-
-    public ResponseObject<ClientGroupDtoList> GetAllGroupsOfResource(Guid resourceId) {
-      ResponseObject<ClientGroupDtoList> response = new ResponseObject<ClientGroupDtoList>();
-
-      ClientDto client = DaoLocator.ClientDao.FindById(resourceId);
-      if (client != null) {
-        ClientGroupDtoList groupsOfClient = new ClientGroupDtoList(DaoLocator.ClientGroupDao.MemberOf(client));
-        response.Obj = groupsOfClient;
-        response.Success = true;
-        response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_GET_GROUPS_OF_CLIENT;
-      }
-      else {
-        response.Obj = new ClientGroupDtoList();
-        response.Success = false;
-        response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_RESOURCE_NOT_FOUND;
-      }
-
-      return response;
-    }
-
-    public Response DeleteClientGroup(Guid clientGroupId) {
-      Response response = new Response();
-
-      ClientGroup clientGroup = DaoLocator.ClientGroupDao.FindById(clientGroupId);
-      if (clientGroup == null) {
-        response.Success = false;
-        response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_CLIENTGROUP_DOESNT_EXIST;
-        return response;
-      }
-
-      DaoLocator.ClientGroupDao.Delete(clientGroup);
-
-      response.Success = true;
-      response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_CLIENTGROUP_DELETED;
-      return response;
-    }
-
-    public ResponseList<AppointmentDto> GetUptimeCalendarForResource(Guid guid) {
-      ResponseList<AppointmentDto> response = new ResponseList<AppointmentDto>();
-      response.List = new List<AppointmentDto>(DaoLocator.UptimeCalendarDao.GetUptimeCalendarForResource(guid));
-      response.Success = true;
-      return response;
-    }
-
-    public Response SetUptimeCalendarForResource(Guid guid, IEnumerable<AppointmentDto> appointments, bool isForced) {
-      DaoLocator.UptimeCalendarDao.SetUptimeCalendarForResource(guid, appointments);
-      DaoLocator.UptimeCalendarDao.NotifyClientsOfNewCalendar(guid, isForced);
-      return new Response {Success = true};
-    }
-    #endregion
- }
-}
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/DefaultScheduler.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/DefaultScheduler.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/DefaultScheduler.cs	(revision 4253)
@@ -24,25 +24,25 @@
     }
 
-    public bool ExistsJobForClient(HeuristicLab.Hive.Contracts.BusinessObjects.HeartBeatData hbData) {
-      List<JobDto> allOfflineJobsForClient =
-        new List<JobDto>(DaoLocator.JobDao.FindFittingJobsForClient(State.Offline, hbData.FreeCores, hbData.FreeMemory, hbData.ClientId));
-      return (allOfflineJobsForClient != null && allOfflineJobsForClient.Count > 0);
+    public bool ExistsJobForSlave(HeuristicLab.Hive.Contracts.BusinessObjects.HeartBeatData hbData) {
+      List<JobDto> allOfflineJobsForSlave =
+        new List<JobDto>(DaoLocator.JobDao.FindFittingJobsForSlave(State.Offline, hbData.FreeCores, hbData.FreeMemory, hbData.SlaveId));
+      return (allOfflineJobsForSlave != null && allOfflineJobsForSlave.Count > 0);
     }
 
-    public HeuristicLab.Hive.Contracts.BusinessObjects.JobDto GetNextJobForClient(Guid clientId) {
+    public HeuristicLab.Hive.Contracts.BusinessObjects.JobDto GetNextJobForSlave(Guid slaveId) {
       /// Critical section ///
       jobLock.WaitOne();
       JobDto jobToCalculate = null;
       using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = ApplicationConstants.ISOLATION_LEVEL_SCOPE })) {
-        ClientDto client = DaoLocator.ClientDao.FindById(clientId);
-        LinkedList<JobDto> allOfflineJobsForClient =
-          new LinkedList<JobDto>(DaoLocator.JobDao.FindFittingJobsForClient(State.Offline, client.NrOfFreeCores, client.FreeMemory, client.Id));        
-        if (allOfflineJobsForClient != null && allOfflineJobsForClient.Count > 0) {
-          jobToCalculate = allOfflineJobsForClient.First.Value;
+        ClientDto slave = DaoLocator.ClientDao.FindById(slaveId);
+        LinkedList<JobDto> allOfflineJobsForSlave =
+          new LinkedList<JobDto>(DaoLocator.JobDao.FindFittingJobsForSlave(State.Offline, slave.NrOfFreeCores, slave.FreeMemory, slave.Id));        
+        if (allOfflineJobsForSlave != null && allOfflineJobsForSlave.Count > 0) {
+          jobToCalculate = allOfflineJobsForSlave.First.Value;
           jobToCalculate.State = State.Calculating;
-          jobToCalculate.Client = client;
+          jobToCalculate.Client = slave;
           jobToCalculate.Client.State = State.Calculating;
           jobToCalculate.DateCalculated = DateTime.Now;
-          DaoLocator.JobDao.AssignClientToJob(client.Id, jobToCalculate.Id);
+          DaoLocator.JobDao.AssignSlaveToJob(slave.Id, jobToCalculate.Id);
           DaoLocator.JobDao.Update(jobToCalculate);
           DaoLocator.ClientDao.Update(jobToCalculate.Client);
Index: anches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/ClientFacade.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/ClientFacade.cs	(revision 4252)
+++ 	(revision )
@@ -1,163 +1,0 @@
-#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;
-
-namespace HeuristicLab.Hive.Server.Core {
-  [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)]
-  public class ClientFacade : IClientFacade {
-
-    public ClientFacade() {
-    }
-
-    private IClientCommunicator clientCommunicator = ServiceLocator.GetClientCommunicator();
-
-    private IContextFactory contextFactory = ServiceLocator.GetContextFactory();
-
-    #region IClientCommunicator Members
-
-    public Response Login(ClientDto clientInfo) {
-      using (contextFactory.GetContext()) {
-        return clientCommunicator.Login(clientInfo);
-      }
-    }
-
-    public ResponseHB ProcessHeartBeat(HeartBeatData hbData) {
-      using (contextFactory.GetContext()) {
-        return clientCommunicator.ProcessHeartBeat(hbData);
-      }
-    }
-
-    public ResponseJob SendJob(Guid clientId) {
-      using (contextFactory.GetContext()) {
-        return clientCommunicator.SendJob(clientId);
-      }
-    }
-
-    public ResponseResultReceived StoreFinishedJobResult(Guid clientId, Guid jobId, byte[] result, double percentage, string exception) {
-      using (contextFactory.GetContext()) {
-        return clientCommunicator.StoreFinishedJobResult(clientId, jobId, result, percentage, exception);
-      }
-    }
-
-    public Response Logout(Guid clientId) {
-      using (contextFactory.GetContext()) {
-        return clientCommunicator.Logout(clientId);
-      }
-    }
-
-    public Response IsJobStillNeeded(Guid jobId) {
-      using (contextFactory.GetContext()) {
-        return clientCommunicator.IsJobStillNeeded(jobId); 
-      }
-    }
-
-    public ResponsePlugin SendPlugins(List<HivePluginInfoDto> pluginList) {
-      return clientCommunicator.SendPlugins(pluginList);      
-    }
-
-    public ResponseResultReceived ProcessSnapshot(Guid clientId, Guid jobId, byte[] result, double percentage, string exception) {
-      using (contextFactory.GetContext()) {
-        return clientCommunicator.ProcessSnapshot(clientId, jobId, result, percentage, exception); 
-      }
-    }
-
-
-    public ResponseCalendar GetCalendar(Guid clientId) {
-      using (contextFactory.GetContext()) {
-        return clientCommunicator.GetCalendar(clientId); 
-      }
-    }
-
-    public Response SetCalendarStatus(Guid clientId, CalendarState state) { 
-      using (contextFactory.GetContext()) {
-        return clientCommunicator.SetCalendarStatus(clientId, state);
-      }
-    }
-    #endregion
-
-    #region IClientFacade Members
-
-    /// <summary>
-    /// Do not use automatic transactions here
-    /// </summary>
-    public Stream SendStreamedJob(Guid clientId) {
-      using (contextFactory.GetContext(false)) {
-        MultiStream stream = new MultiStream();
-
-        ResponseJob job = null;
-
-        job = ServiceLocator.GetClientCommunicator().SendJob(clientId);
-
-        //first send response
-        stream.AddStream(new StreamedObject<ResponseJob>(job));
-
-        IJobManager jobManager = ServiceLocator.GetJobManager();
-        IInternalJobManager internalJobManager = (IInternalJobManager)jobManager;
-
-        //second stream the job binary data
-        MemoryStream memoryStream = new MemoryStream();
-        if (job.Job != null)
-          stream.AddStream(new MemoryStream(internalJobManager.GetSerializedJobDataById(job.Job.Id)));
-
-        OperationContext clientContext = OperationContext.Current;
-        clientContext.OperationCompleted += new EventHandler(delegate(object sender, EventArgs args) {
-          if (stream != null) {
-            stream.Dispose();
-          }
-        });
-
-        return stream;
-      }
-    }
-
-    public Stream SendStreamedPlugins(List<HivePluginInfoDto> pluginList) {
-      return new StreamedObject<ResponsePlugin>(this.SendPlugins(pluginList));
-    }
-
-    public ResponseResultReceived StoreFinishedJobResultStreamed(Stream stream) {
-      using (contextFactory.GetContext()) {
-        return ((IInternalClientCommunicator)clientCommunicator).ProcessJobResult(stream, true);
-      }
-    }
-
-    public ResponseResultReceived ProcessSnapshotStreamed(Stream stream) {
-      using (contextFactory.GetContext()) {
-        return ((IInternalClientCommunicator)clientCommunicator).ProcessJobResult(stream, false);  
-      }
-    }
-    #endregion
-  }
-}
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/ServerConsoleFacade.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/ServerConsoleFacade.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/ServerConsoleFacade.cs	(revision 4253)
@@ -35,5 +35,5 @@
 namespace HeuristicLab.Hive.Server.Core {
   public class ServerConsoleFacade : IServerConsoleFacade {
-    private IClientManager clientManager = ServiceLocator.GetClientManager();
+    private ISlaveManager slaveManager = ServiceLocator.GetSlaveManager();
 
     private IJobManager jobManager = ServiceLocator.GetJobManager();
@@ -67,5 +67,5 @@
       using (contextFactory.GetContext(false)) {
         secMan.Authorize("AccessClients", sessionID, Guid.Empty);
-        return clientManager.GetAllClients();
+        return slaveManager.GetAllClients();
       }
     }
@@ -74,5 +74,5 @@
       using (contextFactory.GetContext(false)) {
         //secMan.Authorize("AccessClientGroup", sessionID, Guid.Empty);
-        return clientManager.GetAllClientGroups();
+        return slaveManager.GetAllClientGroups();
       }
     }
@@ -81,5 +81,5 @@
       using (contextFactory.GetContext(false)) {
         secMan.Authorize("AccessStatistics", sessionID, Guid.Empty);
-        return clientManager.GetAllUpTimeStatistics();
+        return slaveManager.GetAllUpTimeStatistics();
       }
     }
@@ -88,5 +88,5 @@
       using (contextFactory.GetContext()) {
         secMan.Authorize("AddClientGroup", sessionID, Guid.Empty);
-        return clientManager.AddClientGroup(clientGroup);
+        return slaveManager.AddClientGroup(clientGroup);
       }
     }
@@ -95,5 +95,5 @@
       using (contextFactory.GetContext()) {
         secMan.Authorize("AddResource", sessionID, Guid.Empty);
-        return clientManager.AddResourceToGroup(clientGroupId, resource);
+        return slaveManager.AddResourceToGroup(clientGroupId, resource);
       }
     }
@@ -101,5 +101,5 @@
     public Response DeleteResourceFromGroup(Guid clientGroupId, Guid resourceId) {
       using (contextFactory.GetContext()) {
-        return clientManager.DeleteResourceFromGroup(clientGroupId, resourceId);
+        return slaveManager.DeleteResourceFromGroup(clientGroupId, resourceId);
       }
     }
@@ -185,5 +185,5 @@
       using (contextFactory.GetContext(false)) {
         secMan.Authorize("AccessUserGroup", sessionID, Guid.Empty);
-        return clientManager.GetAllGroupsOfResource(resourceId);
+        return slaveManager.GetAllGroupsOfResource(resourceId);
       }
     }
@@ -192,5 +192,5 @@
       using (contextFactory.GetContext()) {
         secMan.Authorize("DeleteClientGroup", sessionID, Guid.Empty);
-        return clientManager.DeleteClientGroup(clientGroupId);
+        return slaveManager.DeleteClientGroup(clientGroupId);
       }
     }
@@ -233,5 +233,5 @@
     public ResponseList<AppointmentDto> GetUptimeCalendarForResource(Guid guid) {
       using (contextFactory.GetContext(false)) {
-        return clientManager.GetUptimeCalendarForResource(guid);
+        return slaveManager.GetUptimeCalendarForResource(guid);
       }
     }
@@ -239,5 +239,5 @@
     public Response SetUptimeCalendarForResource(Guid guid, IEnumerable<AppointmentDto> appointments, bool isForced) {
       using (contextFactory.GetContext()) {
-        return clientManager.SetUptimeCalendarForResource(guid, appointments, isForced);
+        return slaveManager.SetUptimeCalendarForResource(guid, appointments, isForced);
       }
     }
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/SlaveFacade.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/SlaveFacade.cs	(revision 4253)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/Facades/SlaveFacade.cs	(revision 4253)
@@ -0,0 +1,163 @@
+#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;
+
+namespace HeuristicLab.Hive.Server.Core {
+  [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)]
+  public class SlaveFacade : ISlaveFacade {
+
+    public SlaveFacade() {
+    }
+
+    private ISlaveCommunicator slaveCommunicator = ServiceLocator.GetSlaveCommunicator();
+
+    private IContextFactory contextFactory = ServiceLocator.GetContextFactory();
+
+    #region ISlaveCommunicator Members
+
+    public Response Login(ClientDto clientInfo) {
+      using (contextFactory.GetContext()) {
+        return slaveCommunicator.Login(clientInfo);
+      }
+    }
+
+    public ResponseHB ProcessHeartBeat(HeartBeatData hbData) {
+      using (contextFactory.GetContext()) {
+        return slaveCommunicator.ProcessHeartBeat(hbData);
+      }
+    }
+
+    public ResponseJob SendJob(Guid clientId) {
+      using (contextFactory.GetContext()) {
+        return slaveCommunicator.SendJob(clientId);
+      }
+    }
+
+    public ResponseResultReceived StoreFinishedJobResult(Guid clientId, Guid jobId, byte[] result, double percentage, string exception) {
+      using (contextFactory.GetContext()) {
+        return slaveCommunicator.StoreFinishedJobResult(clientId, jobId, result, percentage, exception);
+      }
+    }
+
+    public Response Logout(Guid clientId) {
+      using (contextFactory.GetContext()) {
+        return slaveCommunicator.Logout(clientId);
+      }
+    }
+
+    public Response IsJobStillNeeded(Guid jobId) {
+      using (contextFactory.GetContext()) {
+        return slaveCommunicator.IsJobStillNeeded(jobId); 
+      }
+    }
+
+    public ResponsePlugin SendPlugins(List<HivePluginInfoDto> pluginList) {
+      return slaveCommunicator.SendPlugins(pluginList);      
+    }
+
+    public ResponseResultReceived ProcessSnapshot(Guid clientId, Guid jobId, byte[] result, double percentage, string exception) {
+      using (contextFactory.GetContext()) {
+        return slaveCommunicator.ProcessSnapshot(clientId, jobId, result, percentage, exception); 
+      }
+    }
+
+
+    public ResponseCalendar GetCalendar(Guid clientId) {
+      using (contextFactory.GetContext()) {
+        return slaveCommunicator.GetCalendar(clientId); 
+      }
+    }
+
+    public Response SetCalendarStatus(Guid clientId, CalendarState state) { 
+      using (contextFactory.GetContext()) {
+        return slaveCommunicator.SetCalendarStatus(clientId, state);
+      }
+    }
+    #endregion
+
+    #region IClientFacade Members
+
+    /// <summary>
+    /// Do not use automatic transactions here
+    /// </summary>
+    public Stream SendStreamedJob(Guid clientId) {
+      using (contextFactory.GetContext(false)) {
+        MultiStream stream = new MultiStream();
+
+        ResponseJob job = null;
+
+        job = ServiceLocator.GetSlaveCommunicator().SendJob(clientId);
+
+        //first send response
+        stream.AddStream(new StreamedObject<ResponseJob>(job));
+
+        IJobManager jobManager = ServiceLocator.GetJobManager();
+        IInternalJobManager internalJobManager = (IInternalJobManager)jobManager;
+
+        //second stream the job binary data
+        MemoryStream memoryStream = new MemoryStream();
+        if (job.Job != null)
+          stream.AddStream(new MemoryStream(internalJobManager.GetSerializedJobDataById(job.Job.Id)));
+
+        OperationContext clientContext = OperationContext.Current;
+        clientContext.OperationCompleted += new EventHandler(delegate(object sender, EventArgs args) {
+          if (stream != null) {
+            stream.Dispose();
+          }
+        });
+
+        return stream;
+      }
+    }
+
+    public Stream SendStreamedPlugins(List<HivePluginInfoDto> pluginList) {
+      return new StreamedObject<ResponsePlugin>(this.SendPlugins(pluginList));
+    }
+
+    public ResponseResultReceived StoreFinishedJobResultStreamed(Stream stream) {
+      using (contextFactory.GetContext()) {
+        return ((IInternalSlaveCommunicator)slaveCommunicator).ProcessJobResult(stream, true);
+      }
+    }
+
+    public ResponseResultReceived ProcessSnapshotStreamed(Stream stream) {
+      using (contextFactory.GetContext()) {
+        return ((IInternalSlaveCommunicator)slaveCommunicator).ProcessJobResult(stream, false);  
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/HeuristicLab.Hive.Server.Core-3.3.csproj
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/HeuristicLab.Hive.Server.Core-3.3.csproj	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/HeuristicLab.Hive.Server.Core-3.3.csproj	(revision 4253)
@@ -117,7 +117,7 @@
     <Compile Include="Authorization\Policy.cs" />
     <Compile Include="Authorization\PolicyCollection.cs" />
-    <Compile Include="ClientCommunicator.cs" />
-    <Compile Include="Facades\ClientFacade.cs" />
-    <Compile Include="ClientManager.cs" />
+    <Compile Include="SlaveCommunicator.cs" />
+    <Compile Include="Facades\SlaveFacade.cs" />
+    <Compile Include="SlaveManager.cs" />
     <Compile Include="DaoLocator.cs" />
     <Compile Include="DefaultScheduler.cs" />
@@ -127,5 +127,5 @@
     <Compile Include="HiveServerMessages.Designer.cs" />
     <Compile Include="InternalInterfaces\IHivePermissionManager.cs" />
-    <Compile Include="InternalInterfaces\IInternalClientCommunicator.cs" />
+    <Compile Include="InternalInterfaces\IInternalSlaveCommunicator.cs" />
     <Compile Include="InternalInterfaces\IInternalJobManager.cs" />
     <Compile Include="InternalInterfaces\IScheduler.cs" />
Index: anches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/IInternalClientCommunicator.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/IInternalClientCommunicator.cs	(revision 4252)
+++ 	(revision )
@@ -1,36 +1,0 @@
-﻿#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;
-
-namespace HeuristicLab.Hive.Server.Core.InternalInterfaces {
-  interface IInternalClientCommunicator {
-    ResponseResultReceived ProcessJobResult(
-      Stream stream,
-      bool finished);
-  }
-}
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/IInternalSlaveCommunicator.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/IInternalSlaveCommunicator.cs	(revision 4253)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/IInternalSlaveCommunicator.cs	(revision 4253)
@@ -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.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+using System.IO;
+
+namespace HeuristicLab.Hive.Server.Core.InternalInterfaces {
+  interface IInternalSlaveCommunicator {
+    ResponseResultReceived ProcessJobResult(
+      Stream stream,
+      bool finished);
+  }
+}
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/IScheduler.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/IScheduler.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/InternalInterfaces/IScheduler.cs	(revision 4253)
@@ -28,6 +28,6 @@
 namespace HeuristicLab.Hive.Server.Core.InternalInterfaces {
   public interface IScheduler {
-    bool ExistsJobForClient(HeartBeatData hbData);
-    JobDto GetNextJobForClient(Guid clientId);
+    bool ExistsJobForSlave(HeartBeatData hbData);
+    JobDto GetNextJobForSlave(Guid clientId);
   }
 }
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/ServiceLocator.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/ServiceLocator.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/ServiceLocator.cs	(revision 4253)
@@ -36,9 +36,9 @@
   /// </summary>
   public class ServiceLocator {
-    private static IClientManager clientManager = null;
+    private static ISlaveManager slaveManager = null;
 
     private static IJobManager jobManager = null;
 
-    private static IClientCommunicator clientCommunicator = null;
+    private static ISlaveCommunicator slaveCommunicator = null;
 
     private static ILifecycleManager lifecycleManager = null;
@@ -55,13 +55,13 @@
 
     /// <summary>
-    /// Gets the client manager
+    /// Gets the slave manager
     /// </summary>
     /// <returns></returns>
     [MethodImpl(MethodImplOptions.Synchronized)]
-    public static IClientManager GetClientManager() {
-      if (clientManager == null)
-        clientManager = new ClientManager();
+    public static ISlaveManager GetSlaveManager() {
+      if (slaveManager == null)
+        slaveManager = new SlaveManager();
 
-      return clientManager;
+      return slaveManager;
     }
 
@@ -83,9 +83,9 @@
     /// <returns></returns>
     [MethodImpl(MethodImplOptions.Synchronized)]
-    public static IClientCommunicator GetClientCommunicator() {
-      if (clientCommunicator == null)
-        clientCommunicator = new ClientCommunicator();
+    public static ISlaveCommunicator GetSlaveCommunicator() {
+      if (slaveCommunicator == null)
+        slaveCommunicator = new SlaveCommunicator();
 
-      return clientCommunicator;
+      return slaveCommunicator;
     }
 
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/SlaveCommunicator.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/SlaveCommunicator.cs	(revision 4253)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/SlaveCommunicator.cs	(revision 4253)
@@ -0,0 +1,755 @@
+﻿#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;
+
+namespace HeuristicLab.Hive.Server.Core {
+  /// <summary>
+  /// The ClientCommunicator manages the whole communication with the client
+  /// </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 clients 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<ClientDto> allClients = new List<ClientDto>(DaoLocator.ClientDao.FindAll());
+
+        foreach (ClientDto client in allClients) {
+          if (client.State != State.Offline && client.State != State.NullState) {
+            heartbeatLock.EnterUpgradeableReadLock();
+
+            if (!lastHeartbeats.ContainsKey(client.Id)) {
+              Logger.Info("Client " + client.Id +
+                              " wasn't offline but hasn't sent heartbeats - setting offline");
+              client.State = State.Offline;
+              DaoLocator.ClientDao.Update(client);
+              Logger.Info("Client " + client.Id +
+                              " wasn't offline but hasn't sent heartbeats - Resetting all his jobs");
+              foreach (JobDto job in DaoLocator.JobDao.FindActiveJobsOfSlave(client)) {
+                //maybe implementa n additional Watchdog? Till then, just set them offline..
+                DaoLocator.JobDao.SetJobOffline(job);
+              }
+            } else {
+              DateTime lastHbOfClient = lastHeartbeats[client.Id];
+
+              TimeSpan dif = DateTime.Now.Subtract(lastHbOfClient);
+              // check if time between last hearbeat and now is greather than HEARTBEAT_MAX_DIF
+              if (dif.TotalSeconds > ApplicationConstants.HEARTBEAT_MAX_DIF) {
+                // if client calculated jobs, the job must be reset
+                Logger.Info("Client timed out and is on RESET");
+                foreach (JobDto job in DaoLocator.JobDao.FindActiveJobsOfSlave(client)) {
+                  DaoLocator.JobDao.SetJobOffline(job);
+                  lock (newAssignedJobs) {
+                    if (newAssignedJobs.ContainsKey(job.Id))
+                      newAssignedJobs.Remove(job.Id);
+                  }
+                }
+                Logger.Debug("setting client offline");
+                // client must be set offline
+                client.State = State.Offline;
+
+                //clientAdapter.Update(client);
+                DaoLocator.ClientDao.Update(client);
+
+                Logger.Debug("removing it from the heartbeats list");
+                heartbeatLock.EnterWriteLock();
+                lastHeartbeats.Remove(client.Id);
+                heartbeatLock.ExitWriteLock();
+              }
+            }
+
+            heartbeatLock.ExitUpgradeableReadLock();
+          } else {
+            //TODO: RLY neccesary?
+            //HiveLogger.Info(this.ToString() + ": Client " + client.Id + " has wrong state: Shouldn't have offline or nullstate, has " + client.State);
+            heartbeatLock.EnterWriteLock();
+            //HiveLogger.Info(this.ToString() + ": Client " + client.Id + " has wrong state: Resetting all his jobs");
+            if (lastHeartbeats.ContainsKey(client.Id))
+              lastHeartbeats.Remove(client.Id);
+            foreach (JobDto job in DaoLocator.JobDao.FindActiveJobsOfSlave(client)) {
+              DaoLocator.JobDao.SetJobOffline(job);
+            }
+            heartbeatLock.ExitWriteLock();
+          }
+        }
+        CheckForPendingJobs();
+        //        DaoLocator.DestroyContext();
+        scope.Complete();
+      }
+    }
+
+    private void CheckForPendingJobs() {
+      IList<JobDto> pendingJobsInDB = new List<JobDto>(DaoLocator.JobDao.GetJobsByState(State.Pending));
+
+      foreach (JobDto currJob in pendingJobsInDB) {
+        lock (pendingJobs) {
+          if (pendingJobs.ContainsKey(currJob.Id)) {
+            if (pendingJobs[currJob.Id] <= 0) {
+              currJob.State = State.Offline;
+              DaoLocator.JobDao.Update(currJob);
+            } else {
+              pendingJobs[currJob.Id]--;
+            }
+          }
+        }
+      }
+    }
+
+    #region IClientCommunicator Members
+
+    /// <summary>
+    /// Login process for the client
+    /// A hearbeat entry is created as well (login is the first hearbeat)
+    /// </summary>
+    /// <param name="clientInfo"></param>
+    /// <returns></returns>
+    public Response Login(ClientDto clientInfo) {
+      Response response = new Response();
+
+      heartbeatLock.EnterWriteLock();
+      if (lastHeartbeats.ContainsKey(clientInfo.Id)) {
+        lastHeartbeats[clientInfo.Id] = DateTime.Now;
+      } else {
+        lastHeartbeats.Add(clientInfo.Id, DateTime.Now);
+      }
+      heartbeatLock.ExitWriteLock();
+
+      ClientDto dbClient = DaoLocator.ClientDao.FindById(clientInfo.Id);
+
+      //Really set offline? 
+      //Reconnect issues with the currently calculating jobs
+      clientInfo.State = State.Idle;
+      clientInfo.CalendarSyncStatus = dbClient != null ? dbClient.CalendarSyncStatus : CalendarState.NotAllowedToFetch;
+
+      if (dbClient == null)
+        DaoLocator.ClientDao.Insert(clientInfo);
+      else
+        DaoLocator.ClientDao.Update(clientInfo);
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_LOGIN_SUCCESS;
+      return response;
+    }
+
+    public ResponseCalendar GetCalendar(Guid clientId) {
+      ResponseCalendar response = new ResponseCalendar();
+
+      ClientDto client = DaoLocator.ClientDao.FindById(clientId);
+      if (client == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_RESOURCE_NOT_FOUND;
+        return response;
+      }
+
+      response.ForceFetch = (client.CalendarSyncStatus == CalendarState.ForceFetch);
+
+      IEnumerable<AppointmentDto> appointments = DaoLocator.UptimeCalendarDao.GetCalendarForClient(client);
+      if (appointments.Count() == 0) {
+        response.StatusMessage = ApplicationConstants.RESPONSE_UPTIMECALENDAR_NO_CALENDAR_FOUND;
+        response.Success = false;
+      } else {
+        response.Success = true;
+        response.Appointments = appointments;
+      }
+
+      client.CalendarSyncStatus = CalendarState.Fetched;
+      DaoLocator.ClientDao.Update(client);
+      return response;
+    }
+
+    public Response SetCalendarStatus(Guid clientId, CalendarState state) {
+      Response response = new Response();
+      ClientDto client = DaoLocator.ClientDao.FindById(clientId);
+      if (client == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_RESOURCE_NOT_FOUND;
+        return response;
+      }
+
+      client.CalendarSyncStatus = state;
+      DaoLocator.ClientDao.Update(client);
+
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_UPTIMECALENDAR_STATUS_UPDATED;
+
+      return response;
+    }
+
+    /// <summary>
+    /// The client has to send regulary heartbeats
+    /// this hearbeats will be stored in the heartbeats dictionary
+    /// check if there is work for the client and send the client a response if he should pull a job
+    /// </summary>
+    /// <param name="hbData"></param>
+    /// <returns></returns>
+    public ResponseHB ProcessHeartBeat(HeartBeatData hbData) {
+      Logger.Debug("BEGIN Processing Heartbeat for Client " + hbData.SlaveId);
+
+      ResponseHB response = new ResponseHB();
+      response.ActionRequest = new List<MessageContainer>();
+
+      Logger.Debug("BEGIN Started Client Fetching");
+      ClientDto client = DaoLocator.ClientDao.FindById(hbData.SlaveId);
+      Logger.Debug("END Finished Client Fetching");
+      // check if the client is logged in
+      if (client.State == State.Offline || client.State == State.NullState) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_USER_NOT_LOGGED_IN;
+        response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.NoMessage));
+
+        Logger.Error("ProcessHeartBeat: Client state null or offline: " + client);
+
+        return response;
+      }
+
+      client.NrOfFreeCores = hbData.FreeCores;
+      client.FreeMemory = hbData.FreeMemory;
+
+      // save timestamp of this heartbeat
+      Logger.Debug("BEGIN Locking for Heartbeats");
+      heartbeatLock.EnterWriteLock();
+      Logger.Debug("END Locked for Heartbeats");
+      if (lastHeartbeats.ContainsKey(hbData.SlaveId)) {
+        lastHeartbeats[hbData.SlaveId] = DateTime.Now;
+      } else {
+        lastHeartbeats.Add(hbData.SlaveId, DateTime.Now);
+      }
+      heartbeatLock.ExitWriteLock();
+
+      Logger.Debug("BEGIN Processing Heartbeat Jobs");
+      ProcessJobProcess(hbData, response);
+      Logger.Debug("END Processed Heartbeat Jobs");
+
+      //check if new Cal must be loaded
+      if (client.CalendarSyncStatus == CalendarState.Fetch || client.CalendarSyncStatus == CalendarState.ForceFetch) {
+        response.Success = true;
+        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_FETCH_OR_FORCEFETCH_CALENDAR;
+        response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.FetchOrForceFetchCalendar));
+
+        //client.CalendarSyncStatus = CalendarState.Fetching;
+
+        Logger.Info("fetch or forcefetch sent");
+      }
+
+      // check if client has a free core for a new job
+      // if true, ask scheduler for a new job for this client
+      Logger.Debug(" BEGIN Looking for Client Jobs");
+      if (hbData.FreeCores > 0 && scheduler.ExistsJobForSlave(hbData)) {
+        response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.FetchJob));
+      } else {
+        response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.NoMessage));
+      }
+      Logger.Debug(" END Looked for Client Jobs");
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_HEARTBEAT_RECEIVED;
+
+      DaoLocator.ClientDao.Update(client);
+
+      //tx.Commit();
+      Logger.Debug(" END Processed Heartbeat for Client " + hbData.SlaveId);
+      return response;
+    }
+
+    /// <summary>
+    /// Process the Job progress sent by a client
+    /// [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 client (from db) and compare if they are consistent with what the joblist the client sent
+    /// (2) find out if every job from the joblist really should be calculated by this client
+    /// (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 client (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 client
+    /// 
+    /// 
+    /// 
+    /// 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="clientAdapter"></param>
+    /// <param name="response"></param>
+    private void ProcessJobProcess(HeartBeatData hbData, ResponseHB response) {
+      Logger.Debug("Started for Client " + hbData.SlaveId);
+      List<JobDto> jobsOfClient = new List<JobDto>(DaoLocator.JobDao.FindActiveJobsOfSlave(DaoLocator.ClientDao.FindById(hbData.SlaveId)));
+      if (hbData.JobProgress != null && hbData.JobProgress.Count > 0) {
+        if (jobsOfClient == null || jobsOfClient.Count == 0) {
+          response.Success = false;
+          response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOB_IS_NOT_BEEING_CALCULATED;
+
+          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);
+          curJob.Client = DaoLocator.ClientDao.GetClientForJob(curJob.Id);
+          if (curJob.Client == null || curJob.Client.Id != hbData.SlaveId) {
+            response.Success = false;
+            response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOB_IS_NOT_BEEING_CALCULATED;
+            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 == State.Abort) {
+            // a request to abort the job has been set
+            response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.AbortJob, curJob.Id));
+            curJob.State = State.Finished;
+          } else {
+            // save job progress
+            curJob.Percentage = jobProgress.Value;
+
+            if (curJob.State == State.RequestSnapshot) {
+              // a request for a snapshot has been set
+              response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.RequestSnapshot, curJob.Id));
+              curJob.State = State.RequestSnapshotSent;
+            }
+          }
+          DaoLocator.JobDao.Update(curJob);
+        }
+      }
+      foreach (JobDto currJob in jobsOfClient) {
+        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.Client);
+              if (newAssignedJobs[currJob.Id] <= 0) {
+                Logger.Error("Job TTL reached Zero, Job gets removed: " + currJob + " and set back to offline. User that sucks: " + currJob.Client);
+
+                currJob.State = State.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 = State.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 client was told to pull a job he calls this method
+    /// the server selects a job and sends it to the client
+    /// </summary>
+    /// <param name="clientId"></param>
+    /// <returns></returns>
+    public ResponseJob SendJob(Guid clientId) {
+
+      ResponseJob response = new ResponseJob();
+
+      JobDto job2Calculate = scheduler.GetNextJobForSlave(clientId);
+      if (job2Calculate != null) {
+        response.Job = job2Calculate;
+        response.Job.PluginsNeeded = DaoLocator.PluginInfoDao.GetPluginDependenciesForJob(response.Job);
+        response.Success = true;
+        Logger.Info("Job pulled: " + job2Calculate + " for user " + clientId);
+        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOB_PULLED;
+        lock (newAssignedJobs) {
+          if (!newAssignedJobs.ContainsKey(job2Calculate.Id))
+            newAssignedJobs.Add(job2Calculate.Id, ApplicationConstants.JOB_TIME_TO_LIVE);
+        }
+      } else {
+        response.Success = false;
+        response.Job = null;
+        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_NO_JOBS_LEFT;
+        Logger.Info("No more Jobs left for " + clientId);
+      }
+
+
+
+      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.ClientId, result.JobId, new byte[] { }, result.Percentage, result.Exception, finished);
+
+      if (response.Success) {
+        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 clientId,
+      Guid jobId,
+      byte[] result,
+      double? percentage,
+      string exception,
+      bool finished) {
+
+      Logger.Info("BEGIN Job received for Storage - SUB method: " + jobId);
+
+      ResponseResultReceived response = new ResponseResultReceived();
+      ClientDto client = DaoLocator.ClientDao.FindById(clientId);
+
+      SerializedJob job = new SerializedJob();
+
+      if (job != null) {
+        job.JobInfo = DaoLocator.JobDao.FindById(jobId);
+        if (job.JobInfo != null) {
+          job.JobInfo.Client = job.JobInfo.Client = DaoLocator.ClientDao.GetClientForJob(jobId);
+        }
+      }
+      
+      if (job != null && job.JobInfo == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_NO_JOB_WITH_THIS_ID;
+        response.JobId = jobId;
+        Logger.Error("No job with Id " + jobId);
+
+        //tx.Rollback();
+        return response;
+      }
+      if (job.JobInfo.State == State.Abort) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOB_WAS_ABORTED;
+
+        Logger.Error("Job was aborted! " + job.JobInfo);
+
+        //tx.Rollback();
+        return response;
+      }
+      if (job.JobInfo.Client == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOB_IS_NOT_BEEING_CALCULATED;
+        response.JobId = jobId;
+
+        Logger.Error("Job is not being calculated (client = null)! " + job.JobInfo);
+
+        //tx.Rollback();
+        return response;
+      }
+      if (job.JobInfo.Client.Id != clientId) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_WRONG_CLIENT_FOR_JOB;
+        response.JobId = jobId;
+
+        Logger.Error("Wrong Client for this Job! " + job.JobInfo + ", Sending Client is: " + clientId);
+
+        //tx.Rollback();
+        return response;
+      }
+      if (job.JobInfo.State == State.Finished) {
+        response.Success = true;
+        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOBRESULT_RECEIVED;
+        response.JobId = jobId;
+
+        Logger.Error("Job already finished! " + job.JobInfo + ", Sending Client is: " + clientId);
+
+        //tx.Rollback();
+        return response;
+      }
+      //Todo: RequestsnapshotSent => calculating?
+      if (job.JobInfo.State == State.RequestSnapshotSent) {
+        job.JobInfo.State = State.Calculating;
+      }
+      if (job.JobInfo.State != State.Calculating &&
+        job.JobInfo.State != State.Pending) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_WRONG_JOB_STATE;
+        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 = State.Failed;
+        job.JobInfo.Exception = exception;
+        job.JobInfo.DateFinished = DateTime.Now;
+      } else if (finished) {
+        job.JobInfo.State = State.Finished;
+        job.JobInfo.DateFinished = DateTime.Now;
+      }
+
+      job.SerializedJobData = result;
+
+      DaoLocator.JobDao.Update(job.JobInfo);
+
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOBRESULT_RECEIVED;
+      response.JobId = jobId;
+      response.Finished = finished;
+
+      Logger.Info("END Job received for Storage - SUB method: " + jobId);
+      return response;
+
+    }
+
+    /// <summary>
+    /// the client 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="clientId"></param>
+    /// <param name="jobId"></param>
+    /// <param name="result"></param>
+    /// <param name="exception"></param>
+    /// <param name="finished"></param>
+    /// <returns></returns>
+    public ResponseResultReceived StoreFinishedJobResult(Guid clientId,
+      Guid jobId,
+      byte[] result,
+      double percentage,
+      string exception) {
+
+      return ProcessJobResult(clientId, jobId, result, percentage, exception, true);
+    }
+
+    public ResponseResultReceived ProcessSnapshot(Guid clientId, Guid jobId, byte[] result, double percentage, string exception) {
+      return ProcessJobResult(clientId, jobId, result, percentage, exception, false);
+    }
+
+    /// <summary>
+    /// when a client logs out the state will be set
+    /// and the entry in the last hearbeats dictionary will be removed
+    /// </summary>
+    /// <param name="clientId"></param>
+    /// <returns></returns>                       
+    public Response Logout(Guid clientId) {
+      Logger.Info("Client logged out " + clientId);
+
+      Response response = new Response();
+
+      heartbeatLock.EnterWriteLock();
+      if (lastHeartbeats.ContainsKey(clientId))
+        lastHeartbeats.Remove(clientId);
+      heartbeatLock.ExitWriteLock();
+
+      ClientDto client = DaoLocator.ClientDao.FindById(clientId);
+      if (client == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_LOGOUT_CLIENT_NOT_REGISTERED;
+        return response;
+      }
+      if (client.State == State.Calculating) {
+        // check wich job the client was calculating and reset it
+        IEnumerable<JobDto> jobsOfClient = DaoLocator.JobDao.FindActiveJobsOfSlave(client);
+        foreach (JobDto job in jobsOfClient) {
+          if (job.State != State.Finished)
+            DaoLocator.JobDao.SetJobOffline(job);
+        }
+      }
+
+      client.State = State.Offline;
+      DaoLocator.ClientDao.Update(client);
+
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_LOGOUT_SUCCESS;
+
+      return response;
+    }
+
+    /// <summary>
+    /// If a client goes offline and restores a job he was calculating 
+    /// he can ask the client 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 = ApplicationConstants.RESPONSE_COMMUNICATOR_JOB_DOESNT_EXIST;
+        Logger.Error("Job doesn't exist (anymore)! " + jobId);
+        return response;
+      }
+      if (job.State == State.Finished) {
+        response.Success = true;
+        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOB_ALLREADY_FINISHED;
+        Logger.Error("already finished! " + job);
+        return response;
+      }
+      job.State = State.Pending;
+      lock (pendingJobs) {
+        pendingJobs.Add(job.Id, PENDING_TIMEOUT);
+      }
+
+      DaoLocator.JobDao.Update(job);
+
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_SEND_JOBRESULT;
+      return response;
+    }
+
+    public ResponsePlugin SendPlugins(List<HivePluginInfoDto> pluginList) {
+      ResponsePlugin response = new ResponsePlugin();
+      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.Plugins.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.Plugins.Add(convertPluginDescriptorToDto(ipd));
+          } else {
+            response.Success = false;
+            response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_PLUGINS_NOT_AVAIL;
+            return response;
+          }
+        }
+      }
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_PLUGINS_SENT;
+
+      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-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/SlaveManager.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/SlaveManager.cs	(revision 4253)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.Core/3.3/SlaveManager.cs	(revision 4253)
@@ -0,0 +1,220 @@
+#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 ClientGroup=HeuristicLab.Hive.Contracts.BusinessObjects.ClientGroupDto;
+
+namespace HeuristicLab.Hive.Server.Core {
+  internal class SlaveManager : ISlaveManager {
+    private List<ClientGroup> clientGroups;
+
+    public SlaveManager() {
+      clientGroups = new List<ClientGroup>();
+    }
+
+    #region IClientManager Members
+
+    /// <summary>
+    /// Returns all clients stored in the database
+    /// </summary>
+    /// <returns></returns>
+    public ResponseList<ClientDto> GetAllClients() {
+      ResponseList<ClientDto> response = new ResponseList<ClientDto>();
+
+      response.List = new List<ClientDto>(DaoLocator.ClientDao.FindAll());
+      response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_GET_ALL_CLIENTS;
+      response.Success = true;
+
+      return response;
+    }
+
+    /// <summary>
+    /// returns all client groups stored in the database
+    /// </summary>
+    /// <returns></returns>
+    public ResponseList<ClientGroup> GetAllClientGroups() {
+      ResponseList<ClientGroup> response = new ResponseList<ClientGroup>();
+
+      List<ClientGroup> allClientGroups =
+        new List<ClientGroup>(DaoLocator.ClientGroupDao.FindAllWithSubGroupsAndClients());
+      ClientGroup emptyClientGroup = new ClientGroup();
+      IEnumerable<ClientDto> groupLessClients = DaoLocator.ClientDao.FindAllClientsWithoutGroup();
+      if (groupLessClients != null) {
+        foreach (ClientDto currClient in groupLessClients) {
+          emptyClientGroup.Resources.Add(currClient);
+        }
+      }
+      emptyClientGroup.Id = Guid.Empty;
+      allClientGroups.Add(emptyClientGroup);
+
+      response.List = allClientGroups;
+      response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_GET_ALL_CLIENTGROUPS;
+      response.Success = true;
+
+      return response;
+    }
+
+    public ResponseList<UpTimeStatisticsDto> GetAllUpTimeStatistics() {
+      ResponseList<UpTimeStatisticsDto> response = new ResponseList<UpTimeStatisticsDto>();
+      response.Success = true;
+      return response;
+    }
+
+    /// <summary>
+    /// Add a client group into the database
+    /// </summary>
+    /// <param name="clientGroup"></param>
+    /// <returns></returns>
+    public ResponseObject<ClientGroup> AddClientGroup(ClientGroup clientGroup) {
+      ResponseObject<ClientGroup> response = new ResponseObject<ClientGroup>();
+
+      if (clientGroup.Id != Guid.Empty) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_ID_MUST_NOT_BE_SET;
+      }
+      else {
+        clientGroup = DaoLocator.ClientGroupDao.Insert(clientGroup);
+        //clientGroupAdapter.Update(clientGroup);
+        response.Obj = clientGroup;
+        response.Success = true;
+        response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_CLIENTGROUP_ADDED;
+      }
+
+      return response;
+    }
+
+    /// <summary>
+    ///  Add a resource to a group
+    /// </summary>
+    /// <param name="clientGroupId"></param>
+    /// <param name="resource"></param>
+    /// <returns></returns>
+    public Response AddResourceToGroup(Guid clientGroupId, ResourceDto resource) {
+      Response response = new Response();
+
+      ClientGroup clientGroup = DaoLocator.ClientGroupDao.FindById(clientGroupId);
+      if (clientGroup == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_CLIENTGROUP_DOESNT_EXIST;
+        return response;
+      }
+
+      clientGroup.Resources.Add(resource);
+      DaoLocator.ClientGroupDao.AddRessourceToClientGroup(resource.Id, clientGroup.Id);
+
+      //If our resource is in fact a client => set the callendar from the resource as current one.
+      
+      ClientDto dbr = DaoLocator.ClientDao.FindById(resource.Id);
+      if(dbr != null) {
+        DaoLocator.ClientDao.SetServerSideCalendar(dbr, clientGroup.Id);  
+      }
+
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_RESOURCE_ADDED_TO_GROUP;
+
+      return response;
+    }
+
+    /// <summary>
+    /// Remove a resource from a group
+    /// </summary>
+    /// <param name="clientGroupId"></param>
+    /// <param name="resourceId"></param>
+    /// <returns></returns>
+    public Response DeleteResourceFromGroup(Guid clientGroupId, Guid resourceId) {
+      Response response = new Response();
+
+      ClientGroup clientGroup = DaoLocator.ClientGroupDao.FindById(clientGroupId);
+      if (clientGroup == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_CLIENTGROUP_DOESNT_EXIST;
+        return response;
+      }
+     
+      DaoLocator.ClientGroupDao.RemoveRessourceFromClientGroup(resourceId, clientGroup.Id);
+      
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_RESOURCE_REMOVED;
+      return response;                
+    }
+
+    public ResponseObject<ClientGroupDtoList> GetAllGroupsOfResource(Guid resourceId) {
+      ResponseObject<ClientGroupDtoList> response = new ResponseObject<ClientGroupDtoList>();
+
+      ClientDto client = DaoLocator.ClientDao.FindById(resourceId);
+      if (client != null) {
+        ClientGroupDtoList groupsOfClient = new ClientGroupDtoList(DaoLocator.ClientGroupDao.MemberOf(client));
+        response.Obj = groupsOfClient;
+        response.Success = true;
+        response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_GET_GROUPS_OF_CLIENT;
+      }
+      else {
+        response.Obj = new ClientGroupDtoList();
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_RESOURCE_NOT_FOUND;
+      }
+
+      return response;
+    }
+
+    public Response DeleteClientGroup(Guid clientGroupId) {
+      Response response = new Response();
+
+      ClientGroup clientGroup = DaoLocator.ClientGroupDao.FindById(clientGroupId);
+      if (clientGroup == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_CLIENTGROUP_DOESNT_EXIST;
+        return response;
+      }
+
+      DaoLocator.ClientGroupDao.Delete(clientGroup);
+
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_CLIENTGROUP_DELETED;
+      return response;
+    }
+
+    public ResponseList<AppointmentDto> GetUptimeCalendarForResource(Guid guid) {
+      ResponseList<AppointmentDto> response = new ResponseList<AppointmentDto>();
+      response.List = new List<AppointmentDto>(DaoLocator.UptimeCalendarDao.GetUptimeCalendarForResource(guid));
+      response.Success = true;
+      return response;
+    }
+
+    public Response SetUptimeCalendarForResource(Guid guid, IEnumerable<AppointmentDto> appointments, bool isForced) {
+      DaoLocator.UptimeCalendarDao.SetUptimeCalendarForResource(guid, appointments);
+      DaoLocator.UptimeCalendarDao.NotifyClientsOfNewCalendar(guid, isForced);
+      return new Response {Success = true};
+    }
+    #endregion
+ }
+}
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IJobDao.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IJobDao.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.DataAccess/3.3/IJobDao.cs	(revision 4253)
@@ -7,9 +7,9 @@
 namespace HeuristicLab.Hive.Server.DataAccess {
   public interface IJobDao: IGenericDao<JobDto> {
-    IEnumerable<JobDto> FindActiveJobsOfClient(ClientDto client);
+    IEnumerable<JobDto> FindActiveJobsOfSlave(ClientDto slave);
 
     IEnumerable<JobDto> GetJobsByState(State state);
 
-    void AssignClientToJob(Guid clientId, Guid jobId);
+    void AssignSlaveToJob(Guid slaveId, Guid jobId);
 
     void SetJobOffline(JobDto job);
@@ -19,5 +19,5 @@
     byte[] GetBinaryJobFile(Guid jobId); 
 
-    IEnumerable<JobDto> FindFittingJobsForClient(State state, int freeCores, int freeMemory, Guid clientGuid);
+    IEnumerable<JobDto> FindFittingJobsForSlave(State state, int freeCores, int freeMemory, Guid slaveGuid);
     Stream GetSerializedJobStream(Guid jobId);
 
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/JobDao.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/JobDao.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server.LINQDataAccess/3.3/JobDao.cs	(revision 4253)
@@ -93,5 +93,5 @@
     }
 
-    public IEnumerable<JobDto> FindActiveJobsOfClient(ClientDto client) {
+    public IEnumerable<JobDto> FindActiveJobsOfSlave(ClientDto client) {
       return (from j in Context.Jobs
               where (j.JobState == Enum.GetName(typeof (State), State.Calculating) ||
@@ -103,5 +103,5 @@
     }
 
-    public IEnumerable<JobDto> FindFittingJobsForClient(State state, int freeCores, int freeMemory, Guid clientId) {
+    public IEnumerable<JobDto> FindFittingJobsForSlave(State state, int freeCores, int freeMemory, Guid clientId) {
       ClientGroupDao cgd = new ClientGroupDao();
       
@@ -126,5 +126,5 @@
     }
 
-    public void AssignClientToJob(Guid clientId, Guid jobId) {
+    public void AssignSlaveToJob(Guid clientId, Guid jobId) {
       Client c = Context.Resources.OfType<Client>().SingleOrDefault(client => client.ResourceId.Equals(clientId));
       Job j = Context.Jobs.SingleOrDefault(job => job.JobId.Equals(jobId));
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/HeuristicLabHiveServerApplication.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/HeuristicLabHiveServerApplication.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Server/3.3/HeuristicLabHiveServerApplication.cs	(revision 4253)
@@ -65,5 +65,5 @@
       string curServiceHost = "";
       Uri uriTcp;
-      IClientFacade clientCommunicatorInstance = ApplicationManager.Manager.GetInstances<IClientFacade>().First();
+      ISlaveFacade clientCommunicatorInstance = ApplicationManager.Manager.GetInstances<ISlaveFacade>().First();
       IServerConsoleFacade serverConsoleInstance = ApplicationManager.Manager.GetInstances<IServerConsoleFacade>().First();
       IExecutionEngineFacade executionEngineInstance = ApplicationManager.Manager.GetInstances<IExecutionEngineFacade>().First();
@@ -78,5 +78,5 @@
           //serviceHost = new ServiceHost(typeof(ClientFacade), uriTcp);
           //serviceHost = new SpringServiceHost("clientFacade", uriTcp);
-          serviceHost.AddServiceEndpoint(typeof(IClientFacade), streamedBinding, STR_ClientCommunicator);
+          serviceHost.AddServiceEndpoint(typeof(ISlaveFacade), streamedBinding, STR_ClientCommunicator);
 
           ServiceDebugBehavior sdb = serviceHost.Description.Behaviors.Find<ServiceDebugBehavior>();
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/HeuristicLab.Hive.Slave.Common-3.3.csproj
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/HeuristicLab.Hive.Slave.Common-3.3.csproj	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/HeuristicLab.Hive.Slave.Common-3.3.csproj	(revision 4253)
@@ -9,6 +9,6 @@
     <OutputType>Library</OutputType>
     <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>HeuristicLab.Hive.Client.Common</RootNamespace>
-    <AssemblyName>HeuristicLab.Hive.Client.Common-3.3</AssemblyName>
+    <RootNamespace>HeuristicLab.Hive.Slave.Common</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Slave.Common-3.3</AssemblyName>
     <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
@@ -118,5 +118,5 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="HeuristicLabHiveClientCommonPlugin.cs" />
+    <Compile Include="HeuristicLabHiveSlaveCommonPlugin.cs" />
     <Compile Include="MessageQueue.cs" />
     <Compile Include="NetworkEnum.cs" />
Index: anches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/HeuristicLabHiveClientCommonPlugin.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/HeuristicLabHiveClientCommonPlugin.cs	(revision 4252)
+++ 	(revision )
@@ -1,37 +1,0 @@
-﻿#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.Client.Common {
-  [Plugin("HeuristicLab.Hive.Client.Common", "3.3")]
-  [PluginFile("HeuristicLab.Hive.Client.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 HeuristicLabHiveClientCommonPlugin: PluginBase {
-  }
-}
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/HeuristicLabHiveSlaveCommonPlugin.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/HeuristicLabHiveSlaveCommonPlugin.cs	(revision 4253)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/HeuristicLabHiveSlaveCommonPlugin.cs	(revision 4253)
@@ -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-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/MessageQueue.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/MessageQueue.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/MessageQueue.cs	(revision 4253)
@@ -26,5 +26,5 @@
 using HeuristicLab.Hive.Contracts;
 
-namespace HeuristicLab.Hive.Client.Common {
+namespace HeuristicLab.Hive.Slave.Common {
 
   /// <summary>
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/NetworkEnum.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/NetworkEnum.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/NetworkEnum.cs	(revision 4253)
@@ -25,5 +25,5 @@
 using System.Text;
 
-namespace HeuristicLab.Hive.Client.Common {
+namespace HeuristicLab.Hive.Slave.Common {
   public class NetworkEnum {
     public enum WcfConnState { Connected, Disconnected, Failed, Loggedin }  
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/Properties/AssemblyInfo.frame	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Common/3.3/Properties/AssemblyInfo.frame	(revision 4253)
@@ -29,5 +29,5 @@
 // set of attributes. Change these attribute values to modify the information
 // associated with an assembly.
-[assembly: AssemblyTitle("HeuristicLab.Hive.Client.Common")]
+[assembly: AssemblyTitle("HeuristicLab.Hive.Slave.Common")]
 [assembly: AssemblyDescription("")]
 [assembly: AssemblyConfiguration("")]
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/HeuristicLab.Hive.Slave.Communication-3.3.csproj
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/HeuristicLab.Hive.Slave.Communication-3.3.csproj	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/HeuristicLab.Hive.Slave.Communication-3.3.csproj	(revision 4253)
@@ -9,6 +9,6 @@
     <OutputType>Library</OutputType>
     <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>HeuristicLab.Hive.Client.Communication</RootNamespace>
-    <AssemblyName>HeuristicLab.Hive.Client.Communication-3.3</AssemblyName>
+    <RootNamespace>HeuristicLab.Hive.Slave.Communication</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Slave.Communication-3.3</AssemblyName>
     <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
@@ -82,4 +82,5 @@
       <HintPath>..\..\..\..\..\..\..\..\..\Programme\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>..\..\..\..\..\..\..\..\..\Programme\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
@@ -108,5 +109,5 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="HeuristicLabHiveClientCommunicationPlugin.cs" />
+    <Compile Include="HeuristicLabHiveSlaveCommunicationPlugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="SendJobCompletedEventArgs.cs" />
@@ -152,15 +153,11 @@
   </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.Client.Common\3.3\HeuristicLab.Hive.Client.Common-3.3.csproj">
-      <Project>{89F4BC52-C174-481E-9BD2-3814171020E8}</Project>
-      <Name>HeuristicLab.Hive.Client.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.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>
Index: anches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/HeuristicLabHiveClientCommunicationPlugin.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/HeuristicLabHiveClientCommunicationPlugin.cs	(revision 4252)
+++ 	(revision )
@@ -1,41 +1,0 @@
-﻿#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.Client.Communication {
-
-  [Plugin("HeuristicLab.Hive.Client.Communication", "3.3")]
-  [PluginFile("HeuristicLab.Hive.Client.Communication-3.3.dll", PluginFileType.Assembly)]
-  [PluginDependency("HeuristicLab.Common", "3.3")]
-  [PluginDependency("HeuristicLab.Core", "3.3")]
-  [PluginDependency("HeuristicLab.DataAccess", "3.3")]
-  [PluginDependency("HeuristicLab.Hive.Client.Common", "3.3")]
-  [PluginDependency("HeuristicLab.Hive.Contracts", "3.3")]
-  [PluginDependency("HeuristicLab.Tracing", "3.3")]
-  public class HeuristicLabHiveClientCommunicationPlugin : PluginBase {
-  }
-}
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/HeuristicLabHiveSlaveCommunicationPlugin.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/HeuristicLabHiveSlaveCommunicationPlugin.cs	(revision 4253)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/HeuristicLabHiveSlaveCommunicationPlugin.cs	(revision 4253)
@@ -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-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/AssemblyInfo.frame	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Properties/AssemblyInfo.frame	(revision 4253)
@@ -28,5 +28,5 @@
 // set of attributes. Change these attribute values to modify the information
 // associated with an assembly.
-[assembly: AssemblyTitle("HeuristicLab.Hive.Client.Communication")]
+[assembly: AssemblyTitle("HeuristicLab.Hive.Slave.Communication")]
 [assembly: AssemblyDescription("")]
 [assembly: AssemblyConfiguration("")]
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/SendJobCompletedEventArgs.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/SendJobCompletedEventArgs.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/SendJobCompletedEventArgs.cs	(revision 4253)
@@ -21,5 +21,5 @@
 using System;
 
-namespace HeuristicLab.Hive.Client.Communication.ServerService {
+namespace HeuristicLab.Hive.Slave.Communication.ServerService {
   public partial class SendJobCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
 
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/ServerService/Reference.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/ServerService/Reference.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/Service References/ServerService/Reference.cs	(revision 4253)
@@ -9,6 +9,61 @@
 //------------------------------------------------------------------------------
 
-namespace HeuristicLab.Hive.Client.Communication.ServerService {
-    
+namespace HeuristicLab.Hive.Slave.Communication.ServerService {
+    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="PersistableObject", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.DataAccess")]
+    [System.SerializableAttribute()]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.BusinessObjects.ClientConfigDto))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.BusinessObjects.JobDto))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.BusinessObjects.HivePluginInfoDto))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.PluginInfrastructure.CachedHivePluginInfoDto))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.BusinessObjects.ProjectDto))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.BusinessObjects.AppointmentDto))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.BusinessObjects.ResourceDto))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.BusinessObjects.ClientDto))]
+    public partial class PersistableObject : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid IdField;
+        
+        [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 Id {
+            get {
+                return this.IdField;
+            }
+            set {
+                if ((this.IdField.Equals(value) != true)) {
+                    this.IdField = value;
+                    this.RaisePropertyChanged("Id");
+                }
+            }
+        }
+        
+        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")]
@@ -150,5 +205,5 @@
     
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
-    public interface IClientFacadeChannel : HeuristicLab.Hive.Client.Communication.ServerService.IClientFacade, System.ServiceModel.IClientChannel {
+    public interface IClientFacadeChannel : HeuristicLab.Hive.Slave.Communication.ServerService.IClientFacade, System.ServiceModel.IClientChannel {
     }
     
@@ -421,5 +476,5 @@
     [System.Diagnostics.DebuggerStepThroughAttribute()]
     [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
-    public partial class ClientFacadeClient : System.ServiceModel.ClientBase<HeuristicLab.Hive.Client.Communication.ServerService.IClientFacade>, HeuristicLab.Hive.Client.Communication.ServerService.IClientFacade {
+    public partial class ClientFacadeClient : System.ServiceModel.ClientBase<HeuristicLab.Hive.Slave.Communication.ServerService.IClientFacade>, HeuristicLab.Hive.Slave.Communication.ServerService.IClientFacade {
         
         private BeginOperationDelegate onBeginLoginDelegate;
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/WcfService.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/WcfService.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Communication/3.3/WcfService.cs	(revision 4253)
@@ -26,5 +26,5 @@
 using System.ServiceModel;
 using HeuristicLab.Hive.Contracts.Interfaces;
-using HeuristicLab.Hive.Client.Common;
+using HeuristicLab.Hive.Slave.Common;
 using HeuristicLab.PluginInfrastructure;
 using System.IO;
@@ -34,7 +34,7 @@
 using HeuristicLab.Hive.Contracts.BusinessObjects;
 
-namespace HeuristicLab.Hive.Client.Communication {
-  using Service = HeuristicLab.Hive.Client.Communication.ServerService;
-  using HeuristicLab.Hive.Client.Communication.ServerService;
+namespace HeuristicLab.Hive.Slave.Communication {
+  using Service = HeuristicLab.Hive.Slave.Communication.ServerService;
+  using HeuristicLab.Hive.Slave.Communication.ServerService;
 
   /// <summary>
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLab.Hive.Slave.Console-3.3.csproj
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLab.Hive.Slave.Console-3.3.csproj	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLab.Hive.Slave.Console-3.3.csproj	(revision 4253)
@@ -9,6 +9,6 @@
     <OutputType>Library</OutputType>
     <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>HeuristicLab.Hive.Client.Console</RootNamespace>
-    <AssemblyName>HeuristicLab.Hive.Client.Console-3.3</AssemblyName>
+    <RootNamespace>HeuristicLab.Hive.Slave.Console</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Slave.Console-3.3</AssemblyName>
     <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
@@ -78,4 +78,5 @@
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="HeuristicLab.Calendar-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
     <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
       <HintPath>..\..\..\..\..\..\..\..\..\Programme\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
@@ -108,16 +109,16 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="HiveClientConsole.cs">
+    <Compile Include="HiveSlaveConsole.cs">
       <SubType>Form</SubType>
     </Compile>
-    <Compile Include="HiveClientConsole.designer.cs">
-      <DependentUpon>HiveClientConsole.cs</DependentUpon>
-    </Compile>
-    <Compile Include="HeuristicLabHiveClientConsolePlugin.cs" />
-    <Compile Include="HeuristicLabHiveClientConsoleApplication.cs" />
+    <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" />
-    <EmbeddedResource Include="HiveClientConsole.resx">
-      <DependentUpon>HiveClientConsole.cs</DependentUpon>
+    <EmbeddedResource Include="HiveSlaveConsole.resx">
+      <DependentUpon>HiveSlaveConsole.cs</DependentUpon>
       <SubType>Designer</SubType>
     </EmbeddedResource>
@@ -155,5 +156,5 @@
       <DependentUpon>Recurrence.cs</DependentUpon>
     </Compile>
-    <Compile Include="Service References\ClientService\Reference.cs">
+    <Compile Include="Service References\SlaveService\Reference.cs">
       <AutoGen>True</AutoGen>
       <DesignTime>True</DesignTime>
@@ -162,8 +163,4 @@
   </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>
@@ -176,12 +173,23 @@
   <ItemGroup>
     <None Include="Resources\Info.png" />
-    <None Include="Service References\ClientService\HeuristicLab.Calendar.xsd">
-      <SubType>Designer</SubType>
-    </None>
-    <None Include="Service References\ClientService\HeuristicLab.Hive.Client.Common.xsd" />
-    <None Include="Service References\ClientService\HeuristicLab.Hive.Client.Core.ClientConsoleService.xsd" />
-    <None Include="Service References\ClientService\service.wsdl" />
-    <None Include="Service References\ClientService\service.xsd" />
-    <None Include="Service References\ClientService\service1.xsd" />
+    <None Include="Service References\SlaveService\HeuristicLab.Calendar.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveService\HeuristicLab.Hive.Slave.Common1.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveService\HeuristicLab.Hive.Slave.Console.SlaveService.ConnectionContainer.datasource">
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </None>
+    <None Include="Service References\SlaveService\HeuristicLab.Hive.Slave.Console.SlaveService.StatusCommons.datasource">
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </None>
+    <None Include="Service References\SlaveService\HeuristicLab.Hive.Slave.Core.ClientConsoleService1.xsd">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Service References\SlaveService\HeuristicLab.Hive.Slave.Core.SlaveConsoleService.xsd" />
+    <None Include="Service References\SlaveService\service.wsdl" />
+    <None Include="Service References\SlaveService\service.xsd" />
+    <None Include="Service References\SlaveService\service1.xsd" />
   </ItemGroup>
   <ItemGroup>
@@ -189,20 +197,14 @@
   </ItemGroup>
   <ItemGroup>
-    <WCFMetadataStorage Include="Service References\ClientService\" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Service References\ClientService\configuration91.svcinfo" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Service References\ClientService\configuration.svcinfo" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Service References\ClientService\HeuristicLab.Hive.Client.Console.ClientService.ConnectionContainer.datasource">
-      <DependentUpon>Reference.svcmap</DependentUpon>
-    </None>
-    <None Include="Service References\ClientService\HeuristicLab.Hive.Client.Console.ClientService.StatusCommons.datasource">
-      <DependentUpon>Reference.svcmap</DependentUpon>
-    </None>
-    <None Include="Service References\ClientService\Reference.svcmap">
+    <WCFMetadataStorage Include="Service References\SlaveService\" />
+  </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>
@@ -224,5 +226,5 @@
   <ItemGroup>
     <None Include="Resources\exit-48.png" />
-    <None Include="Service References\ClientService\System.Drawing1.xsd" />
+    <None Include="Service References\SlaveService\System.Drawing1.xsd" />
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Index: anches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLabHiveClientConsoleApplication.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLabHiveClientConsoleApplication.cs	(revision 4252)
+++ 	(revision )
@@ -1,36 +1,0 @@
-﻿#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.Client.Console {
-  [Application("Hive Client Console", "Console Application for the Hive Client.")]
-  class HeuristicLabHiveClientConsoleApplication : ApplicationBase {
-    public override void Run() {
-      Form mainForm = new HiveClientConsole();
-      Application.Run(mainForm);
-    }
-  }
-}
Index: anches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLabHiveClientConsolePlugin.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLabHiveClientConsolePlugin.cs	(revision 4252)
+++ 	(revision )
@@ -1,35 +1,0 @@
-#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.Client.Console", "3.3")]
-  [PluginFile("HeuristicLab.Hive.Client.Console-3.3.dll", PluginFileType.Assembly)]
-  [PluginDependency("HeuristicLab.Calendar", "3.3")]
-  [PluginDependency("HeuristicLab.Hive.Contracts", "3.3")]
-  public class HeuristicLabHiveClientConsolePlugin : PluginBase {
-  }
-}
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLabHiveSlaveConsoleApplication.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLabHiveSlaveConsoleApplication.cs	(revision 4253)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLabHiveSlaveConsoleApplication.cs	(revision 4253)
@@ -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-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLabHiveSlaveConsolePlugin.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLabHiveSlaveConsolePlugin.cs	(revision 4253)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HeuristicLabHiveSlaveConsolePlugin.cs	(revision 4253)
@@ -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: anches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveClientConsole.Designer.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveClientConsole.Designer.cs	(revision 4252)
+++ 	(revision )
@@ -1,699 +1,0 @@
-﻿#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.Client.Console {
-  partial class HiveClientConsole {
-    /// <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(HiveClientConsole));
-      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.tbPort = new System.Windows.Forms.TextBox();
-      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.tbPort);
-      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.Client.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_clientShutdown_Click);
-      // 
-      // btnDisconnect
-      // 
-      this.btnDisconnect.Image = global::HeuristicLab.Hive.Client.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.Client.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);
-      // 
-      // tbPort
-      // 
-      this.tbPort.Location = new System.Drawing.Point(74, 59);
-      this.tbPort.Name = "tbPort";
-      this.tbPort.Size = new System.Drawing.Size(65, 20);
-      this.tbPort.TabIndex = 3;
-      this.tbPort.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Connection_KeyPress);
-      // 
-      // 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.Client.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 tbPort;
-    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: anches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveClientConsole.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveClientConsole.cs	(revision 4252)
+++ 	(revision )
@@ -1,582 +1,0 @@
-﻿#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.Diagnostics;
-using System.Drawing;
-using System.Linq;
-using System.Net;
-using System.ServiceModel;
-using System.Windows.Forms;
-using HeuristicLab.Calendar;
-using HeuristicLab.Hive.Client.Console.ClientService;
-using ZedGraph;
-using HeuristicLab.Hive.Contracts;
-using System.Xml.Serialization;
-using System.IO;
-
-namespace HeuristicLab.Hive.Client.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 HiveClientConsole : Form {
-
-    #region Declarations
-
-    private const string ENDPOINTADRESS = "net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator";
-
-    private static bool isfired = false;
-    //the logfilereader
-    private LogFileReader logFileReader;
-
-    //communication with the client
-    private ClientConsoleCommunicatorClient clientCommunicator;
-
-    //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 HiveClientConsole() {
-      InitializeComponent();
-      InitTimer();
-      ConnectToClient();
-      RefreshGui();
-      InitCalender();
-      InitLogFileReader();
-    }
-
-    #endregion
-
-    #region Methods
-
-    #region Client connection
-
-    private void ConnectToClient() {
-      try {
-        clientCommunicator = new ClientConsoleCommunicatorClient(WcfSettings.GetBinding(), new EndpointAddress(ENDPOINTADRESS));
-        clientCommunicator.GetStatusInfosCompleted += new EventHandler<GetStatusInfosCompletedEventArgs>(clientCommunicator_GetStatusInfosCompleted);
-        clientCommunicator.GetCurrentConnectionCompleted += new EventHandler<GetCurrentConnectionCompletedEventArgs>(clientCommunicator_GetCurrentConnectionCompleted);
-        clientCommunicator.GetUptimeCalendarCompleted += new EventHandler<GetUptimeCalendarCompletedEventArgs>(clientCommunicator_GetUptimeCalendarCompleted);
-        clientCommunicator.SetUptimeCalendarCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(clientCommunicator_SetUptimeCalendarCompleted);
-      } catch (Exception ex) {
-        ManageFatalException("Connection Error, check if Hive Client is running!", "Connection Error", ex);
-      }
-    }
-
-    #endregion
-
-    #region Logging
-
-    private void InitLogFileReader() {
-      logFileReader = new LogFileReader(AppDomain.CurrentDomain.BaseDirectory + @"/Hive.Client.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 {
-        clientCommunicator.GetStatusInfosAsync();
-      } catch (Exception ex) {
-        ManageFatalException("Connection Error, check if Hive Client 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 client
-      clientCommunicator.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) {
-      clientCommunicator.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) {
-      clientCommunicator.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 Client communicator events
-
-    void clientCommunicator_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 clientCommunicator_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 clientCommunicator_GetCurrentConnectionCompleted(object sender, GetCurrentConnectionCompletedEventArgs e) {
-      if (e.Error == null) {
-        ConnectionContainer curConnection = e.Result;
-        tbIPAdress.Text = curConnection.IPAdress;
-        tbPort.Text = curConnection.Port.ToString();
-      } else {
-        ManageFatalException("Connection Error, check if Hive Client is running!", "Connection Error", null);
-      }
-    }
-
-    private void clientCommunicator_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 = "Client 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 || sc.Status == NetworkEnumWcfConnState.Loggedin) {
-          btConnect.Enabled = false;
-          btnDisconnect.Enabled = true;
-          lbCs.Text = sc.ConnectedSince.ToString();
-          clientCommunicator.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;
-        }
-
-        clientCommunicator.GetCurrentConnection();
-      } else {
-        ManageFatalException("Connection Error, check if Hive Client 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;
-      int port;
-      ConnectionContainer cc = new ConnectionContainer();
-      if (IPAddress.TryParse(tbIPAdress.Text, out ipAdress) && int.TryParse(tbPort.Text, out port)) {
-        cc.IPAdress = tbIPAdress.Text;
-        cc.Port = port;
-        clientCommunicator.SetConnectionAsync(cc);
-      } else {
-        MessageBox.Show("IP Adress and/or Port Error", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
-      }
-    }
-
-    private void btnDisconnect_Click(object sender, EventArgs e) {
-      clientCommunicator.DisconnectAsync();
-    }
-
-    private void btn_clientShutdown_Click(object sender, EventArgs e) {
-      DialogResult res = MessageBox.Show("Do you really want to shutdown the Hive Client?", "Hive Client Console", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
-      if (res == DialogResult.Yes) {
-        logFileReader.Stop();
-        clientCommunicator.ShutdownClient();
-        this.Close();
-      }
-    }
-
-    private void Connection_KeyPress(object sender, KeyPressEventArgs e) {
-      if (e.KeyChar == (char)Keys.Return)
-        btConnect_Click(null, null);
-    }
-
-    #endregion
-
-
-
-  }
-}
Index: anches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveClientConsole.resx
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveClientConsole.resx	(revision 4252)
+++ 	(revision )
@@ -1,180 +1,0 @@
-<?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-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.cs	(revision 4253)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.cs	(revision 4253)
@@ -0,0 +1,582 @@
+﻿#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.Diagnostics;
+using System.Drawing;
+using System.Linq;
+using System.Net;
+using System.ServiceModel;
+using System.Windows.Forms;
+using HeuristicLab.Hive.Slave.Console.SlaveService;
+using ZedGraph;
+using HeuristicLab.Hive.Contracts;
+using System.Xml.Serialization;
+using System.IO;
+using HeuristicLab.Calendar;
+
+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 const string ENDPOINTADRESS = "net.tcp://127.0.0.1:8000/SlaveConsole/SlaveConsoleCommunicator";
+
+    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(WcfSettings.GetBinding(), new EndpointAddress(ENDPOINTADRESS));
+        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;
+        tbPort.Text = curConnection.Port.ToString();
+      } 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 || sc.Status == NetworkEnumWcfConnState.Loggedin) {
+          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;
+      int port;
+      ConnectionContainer cc = new ConnectionContainer();
+      if (IPAddress.TryParse(tbIPAdress.Text, out ipAdress) && int.TryParse(tbPort.Text, out port)) {
+        cc.IPAdress = tbIPAdress.Text;
+        cc.Port = port;
+        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-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.designer.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.designer.cs	(revision 4253)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.designer.cs	(revision 4253)
@@ -0,0 +1,699 @@
+﻿#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.tbPort = new System.Windows.Forms.TextBox();
+      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.tbPort);
+      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);
+      // 
+      // tbPort
+      // 
+      this.tbPort.Location = new System.Drawing.Point(74, 59);
+      this.tbPort.Name = "tbPort";
+      this.tbPort.Size = new System.Drawing.Size(65, 20);
+      this.tbPort.TabIndex = 3;
+      this.tbPort.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Connection_KeyPress);
+      // 
+      // 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 tbPort;
+    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-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.resx
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.resx	(revision 4253)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/HiveSlaveConsole.resx	(revision 4253)
@@ -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-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/LogFileReader.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/LogFileReader.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/LogFileReader.cs	(revision 4253)
@@ -27,5 +27,5 @@
 using System.Diagnostics;
 
-namespace HeuristicLab.Hive.Client.Console {
+namespace HeuristicLab.Hive.Slave.Console {
   class LogFileReader {
     string filename = "";
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/AssemblyInfo.frame	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/AssemblyInfo.frame	(revision 4253)
@@ -28,5 +28,5 @@
 // set of attributes. Change these attribute values to modify the information
 // associated with an assembly.
-[assembly: AssemblyTitle("HeuristicLab.Hive.Client.Console")]
+[assembly: AssemblyTitle("HeuristicLab.Hive.Slave.Console")]
 [assembly: AssemblyDescription("")]
 [assembly: AssemblyConfiguration("")]
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/Resources.Designer.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/Resources.Designer.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/Resources.Designer.cs	(revision 4253)
@@ -9,5 +9,5 @@
 //------------------------------------------------------------------------------
 
-namespace HeuristicLab.Hive.Client.Console.Properties {
+namespace HeuristicLab.Hive.Slave.Console.Properties {
     using System;
     
@@ -40,5 +40,5 @@
             get {
                 if (object.ReferenceEquals(resourceMan, null)) {
-                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HeuristicLab.Hive.Client.Console.Properties.Resources", typeof(Resources).Assembly);
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HeuristicLab.Hive.Slave.Console.Properties.Resources", typeof(Resources).Assembly);
                     resourceMan = temp;
                 }
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/Settings.Designer.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/Settings.Designer.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/Settings.Designer.cs	(revision 4253)
@@ -9,5 +9,5 @@
 //------------------------------------------------------------------------------
 
-namespace HeuristicLab.Hive.Client.Console.Properties {
+namespace HeuristicLab.Hive.Slave.Console.Properties {
     
     
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/Settings.settings
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/Settings.settings	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Properties/Settings.settings	(revision 4253)
@@ -1,4 +1,4 @@
 ﻿<?xml version='1.0' encoding='utf-8'?>
-<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Hive.Client.Console.Properties" GeneratedClassName="Settings">
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Hive.Slave.Console.Properties" GeneratedClassName="Settings">
   <Profiles />
   <Settings>
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Recurrence.Designer.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Recurrence.Designer.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Recurrence.Designer.cs	(revision 4253)
@@ -1,3 +1,3 @@
-﻿namespace HeuristicLab.Hive.Client.Console
+﻿namespace HeuristicLab.Hive.Slave.Console
 {
   partial class Recurrence
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Recurrence.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Recurrence.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/Recurrence.cs	(revision 4253)
@@ -24,5 +24,5 @@
 using System.Windows.Forms;
 
-namespace HeuristicLab.Hive.Client.Console
+namespace HeuristicLab.Hive.Slave.Console
 {
 
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/app.config
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/app.config	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Console/3.3/app.config	(revision 4253)
@@ -3,18 +3,18 @@
     <configSections>
         <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
-            <section name="HeuristicLab.Hive.Client.Console.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+            <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.Client.Console.Properties.Settings>
+         <HeuristicLab.Hive.Slave.Console.Properties.Settings>
             <setting name="IpAdress" serializeAs="String">
                 <value>10.0.0.1</value>
             </setting>
-        </HeuristicLab.Hive.Client.Console.Properties.Settings>
+        </HeuristicLab.Hive.Slave.Console.Properties.Settings>
     </userSettings>
        <system.serviceModel>
               <bindings>
                      <netTcpBinding>
-                            <binding name="NetTcpBinding_IClientConsoleCommunicator" closeTimeout="00:01:00"
+                            <binding name="NetTcpBinding_ISlaveConsoleCommunicator" closeTimeout="00:01:00"
                                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                                    transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
@@ -35,6 +35,6 @@
               <client>
                      <endpoint address="net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator"
-                            binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IClientConsoleCommunicator"
-                            contract="ClientService.IClientConsoleCommunicator" name="NetTcpBinding_IClientConsoleCommunicator">
+                            binding="netTcpBinding" bindingConfiguration="NetTcpBinding_ISlaveConsoleCommunicator"
+                            contract="SlaveService.ISlaveConsoleCommunicator" name="NetTcpBinding_ISlaveConsoleCommunicator">
                             <identity>
                                    <userPrincipalName value="S0920454044@hagenberg.fhooe.at" />
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/AppointmentContainer.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/AppointmentContainer.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/AppointmentContainer.cs	(revision 4253)
@@ -5,5 +5,5 @@
 using HeuristicLab.Calendar;
 
-namespace HeuristicLab.Hive.Client.Core.ConfigurationManager {
+namespace HeuristicLab.Hive.Slave.Core.ConfigurationManager {
   public class AppointmentContainer {
     public DateTime Updated { get; set; }
Index: anches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/ClientStatusInfo.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/ClientStatusInfo.cs	(revision 4252)
+++ 	(revision )
@@ -1,14 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-namespace HeuristicLab.Hive.Client.Core.ConfigurationManager {
-  public class ClientStatusInfo {
-    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-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/ConfigManager.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/ConfigManager.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/ConfigManager.cs	(revision 4253)
@@ -25,11 +25,11 @@
 using System.Text;
 using HeuristicLab.Hive.Contracts.BusinessObjects;
-using HeuristicLab.Hive.Client.ExecutionEngine;
-using HeuristicLab.Hive.Client.Core.ClientConsoleService;
-using HeuristicLab.Hive.Client.Communication;
-using HeuristicLab.Hive.Client.Core.Properties;
+using HeuristicLab.Hive.Slave.ExecutionEngine;
+using HeuristicLab.Hive.Slave.Core.ClientConsoleService;
+using HeuristicLab.Hive.Slave.Communication;
+using HeuristicLab.Hive.Slave.Core.Properties;
 using HeuristicLab.Hive.Contracts;
 
-namespace HeuristicLab.Hive.Client.Core.ConfigurationManager {
+namespace HeuristicLab.Hive.Slave.Core.ConfigurationManager {
   /// <summary>
   /// accesses the Server and sends his data (uuid, uptimes, hardware config) 
@@ -111,7 +111,7 @@
       st.FreeCores = hardwareInfo.NrOfCores - GetUsedCores();
 
-      st.JobsAborted = ClientStatusInfo.JobsAborted;
-      st.JobsDone = ClientStatusInfo.JobsProcessed;
-      st.JobsFetched = ClientStatusInfo.JobsFetched;      
+      st.JobsAborted = SlaveStatusInfo.JobsAborted;
+      st.JobsDone = SlaveStatusInfo.JobsProcessed;
+      st.JobsFetched = SlaveStatusInfo.JobsFetched;      
 
       Dictionary<Guid, Executor> engines = Core.GetExecutionEngines();
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/SlaveStatusInfo.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/SlaveStatusInfo.cs	(revision 4253)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/SlaveStatusInfo.cs	(revision 4253)
@@ -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-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/UptimeManager.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/UptimeManager.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/ConfigurationManager/UptimeManager.cs	(revision 4253)
@@ -6,10 +6,10 @@
 using System.Xml.Serialization;
 using System.IO;
-using HeuristicLab.Hive.Client.Common;
+using HeuristicLab.Hive.Slave.Common;
 using HeuristicLab.Hive.Contracts.BusinessObjects;
 using HeuristicLab.Hive.Contracts;
 using HeuristicLab.Tracing;
 
-namespace HeuristicLab.Hive.Client.Core.ConfigurationManager {
+namespace HeuristicLab.Hive.Slave.Core.ConfigurationManager {
   public class UptimeManager {
 
@@ -24,5 +24,5 @@
     public bool CalendarAvailable { get; set; }
 
-    private static String path = System.IO.Directory.GetCurrentDirectory() + "\\plugins\\Hive.Client.Jobs\\";
+    private static String path = System.IO.Directory.GetCurrentDirectory() + "\\plugins\\Hive.Slave.Jobs\\";
 
     private static UptimeManager instance = null;
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Core.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Core.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Core.cs	(revision 4253)
@@ -24,6 +24,6 @@
 using System.Linq;
 using System.Text;
-using HeuristicLab.Hive.Client.ExecutionEngine;
-using HeuristicLab.Hive.Client.Common;
+using HeuristicLab.Hive.Slave.ExecutionEngine;
+using HeuristicLab.Hive.Slave.Common;
 using System.Threading;
 using System.Reflection;
@@ -32,5 +32,5 @@
 using System.Security.Policy;
 using System.Security;
-using HeuristicLab.Hive.Client.Communication;
+using HeuristicLab.Hive.Slave.Communication;
 using HeuristicLab.Hive.Contracts.BusinessObjects;
 using HeuristicLab.Hive.Contracts;
@@ -39,14 +39,14 @@
 using System.ServiceModel;
 using System.ServiceModel.Description;
-using HeuristicLab.Hive.Client.Core.ClientConsoleService;
-using HeuristicLab.Hive.Client.Core.ConfigurationManager;
-using HeuristicLab.Hive.Client.Communication.ServerService;
+using HeuristicLab.Hive.Slave.Core.ClientConsoleService;
+using HeuristicLab.Hive.Slave.Core.ConfigurationManager;
+using HeuristicLab.Hive.Slave.Communication.ServerService;
 using HeuristicLab.Hive.JobBase;
-using HeuristicLab.Hive.Client.Core.JobStorage;
+using HeuristicLab.Hive.Slave.Core.JobStorage;
 using HeuristicLab.Tracing;
 using HeuristicLab.Core;
 using System.IO;
 
-namespace HeuristicLab.Hive.Client.Core {
+namespace HeuristicLab.Hive.Slave.Core {
   /// <summary>
   /// The core component of the Hive Client
@@ -79,5 +79,5 @@
       abortRequested = false;
       Logger.Info("Hive Client started");
-      ClientConsoleServer server = new ClientConsoleServer();
+      SlaveConsoleServer server = new SlaveConsoleServer();
       server.StartClientConsoleServer(new Uri("net.tcp://127.0.0.1:8000/ClientConsole/"));
 
@@ -335,7 +335,7 @@
               engines.Add(e.Result.Job.Id, engine);
 
-              ClientStatusInfo.JobsFetched++;
-
-              Logger.Info("Increment FetchedJobs to:" + ClientStatusInfo.JobsFetched);
+              SlaveStatusInfo.JobsFetched++;
+
+              Logger.Info("Increment FetchedJobs to:" + SlaveStatusInfo.JobsFetched);
             }
           }
@@ -361,6 +361,6 @@
       KillAppDomain(e.Result.JobId);
       if (e.Result.Success) {
-        ClientStatusInfo.JobsProcessed++;
-        Logger.Info("Increased ProcessedJobs to:" + ClientStatusInfo.JobsProcessed);
+        SlaveStatusInfo.JobsProcessed++;
+        Logger.Info("Increased ProcessedJobs to:" + SlaveStatusInfo.JobsProcessed);
       } else {
         Logger.Error("Sending of job " + e.Result.JobId + " failed, job has been wasted. Message: " + e.Result.StatusMessage);
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Heartbeat.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Heartbeat.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Heartbeat.cs	(revision 4253)
@@ -25,15 +25,15 @@
 using System.Text;
 using System.Timers;
-using HeuristicLab.Hive.Client.Common;
-using HeuristicLab.Hive.Client.Communication;
+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.Client.Core.ConfigurationManager;
-using HeuristicLab.Hive.Client.Communication.ServerService;
+using HeuristicLab.Hive.Slave.Core.ConfigurationManager;
+using HeuristicLab.Hive.Slave.Communication.ServerService;
 using HeuristicLab.Tracing;
 //using BO = HeuristicLab.Hive.Contracts.BusinessObjects;
 
-namespace HeuristicLab.Hive.Client.Core {
+namespace HeuristicLab.Hive.Slave.Core {
   /// <summary>
   /// Heartbeat class. It sends every x ms a heartbeat to the server and receives a Message
@@ -94,5 +94,5 @@
 
         HeartBeatData heartBeatData = new HeartBeatData {
-          ClientId = info.Id,
+          SlaveId = info.Id,
           FreeCores = info.NrOfCores - ConfigManager.Instance.GetUsedCores(),
           FreeMemory = mb,
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/JobStorage/JobStorageInfo.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/JobStorage/JobStorageInfo.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/JobStorage/JobStorageInfo.cs	(revision 4253)
@@ -4,5 +4,5 @@
 using System.Text;
 
-namespace HeuristicLab.Hive.Client.Core.JobStorage {
+namespace HeuristicLab.Hive.Slave.Core.JobStorage {
   public class JobStorageInfo {
     public String ServerIP { get; set; }
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/JobStorage/JobStorageManager.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/JobStorage/JobStorageManager.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/JobStorage/JobStorageManager.cs	(revision 4253)
@@ -4,7 +4,7 @@
 using System.Text;
 using System.IO;
-using HeuristicLab.Hive.Client.Common;
-using HeuristicLab.Hive.Client.Communication;
-using HeuristicLab.Hive.Client.Core.ConfigurationManager;
+using HeuristicLab.Hive.Slave.Common;
+using HeuristicLab.Hive.Slave.Communication;
+using HeuristicLab.Hive.Slave.Core.ConfigurationManager;
 using HeuristicLab.Hive.Contracts;
 using System.Xml.Serialization;
@@ -13,10 +13,10 @@
 using HeuristicLab.Tracing;
 
-namespace HeuristicLab.Hive.Client.Core.JobStorage {
+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.Client.Jobs\\";
+
+    private static String path = System.IO.Directory.GetCurrentDirectory() + "\\Hive.Slave.Jobs\\";
     
     public static void PersistObjectToDisc(String serverIP, long serverPort, Guid jobId, byte[] job) {
@@ -57,5 +57,5 @@
                 Logger.Info("Sending of job " + storedJobsList[index - 1].JobID + " done");
             }
-            ClientStatusInfo.JobsProcessed++;
+            SlaveStatusInfo.JobsProcessed++;
             storedJobsList.Remove(storedJobsList[index - 1]);
             File.Delete(path + filename + ".dat"); 
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/PluginCache.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/PluginCache.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/PluginCache.cs	(revision 4253)
@@ -4,5 +4,5 @@
 using System.Linq;
 using System.Runtime.CompilerServices;
-using HeuristicLab.Hive.Client.Communication;
+using HeuristicLab.Hive.Slave.Communication;
 using HeuristicLab.Hive.Contracts.BusinessObjects;
 using HeuristicLab.PluginInfrastructure;
@@ -10,5 +10,5 @@
 using HeuristicLab.Tracing;
 
-namespace HeuristicLab.Hive.Client.Core {
+namespace HeuristicLab.Hive.Slave.Core {
   public class PluginCache {
 
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Properties/AssemblyInfo.frame	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Properties/AssemblyInfo.frame	(revision 4253)
@@ -29,5 +29,5 @@
 // set of attributes. Change these attribute values to modify the information
 // associated with an assembly.
-[assembly: AssemblyTitle("HeuristicLab.Hive.Client.Core")]
+[assembly: AssemblyTitle("HeuristicLab.Hive.Slave.Core")]
 [assembly: AssemblyDescription("")]
 [assembly: AssemblyConfiguration("")]
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Properties/Settings.Designer.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Properties/Settings.Designer.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Properties/Settings.Designer.cs	(revision 4253)
@@ -9,5 +9,5 @@
 //------------------------------------------------------------------------------
 
-namespace HeuristicLab.Hive.Client.Core.Properties {
+namespace HeuristicLab.Hive.Slave.Core.Properties {
     
     
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Properties/Settings.settings
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Properties/Settings.settings	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Properties/Settings.settings	(revision 4253)
@@ -1,4 +1,4 @@
 ﻿<?xml version='1.0' encoding='utf-8'?>
-<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Hive.Client.Core.Properties" GeneratedClassName="Settings">
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Hive.Slave.Core.Properties" GeneratedClassName="Settings">
   <Profiles />
   <Settings>
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Settings.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Settings.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/Settings.cs	(revision 4253)
@@ -1,3 +1,3 @@
-﻿namespace HeuristicLab.Hive.Client.Core.Properties {
+﻿namespace HeuristicLab.Hive.Slave.Core.Properties {
     
     
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/app.config
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/app.config	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.Core/3.3/app.config	(revision 4253)
@@ -3,9 +3,9 @@
     <configSections>
         <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
-            <section name="HeuristicLab.Hive.Client.Core.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+            <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.Client.Core.Properties.Settings>
+      <HeuristicLab.Hive.Slave.Core.Properties.Settings>
             <setting name="Guid" serializeAs="String">
                 <value>00000000-0000-0000-0000-000000000000</value>
@@ -17,5 +17,5 @@
                 <value>0</value>
             </setting>
-        </HeuristicLab.Hive.Client.Core.Properties.Settings>
+        </HeuristicLab.Hive.Slave.Core.Properties.Settings>
     </userSettings>
 </configuration>
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/Executor.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/Executor.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/Executor.cs	(revision 4253)
@@ -21,5 +21,5 @@
 
 using System;
-using HeuristicLab.Hive.Client.Common;
+using HeuristicLab.Hive.Slave.Common;
 using HeuristicLab.Hive.Contracts;
 using HeuristicLab.Hive.JobBase;
@@ -31,5 +31,5 @@
 using HeuristicLab.Core;
 
-namespace HeuristicLab.Hive.Client.ExecutionEngine {
+namespace HeuristicLab.Hive.Slave.ExecutionEngine {
   public class Executor : MarshalByRefObject, IDisposable {
     public Guid JobId { get; set; }
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/HeuristicLab.Hive.Slave.ExecutionEngine-3.3.csproj
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/HeuristicLab.Hive.Slave.ExecutionEngine-3.3.csproj	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/HeuristicLab.Hive.Slave.ExecutionEngine-3.3.csproj	(revision 4253)
@@ -9,6 +9,6 @@
     <OutputType>Library</OutputType>
     <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>HeuristicLab.Hive.Client.ExecutionEngine</RootNamespace>
-    <AssemblyName>HeuristicLab.Hive.Client.ExecutionEngine-3.3</AssemblyName>
+    <RootNamespace>HeuristicLab.Hive.Slave.ExecutionEngine</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Slave.ExecutionEngine-3.3</AssemblyName>
     <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
@@ -101,5 +101,5 @@
   <ItemGroup>
     <Compile Include="Executor.cs" />
-    <Compile Include="HeuristicLabHiveClientExecutionEnginePlugin.cs" />
+    <Compile Include="HeuristicLabHiveSlaveExecutionEnginePlugin.cs" />
     <Compile Include="InvalidStateException.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
@@ -110,8 +110,4 @@
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\..\HeuristicLab.Hive.Client.Common\3.3\HeuristicLab.Hive.Client.Common-3.3.csproj">
-      <Project>{89F4BC52-C174-481E-9BD2-3814171020E8}</Project>
-      <Name>HeuristicLab.Hive.Client.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>
@@ -121,4 +117,8 @@
       <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>
Index: anches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/HeuristicLabHiveClientExecutionEnginePlugin.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/HeuristicLabHiveClientExecutionEnginePlugin.cs	(revision 4252)
+++ 	(revision )
@@ -1,39 +1,0 @@
-﻿#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.Client.ExecutionEngine {
-  [Plugin("HeuristicLab.Hive.Client.ExecutionEngine", "3.3")]
-  [PluginFile("HeuristicLab.Hive.Client.ExecutionEngine-3.3.dll", PluginFileType.Assembly)]
-  [PluginDependency("HeuristicLab.Common", "3.3")]
-  [PluginDependency("HeuristicLab.Core", "3.3")]
-  [PluginDependency("HeuristicLab.Hive.Client.Common", "3.3")]
-  [PluginDependency("HeuristicLab.Hive.Contracts", "3.3")]
-  [PluginDependency("HeuristicLab.Hive.JobBase", "3.3")]
-  [PluginDependency("HeuristicLab.Persistence", "3.3")] 
-  public class HeuristicLabHiveClientExecutionEnginePlugin: PluginBase {
-  }
-}
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/HeuristicLabHiveSlaveExecutionEnginePlugin.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/HeuristicLabHiveSlaveExecutionEnginePlugin.cs	(revision 4253)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/HeuristicLabHiveSlaveExecutionEnginePlugin.cs	(revision 4253)
@@ -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-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/InvalidStateException.cs
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/InvalidStateException.cs	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/InvalidStateException.cs	(revision 4253)
@@ -4,5 +4,5 @@
 using System.Text;
 
-namespace HeuristicLab.Hive.Client.ExecutionEngine {
+namespace HeuristicLab.Hive.Slave.ExecutionEngine {
   [global::System.Serializable]
   public class InvalidStateException : Exception {
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/Properties/AssemblyInfo.frame
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/Properties/AssemblyInfo.frame	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Slave.ExecutionEngine/3.3/Properties/AssemblyInfo.frame	(revision 4253)
@@ -29,5 +29,5 @@
 // set of attributes. Change these attribute values to modify the information
 // associated with an assembly.
-[assembly: AssemblyTitle("HeuristicLab.Hive.Client.ExecutionEngine")]
+[assembly: AssemblyTitle("HeuristicLab.Hive.Slave.ExecutionEngine")]
 [assembly: AssemblyDescription("")]
 [assembly: AssemblyConfiguration("")]
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/HeuristicLab.Hive.log4net.xml
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/HeuristicLab.Hive.log4net.xml	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive.Tracing/3.3/HeuristicLab.Hive.log4net.xml	(revision 4253)
@@ -27,5 +27,5 @@
 
   <appender name="ClientRollingFileAppender" type="log4net.Appender.RollingFileAppender">
-    <file value="Hive.Client.log" />
+    <file value="Hive.Slave.log" />
     <appendToFile value="true" />
     <rollingStyle value="Size" />
@@ -85,5 +85,5 @@
   </logger>
 
-  <logger name="HeuristicLab.Hive.Client">
+  <logger name="HeuristicLab.Hive.Slave">
     <level value="DEBUG" />
     <appender-ref ref="ClientBufferingForwardingAppender" />  
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/Files.txt
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/Files.txt	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/Files.txt	(revision 4253)
@@ -7,13 +7,10 @@
 HeuristicLab.DataAccess.ADOHelper\3.3:HeuristicLab.DataAccess.ADOHelper-3.3.dll
 
-
-
-HeuristicLab.Hive.Client.Common\3.3:HeuristicLab.Hive.Client.Common-3.3.dll
-HeuristicLab.Hive.Client.Communication\3.3:HeuristicLab.Hive.Client.Communication-3.3.dll
-; HeuristicLab.Hive.Client.Console\3.3:Calendar.DayView.dll
-HeuristicLab.Hive.Client.Console\3.3:HeuristicLab.Hive.Client.Console-3.3.dll
-HeuristicLab.Hive.Client.Console\3.3:ZedGraph.dll
-HeuristicLab.Hive.Client.Core\3.3:HeuristicLab.Hive.Client.Core-3.3.dll
-HeuristicLab.Hive.Client.ExecutionEngine\3.3:HeuristicLab.Hive.Client.ExecutionEngine-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.Engine\3.3:HeuristicLab.Hive.Engine-3.3.dll
Index: /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/MergeConfigs.cmd
===================================================================
--- /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/MergeConfigs.cmd	(revision 4252)
+++ /branches/3.3-HiveMigration/sources/HeuristicLab.Hive/HeuristicLab.Hive/3.3/MergeConfigs.cmd	(revision 4253)
@@ -1,4 +1,4 @@
 ConfigMerger "%SolutionDir%HeuristicLab.Hive.Server.LINQDataAccess\3.3\app.config" "HeuristicLab.Hive-3.3.dll.config"
-ConfigMerger "%SolutionDir%HeuristicLab.Hive.Client.Core\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.Experiment\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"
