Index: /trunk/sources/HeuristicLab.Services.OKB.AttributeSelection/3.3/AttributeSelector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB.AttributeSelection/3.3/AttributeSelector.cs	(revision 4297)
+++ /trunk/sources/HeuristicLab.Services.OKB.AttributeSelection/3.3/AttributeSelector.cs	(revision 4298)
@@ -56,5 +56,4 @@
       typeof(Client).Name,
       typeof(User).Name,
-      typeof(ExperimentCreator).Name,
     };
 
@@ -77,6 +76,4 @@
       TableName = tableName;
       FieldName = fieldName;
-      if (tableName == typeof(ExperimentCreator).Name)
-        tableName = typeof(User).Name;
       TableType = GetTableType(tableName);
       ITable Table = GetTable(okb, tableName);
Index: /trunk/sources/HeuristicLab.Services.OKB.AttributeSelection/3.3/RunAttributeSelector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB.AttributeSelection/3.3/RunAttributeSelector.cs	(revision 4297)
+++ /trunk/sources/HeuristicLab.Services.OKB.AttributeSelection/3.3/RunAttributeSelector.cs	(revision 4298)
@@ -85,5 +85,4 @@
       { typeof(User), typeof(Run) },
       { typeof(Experiment), typeof(Run) },
-      { typeof(ExperimentCreator), typeof(Experiment) },
       { typeof(Project), typeof(Experiment) },
       { typeof(Algorithm), typeof(Experiment) },
@@ -198,7 +197,4 @@
         ExpressionTools.GetSelector(run => run.Experiment, x => x.Id),
 
-        ExpressionTools.GetSelector(run => run.Experiment.ExperimentCreators.Single(), xc => xc.User.Id),
-        ExpressionTools.GetSelector(run => run.Experiment.ExperimentCreators.Single(), xc => xc.User.Name),
-
         ExpressionTools.GetSelector(run => run.Experiment.Project, p => p.Id),
         ExpressionTools.GetSelector(run => run.Experiment.Project, p => p.Name),
Index: unk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/Authentication.cs
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/Authentication.cs	(revision 4297)
+++ 	(revision )
@@ -1,34 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System.Runtime.Serialization;
-
-namespace HeuristicLab.Services.OKB.DataAccess {
-
-  [DataContract]
-  public class Authentication {
-    [DataMember]
-    public User User { get; set; }
-    [DataMember]
-    public Client Client { get; set; }
-  }
-
-}
Index: unk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/ExperimentKit.cs
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/ExperimentKit.cs	(revision 4297)
+++ 	(revision )
@@ -1,35 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System.Runtime.Serialization;
-
-namespace HeuristicLab.Services.OKB.DataAccess {
-
-  [DataContract]
-  public class ExperimentKit {
-    [DataMember]
-    public Algorithm Algorithm { get; set; }
-
-    [DataMember]
-    public Problem Problem { get; set; }
-  }
-
-}
Index: /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj	(revision 4297)
+++ /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj	(revision 4298)
@@ -121,6 +121,4 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="Authentication.cs" />
-    <Compile Include="ExperimentKit.cs" />
     <None Include="OKB.designer.cs">
       <AutoGen>True</AutoGen>
@@ -161,5 +159,5 @@
     </None>
     <None Include="Properties\Settings.settings">
-      <Generator>SettingsSingleFileGenerator</Generator>
+      <Generator>PublicSettingsSingleFileGenerator</Generator>
       <LastGenOutput>Settings.Designer.cs</LastGenOutput>
     </None>
Index: /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.dbml
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.dbml	(revision 4297)
+++ /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.dbml	(revision 4298)
@@ -1,9 +1,8 @@
 ﻿<?xml version="1.0" encoding="utf-8"?><Database Name="OKB" EntityNamespace="HeuristicLab.Services.OKB.DataAccess" ContextNamespace="HeuristicLab.Services.OKB.DataAccess" Class="OKBDataContext" Serialization="Unidirectional" xmlns="http://schemas.microsoft.com/linqtosql/dbml/2007">
-  <Connection Mode="AppSettings" ConnectionString="Data Source=localhost;Initial Catalog=OKB;Integrated Security=True" SettingsObjectName="HeuristicLab.Services.OKB.DataAccess.Properties.Settings" SettingsPropertyName="OKBConnectionString" Provider="System.Data.SqlClient" />
+  <Connection Mode="AppSettings" ConnectionString="Data Source=localhost;Initial Catalog=HeuristicLab.OKB;Integrated Security=True" SettingsObjectName="HeuristicLab.Services.OKB.DataAccess.Properties.Settings" SettingsPropertyName="OKBConnectionString" Provider="System.Data.SqlClient" />
   <Table Name="dbo.[User]" Member="Users">
     <Type Name="User">
       <Column Name="Id" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
       <Column Name="Name" Type="System.String" DbType="VarChar(200) NOT NULL" CanBeNull="false" />
-      <Association Name="User_ExperimentCreator" Member="ExperimentCreators" ThisKey="Id" OtherKey="UserId" Type="ExperimentCreator" />
       <Association Name="User_Run" Member="Runs" ThisKey="Id" OtherKey="UserId" Type="Run" />
     </Type>
@@ -93,5 +92,4 @@
       <Column Name="ProblemId" Type="System.Int32" DbType="Int NOT NULL" CanBeNull="false" />
       <Association Name="Experiment_CharParameterValue" Member="CharParameterValues" ThisKey="Id" OtherKey="ExperimentId" Type="CharParameterValue" />
-      <Association Name="Experiment_ExperimentCreator" Member="ExperimentCreators" ThisKey="Id" OtherKey="ExperimentId" Type="ExperimentCreator" />
       <Association Name="Experiment_FloatParameterValue" Member="FloatParameterValues" ThisKey="Id" OtherKey="ExperimentId" Type="FloatParameterValue" />
       <Association Name="Experiment_IntParameterValue" Member="IntParameterValues" ThisKey="Id" OtherKey="ExperimentId" Type="IntParameterValue" />
@@ -101,12 +99,4 @@
       <Association Name="Project_Experiment" Member="Project" ThisKey="ProjectId" OtherKey="Id" Type="Project" IsForeignKey="true" DeleteRule="CASCADE" DeleteOnNull="true" />
       <Association Name="Algorithm_Experiment" Member="Algorithm" ThisKey="AlgorithmId" OtherKey="Id" Type="Algorithm" IsForeignKey="true" DeleteRule="CASCADE" DeleteOnNull="true" />
-    </Type>
-  </Table>
-  <Table Name="dbo.ExperimentCreator" Member="ExperimentCreators">
-    <Type Name="ExperimentCreator">
-      <Column Name="ExperimentId" Type="System.Int32" DbType="Int NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
-      <Column Name="UserId" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
-      <Association Name="Experiment_ExperimentCreator" Member="Experiment" ThisKey="ExperimentId" OtherKey="Id" Type="Experiment" IsForeignKey="true" DeleteRule="CASCADE" DeleteOnNull="true" />
-      <Association Name="User_ExperimentCreator" Member="User" ThisKey="UserId" OtherKey="Id" Type="User" IsForeignKey="true" />
     </Type>
   </Table>
Index: /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.dbml.layout
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.dbml.layout	(revision 4297)
+++ /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.dbml.layout	(revision 4298)
@@ -69,10 +69,4 @@
       </nestedChildShapes>
     </classShape>
