Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.2/ViewContextMenuStrip.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.2/ViewContextMenuStrip.Designer.cs	(revision 2836)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.2/ViewContextMenuStrip.Designer.cs	(revision 2837)
@@ -28,7 +28,5 @@
       // ViewContextMenuStrip
       // 
-      this.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.ViewContextMenuStrip_ItemClicked);
       this.ResumeLayout(false);
-
     }
 
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.2/ViewContextMenuStrip.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.2/ViewContextMenuStrip.cs	(revision 2836)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.2/ViewContextMenuStrip.cs	(revision 2837)
@@ -8,34 +8,48 @@
 
 namespace HeuristicLab.MainForm.WindowsForms {
-  public partial class ViewContextMenuStrip : ContextMenuStrip {
-    private object item;
+  public sealed partial class ViewContextMenuStrip : ContextMenuStrip {
     public ViewContextMenuStrip() {
       InitializeComponent();
+      this.menuItems = new Dictionary<Type, ToolStripMenuItem>();
     }
 
-    public ViewContextMenuStrip(object item) :this() {
-      if (item != null) {
-        this.item = item;
-        IEnumerable<Type> types = MainFormManager.GetViewTypes(item.GetType());
-        if (types != null) {
-          foreach (Type t in types) {
-            ToolStripMenuItem menuItem = new ToolStripMenuItem() {
-              Text = t.Name,
-              Tag = t
-            };
-            this.Items.Add(menuItem);
-          }
+    public ViewContextMenuStrip(object item)
+      : this() {
+      this.Item = item;
+    }
+
+    private object item;
+    public object Item {
+      get { return this.item; }
+      set {
+        if (this.item != value) {
+          this.item = value;
+          this.RefreshMenuItems();
         }
       }
     }
 
-    private void ViewContextMenuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e) {
-      if (item != null) {
-        Type viewType = e.ClickedItem.Tag as Type;
-        IView view = MainFormManager.CreateView(viewType, this.item);
-        view.Show();
+    private Dictionary<Type, ToolStripMenuItem> menuItems;
+    public IEnumerable<KeyValuePair<Type, ToolStripMenuItem>> MenuItems {
+      get { return this.menuItems; }
+    }
+
+    private void RefreshMenuItems() {
+      this.Items.Clear();
+      this.menuItems.Clear();
+
+      if (this.item != null) {
+        ToolStripMenuItem menuItem;
+        IEnumerable<Type> types = MainFormManager.GetViewTypes(item.GetType());
+        foreach (Type t in types) {
+          menuItem = new ToolStripMenuItem();
+          menuItem.Tag = t;
+          menuItem.Text = ViewAttribute.GetViewName(t);
+
+          this.menuItems.Add(t, menuItem);
+          this.Items.Add(menuItem);
+        }
       }
     }
-
   }
 }
Index: /trunk/sources/HeuristicLab.MainForm/3.2/HeuristicLab.MainForm-3.2.csproj
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/HeuristicLab.MainForm-3.2.csproj	(revision 2836)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/HeuristicLab.MainForm-3.2.csproj	(revision 2837)
@@ -82,4 +82,5 @@
   <ItemGroup>
     <None Include="HeuristicLabMainFormPlugin.cs.frame" />
+    <Compile Include="ViewAttribute.cs" />
     <Compile Include="Interfaces\IContentView.cs" />
     <Compile Include="Interfaces\IActionUserInterfaceItem.cs" />
Index: /trunk/sources/HeuristicLab.MainForm/3.2/ViewAttribute.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/ViewAttribute.cs	(revision 2837)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/ViewAttribute.cs	(revision 2837)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Linq;
+using System.Text;
+using System.Reflection;
+
+namespace HeuristicLab.MainForm {
+  [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
+  public sealed class ViewAttribute : Attribute {
+    public ViewAttribute(string name) {
+      this.name = name;
+    }
+
+    private string name;
+    public string Name {
+      get { return this.name; }
+      set { this.name = value; }
+    }
+
+    public static bool HasViewAttribute(MemberInfo viewType) {
+      ViewAttribute[] attributes = (ViewAttribute[])viewType.GetCustomAttributes(typeof(ViewAttribute), false);
+      return attributes.Length != 0;
+    }
+
+    public static string GetViewName(MemberInfo viewType) {
+      ViewAttribute[] attributes = (ViewAttribute[])viewType.GetCustomAttributes(typeof(ViewAttribute), false);
+      if (attributes.Length == 1)
+        return attributes[0].Name;
+      return viewType.Name;
+    }
+  }
+}
