Index: branches/crossvalidation-2434/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewHost.Designer.cs
===================================================================
--- branches/crossvalidation-2434/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewHost.Designer.cs	(revision 13401)
+++ branches/crossvalidation-2434/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewHost.Designer.cs	(revision 14029)
@@ -129,5 +129,5 @@
     #endregion
 
-    private System.Windows.Forms.Label viewsLabel;
+    protected System.Windows.Forms.Label viewsLabel;
     private System.Windows.Forms.Label messageLabel;
     private System.Windows.Forms.ToolTip toolTip;
Index: branches/crossvalidation-2434/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewHost.cs
===================================================================
--- branches/crossvalidation-2434/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewHost.cs	(revision 13401)
+++ branches/crossvalidation-2434/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewHost.cs	(revision 14029)
@@ -29,5 +29,5 @@
 namespace HeuristicLab.MainForm.WindowsForms {
   [Content(typeof(IContent))]
-  public sealed partial class ViewHost : AsynchronousContentView {
+  public partial class ViewHost : AsynchronousContentView {
     public ViewHost() {
       InitializeComponent();
@@ -93,8 +93,5 @@
             if (view != null) {
               view.Visible = true;
-              if (ViewsLabelVisible) {
-                view.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right;
-                view.Size = new Size(Width - this.viewsLabel.Width - this.viewsLabel.Margin.Left - this.viewsLabel.Margin.Right, this.Height);
-              } else view.Dock = DockStyle.Fill;
+              ConfigureViewLayout(view);
               if (!Controls.Contains((view))) Controls.Add(view);
               view.OnShown(new ViewShownEventArgs(view, false));
@@ -108,4 +105,11 @@
         }
       }
+    }
+
+    protected virtual void ConfigureViewLayout(View view) {
+      if (ViewsLabelVisible) {
+        view.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right;
+        view.Size = new Size(Width - viewsLabel.Width - viewsLabel.Margin.Left - viewsLabel.Margin.Right, Height);
+      } else view.Dock = DockStyle.Fill;
     }
 
Index: branches/crossvalidation-2434/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DockForm.Designer.cs
===================================================================
--- branches/crossvalidation-2434/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DockForm.Designer.cs	(revision 13401)
+++ branches/crossvalidation-2434/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DockForm.Designer.cs	(revision 14029)
@@ -34,13 +34,21 @@
     /// </summary>
     private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
       System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DockForm));
       this.viewPanel = new System.Windows.Forms.Panel();
+      this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+      this.closeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.closeAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.closeAllButThisToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
+      this.cloneToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.contextMenuStrip.SuspendLayout();
       this.SuspendLayout();
       // 
       // viewPanel
       // 
-      this.viewPanel.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.viewPanel.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.viewPanel.Location = new System.Drawing.Point(12, 12);
       this.viewPanel.Name = "viewPanel";
@@ -48,7 +56,51 @@
       this.viewPanel.TabIndex = 0;
       // 