-    <classShape Id="12d4c13b-7509-49ae-998b-a0b43f160db7" absoluteBounds="8.125, 7.5, 2, 1.1939925130208309">
-      <DataClassMoniker Name="/OKBDataContext/ExperimentCreator" />
-      <nestedChildShapes>
-        <elementListCompartment Id="e4e83d65-2fb2-4364-8f61-64ce8440b3c4" absoluteBounds="8.14, 7.9600000000000009, 1.9700000000000002, 0.63399251302083326" name="DataPropertiesCompartment" titleTextColor="Black" itemTextColor="Black" />
-      </nestedChildShapes>
-    </classShape>
     <classShape Id="51fb443c-2ed1-4364-9dc3-84a606c921f5" isExpanded="false" absoluteBounds="8.125, 4.25, 2, 0.45">
       <DataClassMoniker Name="/OKBDataContext/FloatParameterValue" />
@@ -172,18 +166,4 @@
       </nodes>
     </associationConnector>
-    <associationConnector edgePoints="[(7.07291666666667 : 5.82859537760417); (7.07291666666667 : 6.50172191879847); (7.82609398177643 : 6.50172191879847); (7.82609398177643 : 8.1875); (8.125 : 8.1875)]" manuallyRouted="true" fixedFrom="NotFixed" fixedTo="NotFixed">
-      <AssociationMoniker Name="/OKBDataContext/Experiment/Experiment_ExperimentCreator" />
-      <nodes>
-        <classShapeMoniker Id="f91d981c-4c4c-407a-aedd-bc0091bdd664" />
-        <classShapeMoniker Id="12d4c13b-7509-49ae-998b-a0b43f160db7" />
-      </nodes>
-    </associationConnector>
-    <associationConnector edgePoints="[(10.625 : 7.30729140533756); (10.385 : 7.30729140533756); (10.385 : 8.26562470439823); (10.125 : 8.26562470439823)]" fixedFrom="NotFixed" fixedTo="NotFixed">
-      <AssociationMoniker Name="/OKBDataContext/User/User_ExperimentCreator" />
-      <nodes>
-        <classShapeMoniker Id="6abee4a0-9a54-4c51-bb1b-31061cb25f9f" />
-        <classShapeMoniker Id="12d4c13b-7509-49ae-998b-a0b43f160db7" />
-      </nodes>
-    </associationConnector>
     <associationConnector edgePoints="[(7.5 : 4.475); (8.125 : 4.475)]" fixedFrom="NotFixed" fixedTo="NotFixed">
       <AssociationMoniker Name="/OKBDataContext/Experiment/Experiment_FloatParameterValue" />
Index: /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.generated.cs
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.generated.cs	(revision 4297)
+++ /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/OKB.generated.cs	(revision 4298)
@@ -3,5 +3,5 @@
 // <auto-generated>
 //     This code was generated by LINQ to SQL template for T4 C#
-//     Generated at 08/23/2010 01:35:16
+//     Generated at 08/24/2010 01:30:56
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
@@ -57,7 +57,4 @@
 		partial void UpdateExperiment(Experiment instance);
 		partial void DeleteExperiment(Experiment instance);
-		partial void InsertExperimentCreator(ExperimentCreator instance);
-		partial void UpdateExperimentCreator(ExperimentCreator instance);
-		partial void DeleteExperimentCreator(ExperimentCreator instance);
 		partial void InsertFloatParameterValue(FloatParameterValue instance);
 		partial void UpdateFloatParameterValue(FloatParameterValue instance);
@@ -210,9 +207,4 @@
 		}
 		
