Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/Administrator.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/Administrator.cs	(revision 4456)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/Administrator.cs	(revision 4466)
@@ -21,4 +21,5 @@
 
 using System;
+using System.Collections.Generic;
 using System.Linq;
 using HeuristicLab.Clients.Common;
@@ -51,4 +52,12 @@
       get { return algorithms; }
     }
+    private ItemCollection<DataType> dataTypes;
+    public ItemCollection<DataType> DataTypes {
+      get { return dataTypes; }
+    }
+    private IEnumerable<User> users;
+    public IEnumerable<User> Users {
+      get { return users; }
+    }
 
     private Administrator() { }
@@ -71,10 +80,17 @@
       }
       algorithms.Clear();
+      if (dataTypes == null) {
+        dataTypes = new ItemCollection<DataType>();
+        dataTypes.ItemsRemoved += new CollectionItemsChangedEventHandler<DataType>(dataTypes_ItemsRemoved);
+      }
+      dataTypes.Clear();
 
       var call = new Func<Exception>(delegate() {
         try {
-          platforms.AddRange(CallAdminService<ItemCollection<Platform>>(s => s.GetPlatforms()).OrderBy(a => a.Name));
-          algorithmClasses.AddRange(CallAdminService<ItemCollection<AlgorithmClass>>(s => s.GetAlgorithmClasses()).OrderBy(a => a.Name));
-          algorithms.AddRange(CallAdminService<ItemCollection<Algorithm>>(s => s.GetAlgorithms()).OrderBy(a => a.Name));
+          platforms.AddRange(CallAdminService<Platform[]>(s => s.GetPlatforms()).OrderBy(x => x.Name));
+          algorithmClasses.AddRange(CallAdminService<AlgorithmClass[]>(s => s.GetAlgorithmClasses()).OrderBy(x => x.Name));
+          algorithms.AddRange(CallAdminService<Algorithm[]>(s => s.GetAlgorithms()).OrderBy(x => x.Name));
+          dataTypes.AddRange(CallAdminService<DataType[]>(s => s.GetDataTypes()).OrderBy(x => x.Name));
+          users = CallAuthenticationService<User[]>(s => s.GetUsers()).OrderBy(x => x.Name);
           return null;
         }
@@ -98,8 +114,41 @@
         else if (item is Algorithm)
           CallAdminService(s => s.StoreAlgorithm((Algorithm)item));
+        else if (item is DataType)
+          CallAdminService(s => s.StoreDataType((DataType)item));
         return true;
       }
       catch (Exception ex) {
         ErrorHandling.ShowErrorDialog("Store failed.", ex);
+        return false;
+      }
+    }
+
+    public Guid[] GetAlgorithmUsers(long algorithmId) {
+      try {
+        return CallAdminService<Guid[]>(s => s.GetAlgorithmUsers(algorithmId));
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Refresh authorized algorithm users failed.", ex);
+        return null;
+      }
+    }
+    public bool StoreAlgorithmUsers(long algorithmId, Guid[] users) {
+      try {
+        CallAdminService(s => s.StoreAlgorithmUsers(algorithmId, users));
+        return true;
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Store authorized algorithm users failed.", ex);
+        return false;
+      }
+    }
+
+    public bool StoreAlgorithmData(AlgorithmData algorithmData) {
+      try {
+        CallAdminService(s => s.StoreAlgorithmData(algorithmData));
+        return true;
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Store serialized algorithm failed.", ex);
         return false;
       }
@@ -144,4 +193,13 @@
       }
     }
+    private void dataTypes_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<DataType> e) {
+      try {
+        foreach (DataType d in e.Items)
+          CallAdminService(s => s.DeleteDataType(d.Id));
+      }
+      catch (Exception ex) {
+        ErrorHandling.ShowErrorDialog("Delete failed.", ex);
+      }
+    }
 
     #region Helpers
@@ -174,4 +232,18 @@
       }
     }
+    private T CallAuthenticationService<T>(Func<IAuthenticationService, T> call) where T : class {
+      AuthenticationServiceClient client = ClientFactory.CreateClient<AuthenticationServiceClient, IAuthenticationService>();
+      try {
+        return call(client);
+      }
+      finally {
+        try {
+          client.Close();
+        }
+        catch (Exception) {
+          client.Abort();
+        }
+      }
+    }
     #endregion
   }
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/HeuristicLab.Clients.OKB-3.3.csproj
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/HeuristicLab.Clients.OKB-3.3.csproj	(revision 4456)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/HeuristicLab.Clients.OKB-3.3.csproj	(revision 4466)
@@ -77,4 +77,5 @@
     <Compile Include="HeuristicLabClientsOKBPlugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ServiceClients\AdminServiceClient.cs" />
     <Compile Include="ServiceClients\Algorithm.cs">
       <SubType>Code</SubType>
@@ -83,4 +84,6 @@
       <SubType>Code</SubType>
     </Compile>
+    <Compile Include="ServiceClients\AuthenticationServiceClient.cs" />
+    <Compile Include="ServiceClients\DataType.cs" />
     <Compile Include="ServiceClients\NamedOKBItem.cs" />
     <Compile Include="ServiceClients\Platform.cs" />
@@ -94,5 +97,4 @@
       <SubType>Code</SubType>
     </Compile>
-    <Compile Include="ServiceClients\ServiceClients.cs" />
     <Compile Include="Views\AdministratorView.cs">
       <SubType>UserControl</SubType>
@@ -118,4 +120,16 @@
     <Compile Include="Views\AlgorithmView.Designer.cs">
       <DependentUpon>AlgorithmView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\DataTypeView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\DataTypeView.Designer.cs">
+      <DependentUpon>DataTypeView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\DataTypeCollectionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\DataTypeCollectionView.Designer.cs">
+      <DependentUpon>DataTypeCollectionView.cs</DependentUpon>
     </Compile>
     <Compile Include="Views\PlatformCollectionView.cs">
@@ -146,4 +160,12 @@
     <None Include="HeuristicLabClientsOKBPlugin.cs.frame" />
   </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Views\AdministratorView.resx">
