Index: /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/InstallationManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/InstallationManager.cs	(revision 2777)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/InstallationManager.cs	(revision 2778)
@@ -71,6 +71,9 @@
       builder.Append("Version: ").AppendLine(desc.Version.ToString());
       builder.AppendLine("Description:").AppendLine(desc.Description);
+      if (!string.IsNullOrEmpty(desc.ContactName)) {
+        builder.Append("Contact: ").Append(desc.ContactName).Append(", ").AppendLine(desc.ContactEmail);
+      }
       builder.AppendLine("This plugin is " + desc.PluginState.ToString().ToLowerInvariant() + ".");
-      builder.Append("Build date: ").AppendLine(desc.BuildDate.ToString()).AppendLine();
+      // builder.Append("Build date: ").AppendLine(desc.BuildDate.ToString()).AppendLine();
       builder.AppendLine("Files: ");
       foreach (var file in desc.Files) {
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/Attributes/ContactInformationAttribute.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/Attributes/ContactInformationAttribute.cs	(revision 2778)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/Attributes/ContactInformationAttribute.cs	(revision 2778)
@@ -0,0 +1,61 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.IO;
+
+namespace HeuristicLab.PluginInfrastructure {
+  /// <summary>
+  /// ContactInformationAttribute can be used to declare contact information (name, e-mail) for a plugin.
+  /// </summary>
+  [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
+  public sealed class ContactInformationAttribute : System.Attribute {
+    private string name;
+
+    /// <summary>
+    /// Gets the name of the contact person.
+    /// </summary>
+    public string Name {
+      get { return name; }
+    }
+
+    private string email;
+    /// <summary>
+    /// Gets the e-mail address of the contact person.
+    /// </summary>
+    public string EMail {
+      get { return email; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ContactInformationAttribute"/>.
+    /// <param name="name">Name of the contact person</param>
+    /// <param name="email">E-mail address of the person</param>
+    /// </summary>
+    public ContactInformationAttribute(string name, string email) {
+      if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(email)) throw new ArgumentException("Empty name or e-mail address.");
+      this.name = name;
+      this.email = email;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/HeuristicLab.PluginInfrastructure.csproj
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/HeuristicLab.PluginInfrastructure.csproj	(revision 2777)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/HeuristicLab.PluginInfrastructure.csproj	(revision 2778)
@@ -102,4 +102,5 @@
     <Compile Include="Attributes\ApplicationAttribute.cs" />
     <Compile Include="Attributes\AssemblyBuildDateAttribute.cs" />
+    <Compile Include="Attributes\ContactInformationAttribute.cs" />
     <Compile Include="Attributes\PluginAttribute.cs" />
     <Compile Include="Attributes\PluginDependencyAttribute.cs" />
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/Interfaces/IPluginDescription.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/Interfaces/IPluginDescription.cs	(revision 2777)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/Interfaces/IPluginDescription.cs	(revision 2778)
@@ -39,4 +39,5 @@
     /// Gets the build date of the plugin.
     /// </summary>
+    [Obsolete]
     DateTime BuildDate { get; }
     /// <summary>
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/Manager/PluginDescription.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/Manager/PluginDescription.cs	(revision 2777)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/Manager/PluginDescription.cs	(revision 2778)
@@ -69,4 +69,22 @@
       get { return buildDate; }
       internal set { buildDate = value; }
+    }
+
+    private string contactName;
+    /// <summary>
+    /// Gets or sets the name of the contact person for this plugin.
+    /// </summary>
+    internal string ContactName {
+      get { return contactName; }
+      set { contactName = value; }
+    }
+
+    private string contactEmail;
+    /// <summary>
+    /// Gets or sets the e-mail address of the contact person for this plugin.
+    /// </summary>
+    internal string ContactEmail {
+      get { return contactEmail; }
+      set { contactEmail = value; }
     }
 
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/Manager/PluginValidator.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/Manager/PluginValidator.cs	(revision 2777)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/Manager/PluginValidator.cs	(revision 2778)
@@ -262,5 +262,7 @@
 
       string pluginName, pluginDescription, pluginVersion;
+      string contactName, contactAddress;
       GetPluginMetaData(pluginType, out pluginName, out pluginDescription, out pluginVersion);
+      GetPluginContactMetaData(pluginType, out contactName, out contactAddress);
       var pluginFiles = GetPluginFilesMetaData(pluginType);
       var pluginDependencies = GetPluginDependencyMetaData(pluginType);
@@ -268,6 +270,6 @@
       // minimal sanity check of the attribute values
       if (!string.IsNullOrEmpty(pluginName) &&
-          pluginFiles.Count() > 0 &&                                 // at least on file
-          pluginFiles.Any(f => f.Type == PluginFileType.Assembly)) { // at least on assembly
+          pluginFiles.Count() > 0 &&                                 // at least one file
+          pluginFiles.Any(f => f.Type == PluginFileType.Assembly)) { // at least one assembly
         // create a temporary PluginDescription that contains the attribute values
         PluginDescription info = new PluginDescription();
@@ -275,4 +277,6 @@
         info.Description = pluginDescription;
         info.Version = new Version(pluginVersion);
+        info.ContactName = contactName;
+        info.ContactEmail = contactAddress;
         info.AddFiles(pluginFiles);
 
@@ -305,4 +309,19 @@
         }
         yield return new PluginDependency(name, version);
+      }
+    }
+
+    private static void GetPluginContactMetaData(Type pluginType, out string contactName, out string contactAddress) {
+      // get attribute of type ContactInformation if there is any
+      var contactInfoAttribute = (from attr in CustomAttributeData.GetCustomAttributes(pluginType)
+                                  where IsAttributeDataForType(attr, typeof(ContactInformationAttribute))
+                                  select attr).SingleOrDefault();
+
+      if (contactInfoAttribute != null) {
+        contactName = (string)contactInfoAttribute.ConstructorArguments[0].Value;
+        contactAddress = (string)contactInfoAttribute.ConstructorArguments[1].Value;
+      } else {
+        contactName = string.Empty;
+        contactAddress = string.Empty;
       }
     }
