Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.2/ContentView.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.2/ContentView.cs	(revision 3388)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.2/ContentView.cs	(revision 3389)
@@ -34,5 +34,5 @@
     public object Content {
       get { return content; }
-      protected set {
+      set {
         if ((value != null) && (!MainFormManager.ViewCanViewObject(this, value)))
           throw new ArgumentException(string.Format("View \"{0}\" cannot view object \"{1}\".", this.GetType().Name, value.GetType().Name));
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.2/ViewContextMenuStrip.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.2/ViewContextMenuStrip.cs	(revision 3388)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.2/ViewContextMenuStrip.cs	(revision 3389)
@@ -12,4 +12,5 @@
       InitializeComponent();
       this.menuItems = new Dictionary<Type, ToolStripMenuItem>();
+      this.ignoredViewTypes = new List<Type>();
     }
 
@@ -30,4 +31,10 @@
     }
 
+    private List<Type> ignoredViewTypes;
+    public IEnumerable<Type> IgnoredViewTypes {
+      get { return this.ignoredViewTypes; }
+      set { this.ignoredViewTypes = new List<Type>(value); RefreshMenuItems(); }
+    }
+
     private Dictionary<Type, ToolStripMenuItem> menuItems;
     public IEnumerable<KeyValuePair<Type, ToolStripMenuItem>> MenuItems {
@@ -42,5 +49,5 @@
         ToolStripMenuItem menuItem;
         IEnumerable<Type> types = MainFormManager.GetViewTypes(item.GetType(),true);
-        foreach (Type t in types) {
+        foreach (Type t in types.Except(IgnoredViewTypes)) {
           menuItem = new ToolStripMenuItem();
           menuItem.Tag = t;
Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.2/ViewHost.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.2/ViewHost.cs	(revision 3388)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.2/ViewHost.cs	(revision 3389)
@@ -27,15 +27,17 @@
 
 namespace HeuristicLab.MainForm.WindowsForms {
-  public sealed partial class ViewHost : View {
-    private Dictionary<Type, IView> cachedViews;
+  [Content(typeof(object))]
+  public sealed partial class ViewHost : ContentView {
+    private Dictionary<Type, IContentView> cachedViews;
     public ViewHost() {
       InitializeComponent();
-      cachedViews = new Dictionary<Type, IView>();
+      cachedViews = new Dictionary<Type, IContentView>();
       viewType = null;
       Content = null;
+      viewContextMenuStrip.IgnoredViewTypes = new List<Type>() { typeof(ViewHost) };
     }
-    public ViewHost(bool readOnly)
+    public ViewHost(object content)
       : this() {
-      this.ReadOnly = readOnly;
+      this.Content = content;
     }
 
@@ -54,17 +56,12 @@
     }
 
-    private object content;
-    public object Content {
-      get { return this.content; }
+    public new object Content {
+      get { return base.Content; }
       set {
-        if (value != this.content) {
-          if (value == null || this.content == null || value.GetType() != this.content.GetType())
-            cachedViews.Clear();
-          viewContextMenuStrip.Item = value;
-          this.viewsLabel.Enabled = value != null;
-          this.content = value;
-          this.OnContentChanged();
-        }
-
+        if (value == null || this.Content == null || value.GetType() != this.Content.GetType())
+          cachedViews.Clear();
+        viewContextMenuStrip.Item = value;
+        this.viewsLabel.Enabled = value != null;
+        base.Content = value;
       }
     }
@@ -82,9 +79,9 @@
     protected override void OnReadOnlyChanged() {
       base.OnReadOnlyChanged();
-      foreach (IView view in cachedViews.Values)
+      foreach (IContentView view in cachedViews.Values)
         view.ReadOnly = this.ReadOnly;
     }
 
-    private void OnContentChanged() {
+    protected override void OnContentChanged() {
       messageLabel.Visible = false;
       viewsLabel.Visible = false;
@@ -100,9 +97,14 @@
 
         if (!ViewCanShowContent(viewType, Content)) {
-          viewType = MainFormManager.GetDefaultViewType(Content.GetType());
+          ViewType = MainFormManager.GetDefaultViewType(Content.GetType());
           if ((viewType == null) && (viewContextMenuStrip.Items.Count > 0))  // create first available view if default view is not available
-            viewType = (Type)viewContextMenuStrip.Items[0].Tag;
+            ViewType = (Type)viewContextMenuStrip.Items[0].Tag;
         }
-        UpdateView();
+        foreach (IContentView view in cachedViews.Values)
+          view.Content = this.Content;
+      } else {
+        if (viewPanel.Controls.Count > 0) viewPanel.Controls[0].Dispose();
+        viewPanel.Controls.Clear();
+        cachedViews.Clear();
       }
     }
@@ -120,10 +122,10 @@
 
       UpdateActiveMenuItem();
-      IView view;
+      IContentView view;
       if (cachedViews.ContainsKey(ViewType))
         view = cachedViews[ViewType];
       else {
         view = MainFormManager.CreateView(viewType, Content, ReadOnly);
-        cachedViews.Add(viewType, ((IView)view));
+        cachedViews.Add(viewType, view);
       }
 
Index: /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IContentView.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IContentView.cs	(revision 3388)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IContentView.cs	(revision 3389)
@@ -27,5 +27,5 @@
 namespace HeuristicLab.MainForm {
   public interface IContentView : IView {
-    object Content { get; }
+    object Content { get; set; }
     bool SaveEnabled { get; }
   }
Index: /trunk/sources/HeuristicLab.MainForm/3.2/MainFormManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/MainFormManager.cs	(revision 3388)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/MainFormManager.cs	(revision 3389)
@@ -50,5 +50,5 @@
         MainFormManager.mainform = mainForm;
         IEnumerable<Type> types =
-          from t in ApplicationManager.Manager.GetTypes(typeof(IView))
+          from t in ApplicationManager.Manager.GetTypes(typeof(IContentView))
           where !t.IsAbstract && !t.IsInterface && ContentAttribute.HasContentAttribute(t)
           select t;
@@ -102,5 +102,5 @@
     }
 
-    public static bool ViewCanViewObject(IView view, object content) {
+    public static bool ViewCanViewObject(IContentView view, object content) {
       return ContentAttribute.CanViewType(view.GetType(), content.GetType());
     }
@@ -141,13 +141,13 @@
     }
 
-    public static IView CreateDefaultView(object content) {
+    public static IContentView CreateDefaultView(object content) {
       Type t = GetDefaultViewType(content.GetType());
       if (t == null)
         return null;
 
-      return (IView)Activator.CreateInstance(t, content);
-    }
-    public static IView CreateDefaultView(object content, bool readOnly) {
-      IView view = CreateDefaultView(content);
+      return (IContentView)Activator.CreateInstance(t, content);
+    }
+    public static IContentView CreateDefaultView(object content, bool readOnly) {
+      IContentView view = CreateDefaultView(content);
       if (view != null)
         view.ReadOnly = readOnly;
@@ -155,20 +155,20 @@
     }
 
-    public static IView CreateView(Type viewType) {
-      if (!typeof(IView).IsAssignableFrom(viewType))
+    public static IContentView CreateView(Type viewType) {
+      if (!typeof(IContentView).IsAssignableFrom(viewType))
         throw new ArgumentException("View can not be created becaues given type " + viewType.ToString() + " is not of type IView.");
       if (viewType.IsGenericTypeDefinition)
         throw new ArgumentException("View can not be created becaues given type " + viewType.ToString() + " is a generic type definition.");
 
-      return (IView)Activator.CreateInstance(viewType);
-    }
-    public static IView CreateView(Type viewType, bool readOnly) {
-      IView view = CreateView(viewType);
+      return (IContentView)Activator.CreateInstance(viewType);
+    }
+    public static IContentView CreateView(Type viewType, bool readOnly) {
+      IContentView view = CreateView(viewType);
       view.ReadOnly = readOnly;
       return view;
     }
 
-    public static IView CreateView(Type viewType, object content) {
-      if (!typeof(IView).IsAssignableFrom(viewType))
+    public static IContentView CreateView(Type viewType, object content) {
+      if (!typeof(IContentView).IsAssignableFrom(viewType))
         throw new ArgumentException("View can not be created becaues given type " + viewType.ToString() + " is not of type IView.");
       Type view = viewType;
@@ -176,8 +176,8 @@
         view = TransformGenericTypeDefinition(view, content.GetType());
 
-      return (IView)Activator.CreateInstance(view, content);
-    }
-    public static IView CreateView(Type viewType, object content, bool readOnly) {
-      IView view = CreateView(viewType, content);
+      return (IContentView)Activator.CreateInstance(view, content);
+    }
+    public static IContentView CreateView(Type viewType, object content, bool readOnly) {
+      IContentView view = CreateView(viewType, content);
       view.ReadOnly = readOnly;
       return view;