+      <DependentUpon>AdministratorView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Views\AlgorithmView.resx">
+      <DependentUpon>AlgorithmView.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <PropertyGroup>
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/AdminServiceClient.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/AdminServiceClient.cs	(revision 4466)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/AdminServiceClient.cs	(revision 4466)
@@ -0,0 +1,523 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Clients.OKB
+{
+    using System.Runtime.Serialization;
+    
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="OKBItem", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.DataType))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.NamedOKBItem))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.AlgorithmClass))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Algorithm))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Platform))]
+    public partial class OKBItem : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private long IdField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long Id
+        {
+            get
+            {
+                return this.IdField;
+            }
+            set
+            {
+                if ((this.IdField.Equals(value) != true))
+                {
+                    this.IdField = value;
+                    this.RaisePropertyChanged("Id");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="DataType", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+    public partial class DataType : HeuristicLab.Clients.OKB.OKBItem
+    {
+        
+        private string NameField;
+        
+        private long PlatformIdField;
+        
+        private string SqlNameField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Name
+        {
+            get
+            {
+                return this.NameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.NameField, value) != true))
+                {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long PlatformId
+        {
+            get
+            {
+                return this.PlatformIdField;
+            }
+            set
+            {
+                if ((this.PlatformIdField.Equals(value) != true))
+                {
+                    this.PlatformIdField = value;
+                    this.RaisePropertyChanged("PlatformId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string SqlName
+        {
+            get
+            {
+                return this.SqlNameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.SqlNameField, value) != true))
+                {
+                    this.SqlNameField = value;
+                    this.RaisePropertyChanged("SqlName");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="NamedOKBItem", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.AlgorithmClass))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Algorithm))]
+    [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Platform))]
+    public partial class NamedOKBItem : HeuristicLab.Clients.OKB.OKBItem
+    {
+        
+        private string DescriptionField;
+        
+        private string NameField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Description
+        {
+            get
+            {
+                return this.DescriptionField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.DescriptionField, value) != true))
+                {
+                    this.DescriptionField = value;
+                    this.RaisePropertyChanged("Description");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Name
+        {
+            get
+            {
+                return this.NameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.NameField, value) != true))
+                {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="AlgorithmClass", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+    public partial class AlgorithmClass : HeuristicLab.Clients.OKB.NamedOKBItem
+    {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="Algorithm", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+    public partial class Algorithm : HeuristicLab.Clients.OKB.NamedOKBItem
+    {
+        
+        private long AlgorithmClassIdField;
+        
+        private long PlatformIdField;
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long AlgorithmClassId
+        {
+            get
+            {
+                return this.AlgorithmClassIdField;
+            }
+            set
+            {
+                if ((this.AlgorithmClassIdField.Equals(value) != true))
+                {
+                    this.AlgorithmClassIdField = value;
+                    this.RaisePropertyChanged("AlgorithmClassId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long PlatformId
+        {
+            get
+            {
+                return this.PlatformIdField;
+            }
+            set
+            {
+                if ((this.PlatformIdField.Equals(value) != true))
+                {
+                    this.PlatformIdField = value;
+                    this.RaisePropertyChanged("PlatformId");
+                }
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="Platform", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+    public partial class Platform : HeuristicLab.Clients.OKB.NamedOKBItem
+    {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="AlgorithmData", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+    public partial class AlgorithmData : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private long AlgorithmIdField;
+        
+        private byte[] DataField;
+        
+        private long DataTypeIdField;
+        
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData
+        {
+            get
+            {
+                return this.extensionDataField;
+            }
+            set
+            {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long AlgorithmId
+        {
+            get
+            {
+                return this.AlgorithmIdField;
+            }
+            set
+            {
+                if ((this.AlgorithmIdField.Equals(value) != true))
+                {
+                    this.AlgorithmIdField = value;
+                    this.RaisePropertyChanged("AlgorithmId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public byte[] Data
+        {
+            get
+            {
+                return this.DataField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.DataField, value) != true))
+                {
+                    this.DataField = value;
+                    this.RaisePropertyChanged("Data");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long DataTypeId
+        {
+            get
+            {
+                return this.DataTypeIdField;
+            }
+            set
+            {
+                if ((this.DataTypeIdField.Equals(value) != true))
+                {
+                    this.DataTypeIdField = value;
+                    this.RaisePropertyChanged("DataTypeId");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="HeuristicLab.Clients.OKB.IAdminService")]
+    public interface IAdminService
+    {
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/GetPlatform", ReplyAction="http://tempuri.org/IAdminService/GetPlatformResponse")]
+        HeuristicLab.Clients.OKB.Platform GetPlatform(long id);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/GetPlatforms", ReplyAction="http://tempuri.org/IAdminService/GetPlatformsResponse")]
+        HeuristicLab.Clients.OKB.Platform[] GetPlatforms();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/StorePlatform", ReplyAction="http://tempuri.org/IAdminService/StorePlatformResponse")]
+        void StorePlatform(HeuristicLab.Clients.OKB.Platform dto);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/DeletePlatform", ReplyAction="http://tempuri.org/IAdminService/DeletePlatformResponse")]
+        void DeletePlatform(long id);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/GetAlgorithmClass", ReplyAction="http://tempuri.org/IAdminService/GetAlgorithmClassResponse")]
+        HeuristicLab.Clients.OKB.AlgorithmClass GetAlgorithmClass(long id);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/GetAlgorithmClasses", ReplyAction="http://tempuri.org/IAdminService/GetAlgorithmClassesResponse")]
+        HeuristicLab.Clients.OKB.AlgorithmClass[] GetAlgorithmClasses();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/StoreAlgorithmClass", ReplyAction="http://tempuri.org/IAdminService/StoreAlgorithmClassResponse")]
+        void StoreAlgorithmClass(HeuristicLab.Clients.OKB.AlgorithmClass dto);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/DeleteAlgorithmClass", ReplyAction="http://tempuri.org/IAdminService/DeleteAlgorithmClassResponse")]
+        void DeleteAlgorithmClass(long id);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/GetAlgorithm", ReplyAction="http://tempuri.org/IAdminService/GetAlgorithmResponse")]
+        HeuristicLab.Clients.OKB.Algorithm GetAlgorithm(long id);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/GetAlgorithms", ReplyAction="http://tempuri.org/IAdminService/GetAlgorithmsResponse")]
+        HeuristicLab.Clients.OKB.Algorithm[] GetAlgorithms();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/StoreAlgorithm", ReplyAction="http://tempuri.org/IAdminService/StoreAlgorithmResponse")]
+        void StoreAlgorithm(HeuristicLab.Clients.OKB.Algorithm dto);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/DeleteAlgorithm", ReplyAction="http://tempuri.org/IAdminService/DeleteAlgorithmResponse")]
+        void DeleteAlgorithm(long id);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/GetAlgorithmUsers", ReplyAction="http://tempuri.org/IAdminService/GetAlgorithmUsersResponse")]
+        System.Guid[] GetAlgorithmUsers(long algorithmId);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/StoreAlgorithmUsers", ReplyAction="http://tempuri.org/IAdminService/StoreAlgorithmUsersResponse")]
+        void StoreAlgorithmUsers(long algorithmId, System.Guid[] users);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/GetAlgorithmData", ReplyAction="http://tempuri.org/IAdminService/GetAlgorithmDataResponse")]
+        HeuristicLab.Clients.OKB.AlgorithmData GetAlgorithmData(long algorithmId);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/StoreAlgorithmData", ReplyAction="http://tempuri.org/IAdminService/StoreAlgorithmDataResponse")]
+        void StoreAlgorithmData(HeuristicLab.Clients.OKB.AlgorithmData dto);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/GetDataType", ReplyAction="http://tempuri.org/IAdminService/GetDataTypeResponse")]
+        HeuristicLab.Clients.OKB.DataType GetDataType(long id);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/GetDataTypes", ReplyAction="http://tempuri.org/IAdminService/GetDataTypesResponse")]
+        HeuristicLab.Clients.OKB.DataType[] GetDataTypes();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/StoreDataType", ReplyAction="http://tempuri.org/IAdminService/StoreDataTypeResponse")]
+        void StoreDataType(HeuristicLab.Clients.OKB.DataType dto);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAdminService/DeleteDataType", ReplyAction="http://tempuri.org/IAdminService/DeleteDataTypeResponse")]
+        void DeleteDataType(long id);
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public interface IAdminServiceChannel : HeuristicLab.Clients.OKB.IAdminService, System.ServiceModel.IClientChannel
+    {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class AdminServiceClient : System.ServiceModel.ClientBase<HeuristicLab.Clients.OKB.IAdminService>, HeuristicLab.Clients.OKB.IAdminService
+    {
+        
+        public AdminServiceClient()
+        {
+        }
+        
+        public AdminServiceClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName)
+        {
+        }
+        
+        public AdminServiceClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress)
+        {
+        }
+        
+        public AdminServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress)
+        {
+        }
+        
+        public AdminServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress)
+        {
+        }
+        
+        public HeuristicLab.Clients.OKB.Platform GetPlatform(long id)
+        {
+            return base.Channel.GetPlatform(id);
+        }
+        
+        public HeuristicLab.Clients.OKB.Platform[] GetPlatforms()
+        {
+            return base.Channel.GetPlatforms();
+        }
+        
+        public void StorePlatform(HeuristicLab.Clients.OKB.Platform dto)
+        {
+            base.Channel.StorePlatform(dto);
+        }
+        
+        public void DeletePlatform(long id)
+        {
+            base.Channel.DeletePlatform(id);
+        }
+        
+        public HeuristicLab.Clients.OKB.AlgorithmClass GetAlgorithmClass(long id)
+        {
+            return base.Channel.GetAlgorithmClass(id);
+        }
+        
+        public HeuristicLab.Clients.OKB.AlgorithmClass[] GetAlgorithmClasses()
+        {
+            return base.Channel.GetAlgorithmClasses();
+        }
+        
+        public void StoreAlgorithmClass(HeuristicLab.Clients.OKB.AlgorithmClass dto)
+        {
+            base.Channel.StoreAlgorithmClass(dto);
+        }
+        
+        public void DeleteAlgorithmClass(long id)
+        {
+            base.Channel.DeleteAlgorithmClass(id);
+        }
+        
+        public HeuristicLab.Clients.OKB.Algorithm GetAlgorithm(long id)
+        {
+            return base.Channel.GetAlgorithm(id);
+        }
+        
+        public HeuristicLab.Clients.OKB.Algorithm[] GetAlgorithms()
+        {
+            return base.Channel.GetAlgorithms();
+        }
+        
+        public void StoreAlgorithm(HeuristicLab.Clients.OKB.Algorithm dto)
+        {
+            base.Channel.StoreAlgorithm(dto);
+        }
+        
+        public void DeleteAlgorithm(long id)
+        {
+            base.Channel.DeleteAlgorithm(id);
+        }
+        
+        public System.Guid[] GetAlgorithmUsers(long algorithmId)
+        {
+            return base.Channel.GetAlgorithmUsers(algorithmId);
+        }
+        
+        public void StoreAlgorithmUsers(long algorithmId, System.Guid[] users)
+        {
+            base.Channel.StoreAlgorithmUsers(algorithmId, users);
+        }
+        
+        public HeuristicLab.Clients.OKB.AlgorithmData GetAlgorithmData(long algorithmId)
+        {
+            return base.Channel.GetAlgorithmData(algorithmId);
+        }
+        
+        public void StoreAlgorithmData(HeuristicLab.Clients.OKB.AlgorithmData dto)
+        {
+            base.Channel.StoreAlgorithmData(dto);
+        }
+        
+        public HeuristicLab.Clients.OKB.DataType GetDataType(long id)
+        {
+            return base.Channel.GetDataType(id);
+        }
+        
+        public HeuristicLab.Clients.OKB.DataType[] GetDataTypes()
+        {
+            return base.Channel.GetDataTypes();
+        }
+        
+        public void StoreDataType(HeuristicLab.Clients.OKB.DataType dto)
+        {
+            base.Channel.StoreDataType(dto);
+        }
+        
+        public void DeleteDataType(long id)
+        {
+            base.Channel.DeleteDataType(id);
+        }
+    }
+}
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/AuthenticationServiceClient.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/AuthenticationServiceClient.cs	(revision 4466)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/AuthenticationServiceClient.cs	(revision 4466)
@@ -0,0 +1,142 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.1
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Clients.OKB
+{
+    using System.Runtime.Serialization;
+    
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="User", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
+    public partial class User : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
+    {
+        
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private System.Guid IdField;
+        
+        private string NameField;
+        
+        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");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string Name
+        {
+            get
+            {
+                return this.NameField;
+            }
+            set
+            {
+                if ((object.ReferenceEquals(this.NameField, value) != true))
+                {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName)
+        {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null))
+            {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="HeuristicLab.Clients.OKB.IAuthenticationService")]
+    public interface IAuthenticationService
+    {
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAuthenticationService/GetUser", ReplyAction="http://tempuri.org/IAuthenticationService/GetUserResponse")]
+        HeuristicLab.Clients.OKB.User GetUser(System.Guid id);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAuthenticationService/GetUsers", ReplyAction="http://tempuri.org/IAuthenticationService/GetUsersResponse")]
+        HeuristicLab.Clients.OKB.User[] GetUsers();
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public interface IAuthenticationServiceChannel : HeuristicLab.Clients.OKB.IAuthenticationService, System.ServiceModel.IClientChannel
+    {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+    public partial class AuthenticationServiceClient : System.ServiceModel.ClientBase<HeuristicLab.Clients.OKB.IAuthenticationService>, HeuristicLab.Clients.OKB.IAuthenticationService
+    {
+        
+        public AuthenticationServiceClient()
+        {
+        }
+        
+        public AuthenticationServiceClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName)
+        {
+        }
+        
+        public AuthenticationServiceClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress)
+        {
+        }
+        
+        public AuthenticationServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress)
+        {
+        }
+        
+        public AuthenticationServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress)
+        {
+        }
+        
+        public HeuristicLab.Clients.OKB.User GetUser(System.Guid id)
+        {
+            return base.Channel.GetUser(id);
+        }
+        
+        public HeuristicLab.Clients.OKB.User[] GetUsers()
+        {
+            return base.Channel.GetUsers();
+        }
+    }
+}
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/DataType.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/DataType.cs	(revision 4466)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/DataType.cs	(revision 4466)
@@ -0,0 +1,36 @@
+#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 HeuristicLab.Core;
+
+namespace HeuristicLab.Clients.OKB {
+  [Item("DataType", "An OKB data type.")]
+  public partial class DataType {
+    public DataType() {
+      Name = "New Data Type";
+      SqlName = "Blob";
+    }
+
+    public override string ToString() {
+      return Name;
+    }
+  }
+}
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/GenerateServiceClients.cmd
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/GenerateServiceClients.cmd	(revision 4456)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/GenerateServiceClients.cmd	(revision 4466)
@@ -1,19 +1,47 @@
 echo off
+
+echo.
+echo *******************************************************************************************
+echo Generating AdminService client
+echo.
+
 svcutil.exe ^
   http://localhost:8732/Design_Time_Addresses/OKB-3.3/AdminService/mex ^
-  /out:ServiceClients ^
+  /out:AdminServiceClient ^
   /namespace:*,HeuristicLab.Clients.OKB ^
   /targetClientVersion:Version35 ^
   /enableDataBinding ^
-  /reference:"C:\Program Files\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll" ^
-  /collectionType:HeuristicLab.Core.ItemCollection`1 ^
   /config:..\app.config
 
 echo.
-echo --------------------------------------------------------------------------------------
-echo ATTENTION!!!
+echo ---------------------------------------------------------------------------------------
+echo !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!!
+echo.
 echo Following modifications have to be done manually in generated data contracts:
 echo  * Remove method "protected void RaisePropertyChanged(string propertyName)" in OKBItem
-echo --------------------------------------------------------------------------------------
+echo.
+echo !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!! ATTENTION !!!
+echo ---------------------------------------------------------------------------------------
+echo.
+echo Generation of AdminService client finished.
+echo *******************************************************************************************
+echo.
+echo.
+echo *******************************************************************************************
+echo Generating AuthenticationService client
+echo.
+
+svcutil.exe ^
+  http://localhost:8732/Design_Time_Addresses/OKB-3.3/AuthenticationService/mex ^
+  /out:AuthenticationServiceClient ^
+  /namespace:*,HeuristicLab.Clients.OKB ^
+  /targetClientVersion:Version35 ^
+  /enableDataBinding ^
+  /config:..\app.config ^
+  /mergeConfig
+
+echo.
+echo Generation of AuthenticationService client finished.
+echo *******************************************************************************************
 echo.
 
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/ServiceClients.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/ServiceClients/ServiceClients.cs	(revision 4456)
+++ 	(revision )
@@ -1,255 +1,0 @@
-﻿//------------------------------------------------------------------------------
-// <auto-generated>
-//     This code was generated by a tool.
-//     Runtime Version:4.0.30319.1
-//
-//     Changes to this file may cause incorrect behavior and will be lost if
-//     the code is regenerated.
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-namespace HeuristicLab.Clients.OKB {
-
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "OKBItem", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.NamedOKBItem))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.AlgorithmClass))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Algorithm))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Platform))]
-  public partial class OKBItem : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
-
-    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
-
-    private long IdField;
-
-    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
-      get {
-        return this.extensionDataField;
-      }
-      set {
-        this.extensionDataField = value;
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public long Id {
-      get {
-        return this.IdField;
-      }
-      set {
-        if ((this.IdField.Equals(value) != true)) {
-          this.IdField = value;
-          this.RaisePropertyChanged("Id");
-        }
-      }
-    }
-
-    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
-  }
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "NamedOKBItem", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.AlgorithmClass))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Algorithm))]
-  [System.Runtime.Serialization.KnownTypeAttribute(typeof(HeuristicLab.Clients.OKB.Platform))]
-  public partial class NamedOKBItem : HeuristicLab.Clients.OKB.OKBItem {
-
-    private string DescriptionField;
-
-    private string NameField;
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public string Description {
-      get {
-        return this.DescriptionField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.DescriptionField, value) != true)) {
-          this.DescriptionField = value;
-          this.RaisePropertyChanged("Description");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public string Name {
-      get {
-        return this.NameField;
-      }
-      set {
-        if ((object.ReferenceEquals(this.NameField, value) != true)) {
-          this.NameField = value;
-          this.RaisePropertyChanged("Name");
-        }
-      }
-    }
-  }
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "AlgorithmClass", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
-  public partial class AlgorithmClass : HeuristicLab.Clients.OKB.NamedOKBItem {
-  }
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "Algorithm", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
-  public partial class Algorithm : HeuristicLab.Clients.OKB.NamedOKBItem {
-
-    private long AlgorithmClassIdField;
-
-    private long PlatformIdField;
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public long AlgorithmClassId {
-      get {
-        return this.AlgorithmClassIdField;
-      }
-      set {
-        if ((this.AlgorithmClassIdField.Equals(value) != true)) {
-          this.AlgorithmClassIdField = value;
-          this.RaisePropertyChanged("AlgorithmClassId");
-        }
-      }
-    }
-
-    [System.Runtime.Serialization.DataMemberAttribute()]
-    public long PlatformId {
-      get {
-        return this.PlatformIdField;
-      }
-      set {
-        if ((this.PlatformIdField.Equals(value) != true)) {
-          this.PlatformIdField = value;
-          this.RaisePropertyChanged("PlatformId");
-        }
-      }
-    }
-  }
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
-  [System.Runtime.Serialization.DataContractAttribute(Name = "Platform", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Services.OKB.DataTransfer")]
-  public partial class Platform : HeuristicLab.Clients.OKB.NamedOKBItem {
-  }
-
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
-  [System.ServiceModel.ServiceContractAttribute(ConfigurationName = "HeuristicLab.Clients.OKB.IAdminService")]
-  public interface IAdminService {
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdminService/GetPlatform", ReplyAction = "http://tempuri.org/IAdminService/GetPlatformResponse")]
-    HeuristicLab.Clients.OKB.Platform GetPlatform(long id);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdminService/GetPlatforms", ReplyAction = "http://tempuri.org/IAdminService/GetPlatformsResponse")]
-    HeuristicLab.Core.ItemCollection<HeuristicLab.Clients.OKB.Platform> GetPlatforms();
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdminService/StorePlatform", ReplyAction = "http://tempuri.org/IAdminService/StorePlatformResponse")]
-    void StorePlatform(HeuristicLab.Clients.OKB.Platform dto);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdminService/DeletePlatform", ReplyAction = "http://tempuri.org/IAdminService/DeletePlatformResponse")]
-    void DeletePlatform(long id);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdminService/GetAlgorithmClass", ReplyAction = "http://tempuri.org/IAdminService/GetAlgorithmClassResponse")]
-    HeuristicLab.Clients.OKB.AlgorithmClass GetAlgorithmClass(long id);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdminService/GetAlgorithmClasses", ReplyAction = "http://tempuri.org/IAdminService/GetAlgorithmClassesResponse")]
-    HeuristicLab.Core.ItemCollection<HeuristicLab.Clients.OKB.AlgorithmClass> GetAlgorithmClasses();
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdminService/StoreAlgorithmClass", ReplyAction = "http://tempuri.org/IAdminService/StoreAlgorithmClassResponse")]
-    void StoreAlgorithmClass(HeuristicLab.Clients.OKB.AlgorithmClass dto);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdminService/DeleteAlgorithmClass", ReplyAction = "http://tempuri.org/IAdminService/DeleteAlgorithmClassResponse")]
-    void DeleteAlgorithmClass(long id);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdminService/GetAlgorithm", ReplyAction = "http://tempuri.org/IAdminService/GetAlgorithmResponse")]
-    HeuristicLab.Clients.OKB.Algorithm GetAlgorithm(long id);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdminService/GetAlgorithms", ReplyAction = "http://tempuri.org/IAdminService/GetAlgorithmsResponse")]
-    HeuristicLab.Core.ItemCollection<HeuristicLab.Clients.OKB.Algorithm> GetAlgorithms();
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdminService/StoreAlgorithm", ReplyAction = "http://tempuri.org/IAdminService/StoreAlgorithmResponse")]
-    void StoreAlgorithm(HeuristicLab.Clients.OKB.Algorithm dto);
-
-    [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IAdminService/DeleteAlgorithm", ReplyAction = "http://tempuri.org/IAdminService/DeleteAlgorithmResponse")]
-    void DeleteAlgorithm(long id);
-  }
-
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
-  public interface IAdminServiceChannel : HeuristicLab.Clients.OKB.IAdminService, System.ServiceModel.IClientChannel {
-  }
-
-  [System.Diagnostics.DebuggerStepThroughAttribute()]
-  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
-  public partial class AdminServiceClient : System.ServiceModel.ClientBase<HeuristicLab.Clients.OKB.IAdminService>, HeuristicLab.Clients.OKB.IAdminService {
-
-    public AdminServiceClient() {
-    }
-
-    public AdminServiceClient(string endpointConfigurationName) :
-      base(endpointConfigurationName) {
-    }
-
-    public AdminServiceClient(string endpointConfigurationName, string remoteAddress) :
-      base(endpointConfigurationName, remoteAddress) {
-    }
-
-    public AdminServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
-      base(endpointConfigurationName, remoteAddress) {
-    }
-
-    public AdminServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
-      base(binding, remoteAddress) {
-    }
-
-    public HeuristicLab.Clients.OKB.Platform GetPlatform(long id) {
-      return base.Channel.GetPlatform(id);
-    }
-
-    public HeuristicLab.Core.ItemCollection<HeuristicLab.Clients.OKB.Platform> GetPlatforms() {
-      return base.Channel.GetPlatforms();
-    }
-
-    public void StorePlatform(HeuristicLab.Clients.OKB.Platform dto) {
-      base.Channel.StorePlatform(dto);
-    }
-
-    public void DeletePlatform(long id) {
-      base.Channel.DeletePlatform(id);
-    }
-
-    public HeuristicLab.Clients.OKB.AlgorithmClass GetAlgorithmClass(long id) {
-      return base.Channel.GetAlgorithmClass(id);
-    }
-
-    public HeuristicLab.Core.ItemCollection<HeuristicLab.Clients.OKB.AlgorithmClass> GetAlgorithmClasses() {
-      return base.Channel.GetAlgorithmClasses();
-    }
-
-    public void StoreAlgorithmClass(HeuristicLab.Clients.OKB.AlgorithmClass dto) {
-      base.Channel.StoreAlgorithmClass(dto);
-    }
-
-    public void DeleteAlgorithmClass(long id) {
-      base.Channel.DeleteAlgorithmClass(id);
-    }
-
-    public HeuristicLab.Clients.OKB.Algorithm GetAlgorithm(long id) {
-      return base.Channel.GetAlgorithm(id);
-    }
-
-    public HeuristicLab.Core.ItemCollection<HeuristicLab.Clients.OKB.Algorithm> GetAlgorithms() {
-      return base.Channel.GetAlgorithms();
-    }
-
-    public void StoreAlgorithm(HeuristicLab.Clients.OKB.Algorithm dto) {
-      base.Channel.StoreAlgorithm(dto);
-    }
-
-    public void DeleteAlgorithm(long id) {
-      base.Channel.DeleteAlgorithm(id);
-    }
-  }
-}
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/Views/AdministratorView.Designer.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/Views/AdministratorView.Designer.cs	(revision 4456)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/Views/AdministratorView.Designer.cs	(revision 4466)
@@ -46,4 +46,5 @@
     private void InitializeComponent() {
       this.components = new System.ComponentModel.Container();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AdministratorView));
       this.tabControl = new System.Windows.Forms.TabControl();
       this.platformsTabPage = new System.Windows.Forms.TabPage();
@@ -53,10 +54,13 @@
       this.algorithmsTabPage = new System.Windows.Forms.TabPage();
       this.algorithmCollectionView = new HeuristicLab.Clients.OKB.AlgorithmCollectionView();
+      this.dataTypesTabPage = new System.Windows.Forms.TabPage();
       this.refreshButton = new System.Windows.Forms.Button();
       this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.dataTypeCollectionView = new HeuristicLab.Clients.OKB.DataTypeCollectionView();
       this.tabControl.SuspendLayout();
       this.platformsTabPage.SuspendLayout();
       this.algorithmClassesTabPage.SuspendLayout();
       this.algorithmsTabPage.SuspendLayout();
+      this.dataTypesTabPage.SuspendLayout();
       this.SuspendLayout();
       // 
@@ -69,4 +73,5 @@
       this.tabControl.Controls.Add(this.algorithmClassesTabPage);
       this.tabControl.Controls.Add(this.algorithmsTabPage);
+      this.tabControl.Controls.Add(this.dataTypesTabPage);
       this.tabControl.Location = new System.Drawing.Point(0, 29);
       this.tabControl.Name = "tabControl";
@@ -147,7 +152,18 @@
       this.algorithmCollectionView.TabIndex = 0;
       // 
+      // dataTypesTabPage
+      // 
+      this.dataTypesTabPage.Controls.Add(this.dataTypeCollectionView);
+      this.dataTypesTabPage.Location = new System.Drawing.Point(4, 22);
+      this.dataTypesTabPage.Name = "dataTypesTabPage";
+      this.dataTypesTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.dataTypesTabPage.Size = new System.Drawing.Size(719, 380);
+      this.dataTypesTabPage.TabIndex = 3;
+      this.dataTypesTabPage.Text = "Data Types";
+      this.dataTypesTabPage.UseVisualStyleBackColor = true;
+      // 
       // refreshButton
       // 
-      this.refreshButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Refresh;
+      this.refreshButton.Image = ((System.Drawing.Image)(resources.GetObject("refreshButton.Image")));
       this.refreshButton.Location = new System.Drawing.Point(0, 0);
       this.refreshButton.Name = "refreshButton";
@@ -157,4 +173,17 @@
       this.refreshButton.UseVisualStyleBackColor = true;
       this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click);
+      // 
+      // dataTypeCollectionView
+      // 
+      this.dataTypeCollectionView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTypeCollectionView.Caption = "DataTypeCollection View";
+      this.dataTypeCollectionView.Content = null;
+      this.dataTypeCollectionView.Location = new System.Drawing.Point(6, 6);
+      this.dataTypeCollectionView.Name = "dataTypeCollectionView";
+      this.dataTypeCollectionView.ReadOnly = false;
+      this.dataTypeCollectionView.Size = new System.Drawing.Size(707, 368);
+      this.dataTypeCollectionView.TabIndex = 0;
       // 
       // AdministratorView
@@ -170,4 +199,5 @@
       this.algorithmClassesTabPage.ResumeLayout(false);
       this.algorithmsTabPage.ResumeLayout(false);
+      this.dataTypesTabPage.ResumeLayout(false);
       this.ResumeLayout(false);
 
@@ -185,4 +215,6 @@
     private System.Windows.Forms.TabPage platformsTabPage;
     private PlatformCollectionView platformCollectionView;
+    private System.Windows.Forms.TabPage dataTypesTabPage;
+    private DataTypeCollectionView dataTypeCollectionView;
 
   }
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/Views/AdministratorView.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/Views/AdministratorView.cs	(revision 4456)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/Views/AdministratorView.cs	(revision 4466)
@@ -56,8 +56,10 @@
         algorithmClassCollectionView.Content = null;
         algorithmCollectionView.Content = null;
+        dataTypeCollectionView.Content = null;
       } else {
         platformCollectionView.Content = Content.Platforms;
         algorithmClassCollectionView.Content = Content.AlgorithmClasses;
         algorithmCollectionView.Content = Content.Algorithms;
+        dataTypeCollectionView.Content = Content.DataTypes;
       }
     }
@@ -69,4 +71,5 @@
       algorithmClassCollectionView.Enabled = Content != null;
       algorithmCollectionView.Enabled = Content != null;
+      dataTypeCollectionView.Enabled = Content != null;
     }
 
@@ -87,4 +90,5 @@
         algorithmClassCollectionView.Content = Content.AlgorithmClasses;
         algorithmCollectionView.Content = Content.Algorithms;
+        dataTypeCollectionView.Content = Content.DataTypes;
         refreshButton.Enabled = true;
         tabControl.Enabled = true;
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmView.Designer.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmView.Designer.cs	(revision 4456)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmView.Designer.cs	(revision 4466)
@@ -49,5 +49,21 @@
       this.algorithmClassLabel = new System.Windows.Forms.Label();
       this.algorithmClassComboBox = new System.Windows.Forms.ComboBox();
+      this.usersListBox = new System.Windows.Forms.ListBox();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.usersTabPage = new System.Windows.Forms.TabPage();
+      this.storeUsersButton = new System.Windows.Forms.Button();
+      this.refreshUsersButton = new System.Windows.Forms.Button();
+      this.dataTabPage = new System.Windows.Forms.TabPage();
+      this.fileLabel = new System.Windows.Forms.Label();
+      this.storeDataButton = new System.Windows.Forms.Button();
+      this.fileTextBox = new System.Windows.Forms.TextBox();
+      this.openFileButton = new System.Windows.Forms.Button();
+      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.dataTypeLabel = new System.Windows.Forms.Label();
+      this.dataTypeComboBox = new System.Windows.Forms.ComboBox();
       ((System.ComponentModel.ISupportInitialize)(this.modifiedPictureBox)).BeginInit();
+      this.tabControl.SuspendLayout();
+      this.usersTabPage.SuspendLayout();
+      this.dataTabPage.SuspendLayout();
       this.SuspendLayout();
       // 
@@ -55,10 +71,10 @@
       // 
       this.nameTextBox.Location = new System.Drawing.Point(90, 29);
-      this.nameTextBox.Size = new System.Drawing.Size(197, 20);
+      this.nameTextBox.Size = new System.Drawing.Size(495, 20);
       // 
       // descriptionTextBox
       // 
       this.descriptionTextBox.Location = new System.Drawing.Point(90, 55);
-      this.descriptionTextBox.Size = new System.Drawing.Size(197, 20);
+      this.descriptionTextBox.Size = new System.Drawing.Size(495, 20);
       // 
       // storeButton
@@ -68,6 +84,5 @@
       // modifiedPictureBox
       // 
-      this.modifiedPictureBox.Location = new System.Drawing.Point(293, 3);
-      this.modifiedPictureBox.Size = new System.Drawing.Size(39, 130);
+      this.modifiedPictureBox.Location = new System.Drawing.Point(591, 3);
       // 
       // platformLabel
@@ -88,5 +103,5 @@
       this.platformComboBox.Location = new System.Drawing.Point(90, 81);
       this.platformComboBox.Name = "platformComboBox";
-      this.platformComboBox.Size = new System.Drawing.Size(197, 21);
+      this.platformComboBox.Size = new System.Drawing.Size(495, 21);
       this.platformComboBox.TabIndex = 6;
       this.platformComboBox.SelectedValueChanged += new System.EventHandler(this.platformComboBox_SelectedValueChanged);
@@ -109,11 +124,159 @@
       this.algorithmClassComboBox.Location = new System.Drawing.Point(90, 108);
       this.algorithmClassComboBox.Name = "algorithmClassComboBox";
-      this.algorithmClassComboBox.Size = new System.Drawing.Size(197, 21);
+      this.algorithmClassComboBox.Size = new System.Drawing.Size(495, 21);
       this.algorithmClassComboBox.TabIndex = 8;
       this.algorithmClassComboBox.SelectedValueChanged += new System.EventHandler(this.algorithmClassComboBox_SelectedValueChanged);
       // 
+      // usersListBox
+      // 
+      this.usersListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.usersListBox.Enabled = false;
+      this.usersListBox.FormattingEnabled = true;
+      this.usersListBox.Location = new System.Drawing.Point(6, 35);
+      this.usersListBox.Name = "usersListBox";
+      this.usersListBox.SelectionMode = System.Windows.Forms.SelectionMode.MultiSimple;
+      this.usersListBox.Size = new System.Drawing.Size(613, 225);
+      this.usersListBox.TabIndex = 2;
+      this.usersListBox.SelectedIndexChanged += new System.EventHandler(this.usersListBox_SelectedIndexChanged);
+      // 
+      // tabControl
+      // 
+      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.tabControl.Controls.Add(this.usersTabPage);
+      this.tabControl.Controls.Add(this.dataTabPage);
+      this.tabControl.Location = new System.Drawing.Point(0, 162);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(633, 292);
+      this.tabControl.TabIndex = 9;
+      // 
+      // usersTabPage
+      // 
+      this.usersTabPage.Controls.Add(this.storeUsersButton);
+      this.usersTabPage.Controls.Add(this.refreshUsersButton);
+      this.usersTabPage.Controls.Add(this.usersListBox);
+      this.usersTabPage.Location = new System.Drawing.Point(4, 22);
+      this.usersTabPage.Name = "usersTabPage";
+      this.usersTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.usersTabPage.Size = new System.Drawing.Size(625, 266);
+      this.usersTabPage.TabIndex = 0;
+      this.usersTabPage.Text = "Authorized Users";
+      this.usersTabPage.UseVisualStyleBackColor = true;
+      // 
+      // storeUsersButton
+      // 
+      this.storeUsersButton.Location = new System.Drawing.Point(86, 6);
+      this.storeUsersButton.Name = "storeUsersButton";
+      this.storeUsersButton.Size = new System.Drawing.Size(75, 23);
+      this.storeUsersButton.TabIndex = 1;
+      this.storeUsersButton.Text = "&Store";
+      this.toolTip.SetToolTip(this.storeUsersButton, "Store Authorized Users");
+      this.storeUsersButton.UseVisualStyleBackColor = true;
+      this.storeUsersButton.Click += new System.EventHandler(this.storeUsersButton_Click);
+      // 
+      // refreshUsersButton
+      // 
+      this.refreshUsersButton.Location = new System.Drawing.Point(6, 6);
+      this.refreshUsersButton.Name = "refreshUsersButton";
+      this.refreshUsersButton.Size = new System.Drawing.Size(75, 23);
+      this.refreshUsersButton.TabIndex = 0;
+      this.refreshUsersButton.Text = "&Refresh";
+      this.toolTip.SetToolTip(this.refreshUsersButton, "Refresh Authorized Users");
+      this.refreshUsersButton.UseVisualStyleBackColor = true;
+      this.refreshUsersButton.Click += new System.EventHandler(this.refreshUsersButton_Click);
+      // 
+      // dataTabPage
+      // 
+      this.dataTabPage.Controls.Add(this.dataTypeComboBox);
+      this.dataTabPage.Controls.Add(this.openFileButton);
+      this.dataTabPage.Controls.Add(this.fileTextBox);
+      this.dataTabPage.Controls.Add(this.storeDataButton);
+      this.dataTabPage.Controls.Add(this.dataTypeLabel);
+      this.dataTabPage.Controls.Add(this.fileLabel);
+      this.dataTabPage.Location = new System.Drawing.Point(4, 22);
+      this.dataTabPage.Name = "dataTabPage";
+      this.dataTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.dataTabPage.Size = new System.Drawing.Size(625, 266);
+      this.dataTabPage.TabIndex = 1;
+      this.dataTabPage.Text = "Serialized Algorithm";
+      this.dataTabPage.UseVisualStyleBackColor = true;
+      // 
+      // fileLabel
+      // 
+      this.fileLabel.AutoSize = true;
+      this.fileLabel.Location = new System.Drawing.Point(6, 38);
+      this.fileLabel.Name = "fileLabel";
+      this.fileLabel.Size = new System.Drawing.Size(26, 13);
+      this.fileLabel.TabIndex = 1;
+      this.fileLabel.Text = "&File:";
+      // 
+      // storeDataButton
+      // 
+      this.storeDataButton.Enabled = false;
+      this.storeDataButton.Location = new System.Drawing.Point(6, 6);
+      this.storeDataButton.Name = "storeDataButton";
+      this.storeDataButton.Size = new System.Drawing.Size(75, 23);
+      this.storeDataButton.TabIndex = 0;
+      this.storeDataButton.Text = "&Store";
+      this.toolTip.SetToolTip(this.storeDataButton, "Store Serialized Algorithm");
+      this.storeDataButton.UseVisualStyleBackColor = true;
+      this.storeDataButton.Click += new System.EventHandler(this.storeDataButton_Click);
+      // 
+      // fileTextBox
+      // 
+      this.fileTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.fileTextBox.Location = new System.Drawing.Point(69, 35);
+      this.fileTextBox.Name = "fileTextBox";
+      this.fileTextBox.ReadOnly = true;
+      this.fileTextBox.Size = new System.Drawing.Size(520, 20);
+      this.fileTextBox.TabIndex = 2;
+      // 
+      // openFileButton
+      // 
+      this.openFileButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.openFileButton.Location = new System.Drawing.Point(595, 32);
+      this.openFileButton.Name = "openFileButton";
+      this.openFileButton.Size = new System.Drawing.Size(24, 24);
+      this.openFileButton.TabIndex = 3;
+      this.openFileButton.Text = "...";
+      this.openFileButton.UseVisualStyleBackColor = true;
+      this.openFileButton.Click += new System.EventHandler(this.openFileButton_Click);
+      // 
+      // openFileDialog
+      // 
+      this.openFileDialog.FileName = "algorithm";
+      this.openFileDialog.Filter = "All Files (*.*)|*.*";
+      this.openFileDialog.Title = "Select Algorithm File";
+      // 
+      // dataTypeLabel
+      // 
+      this.dataTypeLabel.AutoSize = true;
+      this.dataTypeLabel.Location = new System.Drawing.Point(6, 64);
+      this.dataTypeLabel.Name = "dataTypeLabel";
+      this.dataTypeLabel.Size = new System.Drawing.Size(57, 13);
+      this.dataTypeLabel.TabIndex = 4;
+      this.dataTypeLabel.Text = "&DataType:";
+      // 
+      // dataTypeComboBox
+      // 
+      this.dataTypeComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTypeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.dataTypeComboBox.FormattingEnabled = true;
+      this.dataTypeComboBox.Location = new System.Drawing.Point(69, 61);
+      this.dataTypeComboBox.Name = "dataTypeComboBox";
+      this.dataTypeComboBox.Size = new System.Drawing.Size(550, 21);
+      this.dataTypeComboBox.TabIndex = 5;
+      this.dataTypeComboBox.SelectedIndexChanged += new System.EventHandler(this.dataTypeComboBox_SelectedIndexChanged);
+      // 
       // AlgorithmView
       // 
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Controls.Add(this.tabControl);
       this.Controls.Add(this.platformComboBox);
       this.Controls.Add(this.platformLabel);
@@ -121,10 +284,11 @@
       this.Controls.Add(this.algorithmClassLabel);
       this.Name = "AlgorithmView";
-      this.Size = new System.Drawing.Size(335, 275);
-      this.Controls.SetChildIndex(this.modifiedPictureBox, 0);
+      this.Size = new System.Drawing.Size(633, 454);
       this.Controls.SetChildIndex(this.algorithmClassLabel, 0);
       this.Controls.SetChildIndex(this.algorithmClassComboBox, 0);
       this.Controls.SetChildIndex(this.platformLabel, 0);
       this.Controls.SetChildIndex(this.platformComboBox, 0);
+      this.Controls.SetChildIndex(this.tabControl, 0);
+      this.Controls.SetChildIndex(this.modifiedPictureBox, 0);
       this.Controls.SetChildIndex(this.storeButton, 0);
       this.Controls.SetChildIndex(this.nameTextBox, 0);
@@ -133,4 +297,8 @@
       this.Controls.SetChildIndex(this.descriptionTextBox, 0);
       ((System.ComponentModel.ISupportInitialize)(this.modifiedPictureBox)).EndInit();
+      this.tabControl.ResumeLayout(false);
+      this.usersTabPage.ResumeLayout(false);
+      this.dataTabPage.ResumeLayout(false);
+      this.dataTabPage.PerformLayout();
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -144,4 +312,17 @@
     private System.Windows.Forms.Label algorithmClassLabel;
     private System.Windows.Forms.ComboBox algorithmClassComboBox;
+    private System.Windows.Forms.ListBox usersListBox;
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage usersTabPage;
+    private System.Windows.Forms.Button storeUsersButton;
+    private System.Windows.Forms.Button refreshUsersButton;
+    private System.Windows.Forms.TabPage dataTabPage;
+    private System.Windows.Forms.ComboBox dataTypeComboBox;
+    private System.Windows.Forms.Button openFileButton;
+    private System.Windows.Forms.TextBox fileTextBox;
+    private System.Windows.Forms.Button storeDataButton;
+    private System.Windows.Forms.Label dataTypeLabel;
+    private System.Windows.Forms.Label fileLabel;
+    private System.Windows.Forms.OpenFileDialog openFileDialog;
 
   }
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmView.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmView.cs	(revision 4456)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/Views/AlgorithmView.cs	(revision 4466)
@@ -20,8 +20,11 @@
 #endregion
 
+using System;
+using System.Collections.Generic;
 using System.Linq;
 using System.Windows.Forms;
 using HeuristicLab.MainForm;
 using HeuristicLab.MainForm.WindowsForms;
+using System.IO;
 
 namespace HeuristicLab.Clients.OKB {
@@ -42,4 +45,5 @@
       platformComboBox.DataSource = Administrator.Instance.Platforms.ToList();
       algorithmClassComboBox.DataSource = Administrator.Instance.AlgorithmClasses.ToList();
+      dataTypeComboBox.DataSource = Administrator.Instance.DataTypes.ToList();
     }
 
@@ -62,4 +66,7 @@
         algorithmClassComboBox.SelectedItem = Administrator.Instance.AlgorithmClasses.FirstOrDefault(a => a.Id == Content.AlgorithmClassId);
       }
+      usersListBox.DataSource = null;
+      fileTextBox.Text = "";
+      dataTypeComboBox.SelectedIndex = -1;
     }
 
@@ -68,4 +75,8 @@
       platformComboBox.Enabled = Content != null;
       algorithmClassComboBox.Enabled = Content != null;
+      refreshUsersButton.Enabled = Content != null;
+      storeUsersButton.Enabled = usersListBox.DataSource != null;
+      usersListBox.Enabled = usersListBox.DataSource != null;
+      storeDataButton.Enabled = !string.IsNullOrEmpty(fileTextBox.Text) && dataTypeComboBox.SelectedIndex != -1;
     }
 
@@ -93,4 +104,50 @@
       }
     }
+
+    private void refreshUsersButton_Click(object sender, System.EventArgs e) {
+      Guid[] ids = Administrator.Instance.GetAlgorithmUsers(Content.Id);
+      if (ids != null) {
+        List<User> users = Administrator.Instance.Users.ToList();
+        usersListBox.DataSource = users;
+        usersListBox.DisplayMember = "Name";
+        usersListBox.SelectedItems.Clear();
+        foreach (Guid id in ids)
+          usersListBox.SelectedItems.Add(users.First(u => u.Id == id));
+        usersListBox.Enabled = true;
+        storeUsersButton.Enabled = false;
+      }
+    }
+    private void storeUsersButton_Click(object sender, System.EventArgs e) {
+      if (Administrator.Instance.StoreAlgorithmUsers(Content.Id, usersListBox.SelectedItems.Cast<User>().Select(u => u.Id).ToArray()))
+        storeUsersButton.Enabled = false;
+    }
+    private void usersListBox_SelectedIndexChanged(object sender, EventArgs e) {
+      storeUsersButton.Enabled = true;
+    }
+
+    private void storeDataButton_Click(object sender, EventArgs e) {
+      AlgorithmData data = new AlgorithmData();
+      data.AlgorithmId = Content.Id;
+      data.DataTypeId = ((DataType)dataTypeComboBox.SelectedItem).Id;
+
+      using (FileStream stream = new FileStream(fileTextBox.Text, FileMode.Open, FileAccess.Read)) {
+        byte[] bytes = new byte[stream.Length];
+        stream.Read(bytes, 0, bytes.Length);
+        stream.Close();
+        data.Data = bytes;
+      }
+
+      if (Administrator.Instance.StoreAlgorithmData(data))
+        storeDataButton.Enabled = false;
+    }
+    private void openFileButton_Click(object sender, EventArgs e) {
+      if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
+        fileTextBox.Text = openFileDialog.FileName;
+        storeDataButton.Enabled = true;
+      }
+    }
+    private void dataTypeComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      storeDataButton.Enabled = !string.IsNullOrEmpty(fileTextBox.Text);
+    }
   }
 }
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/Views/DataTypeCollectionView.Designer.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/Views/DataTypeCollectionView.Designer.cs	(revision 4466)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/Views/DataTypeCollectionView.Designer.cs	(revision 4466)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class DataTypeCollectionView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/Views/DataTypeCollectionView.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/Views/DataTypeCollectionView.cs	(revision 4466)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/Views/DataTypeCollectionView.cs	(revision 4466)
@@ -0,0 +1,40 @@
+﻿#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.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("DataTypeCollection View")]
+  [Content(typeof(IItemCollection<DataType>), true)]
+  public partial class DataTypeCollectionView : ItemCollectionView<DataType> {
+    public DataTypeCollectionView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Data Types";
+    }
+
+    protected override DataType CreateItem() {
+      return new DataType();
+    }
+  }
+}
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/Views/DataTypeView.Designer.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/Views/DataTypeView.Designer.cs	(revision 4466)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/Views/DataTypeView.Designer.cs	(revision 4466)
@@ -0,0 +1,161 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Clients.OKB {
+  partial class DataTypeView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.nameLabel = new System.Windows.Forms.Label();
+      this.nameTextBox = new System.Windows.Forms.TextBox();
+      this.sqlNameLabel = new System.Windows.Forms.Label();
+      this.sqlNameTextBox = new System.Windows.Forms.TextBox();
+      this.platformLabel = new System.Windows.Forms.Label();
+      this.platformComboBox = new System.Windows.Forms.ComboBox();
+      ((System.ComponentModel.ISupportInitialize)(this.modifiedPictureBox)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // storeButton
+      // 
+      this.toolTip.SetToolTip(this.storeButton, "Store Data");
+      // 
+      // modifiedPictureBox
+      // 
+      this.modifiedPictureBox.Location = new System.Drawing.Point(308, 3);
+      // 
+      // nameLabel
+      // 
+      this.nameLabel.AutoSize = true;
+      this.nameLabel.Location = new System.Drawing.Point(3, 32);
+      this.nameLabel.Name = "nameLabel";
+      this.nameLabel.Size = new System.Drawing.Size(38, 13);
+      this.nameLabel.TabIndex = 1;
+      this.nameLabel.Text = "&Name:";
+      // 
+      // nameTextBox
+      // 
+      this.nameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.nameTextBox.Location = new System.Drawing.Point(71, 29);
+      this.nameTextBox.Name = "nameTextBox";
+      this.nameTextBox.Size = new System.Drawing.Size(231, 20);
+      this.nameTextBox.TabIndex = 2;
+      this.nameTextBox.TextChanged += new System.EventHandler(this.nameTextBox_TextChanged);
+      this.nameTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.nameTextBox_KeyDown);
+      // 
+      // sqlNameLabel
+      // 
+      this.sqlNameLabel.AutoSize = true;
+      this.sqlNameLabel.Location = new System.Drawing.Point(3, 58);
+      this.sqlNameLabel.Name = "sqlNameLabel";
+      this.sqlNameLabel.Size = new System.Drawing.Size(62, 13);
+      this.sqlNameLabel.TabIndex = 3;
+      this.sqlNameLabel.Text = "&SQL Name:";
+      // 
+      // sqlNameTextBox
+      // 
+      this.sqlNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.sqlNameTextBox.Location = new System.Drawing.Point(71, 55);
+      this.sqlNameTextBox.Name = "sqlNameTextBox";
+      this.sqlNameTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+      this.sqlNameTextBox.Size = new System.Drawing.Size(231, 20);
+      this.sqlNameTextBox.TabIndex = 4;
+      this.sqlNameTextBox.TextChanged += new System.EventHandler(this.sqlNameTextBox_TextChanged);
+      this.sqlNameTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.sqlNameTextBox_KeyDown);
+      // 
+      // platformLabel
+      // 
+      this.platformLabel.AutoSize = true;
+      this.platformLabel.Location = new System.Drawing.Point(3, 84);
+      this.platformLabel.Name = "platformLabel";
+      this.platformLabel.Size = new System.Drawing.Size(48, 13);
+      this.platformLabel.TabIndex = 5;
+      this.platformLabel.Text = "&Platform:";
+      // 
+      // platformComboBox
+      // 
+      this.platformComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.platformComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.platformComboBox.FormattingEnabled = true;
+      this.platformComboBox.Location = new System.Drawing.Point(71, 81);
+      this.platformComboBox.Name = "platformComboBox";
+      this.platformComboBox.Size = new System.Drawing.Size(231, 21);
+      this.platformComboBox.TabIndex = 6;
+      this.platformComboBox.SelectedValueChanged += new System.EventHandler(this.platformComboBox_SelectedValueChanged);
+      // 
+      // DataTypeView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.platformComboBox);
+      this.Controls.Add(this.sqlNameTextBox);
+      this.Controls.Add(this.platformLabel);
+      this.Controls.Add(this.sqlNameLabel);
+      this.Controls.Add(this.nameLabel);
+      this.Controls.Add(this.nameTextBox);
+      this.Name = "DataTypeView";
+      this.Size = new System.Drawing.Size(350, 229);
+      this.Controls.SetChildIndex(this.modifiedPictureBox, 0);
+      this.Controls.SetChildIndex(this.storeButton, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.sqlNameLabel, 0);
+      this.Controls.SetChildIndex(this.platformLabel, 0);
+      this.Controls.SetChildIndex(this.sqlNameTextBox, 0);
+      this.Controls.SetChildIndex(this.platformComboBox, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.modifiedPictureBox)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox nameTextBox;
+    private System.Windows.Forms.Label nameLabel;
+    private System.Windows.Forms.Label sqlNameLabel;
+    private System.Windows.Forms.TextBox sqlNameTextBox;
+    private System.Windows.Forms.Label platformLabel;
+    private System.Windows.Forms.ComboBox platformComboBox;
+  }
+}
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/Views/DataTypeView.cs
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/Views/DataTypeView.cs	(revision 4466)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/Views/DataTypeView.cs	(revision 4466)
@@ -0,0 +1,126 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using System.Linq;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.MainForm.WindowsForms;
+
+namespace HeuristicLab.Clients.OKB {
+  [View("DataType View")]
+  [Content(typeof(DataType), true)]
+  public partial class DataTypeView : OKBItemView {
+    public new DataType Content {
+      get { return (DataType)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public DataTypeView() {
+      InitializeComponent();
+    }
+
+    protected override void OnInitialized(System.EventArgs e) {
+      base.OnInitialized(e);
+      platformComboBox.DataSource = Administrator.Instance.Platforms.ToList();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null) {
+        nameTextBox.Text = string.Empty;
+        sqlNameTextBox.Text = string.Empty;
+        platformComboBox.SelectedIndex = -1;
+        if (ViewAttribute.HasViewAttribute(this.GetType()))
+          this.Caption = ViewAttribute.GetViewName(this.GetType());
+        else
+          this.Caption = "DataType View";
+      } else {
+        nameTextBox.Text = Content.Name;
+        sqlNameTextBox.Text = Content.SqlName;
+        platformComboBox.SelectedItem = Administrator.Instance.Platforms.FirstOrDefault(p => p.Id == Content.PlatformId);
+        Caption = Content.Name;
+      }
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      if (Content == null) {
+        nameTextBox.Enabled = false;
+        sqlNameTextBox.Enabled = false;
+        platformComboBox.Enabled = false;
+      } else {
+        nameTextBox.Enabled = true;
+        nameTextBox.ReadOnly = ReadOnly;
+        sqlNameTextBox.Enabled = true;
+        sqlNameTextBox.ReadOnly = ReadOnly;
+        platformComboBox.Enabled = true;
+      }
+    }
+
+    protected override void OnContentPropertyChanged(string propertyName) {
+      switch (propertyName) {
+        case "Name":
+          nameTextBox.Text = Content.Name;
+          Caption = Content.Name;
+          break;
+        case "SqlName":
+          sqlNameTextBox.Text = Content.SqlName;
+          break;
+        case "PlatformId":
+          platformComboBox.SelectedItem = Administrator.Instance.Platforms.FirstOrDefault(p => p.Id == Content.PlatformId);
+          break;
+      }
+    }
+
+    private void nameTextBox_KeyDown(object sender, KeyEventArgs e) {
+      if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Return))
+        nameLabel.Focus();  // set focus on label to validate data
+      if (e.KeyCode == Keys.Escape) {
+        nameTextBox.Text = Content.Name;
+        nameLabel.Focus();  // set focus on label to validate data
+      }
+    }
+    private void nameTextBox_TextChanged(object sender, EventArgs e) {
+      if (nameTextBox.Text != Content.Name)
+        Content.Name = nameTextBox.Text;
+    }
+    private void sqlNameTextBox_KeyDown(object sender, KeyEventArgs e) {
+      if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Return))
+        sqlNameLabel.Focus();  // set focus on label to validate data
+      if (e.KeyCode == Keys.Escape) {
+        sqlNameTextBox.Text = Content.SqlName;
+        sqlNameLabel.Focus();  // set focus on label to validate data
+      }
+    }
+    private void sqlNameTextBox_TextChanged(object sender, EventArgs e) {
+      if (sqlNameTextBox.Text != Content.SqlName)
+        Content.SqlName = sqlNameTextBox.Text;
+    }
+    private void platformComboBox_SelectedValueChanged(object sender, System.EventArgs e) {
+      if (Content != null) {
+        Platform selected = platformComboBox.SelectedItem as Platform;
+        if (selected != null) Content.PlatformId = selected.Id;
+      }
+    }
+  }
+}
Index: branches/OKB/HeuristicLab.Clients.OKB-3.3/app.config
===================================================================
--- branches/OKB/HeuristicLab.Clients.OKB-3.3/app.config	(revision 4456)
+++ branches/OKB/HeuristicLab.Clients.OKB-3.3/app.config	(revision 4466)
@@ -5,4 +5,21 @@
             <wsHttpBinding>
                 <binding name="WSHttpBinding_IAdminService" closeTimeout="00:01:00"
+                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+                    bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
+                    maxBufferPoolSize="524288" maxReceivedMessageSize="200000000"
+                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
+                    allowCookies="false">
+                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="200000000"
+                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
+                        enabled="false" />
+                    <security mode="Message">
+                        <transport clientCredentialType="Windows" proxyCredentialType="None"
+                            realm="" />
+                        <message clientCredentialType="UserName" negotiateServiceCredential="true"
+                            algorithmSuite="Default" />
+                    </security>
+                </binding>
+                <binding name="WSHttpBinding_IAuthenticationService" closeTimeout="00:01:00"
                     openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                     bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
@@ -31,4 +48,12 @@
                 </identity>
             </endpoint>
+            <endpoint address="http://localhost:8732/Design_Time_Addresses/OKB-3.3/AuthenticationService"
+                binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IAuthenticationService"
+                contract="HeuristicLab.Clients.OKB.IAuthenticationService"
+                name="WSHttpBinding_IAuthenticationService">
+                <identity>
+                    <certificate encodedValue="AwAAAAEAAAAUAAAAD/AlkYJw/OUhl6D/9w8mjJBh39kgAAAAAQAAAPIBAAAwggHuMIIBW6ADAgECAhAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQAwFDESMBAGA1UEAxMJbG9jYWxob3N0MB4XDTEwMDgyMDIyMzIwOFoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPkfCSLRX8/4F+Z4ys43yZ4MMzjB44cMakPz4Nri+mEB5n2z/0GFatCYzkI2f/nniWqVrBYjHkjsZy2EZioHu4wa99c1XEGJnFNDuNn6ESkfEyhyF4+OqKGnpK9HNrw7OWMuqn2oOh0iFd9fl6FTAm+Y0p3LP+38BuYzpCniqqdwIDAQABo0kwRzBFBgNVHQEEPjA8gBDvi8Rgio9v+mr58TiAvqF5oRYwFDESMBAGA1UEAxMJbG9jYWxob3N0ghAdEzTisaf2sEZxrqYZfYtCMAkGBSsOAwIdBQADgYEANdGlvHKeUptfNu9I0wgA5qjmVB+JDldOAkrfM0R+4IcVQ06y5K7P07uxQAV7+rhnDLgLyFJunUHgzbfjsjFy7vjwtoieXA5j0AYlm4AHR7dHt4HVgkIMYt8XOCqMw5jjFX91xJ89tC7mM9zYR48N9T5QSeMGo+f+JzybeLWxnNs=" />
+                </identity>
+            </endpoint>
         </client>
     </system.serviceModel>
