Index: trunk/sources/HeuristicLab.PluginInfrastructure/3.3/ErrorHandling/FrameworkVersionErrorDialog.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/3.3/ErrorHandling/FrameworkVersionErrorDialog.Designer.cs	(revision 7967)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/3.3/ErrorHandling/FrameworkVersionErrorDialog.Designer.cs	(revision 8632)
@@ -49,15 +49,16 @@
       this.linkLabel = new System.Windows.Forms.LinkLabel();
       this.label = new System.Windows.Forms.Label();
+      this.linkLabelMono = new System.Windows.Forms.LinkLabel();
       this.SuspendLayout();
       // 
       // iconLabel
       // 
-      this.iconLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)));
+      this.iconLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left)));
       this.iconLabel.Image = global::HeuristicLab.PluginInfrastructure.Resources.Error;
       this.iconLabel.ImageAlign = System.Drawing.ContentAlignment.TopLeft;
       this.iconLabel.Location = new System.Drawing.Point(12, 9);
       this.iconLabel.Name = "iconLabel";
-      this.iconLabel.Size = new System.Drawing.Size(50, 98);
+      this.iconLabel.Size = new System.Drawing.Size(50, 121);
       this.iconLabel.TabIndex = 0;
       // 
@@ -66,5 +67,5 @@
       this.closeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
       this.closeButton.DialogResult = System.Windows.Forms.DialogResult.OK;
-      this.closeButton.Location = new System.Drawing.Point(294, 81);
+      this.closeButton.Location = new System.Drawing.Point(294, 104);
       this.closeButton.Name = "closeButton";
       this.closeButton.Size = new System.Drawing.Size(75, 23);
@@ -76,10 +77,10 @@
       // linkLabel
       // 
-      this.linkLabel.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.linkLabel.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.linkLabel.Location = new System.Drawing.Point(68, 52);
       this.linkLabel.Name = "linkLabel";
-      this.linkLabel.Size = new System.Drawing.Size(301, 26);
+      this.linkLabel.Size = new System.Drawing.Size(301, 49);
       this.linkLabel.TabIndex = 2;
       this.linkLabel.TabStop = true;
@@ -89,20 +90,33 @@
       // label
       // 
-      this.label.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.label.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
       this.label.Location = new System.Drawing.Point(68, 9);
       this.label.Name = "label";
       this.label.Size = new System.Drawing.Size(301, 43);
       this.label.TabIndex = 1;
-      this.label.Text = "The Microsoft .NET Framework 4 (Full Profile) is not properly installed on your s" +
-          "ystem. Please download and install it.";
+      this.label.Text = "To run HeuristicLab you need at least the Microsoft .NET Framework 4 (Full Profil" +
+    "e) or Mono version 2.11.4 or higher. Please download and install it.";
+      // 
+      // linkLabelMono
+      // 
+      this.linkLabelMono.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.linkLabelMono.Location = new System.Drawing.Point(68, 72);
+      this.linkLabelMono.Name = "linkLabelMono";
+      this.linkLabelMono.Size = new System.Drawing.Size(301, 16);
+      this.linkLabelMono.TabIndex = 4;
+      this.linkLabelMono.TabStop = true;
+      this.linkLabelMono.Text = "Download Mono";
+      this.linkLabelMono.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelMono_LinkClicked);
       // 
       // FrameworkVersionErrorDialog
       // 
       this.AcceptButton = this.closeButton;
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
       this.CancelButton = this.closeButton;
-      this.ClientSize = new System.Drawing.Size(381, 116);
+      this.ClientSize = new System.Drawing.Size(381, 139);
+      this.Controls.Add(this.linkLabelMono);
       this.Controls.Add(this.label);
       this.Controls.Add(this.linkLabel);
@@ -127,4 +141,5 @@
     private System.Windows.Forms.LinkLabel linkLabel;
     private System.Windows.Forms.Label label;
+    private System.Windows.Forms.LinkLabel linkLabelMono;
   }
 }
Index: trunk/sources/HeuristicLab.PluginInfrastructure/3.3/ErrorHandling/FrameworkVersionErrorDialog.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/3.3/ErrorHandling/FrameworkVersionErrorDialog.cs	(revision 7967)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/3.3/ErrorHandling/FrameworkVersionErrorDialog.cs	(revision 8632)
@@ -8,17 +8,18 @@
  * 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/>.
-	 */
+   * (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.Reflection;
 using System.Windows.Forms;
 
@@ -26,5 +27,52 @@
   public partial class FrameworkVersionErrorDialog : Form {
     public static bool NET4FullProfileInstalled {
-      get { return Microsoft.Win32.Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full") != null; }
+      get {
+        try {
+          return Microsoft.Win32.Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full") != null;
+        }
+        catch (System.Security.SecurityException) {
+          return false;
+        }
+      }
+    }
+
+    public static bool MonoInstalled {
+      get { return Type.GetType("Mono.Runtime") != null; }
+    }
+
+    public static bool MonoCorrectVersionInstalled {
+      get {
+        var version = MonoVersion;
+
+        //we need at least mono version 2.11.4
+        if (version != null && version.Major >= 2 && version.Minor >= 11 && version.Build >= 4) {
+          return true;
+        } else {
+          return false;
+        }
+      }
+    }
+
+    public static Version MonoVersion {
+      get {
+        Type type = Type.GetType("Mono.Runtime");
+        if (type != null) {
+          MethodInfo dispalayName = type.GetMethod("GetDisplayName", BindingFlags.NonPublic | BindingFlags.Static);
+          if (dispalayName != null) {
+            string versionString = dispalayName.Invoke(null, null) as string;
+            if (versionString != null) {
+              // the version string looks something like: 2.11.4 (master/99d5e54 Thu Sep  6 15:55:44 CEST 2012)
+              var subVerStrings = versionString.Split(' ');
+              if (subVerStrings.Length > 0) {
+                try {
+                  return Version.Parse(subVerStrings[0]);
+                }
+                catch { }
+              }
+            }
+          }
+        }
+        return null;
+      }
     }
 
@@ -44,4 +92,12 @@
       Application.Exit();
     }
+
+    private void linkLabelMono_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) {
+      try {
+        System.Diagnostics.Process.Start("http://www.mono-project.org");
+        linkLabelMono.LinkVisited = true;
+      }
+      catch (Exception) { }
+    }
   }
 }