+      // contextMenuStrip
+      // 
+      this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.closeToolStripMenuItem,
+            this.closeAllToolStripMenuItem,
+            this.closeAllButThisToolStripMenuItem,
+            this.toolStripSeparator1,
+            this.cloneToolStripMenuItem});
+      this.contextMenuStrip.Name = "contextMenuStrip";
+      this.contextMenuStrip.Size = new System.Drawing.Size(167, 120);
+      this.contextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip_Opening);
+      // 
+      // closeToolStripMenuItem
+      // 
+      this.closeToolStripMenuItem.Name = "closeToolStripMenuItem";
+      this.closeToolStripMenuItem.Size = new System.Drawing.Size(166, 22);
+      this.closeToolStripMenuItem.Text = "Close";
+      this.closeToolStripMenuItem.Click += new System.EventHandler(this.closeToolStripMenuItem_Click);
+      // 
+      // closeAllToolStripMenuItem
+      // 
+      this.closeAllToolStripMenuItem.Name = "closeAllToolStripMenuItem";
+      this.closeAllToolStripMenuItem.Size = new System.Drawing.Size(166, 22);
+      this.closeAllToolStripMenuItem.Text = "Close All";
+      this.closeAllToolStripMenuItem.Click += new System.EventHandler(this.closeAllToolStripMenuItem_Click);
+      // 
+      // closeAllButThisToolStripMenuItem
+      // 
+      this.closeAllButThisToolStripMenuItem.Name = "closeAllButThisToolStripMenuItem";
+      this.closeAllButThisToolStripMenuItem.Size = new System.Drawing.Size(166, 22);
+      this.closeAllButThisToolStripMenuItem.Text = "Close All But This";
+      this.closeAllButThisToolStripMenuItem.Click += new System.EventHandler(this.closeAllButThisToolStripMenuItem_Click);
+      // 
+      // toolStripSeparator1
+      // 
+      this.toolStripSeparator1.Name = "toolStripSeparator1";
+      this.toolStripSeparator1.Size = new System.Drawing.Size(163, 6);
+      // 
+      // cloneToolStripMenuItem
+      // 
+      this.cloneToolStripMenuItem.Name = "cloneToolStripMenuItem";
+      this.cloneToolStripMenuItem.Size = new System.Drawing.Size(166, 22);
+      this.cloneToolStripMenuItem.Text = "Create Copy";
+      this.cloneToolStripMenuItem.Click += new System.EventHandler(this.cloneToolStripMenuItem_Click);
+      // 
       // DockForm
       // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
       this.ClientSize = new System.Drawing.Size(632, 446);
@@ -59,5 +111,8 @@
       this.ShowInTaskbar = false;
       this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.TabPageContextMenuStrip = this.contextMenuStrip;
+      this.contextMenuStrip.ResumeLayout(false);
       this.ResumeLayout(false);
+
     }
 
@@ -65,4 +120,10 @@
 
     private System.Windows.Forms.Panel viewPanel;
+    private System.Windows.Forms.ContextMenuStrip contextMenuStrip;
+    private System.Windows.Forms.ToolStripMenuItem closeToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem closeAllToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem closeAllButThisToolStripMenuItem;
+    private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
+    private System.Windows.Forms.ToolStripMenuItem cloneToolStripMenuItem;
   }
 }
Index: branches/crossvalidation-2434/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DockForm.cs
===================================================================
--- branches/crossvalidation-2434/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DockForm.cs	(revision 13401)
+++ branches/crossvalidation-2434/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DockForm.cs	(revision 14029)
@@ -21,5 +21,8 @@
 
 using System;
+using System.Collections.Generic;
+using System.Linq;
 using System.Windows.Forms;
+using HeuristicLab.Common;
 using WeifenLuo.WinFormsUI.Docking;
 
