Index: stable/HeuristicLab.Data.Views/3.3/EnumValueView.Designer.cs
===================================================================
--- stable/HeuristicLab.Data.Views/3.3/EnumValueView.Designer.cs	(revision 12278)
+++ stable/HeuristicLab.Data.Views/3.3/EnumValueView.Designer.cs	(revision 12278)
@@ -0,0 +1,90 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Data.Views {
+  partial class EnumValueView<T> {
+    /// <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 && (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.valueLabel = new System.Windows.Forms.Label();
+      this.valueComboBox = new System.Windows.Forms.ComboBox();
+      this.SuspendLayout();
+      // 
+      // valueLabel
+      // 
+      this.valueLabel.AutoSize = true;
+      this.valueLabel.Location = new System.Drawing.Point(3, 3);
+      this.valueLabel.Name = "valueLabel";
+      this.valueLabel.Size = new System.Drawing.Size(56, 13);
+      this.valueLabel.TabIndex = 0;
+      this.valueLabel.Text = "&Value:";
+      // 
+      // valueComboBox
+      // 
+      this.valueComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.valueComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.valueComboBox.Enabled = false;
+      this.valueComboBox.FormattingEnabled = true;
+      this.valueComboBox.Location = new System.Drawing.Point(65, 0);
+      this.valueComboBox.Name = "valueComboBox";
+      this.valueComboBox.Size = new System.Drawing.Size(212, 21);
+      this.valueComboBox.TabIndex = 1;
+      this.valueComboBox.SelectedIndexChanged += new System.EventHandler(this.valueComboBox_SelectedIndexChanged);
+      // 
+      // EnumValueView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.valueComboBox);
+      this.Controls.Add(this.valueLabel);
+      this.Name = "EnumValueView";
+      this.Size = new System.Drawing.Size(277, 29);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label valueLabel;
+    private System.Windows.Forms.ComboBox valueComboBox;
+  }
+}
Index: stable/HeuristicLab.Data.Views/3.3/EnumValueView.cs
===================================================================
--- stable/HeuristicLab.Data.Views/3.3/EnumValueView.cs	(revision 12278)
+++ stable/HeuristicLab.Data.Views/3.3/EnumValueView.cs	(revision 12278)
@@ -0,0 +1,90 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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 HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.Data.Views {
+  [View("EnumValue View")]
+  [Content(typeof(EnumValue<>), true)]
+  public partial class EnumValueView<T> : ItemView where T : struct, IComparable {
+
+    public new EnumValue<T> Content {
+      get { return (EnumValue<T>)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public override bool ReadOnly {
+      get {
+        if ((Content != null) && Content.ReadOnly) return true;
+        return base.ReadOnly;
+      }
+      set { base.ReadOnly = value; }
+    }
+
+    public EnumValueView() {
+      InitializeComponent();
+      valueComboBox.DataSource = Enum.GetValues(typeof(T));
+      this.Name = typeof(T).Name + "EnumView";
+    }
+    public EnumValueView(EnumValue<T> content)
+      : this() {
+      Content = content;
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.ValueChanged -= new EventHandler(Content_ValueChanged);
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ValueChanged += new EventHandler(Content_ValueChanged);
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if (Content == null)
+        valueComboBox.Enabled = false;
+      else
+        valueComboBox.SelectedItem = Content.Value;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      if (Content == null) valueComboBox.Enabled = false;
+      else valueComboBox.Enabled = !ReadOnly;
+    }
+
+    private void Content_ValueChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Content_ValueChanged), sender, e);
+      else
+        valueComboBox.SelectedItem = Content.Value;
+    }
+
+    private void valueComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      if ((Content != null) && !Content.ReadOnly)
+        Content.Value = (T)valueComboBox.SelectedItem;
+    }
+  }
+}
Index: stable/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj
===================================================================
--- stable/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj	(revision 12277)
+++ stable/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj	(revision 12278)
@@ -133,4 +133,10 @@
       <DependentUpon>EnhancedStringConvertibleMatrixView.cs</DependentUpon>
     </Compile>
+    <Compile Include="EnumValueView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="EnumValueView.Designer.cs">
+      <DependentUpon>EnumValueView.cs</DependentUpon>
+    </Compile>
     <Compile Include="IntRangeView.cs">
       <SubType>UserControl</SubType>
Index: stable/HeuristicLab.Data/3.3/EnumValue.cs
===================================================================
--- stable/HeuristicLab.Data/3.3/EnumValue.cs	(revision 12278)
+++ stable/HeuristicLab.Data/3.3/EnumValue.cs	(revision 12278)
@@ -0,0 +1,66 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Drawing;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Data {
+  [Item("EnumValue", "An abstract base class for representing values of enum types.")]
+  [StorableClass]
+  public sealed class EnumValue<T> : ValueTypeValue<T>, IComparable<EnumValue<T>> where T : struct, IComparable {
+    public static new Image StaticItemImage {
+      get { return HeuristicLab.Common.Resources.VSImageLibrary.Enum; }
+    }
+
+    static EnumValue() {
+      if (!typeof(T).IsEnum)
+        throw new InvalidOperationException("Generic type " + typeof(T).Name + " is not an enum.");
+    }
+
+    public EnumValue() {
+      this.value = default(T);
+      this.readOnly = false;
+    }
+    public EnumValue(T value) {
+      this.value = value;
+      this.readOnly = false;
+    }
+
+    [StorableConstructor]
+    private EnumValue(bool deserializing) : base(deserializing) { }
+    private EnumValue(EnumValue<T> original, Cloner cloner)
+      : base(original, cloner) {
+      this.value = original.value;
+      this.readOnly = original.readOnly;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new EnumValue<T>(this, cloner);
+    }
+
+    public int CompareTo(EnumValue<T> other) {
+      return Value.CompareTo(other.Value);
+    }
+  }
+}
Index: stable/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj
===================================================================
--- stable/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj	(revision 12277)
+++ stable/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj	(revision 12278)
@@ -123,4 +123,5 @@
     <Compile Include="Comparison.cs" />
     <Compile Include="ComparisonType.cs" />
+    <Compile Include="EnumValue.cs" />
     <Compile Include="Path Types\DirectoryValue.cs" />
     <Compile Include="Path Types\FileValue.cs" />