-		public Table<ExperimentCreator> ExperimentCreators
-		{
-			get { return GetTable<ExperimentCreator>(); }
-		}
-		
 		public Table<FloatParameterValue> FloatParameterValues
 		{
@@ -360,5 +352,4 @@
 		private void Initialize()
 		{
-			_ExperimentCreators = new EntitySet<ExperimentCreator>(attach_ExperimentCreators, detach_ExperimentCreators);
 			_Runs = new EntitySet<Run>(attach_Runs, detach_Runs);
 			OnCreated();
@@ -408,34 +399,7 @@
 		
 		#region Associations
-		private EntitySet<ExperimentCreator> _ExperimentCreators;
-		[Association(Name=@"User_ExperimentCreator", Storage=@"_ExperimentCreators", ThisKey=@"Id", OtherKey=@"UserId")]
-		[DataMember(Order=3, EmitDefaultValue=false)]
-		public EntitySet<ExperimentCreator> ExperimentCreators
-		{
-			get {
-				if (serializing && !_ExperimentCreators.HasLoadedOrAssignedValues) {
-					return null;
-				}
-				return _ExperimentCreators;
-			}
-			set {
-				_ExperimentCreators.Assign(value);
-			}
-		}
-
-		private void attach_ExperimentCreators(ExperimentCreator entity)
-		{
-			SendPropertyChanging();
-			entity.User = this;
-		}
-		
-		private void detach_ExperimentCreators(ExperimentCreator entity)
-		{
-			SendPropertyChanging();
-			entity.User = null;
-		}
 		private EntitySet<Run> _Runs;
 		[Association(Name=@"User_Run", Storage=@"_Runs", ThisKey=@"Id", OtherKey=@"UserId")]
-		[DataMember(Order=4, EmitDefaultValue=false)]
+		[DataMember(Order=3, EmitDefaultValue=false)]
 		public EntitySet<Run> Runs
 		{
@@ -2126,5 +2090,4 @@
 		{
 			_CharParameterValues = new EntitySet<CharParameterValue>(attach_CharParameterValues, detach_CharParameterValues);
-			_ExperimentCreators = new EntitySet<ExperimentCreator>(attach_ExperimentCreators, detach_ExperimentCreators);
 			_FloatParameterValues = new EntitySet<FloatParameterValue>(attach_FloatParameterValues, detach_FloatParameterValues);
 			_IntParameterValues = new EntitySet<IntParameterValue>(attach_IntParameterValues, detach_IntParameterValues);
@@ -2254,34 +2217,7 @@
 			entity.Experiment = null;
 		}
-		private EntitySet<ExperimentCreator> _ExperimentCreators;
-		[Association(Name=@"Experiment_ExperimentCreator", Storage=@"_ExperimentCreators", ThisKey=@"Id", OtherKey=@"ExperimentId")]
-		[DataMember(Order=6, EmitDefaultValue=false)]
-		public EntitySet<ExperimentCreator> ExperimentCreators
-		{
-			get {
-				if (serializing && !_ExperimentCreators.HasLoadedOrAssignedValues) {
-					return null;
-				}
-				return _ExperimentCreators;
-			}
-			set {
-				_ExperimentCreators.Assign(value);
-			}
-		}
-
-		private void attach_ExperimentCreators(ExperimentCreator entity)
-		{
-			SendPropertyChanging();
-			entity.Experiment = this;
-		}
-		
-		private void detach_ExperimentCreators(ExperimentCreator entity)
-		{
-			SendPropertyChanging();
-			entity.Experiment = null;
-		}
 		private EntitySet<FloatParameterValue> _FloatParameterValues;
 		[Association(Name=@"Experiment_FloatParameterValue", Storage=@"_FloatParameterValues", ThisKey=@"Id", OtherKey=@"ExperimentId")]
-		[DataMember(Order=7, EmitDefaultValue=false)]
+		[DataMember(Order=6, EmitDefaultValue=false)]
 		public EntitySet<FloatParameterValue> FloatParameterValues
 		{
@@ -2310,5 +2246,5 @@
 		private EntitySet<IntParameterValue> _IntParameterValues;
 		[Association(Name=@"Experiment_IntParameterValue", Storage=@"_IntParameterValues", ThisKey=@"Id", OtherKey=@"ExperimentId")]
-		[DataMember(Order=8, EmitDefaultValue=false)]
+		[DataMember(Order=7, EmitDefaultValue=false)]
 		public EntitySet<IntParameterValue> IntParameterValues
 		{
@@ -2337,5 +2273,5 @@
 		private EntitySet<Run> _Runs;
 		[Association(Name=@"Experiment_Run", Storage=@"_Runs", ThisKey=@"Id", OtherKey=@"ExperimentId")]
-		[DataMember(Order=9, EmitDefaultValue=false)]
+		[DataMember(Order=8, EmitDefaultValue=false)]
 		public EntitySet<Run> Runs
 		{
@@ -2364,5 +2300,5 @@
 		private EntitySet<OperatorParameterValue> _OperatorParameterValues;
 		[Association(Name=@"Experiment_OperatorParameterValue", Storage=@"_OperatorParameterValues", ThisKey=@"Id", OtherKey=@"ExperimentId")]
-		[DataMember(Order=10, EmitDefaultValue=false)]
+		[DataMember(Order=9, EmitDefaultValue=false)]
 		public EntitySet<OperatorParameterValue> OperatorParameterValues
 		{
@@ -2391,5 +2327,5 @@
 		private EntityRef<Problem> _Problem;
 		[Association(Name=@"Problem_Experiment", Storage=@"_Problem", ThisKey=@"ProblemId", OtherKey=@"Id", IsForeignKey=true, DeleteOnNull=true, DeleteRule=@"CASCADE")]
-		[DataMember(Order=11, EmitDefaultValue=false)]
+		[DataMember(Order=10, EmitDefaultValue=false)]
 		public Problem Problem
 		{
@@ -2423,5 +2359,5 @@
 		private EntityRef<Project> _Project;
 		[Association(Name=@"Project_Experiment", Storage=@"_Project", ThisKey=@"ProjectId", OtherKey=@"Id", IsForeignKey=true, DeleteOnNull=true, DeleteRule=@"CASCADE")]
-		[DataMember(Order=12, EmitDefaultValue=false)]
+		[DataMember(Order=11, EmitDefaultValue=false)]
 		public Project Project
 		{
@@ -2455,5 +2391,5 @@
 		private EntityRef<Algorithm> _Algorithm;
 		[Association(Name=@"Algorithm_Experiment", Storage=@"_Algorithm", ThisKey=@"AlgorithmId", OtherKey=@"Id", IsForeignKey=true, DeleteOnNull=true, DeleteRule=@"CASCADE")]
-		[DataMember(Order=13, EmitDefaultValue=false)]
+		[DataMember(Order=12, EmitDefaultValue=false)]
 		public Algorithm Algorithm
 		{
@@ -2504,170 +2440,4 @@
 		}
 		
-		[OnDeserializing()]
-		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
-		public  void OnDeserializing(StreamingContext context)
-		{
-			Initialize();
-		}
-		#endregion
-	}
-}
-
-namespace HeuristicLab.Services.OKB.DataAccess
-{	
-	[DataContract(IsReference=true)]
-	[Table(Name=@"dbo.ExperimentCreator")]
-[KnownType(typeof(ExperimentCreator))]	public partial class ExperimentCreator : INotifyPropertyChanging, INotifyPropertyChanged
-	{
-		#region Property Change Event Handling
-		private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
-		
-		public event PropertyChangingEventHandler PropertyChanging;
-		public event PropertyChangedEventHandler PropertyChanged;
-		
-		public virtual void SendPropertyChanging()
-		{
-			if (PropertyChanging != null) {
-				PropertyChanging(this, emptyChangingEventArgs);
-			}
-		}
-			
-		public virtual void SendPropertyChanged(String propertyName)
-		{
-			if (PropertyChanged != null) {
-				PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
-			}
-		}
-		#endregion
-		
-		#region Extensibility Method Definitions
-		partial void OnLoaded();
-		partial void OnValidate(ChangeAction action);
-		partial void OnCreated();
-		#endregion
-
-		#region Construction
-		public ExperimentCreator()
-		{
-			Initialize();
-		}
-		
-		private void Initialize()
-		{
-			_Experiment = default(EntityRef<Experiment>);
-			_User = default(EntityRef<User>);
-			OnCreated();
-		}
-		#endregion
-
-		#region Column Mappings
-		partial void OnExperimentIdChanging(int value);
-		partial void OnExperimentIdChanged();
-		private int _ExperimentId;
-		[Column(Storage=@"_ExperimentId", DbType=@"Int NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
-		[DataMember(Order=1)]
-		public int ExperimentId
-		{
-			get { return _ExperimentId; }
-			set {
-				if (_ExperimentId != value) {
-					if (_Experiment.HasLoadedOrAssignedValue) {
-						throw new ForeignKeyReferenceAlreadyHasValueException();
-					}
-					OnExperimentIdChanging(value);
-					SendPropertyChanging();
-					_ExperimentId = value;
-					SendPropertyChanged("ExperimentId");
-					OnExperimentIdChanged();
-				}
-			}
-		}
-		
-		partial void OnUserIdChanging(Guid value);
-		partial void OnUserIdChanged();
-		private Guid _UserId;
-		[Column(Storage=@"_UserId", DbType=@"UniqueIdentifier NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
-		[DataMember(Order=2)]
-		public Guid UserId
-		{
-			get { return _UserId; }
-			set {
-				if (_UserId != value) {
-					if (_User.HasLoadedOrAssignedValue) {
-						throw new ForeignKeyReferenceAlreadyHasValueException();
-					}
-					OnUserIdChanging(value);
-					SendPropertyChanging();
-					_UserId = value;
-					SendPropertyChanged("UserId");
-					OnUserIdChanged();
-				}
-			}
-		}
-		
-		#endregion
-		
-		#region Associations
-		private EntityRef<Experiment> _Experiment;
-		[Association(Name=@"Experiment_ExperimentCreator", Storage=@"_Experiment", ThisKey=@"ExperimentId", OtherKey=@"Id", IsForeignKey=true, DeleteOnNull=true, DeleteRule=@"CASCADE")]
-		[DataMember(Order=3, EmitDefaultValue=false)]
-		public Experiment Experiment
-		{
-			get {
-				return _Experiment.Entity;
-			}
-			set {
-				Experiment previousValue = _Experiment.Entity;
-				if ((previousValue != value) || (!_Experiment.HasLoadedOrAssignedValue)) {
-					SendPropertyChanging();
-					if (previousValue != null) {
-						_Experiment.Entity = null;
-						previousValue.ExperimentCreators.Remove(this);
-					}
-					_Experiment.Entity = value;
-					if (value != null) {
-						value.ExperimentCreators.Add(this);
-						_ExperimentId = value.Id;
-					}
-					else {
-						_ExperimentId = default(int);
-					}
-					SendPropertyChanged("Experiment");
-				}
-			}
-		}
-
-		private EntityRef<User> _User;
-		[Association(Name=@"User_ExperimentCreator", Storage=@"_User", ThisKey=@"UserId", OtherKey=@"Id", IsForeignKey=true)]
-		[DataMember(Order=4, EmitDefaultValue=false)]
-		public User User
-		{
-			get {
-				return _User.Entity;
-			}
-			set {
-				User previousValue = _User.Entity;
-				if ((previousValue != value) || (!_User.HasLoadedOrAssignedValue)) {
-					SendPropertyChanging();
-					if (previousValue != null) {
-						_User.Entity = null;
-						previousValue.ExperimentCreators.Remove(this);
-					}
-					_User.Entity = value;
-					if (value != null) {
-						value.ExperimentCreators.Add(this);
-						_UserId = value.Id;
-					}
-					else {
-						_UserId = default(Guid);
-					}
-					SendPropertyChanged("User");
-				}
-			}
-		}
-
-		#endregion
-		
-		#region Serialization
 		[OnDeserializing()]
 		[EditorBrowsableAttribute(EditorBrowsableState.Never)]
Index: /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/Properties/Settings.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/Properties/Settings.Designer.cs	(revision 4297)
+++ /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/Properties/Settings.Designer.cs	(revision 4298)
@@ -14,5 +14,5 @@
     [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
     [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
-    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+    public sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
         
         private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
@@ -27,5 +27,5 @@
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
         [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
-        [global::System.Configuration.DefaultSettingValueAttribute("Data Source=localhost;Initial Catalog=OKB;Integrated Security=True")]
+        [global::System.Configuration.DefaultSettingValueAttribute("Data Source=localhost;Initial Catalog=HeuristicLab.OKB;Integrated Security=SSPI")]
         public string OKBConnectionString {
             get {
Index: /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/Properties/Settings.settings
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/Properties/Settings.settings	(revision 4297)
+++ /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/Properties/Settings.settings	(revision 4298)
@@ -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.OKB.DataStore.Properties" GeneratedClassName="Settings">
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Services.OKB.DataAccess.Properties" GeneratedClassName="Settings">
   <Profiles />
   <Settings>
@@ -6,8 +6,8 @@
       <DesignTimeValue Profile="(Default)">&lt;?xml version="1.0" encoding="utf-16"?&gt;
 &lt;SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
-  &lt;ConnectionString&gt;Data Source=localhost;Initial Catalog=OKB;Integrated Security=True&lt;/ConnectionString&gt;
+  &lt;ConnectionString&gt;Data Source=localhost;Initial Catalog=HeuristicLab.OKB;Integrated Security=SSPI&lt;/ConnectionString&gt;
   &lt;ProviderName&gt;System.Data.SqlClient&lt;/ProviderName&gt;
 &lt;/SerializableConnectionString&gt;</DesignTimeValue>
-      <Value Profile="(Default)">Data Source=localhost;Initial Catalog=OKB;Integrated Security=True</Value>
+      <Value Profile="(Default)">Data Source=localhost;Initial Catalog=HeuristicLab.OKB;Integrated Security=SSPI</Value>
     </Setting>
   </Settings>
Index: /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/app.config
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/app.config	(revision 4297)
+++ /trunk/sources/HeuristicLab.Services.OKB.DataAccess/3.3/app.config	(revision 4298)
@@ -4,5 +4,7 @@
   </configSections>
   <connectionStrings>
-    <add name="HeuristicLab.OKB.DataStore.Properties.Settings.OKBConnectionString" connectionString="Data Source=localhost;Initial Catalog=OKB;Integrated Security=True" providerName="System.Data.SqlClient"/>
+    <add name="HeuristicLab.Services.OKB.DataAccess.Properties.Settings.OKBConnectionString"
+         connectionString="Data Source=localhost;Initial Catalog=HeuristicLab.OKB;Integrated Security=SSPI"
+         providerName="System.Data.SqlClient" />
   </connectionStrings>
 <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
Index: /trunk/sources/HeuristicLab.Services.OKB.Server/3.3/app.config
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB.Server/3.3/app.config	(revision 4297)
+++ /trunk/sources/HeuristicLab.Services.OKB.Server/3.3/app.config	(revision 4298)
@@ -1,10 +1,40 @@
 <?xml version="1.0"?>
 <configuration>
+  <connectionStrings>
+    <add name="HeuristicLab.Authentication"
+         connectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=HeuristicLab.Authentication"/>
+    <add name="HeuristicLab.Services.OKB.DataAccess.Properties.Settings.OKBConnectionString"
+         connectionString="Data Source=localhost;Initial Catalog=HeuristicLab.OKB;Integrated Security=SSPI"
+         providerName="System.Data.SqlClient" />
+  </connectionStrings>
+
+  <system.web>
+    <authentication mode="Forms" />
+    <compilation debug="true" targetFramework="4.0" />
+
+    <membership>
+      <providers>
+        <clear/>
+        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="HeuristicLab.Authentication"
+             enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
+             maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
+             applicationName="HeuristicLab.Authentication" />
+      </providers>
+    </membership>
+
+    <roleManager enabled="true">
+      <providers>
+        <clear/>
+        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="HeuristicLab.Authentication" applicationName="HeuristicLab.Authentication" />
+      </providers>
+    </roleManager>
+  </system.web>
+
   <system.serviceModel>
     <bindings>
       <netTcpBinding>
         <binding name="LargeMessages" openTimeout="00:00:30" receiveTimeout="00:00:30" sendTimeout="00:00:30" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
-          <security mode="Transport">
-            <transport clientCredentialType="Certificate" protectionLevel="EncryptAndSign"/>            
+          <security mode="Message">
+            <message clientCredentialType="UserName"/>
           </security>
           <readerQuotas maxArrayLength="2147483647"/>
@@ -13,5 +43,7 @@
       </netTcpBinding>
     </bindings>
+
     <client/>
+
     <behaviors>
       <serviceBehaviors>
@@ -19,43 +51,35 @@
           <serviceMetadata httpGetEnabled="false"/>
           <serviceDebug includeExceptionDetailInFaults="true"/>
+          <serviceAuthorization principalPermissionMode="UseAspNetRoles"
+                                roleProviderName="AspNetSqlRoleProvider" />
+          <serviceCredentials>
+            <serviceCertificate findValue="localhost" x509FindType="FindBySubjectName" />
+            <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
+                                    membershipProviderName="AspNetSqlMembershipProvider"/>
+          </serviceCredentials>
         </behavior>
       </serviceBehaviors>
     </behaviors>
+
     <services>
-      <service behaviorConfiguration="OKBServiceBehaviour" name="HeuristicLab.OKB.RunnerService">
+      <service behaviorConfiguration="OKBServiceBehaviour" name="HeuristicLab.Services.OKB.RunnerService">
         <endpoint address="net.tcp://localhost:8001/OKB/Runner.svc/mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
-        <endpoint address="net.tcp://localhost:8001/OKB/Runner.svc" binding="netTcpBinding" bindingConfiguration="LargeMessages" contract="HeuristicLab.OKB.IRunnerService">
-          <identity>
-            <dns value="HEAL"/>
-          </identity>
-        </endpoint>
+        <endpoint address="net.tcp://localhost:8001/OKB/Runner.svc" binding="netTcpBinding" bindingConfiguration="LargeMessages" contract="HeuristicLab.Services.OKB.IRunnerService"/>
       </service>
-      <service behaviorConfiguration="OKBServiceBehaviour" name="HeuristicLab.OKB.AdminService">
+      <service behaviorConfiguration="OKBServiceBehaviour" name="HeuristicLab.Services.OKB.AdminService">
         <endpoint address="net.tcp://localhost:8001/OKB/Admin.svc/mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
-        <endpoint address="net.tcp://localhost:8001/OKB/Admin.svc" binding="netTcpBinding" bindingConfiguration="LargeMessages" contract="HeuristicLab.OKB.IAdminService"/>
+        <endpoint address="net.tcp://localhost:8001/OKB/Admin.svc" binding="netTcpBinding" bindingConfiguration="LargeMessages" contract="HeuristicLab.Services.OKB.IAdminService"/>
       </service>
-      <service behaviorConfiguration="OKBServiceBehaviour" name="HeuristicLab.OKB.TableService">
+      <service behaviorConfiguration="OKBServiceBehaviour" name="HeuristicLab.Services.OKB.TableService">
         <endpoint address="net.tcp://localhost:8001/OKB/Table.svc/mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
-        <endpoint address="net.tcp://localhost:8001/OKB/Table.svc" binding="netTcpBinding" bindingConfiguration="LargeMessages" contract="HeuristicLab.OKB.ITableService">
-          <identity>
-            <dns value="HEAL"/>
-          </identity>
-        </endpoint>
+        <endpoint address="net.tcp://localhost:8001/OKB/Table.svc" binding="netTcpBinding" bindingConfiguration="LargeMessages" contract="HeuristicLab.Services.OKB.ITableService"/>
       </service>
-      <service behaviorConfiguration="OKBServiceBehaviour" name="HeuristicLab.OKB.QueryService">
+      <service behaviorConfiguration="OKBServiceBehaviour" name="HeuristicLab.Services.OKB.QueryService">
         <endpoint address="net.tcp://localhost:8001/OKB/Query.svc/mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
-        <endpoint address="net.tcp://localhost:8001/OKB/Query.svc" binding="netTcpBinding" bindingConfiguration="LargeMessages" contract="HeuristicLab.OKB.IQueryService">
-          <identity>
-            <dns value="HEAL"/>
-          </identity>
-        </endpoint>
+        <endpoint address="net.tcp://localhost:8001/OKB/Query.svc" binding="netTcpBinding" bindingConfiguration="LargeMessages" contract="HeuristicLab.Services.OKB.IQueryService"/>
       </service>
-      <service behaviorConfiguration="OKBServiceBehaviour" name="HeuristicLab.OKB.DataService">
+      <service behaviorConfiguration="OKBServiceBehaviour" name="HeuristicLab.Services.OKB.DataService">
         <endpoint address="net.tcp://localhost:8001/OKB/Data.svc/mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
-        <endpoint address="net.tcp://localhost:8001/OKB/Data.svc" binding="netTcpBinding" bindingConfiguration="LargeMessages" contract="HeuristicLab.OKB.IDataService">
-          <identity>
-            <dns value="HEAL"/>
-          </identity>
-        </endpoint>
+        <endpoint address="net.tcp://localhost:8001/OKB/Data.svc" binding="netTcpBinding" bindingConfiguration="LargeMessages" contract="HeuristicLab.Services.OKB.IDataService"/>
       </service>
     </services>
Index: unk/sources/HeuristicLab.Services.OKB/3.3/CertificateServiceHost.cs
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB/3.3/CertificateServiceHost.cs	(revision 4297)
+++ 	(revision )
@@ -1,74 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.IO;
-using System.Reflection;
-using System.Security.Cryptography.X509Certificates;
-using System.ServiceModel;
-
-namespace HeuristicLab.Services.OKB {
-
-  /// <summary>
-  /// An alternate implementation of service host that checks client certificates.
-  /// </summary>
-  public class CertificateServiceHost : ServiceHost {
-
-    /// <summary>
-    /// Initializes a new instance of the <see cref="CertificateServiceHost"/> class.
-    /// </summary>
-    /// <param name="serviceType">Type of the service.</param>
-    public CertificateServiceHost(Type serviceType)
-      : base(serviceType) {
-    }
-
-    /// <summary>
-    /// Initializes a new instance of the <see cref="CertificateServiceHost"/> class.
-    /// </summary>
-    /// <param name="serviceType">Type of the service.</param>
-    /// <param name="baseAddresses">The base addresses.</param>
-    public CertificateServiceHost(Type serviceType, Uri[] baseAddresses)
-      : base(serviceType, baseAddresses) {
-    }
-
-    /// <summary>
-    /// Loads the service description information from the configuration file and applies it to the runtime being constructed.
-    /// </summary>
-    /// <exception cref="T:System.InvalidOperationException">The description of the service hosted is null.</exception>
-    protected override void ApplyConfiguration() {
-      base.ApplyConfiguration();
-      Credentials.ServiceCertificate.Certificate = GetCertificateResource("HeuristicLab.OKB.Server.server.pfx");
-      Credentials.ClientCertificate.Authentication.CertificateValidationMode =
-          System.ServiceModel.Security.X509CertificateValidationMode.Custom;
-      Credentials.ClientCertificate.Authentication.CustomCertificateValidator =
-        new CustomCertificateValidator(new[] { GetCertificateResource("HeuristicLab.OKB.Server.client.cer") });
-    }
-
-    private static X509Certificate2 GetCertificateResource(string name) {
-      using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(name)) {
-        byte[] bytes;
-        bytes = new byte[(int)stream.Length];
-        stream.Read(bytes, 0, bytes.Length);
-        return new X509Certificate2(bytes);
-      }
-    }
-  }
-}
Index: unk/sources/HeuristicLab.Services.OKB/3.3/CertificateServiceHostFactory.cs
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB/3.3/CertificateServiceHostFactory.cs	(revision 4297)
+++ 	(revision )
@@ -1,45 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.ServiceModel;
-using System.ServiceModel.Activation;
-
-namespace HeuristicLab.Services.OKB {
-
-  /// <summary>
-  /// A simple factory that knows how to parameterize and create a <see cref="CertificateServiceHost"/>.
-  /// </summary>
-  public class CertificateServiceHostFactory : ServiceHostFactory {
-    /// <summary>
-    /// Creates a <see cref="T:System.ServiceModel.ServiceHost"/> for a specified type of service with a specific base address.
-    /// </summary>
-    /// <param name="serviceType">Specifies the type of service to host.</param>
-    /// <param name="baseAddresses">The <see cref="T:System.Array"/> of type <see cref="T:System.Uri"/> that contains the base addresses for the service hosted.</param>
-    /// <returns>
-    /// A <see cref="T:System.ServiceModel.ServiceHost"/> for the type of service specified with a specific base address.
-    /// </returns>
-    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) {
-      return new CertificateServiceHost(serviceType, baseAddresses);
-    }
-  }
-
-}
Index: unk/sources/HeuristicLab.Services.OKB/3.3/CustomCertificateValidator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB/3.3/CustomCertificateValidator.cs	(revision 4297)
+++ 	(revision )
@@ -1,53 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System.Collections.Generic;
-using System.IdentityModel.Selectors;
-using System.IdentityModel.Tokens;
-using System.Security.Cryptography.X509Certificates;
-
-namespace HeuristicLab.Services.OKB {
-
-  /// <summary>
-  /// A certificate validator that uses a list of certificates to validate.
-  /// </summary>
-  public class CustomCertificateValidator : X509CertificateValidator {
-
-    private IList<X509Certificate2> validCertificates;
-
-    /// <summary>
-    /// Initializes a new instance of the <see cref="CustomCertificateValidator"/> class.
-    /// </summary>
-    /// <param name="validCertificates">The valid certificates.</param>
-    public CustomCertificateValidator(IEnumerable<X509Certificate2> validCertificates) {
-      this.validCertificates = new List<X509Certificate2>(validCertificates);
-    }
-
-    /// <summary>
-    /// Validates the X.509 certificate using an internal list of valid certifiates.
-    /// </summary>
-    /// <param name="certificate">The <see cref="T:System.Security.Cryptography.X509Certificates.X509Certificate2"/> that represents the X.509 certificate to validate.</param>
-    public override void Validate(X509Certificate2 certificate) {
-      if (!validCertificates.Contains(certificate))
-        throw new SecurityTokenValidationException("certificate has not been registered");
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Services.OKB/3.3/DataService.cs
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB/3.3/DataService.cs	(revision 4297)
+++ /trunk/sources/HeuristicLab.Services.OKB/3.3/DataService.cs	(revision 4298)
@@ -72,32 +72,32 @@
     private byte[] GetData(EntityType type, int id) {
       Log("loading data", type, id);
-      OKBDataContext okb = new OKBDataContext();
-      switch (type) {
-        case EntityType.Algorithm:
-          Algorithm algorithm = okb.Algorithms.Single(a => a.Id == id);
-          if (algorithm.AlgorithmData == null) {
-            algorithm.AlgorithmData = new AlgorithmData() {
-              AlgorithmId = algorithm.Id,
-              Data = new Binary(new byte[0])
-            };
-            okb.SubmitChanges();
-          }
-          return algorithm.AlgorithmData.Data.ToArray();
-          break;
-        case EntityType.Problem:
-          Problem problem = okb.Problems.Single(p => p.Id == id);
-          if (problem.ProblemData == null) {
-            problem.ProblemData = new ProblemData() {
-              ProblemId = problem.Id,
-              Data = new Binary(new byte[0])
-            };
-            okb.SubmitChanges();
-          }
-          return problem.ProblemData.Data.ToArray();
-          break;
-        default:
-          throw new FaultException("Unsupported EntityType");
+      using (OKBDataContext okb = new OKBDataContext()) {
+        switch (type) {
+          case EntityType.Algorithm:
+            Algorithm algorithm = okb.Algorithms.Single(a => a.Id == id);
+            if (algorithm.AlgorithmData == null) {
+              algorithm.AlgorithmData = new AlgorithmData() {
+                AlgorithmId = algorithm.Id,
+                Data = new Binary(new byte[0])
+              };
+              okb.SubmitChanges();
+            }
+            return algorithm.AlgorithmData.Data.ToArray();
+            break;
+          case EntityType.Problem:
+            Problem problem = okb.Problems.Single(p => p.Id == id);
+            if (problem.ProblemData == null) {
+              problem.ProblemData = new ProblemData() {
+                ProblemId = problem.Id,
+                Data = new Binary(new byte[0])
+              };
+              okb.SubmitChanges();
+            }
+            return problem.ProblemData.Data.ToArray();
+            break;
+          default:
+            throw new FaultException("Unsupported EntityType");
+        }
       }
-      okb.Dispose();
     }
 
Index: /trunk/sources/HeuristicLab.Services.OKB/3.3/ExperimentKit.cs
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB/3.3/ExperimentKit.cs	(revision 4298)
+++ /trunk/sources/HeuristicLab.Services.OKB/3.3/ExperimentKit.cs	(revision 4298)
@@ -0,0 +1,49 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Runtime.Serialization;
+using HeuristicLab.Services.OKB.DataAccess;
+
+namespace HeuristicLab.Services.OKB {
+  /// <summary>
+  /// Contains an <see cref="Algorithm"/> and a <see cref="Problem"/> populated with all
+  /// required data to execute experiments.
+  /// </summary>
+  [DataContract]
+  public class ExperimentKit {
+    /// <summary>
+    /// Gets an <see cref="Algorithm"/> populated with all required data to execute
+    /// experiments.
+    /// </summary>
+    /// <value>An <see cref="Algorithm"/>.</value>
+    [DataMember]
+    public Algorithm Algorithm { get; set; }
+
+    /// <summary>
+    /// Gets a <see cref="Problem"/> populated with all required data to execute
+    /// experiments.
+    /// </summary>
+    /// <value>A <see cref="Problem"/>.</value>
+    [DataMember]
+    public Problem Problem { get; set; }
+  }
+
+}
Index: /trunk/sources/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj	(revision 4297)
+++ /trunk/sources/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj	(revision 4298)
@@ -120,5 +120,4 @@
       <RequiredTargetFramework>3.0</RequiredTargetFramework>
     </Reference>
-    <Reference Include="System.ServiceModel.Activation" />
     <Reference Include="System.ServiceProcess" />
     <Reference Include="System.Xml.Linq">
@@ -134,8 +133,6 @@
     <Compile Include="AdminService.cs" />
     <Compile Include="AttributeSelector.cs" />
-    <Compile Include="CertificateServiceHostFactory.cs" />
-    <Compile Include="CustomCertificateValidator.cs" />
-    <Compile Include="CertificateServiceHost.cs" />
     <Compile Include="DataService.cs" />
+    <Compile Include="ExperimentKit.cs" />
     <Compile Include="Interfaces\IDataService.cs" />
     <Compile Include="Interfaces\ITableService.cs" />
@@ -157,6 +154,4 @@
   <ItemGroup>
     <None Include="app.config" />
-    <EmbeddedResource Include="client.cer" />
-    <EmbeddedResource Include="server.pfx" />
     <None Include="HeuristicLab.snk" />
   </ItemGroup>
Index: /trunk/sources/HeuristicLab.Services.OKB/3.3/Hoster.cs
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB/3.3/Hoster.cs	(revision 4297)
+++ /trunk/sources/HeuristicLab.Services.OKB/3.3/Hoster.cs	(revision 4298)
@@ -53,5 +53,5 @@
     }
 
-    static ILog logger = log4net.LogManager.GetLogger("HeuristicLab.OKB.Hoster");
+    static ILog logger = log4net.LogManager.GetLogger("HeuristicLab.Services.OKB.Hoster");
 
     static void UnhandledException(object sender, UnhandledExceptionEventArgs e) {
@@ -64,5 +64,5 @@
 
     private static void StartService(Type type) {
-      ServiceHost host = new CertificateServiceHost(type);
+      ServiceHost host = new ServiceHost(type);
       try {
         host.Open();
Index: /trunk/sources/HeuristicLab.Services.OKB/3.3/RunnerService.cs
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB/3.3/RunnerService.cs	(revision 4297)
+++ /trunk/sources/HeuristicLab.Services.OKB/3.3/RunnerService.cs	(revision 4298)
@@ -142,14 +142,12 @@
     public void AddRun(Algorithm algorithm, Problem problem, Project project) {
       Log("adding run for {0}@{1}({2})[{3}, {4}]",
-        algorithm.Name, problem.Name, project.Name, authentication.User.Name, authentication.Client.Name);
+        algorithm.Name, problem.Name, project.Name, currentUser.Name, currentClient.Name);
       try {
         using (OKBDataContext okb = new OKBDataContext()) {
-          var user = okb.Users.Single(u => u.Id == authentication.User.Id);
-          var client = okb.Clients.Single(c => c.Id == authentication.Client.Id);
-          Experiment experiment = GetOrCreateExperiment(algorithm, problem, project, authentication.User, okb);
+          Experiment experiment = GetOrCreateExperiment(algorithm, problem, project, currentUser, okb);
           Run run = new Run() {
             Experiment = experiment,
-            UserId = authentication.User.Id,
-            ClientId = authentication.Client.Id,
+            UserId = currentUser.Id,
+            ClientId = currentClient.Id,
             FinishedDate = DateTime.Now,
             ResultValues = algorithm.ResultValues
@@ -175,7 +173,4 @@
         Log("reusing existing experiment");
         Experiment experiment = experimentQuery.First();
-        if (experiment.ExperimentCreators.Where(ec => ec.UserId == user.Id).Count() == 0) {
-          experiment.ExperimentCreators.Add(new ExperimentCreator() { UserId = user.Id });
-        }
         return experiment;
       } else {
@@ -187,5 +182,4 @@
           ParameterValues = algorithm.ParameterValues
         };
-        experiment.ExperimentCreators.Add(new ExperimentCreator() { UserId = user.Id });
         okb.Experiments.InsertOnSubmit(experiment);
         return experiment;
@@ -292,11 +286,12 @@
     /// </summary>
     /// <returns>
-    /// 	<c>true</c> if this instance is connected; otherwise, <c>false</c>.
+    ///   <c>true</c> if this instance is connected; otherwise, <c>false</c>.
     /// </returns>
     public bool IsConnected() {
-      return authentication != null;
-    }
-
-    Authentication authentication = null;
+      return currentUser != null;
+    }
+
+    User currentUser = null;
+    Client currentClient = null;
 
     /// <summary>
@@ -309,5 +304,5 @@
     /// <param name="clientname">The clientname.</param>
     /// <returns>
-    /// 	<c>true</c> if the login was successful; <c>false</c> otherwise.
+    ///   <c>true</c> if the login was successful; <c>false</c> otherwise.
     /// </returns>
     public bool Login(string username, string clientname) {
@@ -320,21 +315,17 @@
       }
       using (OKBDataContext okb = new OKBDataContext()) {
-        authentication = new Authentication() {
-          User = okb.Users.SingleOrDefault(u => u.Name == username),
-          Client = okb.Clients.SingleOrDefault(c => c.Name == clientname)
-        };
-        if (authentication.User == null) {
-          User user = new User() { Name = username, Id = Guid.NewGuid() };
-          okb.Users.InsertOnSubmit(user);
-          authentication.User = user;
+        currentUser = okb.Users.SingleOrDefault(u => u.Name == username);
+        currentClient = okb.Clients.SingleOrDefault(c => c.Name == clientname);
+        if (currentUser == null) {
+          currentUser = new User() { Name = username, Id = Guid.NewGuid() };
+          okb.Users.InsertOnSubmit(currentUser);
           okb.SubmitChanges();
         }
-        if (authentication.Client == null) {
-          Client client = new Client() { Name = clientname, Id = Guid.NewGuid() };
-          okb.Clients.InsertOnSubmit(client);
-          authentication.Client = client;
+        if (currentClient == null) {
+          currentClient = new Client() { Name = clientname, Id = Guid.NewGuid() };
+          okb.Clients.InsertOnSubmit(currentClient);
           okb.SubmitChanges();
         }
-        Log("  auth = {0}", authentication);
+        Log("  user = {0}, client = {1}", currentUser, currentClient);
         return true;
       }
@@ -346,5 +337,6 @@
     public void Logout() {
       Log("Logging out");
-      authentication = null;
+      currentUser = null;
+      currentClient = null;
     }
 
Index: /trunk/sources/HeuristicLab.Services.OKB/3.3/TableService.cs
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB/3.3/TableService.cs	(revision 4297)
+++ /trunk/sources/HeuristicLab.Services.OKB/3.3/TableService.cs	(revision 4298)
@@ -66,5 +66,5 @@
     public void UpdateDataTable(DataTable updatedRows, string tableName) {
       logger.Info("updating table: " + tableName);
-      Type tableType = Assembly.GetAssembly(typeof(Run)).GetType("HeuristicLab.OKB." + tableName, true);
+      Type tableType = Assembly.GetAssembly(typeof(Run)).GetType("HeuristicLab.Services.OKB.DataAccess." + tableName, true);
       var properties = from p in tableType.GetProperties()
                        where SupportedTypes.Contains(p.PropertyType)
@@ -126,5 +126,5 @@
     public void DeleteTableRows(int[] ids, string tableName) {
       logger.Info("delete rows from table: " + tableName);
-      Type tableType = Assembly.GetAssembly(typeof(Run)).GetType("HeuristicLab.OKB." + tableName, true);
+      Type tableType = Assembly.GetAssembly(typeof(Run)).GetType("HeuristicLab.Services.OKB.DataAccess" + tableName, true);
       OKBDataContext okb = GetDataContext();
       ITable table = okb.GetTable(tableType);
@@ -148,5 +148,5 @@
     public DataTable PrepareDataTable(string tableName, out int count) {
       logger.Info("preparing data table: " + tableName);
-      Type tableType = Assembly.GetAssembly(typeof(Run)).GetType("HeuristicLab.OKB." + tableName, true);
+      Type tableType = Assembly.GetAssembly(typeof(Run)).GetType("HeuristicLab.Services.OKB.DataAccess" + tableName, true);
       properties = from p in tableType.GetProperties()
                    where SupportedTypes.Contains(p.PropertyType)
Index: /trunk/sources/HeuristicLab.Services.OKB/3.3/app.config
===================================================================
--- /trunk/sources/HeuristicLab.Services.OKB/3.3/app.config	(revision 4297)
+++ /trunk/sources/HeuristicLab.Services.OKB/3.3/app.config	(revision 4298)
@@ -1,10 +1,40 @@
 <?xml version="1.0"?>
 <configuration>
+  <connectionStrings>
+    <add name="HeuristicLab.Authentication"
+         connectionString="data source=localhost;Integrated Security=SSPI;Initial Catalog=HeuristicLab.Authentication"/>
+    <add name="HeuristicLab.Services.OKB.DataAccess.Properties.Settings.OKBConnectionString"
+         connectionString="Data Source=localhost;Initial Catalog=HeuristicLab.OKB;Integrated Security=SSPI"
+         providerName="System.Data.SqlClient" />
+  </connectionStrings>
+
+  <system.web>
+    <authentication mode="Forms" />
+    <compilation debug="true" targetFramework="4.0" />
+
+    <membership>
+      <providers>
+        <clear/>
+        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="HeuristicLab.Authentication"
+             enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
+             maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
+             applicationName="HeuristicLab.Authentication" />
+      </providers>
+    </membership>
+
+    <roleManager enabled="true">
+      <providers>
+        <clear/>
+        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="HeuristicLab.Authentication" applicationName="HeuristicLab.Authentication" />
+      </providers>
+    </roleManager>
+  </system.web>
+
   <system.serviceModel>
     <bindings>
       <netTcpBinding>
         <binding name="LargeMessages" openTimeout="00:00:30" receiveTimeout="00:00:30" sendTimeout="00:00:30" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
-          <security mode="Transport">
-            <transport clientCredentialType="Certificate" protectionLevel="EncryptAndSign"/>            
+          <security mode="Message">
+            <message clientCredentialType="UserName"/>
           </security>
           <readerQuotas maxArrayLength="2147483647"/>
@@ -13,5 +43,7 @@
       </netTcpBinding>
     </bindings>
+
     <client/>
+
     <behaviors>
       <serviceBehaviors>
@@ -19,47 +51,80 @@
           <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8000/OKB/RunnerMex"/>
           <serviceDebug includeExceptionDetailInFaults="true"/>
+          <serviceAuthorization principalPermissionMode="UseAspNetRoles"
+                                roleProviderName="AspNetSqlRoleProvider" />
+          <serviceCredentials>
+            <serviceCertificate findValue="localhost" x509FindType="FindBySubjectName" />
+            <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
+                                    membershipProviderName="AspNetSqlMembershipProvider"/>
+          </serviceCredentials>
         </behavior>
         <behavior name="AdminServiceBehaviour">
           <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8000/OKB/AdminMex"/>
           <serviceDebug includeExceptionDetailInFaults="true"/>
+          <serviceAuthorization principalPermissionMode="UseAspNetRoles"
+                                roleProviderName="AspNetSqlRoleProvider" />
+          <serviceCredentials>
+            <serviceCertificate findValue="localhost" x509FindType="FindBySubjectName" />
+            <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
+                                    membershipProviderName="AspNetSqlMembershipProvider"/>
+          </serviceCredentials>
         </behavior>
         <behavior name="TableServiceBehaviour">
           <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8000/OKB/TableMex"/>
           <serviceDebug includeExceptionDetailInFaults="true"/>
+          <serviceAuthorization principalPermissionMode="UseAspNetRoles"
+                                roleProviderName="AspNetSqlRoleProvider" />
+          <serviceCredentials>
+            <serviceCertificate findValue="localhost" x509FindType="FindBySubjectName" />
+            <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
+                                    membershipProviderName="AspNetSqlMembershipProvider"/>
+          </serviceCredentials>
         </behavior>
         <behavior name="QueryServiceBehaviour">
           <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8000/OKB/QueryMex"/>
           <serviceDebug includeExceptionDetailInFaults="true"/>
+          <serviceAuthorization principalPermissionMode="UseAspNetRoles"
+                                roleProviderName="AspNetSqlRoleProvider" />
+          <serviceCredentials>
+            <serviceCertificate findValue="localhost" x509FindType="FindBySubjectName" />
+            <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
+                                    membershipProviderName="AspNetSqlMembershipProvider"/>
+          </serviceCredentials>
         </behavior>
         <behavior name="DataServiceBehaviour">
           <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8000/OKB/DataMex"/>
           <serviceDebug includeExceptionDetailInFaults="true"/>
+          <serviceAuthorization principalPermissionMode="UseAspNetRoles"
+                                roleProviderName="AspNetSqlRoleProvider" />
+          <serviceCredentials>
+            <serviceCertificate findValue="localhost" x509FindType="FindBySubjectName" />
+            <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
+                                    membershipProviderName="AspNetSqlMembershipProvider"/>
+          </serviceCredentials>
         </behavior>
       </serviceBehaviors>
     </behaviors>
+
     <services>
-      <service behaviorConfiguration="RunnerServiceBehaviour" name="HeuristicLab.OKB.RunnerService">
+      <service behaviorConfiguration="RunnerServiceBehaviour" name="HeuristicLab.Services.OKB.RunnerService">
         <endpoint address="http://localhost:8000/OKB/RunnerMex" binding="mexHttpBinding" contract="IMetadataExchange"/>
-        <endpoint address="net.tcp://localhost:8001/OKB/RunnerService" binding="netTcpBinding" bindingConfiguration="LargeMessages" contract="HeuristicLab.OKB.IRunnerService">
-          <identity>
-            <dns value="HEAL"/>
-          </identity>
+        <endpoint address="net.tcp://localhost:8001/OKB/RunnerService" binding="netTcpBinding" bindingConfiguration="LargeMessages" contract="HeuristicLab.Services.OKB.IRunnerService">
         </endpoint>
       </service>
-      <service behaviorConfiguration="AdminServiceBehaviour" name="HeuristicLab.OKB.AdminService">
+      <service behaviorConfiguration="AdminServiceBehaviour" name="HeuristicLab.Services.OKB.AdminService">
         <endpoint address="http://localhost:8000/OKB/AdminMex" binding="mexHttpBinding" contract="IMetadataExchange"/>
-        <endpoint address="net.tcp://localhost:8001/OKB/AdminService" binding="netTcpBinding" bindingConfiguration="LargeMessages" contract="HeuristicLab.OKB.IAdminService"/>
+        <endpoint address="net.tcp://localhost:8001/OKB/AdminService" binding="netTcpBinding" bindingConfiguration="LargeMessages" contract="HeuristicLab.Services.OKB.IAdminService"/>
       </service>
-      <service behaviorConfiguration="TableServiceBehaviour" name="HeuristicLab.OKB.TableService">
+      <service behaviorConfiguration="TableServiceBehaviour" name="HeuristicLab.Services.OKB.TableService">
         <endpoint address="http://localhost:8000/OKB/TableMex" binding="mexHttpBinding" contract="IMetadataExchange"/>
-        <endpoint address="net.tcp://localhost:8001/OKB/TableService" binding="netTcpBinding" bindingConfiguration="LargeMessages" contract="HeuristicLab.OKB.ITableService"/>
+        <endpoint address="net.tcp://localhost:8001/OKB/TableService" binding="netTcpBinding" bindingConfiguration="LargeMessages" contract="HeuristicLab.Services.OKB.ITableService"/>
       </service>
-      <service behaviorConfiguration="QueryServiceBehaviour" name="HeuristicLab.OKB.QueryService">
+      <service behaviorConfiguration="QueryServiceBehaviour" name="HeuristicLab.Services.OKB.QueryService">
         <endpoint address="http://localhost:8000/OKB/QueryMex" binding="mexHttpBinding" contract="IMetadataExchange"/>
-        <endpoint address="net.tcp://localhost:8001/OKB/QueryService" binding="netTcpBinding" bindingConfiguration="LargeMessages" contract="HeuristicLab.OKB.IQueryService"/>
+        <endpoint address="net.tcp://localhost:8001/OKB/QueryService" binding="netTcpBinding" bindingConfiguration="LargeMessages" contract="HeuristicLab.Services.OKB.IQueryService"/>
       </service>
-      <service behaviorConfiguration="DataServiceBehaviour" name="HeuristicLab.OKB.DataService">
+      <service behaviorConfiguration="DataServiceBehaviour" name="HeuristicLab.Services.OKB.DataService">
         <endpoint address="http://localhost:8000/OKB/DataMex" binding="mexHttpBinding" contract="IMetadataExchange"/>
-        <endpoint address="net.tcp://localhost:8001/OKB/DataService" binding="netTcpBinding" bindingConfiguration="LargeMessages" contract="HeuristicLab.OKB.IDataService"/>
+        <endpoint address="net.tcp://localhost:8001/OKB/DataService" binding="netTcpBinding" bindingConfiguration="LargeMessages" contract="HeuristicLab.Services.OKB.IDataService"/>
       </service>
     </services>
