Index: trunk/sources/HeuristicLab.PluginInfrastructure.GUI/ManagerForm.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure.GUI/ManagerForm.cs	(revision 38)
+++ trunk/sources/HeuristicLab.PluginInfrastructure.GUI/ManagerForm.cs	(revision 91)
@@ -147,4 +147,8 @@
     private void publishButton_Click(object sender, EventArgs args) {
       PluginInfo plugin = ((PluginTag)pluginTreeView.SelectedNode.Tag).Plugin;
+      publishPlugin(plugin);
+    }
+
+    private void publishPlugin(PluginInfo plugin) {
       try {
         string packageFileName = plugin.Name + "-" + plugin.Version + ".zip";
@@ -165,5 +169,6 @@
         infoTextBox.Text += "Upload this file to your plugin source and add the following entry to" +
 " the file plugins.xml residing in the base directory of your plugin source.\n\n";
-        infoTextBox.Text += "  <Plugin Name=\"" + plugin.Name + "\" Version=\"" + plugin.Version + "\">\n";
+        infoTextBox.Text += "  <Plugin Name=\"" + plugin.Name + "\" Version=\""
+          + plugin.Version + "\" Build=\"" + plugin.BuildDate.ToUniversalTime().ToString(System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat) + "\">\n";
         foreach(PluginInfo dependency in plugin.Dependencies) {
           infoTextBox.Text += "    <Dependency Name=\"" + dependency.Name + "\" />\n";
@@ -251,5 +256,6 @@
         if(samePlugins.Count > 1) {
           samePlugins.ForEach(delegate(PluginDescription tag2) {
-            if(tag2.Version > mostRecentVersion.Version) {
+            if(tag2.Version > mostRecentVersion.Version || 
+              (tag2.Version == mostRecentVersion.Version && tag2.BuildDate>mostRecentVersion.BuildDate)) {
               mostRecentVersion = tag2;
             }
@@ -288,10 +294,11 @@
       allAvailablePlugins.ForEach(delegate(PluginDescription availablePlugin) {
         List<PluginTag> oldPlugins = allTags.FindAll(delegate(PluginTag currentPlugin) {
-          return currentPlugin.PluginName == availablePlugin.Name && 
-            (currentPlugin.State & (PluginState.Installed | PluginState.Disabled)) !=0;
+          return currentPlugin.PluginName == availablePlugin.Name &&
+            (currentPlugin.State & (PluginState.Installed | PluginState.Disabled)) != 0;
         });
 
         if(oldPlugins.Count == 1) {
-          if(oldPlugins[0].PluginVersion < availablePlugin.Version) {
+          if(oldPlugins[0].PluginVersion < availablePlugin.Version ||
+            (oldPlugins[0].PluginVersion == availablePlugin.Version && oldPlugins[0].PluginBuildDate<availablePlugin.BuildDate)) {
             upgrades.Add(availablePlugin);
           }
@@ -309,5 +316,6 @@
         });
 
-        if(currentPlugins.Count == 1 && currentPlugins[0].PluginVersion < availablePlugin.Version) {
+        if(currentPlugins.Count == 1 && (currentPlugins[0].PluginVersion < availablePlugin.Version ||
+          (currentPlugins[0].PluginVersion==availablePlugin.Version && currentPlugins[0].PluginBuildDate<availablePlugin.BuildDate))) {
           overrides.Add(availablePlugin);
         }
Index: trunk/sources/HeuristicLab.PluginInfrastructure.GUI/PluginDescription.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure.GUI/PluginDescription.cs	(revision 38)
+++ trunk/sources/HeuristicLab.PluginInfrastructure.GUI/PluginDescription.cs	(revision 91)
@@ -28,5 +28,4 @@
   class PluginDescription {
     private string name;
-
     public string Name {
       get { return name; }
@@ -34,8 +33,12 @@
     }
     private Version version;
-
     public Version Version {
       get { return version; }
       set { version = value; }
+    }
+    private DateTime buildDate;
+    public DateTime BuildDate {
+      get { return buildDate; }
+      set { buildDate = value; }
     }
 
@@ -50,8 +53,9 @@
     }
 
-    public PluginDescription(string name, Version version, PluginSource source) {
+    public PluginDescription(string name, Version version, DateTime buildDate, PluginSource source) {
       this.name = name;
       this.version = version;
       this.source = source;
+      this.buildDate = buildDate;
     }
   }
Index: trunk/sources/HeuristicLab.PluginInfrastructure.GUI/PluginSource.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure.GUI/PluginSource.cs	(revision 38)
+++ trunk/sources/HeuristicLab.PluginInfrastructure.GUI/PluginSource.cs	(revision 91)
@@ -77,5 +77,12 @@
         string version = child.Attributes["Version"].Value;
 
-        PluginDescription description = new PluginDescription(name, new Version(version), this);
+        DateTime buildDate;
+        if(child.Attributes["Build"] != null) {
+          string build = child.Attributes["Build"].Value;
+          DateTime.TryParse(build, System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat, System.Globalization.DateTimeStyles.AssumeUniversal, out buildDate);
+        } else {
+          buildDate = DateTime.MinValue;
+        }
+        PluginDescription description = new PluginDescription(name, new Version(version), buildDate, this);
         availablePlugins.Add(description);
 
Index: trunk/sources/HeuristicLab.PluginInfrastructure.GUI/PluginTag.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure.GUI/PluginTag.cs	(revision 38)
+++ trunk/sources/HeuristicLab.PluginInfrastructure.GUI/PluginTag.cs	(revision 91)
@@ -36,5 +36,4 @@
   class PluginTag {
     private PluginInfo plugin;
-
     public PluginInfo Plugin {
       get { return plugin; }
@@ -50,5 +49,4 @@
       }
     }
-
 
     private PluginDescription upgradePluginDescription;
@@ -74,4 +72,9 @@
       set { pluginVersion = value; }
     }
+    private DateTime pluginBuildDate;
+    public DateTime PluginBuildDate {
+      get { return pluginBuildDate; }
+      set { pluginBuildDate = value; }
+    }
 
     private string pluginDetails;
@@ -96,7 +99,7 @@
       this.state = state;
       this.allTags = allTags;
-
       this.pluginName = plugin.Name;
       this.pluginVersion = plugin.Version;
+      this.pluginBuildDate = plugin.BuildDate;
       this.message = plugin.Message;
       pluginDetails = GeneratePluginDetails(plugin);
@@ -108,8 +111,7 @@
       this.state = state;
       this.allTags = allTags;
-
       this.pluginName = plugin.Name;
       this.pluginVersion = plugin.Version;
-
+      this.pluginBuildDate = plugin.BuildDate;
       pluginDetails = GeneratePluginDetails(plugin);
       pluginDependencies = GeneratePluginDependencies(plugin);
@@ -132,5 +134,6 @@
       });
       return "Plugin: " + plugin.Name + "\n" +
-      "Version: " + plugin.Version + "\n\n" +
+      "Version: " + plugin.Version + "\n" +
+      "Build: " +plugin.BuildDate + "\n\n" +
       (dependencies.Length != 0 ? "Requires: \n" + dependencies + "\n" : "") +
       (dependents.Length != 0 ? "Used by:\n" + dependents + "\n" : "") +
@@ -146,4 +149,5 @@
       return "plugin: " + plugin.Name + "\n" +
       "Version: " + plugin.Version + "\n" +
+      "Build: "+plugin.BuildDate +"\n" +
       "Installed from: " + plugin.Source + "\n" +
       "Requires: \n" + dependencies;
@@ -156,5 +160,5 @@
       }
       return "plugin: " + upgrade.Name + "\n" +
-      "Current version: " + plugin.Version + " will be upgraded to new version: " + upgrade.Version + "\n"+
+      "Current version: " + plugin.Version + " ("+plugin.BuildDate+") will be upgraded to new version: " + upgrade.Version + " ("+upgrade.BuildDate+")\n"+
       "Upgraded from: " + upgrade.Source + "\n" +
       "Requires: \n" + dependencies;
@@ -163,9 +167,7 @@
     private List<string> GeneratePluginDependencies(PluginInfo plugin) {
       List<string> dependencies = new List<string>();
-
       plugin.Dependencies.ForEach(delegate(PluginInfo dependency) {
         dependencies.Add(dependency.Name);
       });
-
       return dependencies;
     }