@@ -29,7 +32,9 @@
   /// </summary>
   internal partial class DockForm : DockContent {
-    public DockForm(IView view) {
+    public DockForm(IView view, bool allowContextMenu) {
       InitializeComponent();
       this.view = view;
+      this.allowContextMenu = allowContextMenu;
+
       if (view != null) {
         if (view is UserControl) {
@@ -87,4 +92,5 @@
       get { return this.view; }
     }
+    private readonly bool allowContextMenu;
 
     private void UpdateText() {
@@ -111,4 +117,52 @@
     }
     #endregion
+
+    #region Context Menu Events
+    private void contextMenuStrip_Opening(object sender, System.ComponentModel.CancelEventArgs e) {
+      if (!allowContextMenu) {
+        e.Cancel = true;
+        return;
+      }
+
+      var contentView = View as IContentView;
+      var content = contentView != null ? contentView.Content : null;
+
+      cloneToolStripMenuItem.Enabled = contentView != null && !contentView.Locked && content is IDeepCloneable;
+    }
+
+    private void closeToolStripMenuItem_Click(object sender, EventArgs e) {
+      Close();
+    }
+    private void closeAllToolStripMenuItem_Click(object sender, EventArgs e) {
+      foreach (var dockForm in CurrentDockForms) {
+        dockForm.Close();
+      }
+    }
+    private void closeAllButThisToolStripMenuItem_Click(object sender, EventArgs e) {
+      foreach (var dockForm in CurrentDockForms.Except(this.ToEnumerable())) {
+        dockForm.Close();
+      }
+    }
+    private IEnumerable<DockForm> CurrentDockForms {
+      get {
+        var dockForms = Pane.Contents.OfType<DockForm>().Where(c => c.Pane == Pane); // Pane.Contents contains DockForms that are not placed on that pane
+        return dockForms.ToList(); // .ToList() necessary because closing a DockForm removes it from the Content collection
+      }
+    }
+
+    private void cloneToolStripMenuItem_Click(object sender, EventArgs e) {
+      var contentView = View as IContentView;
+      if (contentView == null) return;
+
+      var cloneable = contentView.Content as IDeepCloneable;
+      if (cloneable == null) return;
+
+      var clone = (IContent)cloneable.Clone();
+
+      var viewHost = contentView as ViewHost;
+      var newView = viewHost != null ? viewHost.ViewType : contentView.GetType();
+      MainFormManager.MainForm.ShowContent(clone, newView);
+    }
+    #endregion
   }
 }
Index: branches/crossvalidation-2434/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DockingMainForm.cs
===================================================================
--- branches/crossvalidation-2434/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DockingMainForm.cs	(revision 13401)
+++ branches/crossvalidation-2434/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/DockingMainForm.cs	(revision 14029)
@@ -25,11 +25,16 @@
 namespace HeuristicLab.MainForm.WindowsForms {
   public partial class DockingMainForm : MainForm {
+
+    public bool AllowContexMenu { get; set; }
+
     public DockingMainForm()
       : base() {
       InitializeComponent();
+      AllowContexMenu = true;
     }
     public DockingMainForm(Type userInterfaceItemType)
       : base(userInterfaceItemType) {
       InitializeComponent();
+      AllowContexMenu = true;
     }
     public DockingMainForm(Type userInterfaceItemType, bool showContentInViewHost)
@@ -60,5 +65,5 @@
 
     protected override Form CreateForm(IView view) {
-      return new DockForm(view);
+      return new DockForm(view, AllowContexMenu);
     }
 
Index: branches/crossvalidation-2434/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.cs
===================================================================
--- branches/crossvalidation-2434/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.cs	(revision 13401)
+++ branches/crossvalidation-2434/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.cs	(revision 14029)
@@ -214,5 +214,5 @@
     }
 
-    internal Form GetForm(IView view) {
+    protected internal Form GetForm(IView view) {
       if (views.ContainsKey(view))
         return views[view];
@@ -456,35 +456,40 @@
     #region create menu and toolbar
     private void CreateGUI() {
-      IEnumerable<object> allUserInterfaceItems = ApplicationManager.Manager.GetInstances(userInterfaceItemType);
-
-      IEnumerable<IPositionableUserInterfaceItem> toolStripMenuItems =
-        from mi in allUserInterfaceItems
-        where (mi is IPositionableUserInterfaceItem) &&
-              (mi is IMenuItem || mi is IMenuSeparatorItem)
-        orderby ((IPositionableUserInterfaceItem)mi).Position
-        select (IPositionableUserInterfaceItem)mi;
-
-      foreach (IPositionableUserInterfaceItem menuItem in toolStripMenuItems) {
-        if (menuItem is IMenuItem)
-          AddToolStripMenuItem((IMenuItem)menuItem);
-        else if (menuItem is IMenuSeparatorItem)
-          AddToolStripMenuItem((IMenuSeparatorItem)menuItem);
-      }
-
-      IEnumerable<IPositionableUserInterfaceItem> toolStripButtonItems =
-        from bi in allUserInterfaceItems
-        where (bi is IPositionableUserInterfaceItem) &&
-              (bi is IToolBarItem || bi is IToolBarSeparatorItem)
-        orderby ((IPositionableUserInterfaceItem)bi).Position
-        select (IPositionableUserInterfaceItem)bi;
-
-      foreach (IPositionableUserInterfaceItem toolStripButtonItem in toolStripButtonItems) {
-        if (toolStripButtonItem is IToolBarItem)
-          AddToolStripButtonItem((IToolBarItem)toolStripButtonItem);
-        else if (toolStripButtonItem is IToolBarSeparatorItem)
-          AddToolStripButtonItem((IToolBarSeparatorItem)toolStripButtonItem);
-      }
-
+      if (userInterfaceItemType != null) {
+        IEnumerable<object> allUserInterfaceItems = ApplicationManager.Manager.GetInstances(userInterfaceItemType);
+
+        IEnumerable<IPositionableUserInterfaceItem> toolStripMenuItems =
+          from mi in allUserInterfaceItems
+          where (mi is IPositionableUserInterfaceItem) &&
+                (mi is IMenuItem || mi is IMenuSeparatorItem)
+          orderby ((IPositionableUserInterfaceItem)mi).Position
+          select (IPositionableUserInterfaceItem)mi;
+
+        foreach (IPositionableUserInterfaceItem menuItem in toolStripMenuItems) {
+          if (menuItem is IMenuItem)
+            AddToolStripMenuItem((IMenuItem)menuItem);
+          else if (menuItem is IMenuSeparatorItem)
+            AddToolStripMenuItem((IMenuSeparatorItem)menuItem);
+        }
+
+        IEnumerable<IPositionableUserInterfaceItem> toolStripButtonItems =
+          from bi in allUserInterfaceItems
+          where (bi is IPositionableUserInterfaceItem) &&
+                (bi is IToolBarItem || bi is IToolBarSeparatorItem)
+          orderby ((IPositionableUserInterfaceItem)bi).Position
+          select (IPositionableUserInterfaceItem)bi;
+
+        foreach (IPositionableUserInterfaceItem toolStripButtonItem in toolStripButtonItems) {
+          if (toolStripButtonItem is IToolBarItem)
+            AddToolStripButtonItem((IToolBarItem)toolStripButtonItem);
+          else if (toolStripButtonItem is IToolBarSeparatorItem)
+            AddToolStripButtonItem((IToolBarSeparatorItem)toolStripButtonItem);
+        }
+
+      }
       this.AdditionalCreationOfGuiElements();
+
+      if (menuStrip.Items.Count == 0) menuStrip.Visible = false;
+      if (toolStrip.Items.Count == 0) toolStrip.Visible = false;
     }
 
@@ -555,5 +560,6 @@
       try {
         ((IActionUserInterfaceItem)item.Tag).Execute();
-      } catch (Exception ex) {
+      }
+      catch (Exception ex) {
         ErrorHandling.ShowErrorDialog((Control)MainFormManager.MainForm, ex);
       }
Index: branches/crossvalidation-2434/HeuristicLab.MainForm.WindowsForms/3.3/Plugin.cs.frame
===================================================================
--- branches/crossvalidation-2434/HeuristicLab.MainForm.WindowsForms/3.3/Plugin.cs.frame	(revision 13401)
+++ branches/crossvalidation-2434/HeuristicLab.MainForm.WindowsForms/3.3/Plugin.cs.frame	(revision 14029)
@@ -26,5 +26,5 @@
 
 namespace HeuristicLab.MainForm.WindowsForms {
-  [Plugin("HeuristicLab.MainForm.WindowsForms", "3.3.12.$WCREV$")]
+  [Plugin("HeuristicLab.MainForm.WindowsForms", "3.3.13.$WCREV$")]
   [PluginFile("HeuristicLab.MainForm.WindowsForms-3.3.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.Common", "3.3")]
Index: branches/crossvalidation-2434/HeuristicLab.MainForm.WindowsForms/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/crossvalidation-2434/HeuristicLab.MainForm.WindowsForms/3.3/Properties/AssemblyInfo.cs.frame	(revision 13401)
+++ branches/crossvalidation-2434/HeuristicLab.MainForm.WindowsForms/3.3/Properties/AssemblyInfo.cs.frame	(revision 14029)
@@ -54,3 +54,3 @@
 // by using the '*' as shown below:
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.12.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.13.$WCREV$")]
