Index: trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/DeploymentService/AdminClientFactory.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/DeploymentService/AdminClientFactory.cs	(revision 3763)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/DeploymentService/AdminClientFactory.cs	(revision 3771)
@@ -39,5 +39,5 @@
     /// </summary>
     static AdminClientFactory() {
-      var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("HeuristicLab.PluginInfrastructure.Advanced.DeploymentService.servdev.cer");
+      var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("HeuristicLab.PluginInfrastructure.Advanced.DeploymentService.services.heuristiclab.com.cer");
       serverCrtData = new byte[stream.Length];
       stream.Read(serverCrtData, 0, serverCrtData.Length);
@@ -58,6 +58,8 @@
       client.ClientCredentials.UserName.Password = HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocationPassword;
       client.Endpoint.Address = new EndpointAddress(HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocationAdministrationAddress);
-      client.ClientCredentials.ServiceCertificate.DefaultCertificate = new X509Certificate2(serverCrtData);
-      client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None;
+      client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.Custom;
+      client.ClientCredentials.ServiceCertificate.Authentication.CustomCertificateValidator =
+          new DeploymentServerCertificateValidator(new X509Certificate2(serverCrtData));
+
       return client;
     }
Index: trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/DeploymentService/DeploymentServerCertificateValidator.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/DeploymentService/DeploymentServerCertificateValidator.cs	(revision 3771)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/DeploymentService/DeploymentServerCertificateValidator.cs	(revision 3771)
@@ -0,0 +1,31 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Security.Cryptography.X509Certificates;
+using System.IdentityModel.Selectors;
+using System.IdentityModel.Tokens;
+
+namespace HeuristicLab.PluginInfrastructure.Advanced.DeploymentService {
+  internal class DeploymentServerCertificateValidator : X509CertificateValidator {
+    private X509Certificate2 allowedCertificate;
+    public DeploymentServerCertificateValidator(X509Certificate2 allowedCertificate) {
+      if (allowedCertificate == null) {
+        throw new ArgumentNullException("allowedCertificate");
+      }
+
+      this.allowedCertificate = allowedCertificate;
+    }
+    public override void Validate(X509Certificate2 certificate) {
+      // Check that there is a certificate.
+      if (certificate == null) {
+        throw new ArgumentNullException("certificate");
+      }
+
+      // Check that the certificate issuer matches the configured issuer
+      if (!allowedCertificate.Equals(certificate)) {
+        throw new SecurityTokenValidationException("Server certificate doesn't match.");
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/DeploymentService/RegenerateServiceClasses.cmd
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/DeploymentService/RegenerateServiceClasses.cmd	(revision 3763)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/DeploymentService/RegenerateServiceClasses.cmd	(revision 3771)
@@ -1,2 +1,2 @@
 ﻿#
-svcutil http://servdev.heuristiclab.com/Deployment-3.3/Update.svc/mex http://servdev.heuristiclab.com/Deployment-3.3/Admin.svc/mex  /language:C# /targetClientVersion:Version35 /out:DeploymentService /namespace:*,HeuristicLab.PluginInfrastructure.Advanced.DeploymentService /mergeConfig /config:../../app.config
+svcutil http://services.heuristiclab.com/Deployment-3.3/Update.svc/mex http://services.heuristiclab.com/Deployment-3.3/Admin.svc/mex  /language:C# /targetClientVersion:Version35 /out:DeploymentService /namespace:*,HeuristicLab.PluginInfrastructure.Advanced.DeploymentService /mergeConfig /config:../../app.config
Index: trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/DeploymentService/UpdateClientFactory.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/DeploymentService/UpdateClientFactory.cs	(revision 3763)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/DeploymentService/UpdateClientFactory.cs	(revision 3771)
@@ -39,5 +39,5 @@
     /// </summary>
     static UpdateClientFactory() {
-      var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("HeuristicLab.PluginInfrastructure.Advanced.DeploymentService.servdev.cer");
+      var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("HeuristicLab.PluginInfrastructure.Advanced.DeploymentService.services.heuristiclab.com.cer");
       serverCrtData = new byte[stream.Length];
       stream.Read(serverCrtData, 0, serverCrtData.Length);
@@ -58,6 +58,7 @@
       client.ClientCredentials.UserName.Password = HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocationPassword;
       client.Endpoint.Address = new EndpointAddress(HeuristicLab.PluginInfrastructure.Properties.Settings.Default.UpdateLocation);
-      client.ClientCredentials.ServiceCertificate.DefaultCertificate = new X509Certificate2(serverCrtData);
-      client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None;
+      client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.Custom;
+      client.ClientCredentials.ServiceCertificate.Authentication.CustomCertificateValidator =
+          new DeploymentServerCertificateValidator(new X509Certificate2(serverCrtData));
       return client;
     }
Index: trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/EditProductsView.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/EditProductsView.cs	(revision 3763)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/EditProductsView.cs	(revision 3771)
@@ -139,5 +139,9 @@
       try {
         foreach (var product in products) {
-          adminClient.DeployProduct(product);
+          // only upload necessary data (product name and version, and for each plugin only plugin name and version)
+          var lightWeightProduct = new DeploymentService.ProductDescription(product.Name, product.Version);
+          lightWeightProduct.Plugins = (from plugin in product.Plugins
+                                        select new DeploymentService.PluginDescription(plugin.Name, plugin.Version)).ToArray();
+          adminClient.DeployProduct(lightWeightProduct);
         }
         adminClient.Close();
