Index: branches/Breadcrumbs/HeuristicLab.MainForm.WindowsForms/3.3/Controls/BreadcrumbControl.cs
===================================================================
--- branches/Breadcrumbs/HeuristicLab.MainForm.WindowsForms/3.3/Controls/BreadcrumbControl.cs	(revision 10089)
+++ branches/Breadcrumbs/HeuristicLab.MainForm.WindowsForms/3.3/Controls/BreadcrumbControl.cs	(revision 10093)
@@ -66,5 +66,5 @@
             Tag = bc
           };
-          label.Click += label_Click;
+          ((LinkLabel)label).LinkClicked += label_LinkClicked;
         }
         labels.Add(label);
@@ -93,5 +93,5 @@
       if (!labels.Any()) return;
       var curLoc = new Point(3, 0);
-      var ellipsis = new Label {
+      var ellipsis = new LinkLabel {
         Location = curLoc,
         AutoSize = true,
@@ -113,4 +113,6 @@
       if (i == labels.Count - 1) return;
       i += 1 + i % 2;
+      ellipsis.Tag = breadcrumbs.ElementAt(i / 2);
+      ellipsis.LinkClicked += label_LinkClicked;
       while (i < labels.Count) {
         var l = labels[i++];
@@ -121,27 +123,18 @@
     }
 
-    private void label_Click(object sender, EventArgs e) {
+    private void label_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) {
       var label = (LinkLabel)sender;
       var content = (IContent)label.Tag;
-      int crumbCount = breadcrumbs.Count;
-      while (breadcrumbs.Any()) {
-        var item = breadcrumbs.Last.Value;
-        if (item == content) break;
+      while (breadcrumbs.Any() && breadcrumbs.Last.Value != content)
         breadcrumbs.RemoveLast();
-      }
-      var targetViewHost = ViewHost;
-      if (crumbCount - breadcrumbs.Count > 0) {
-        for (var parent = Parent; parent != null; parent = parent.Parent) {
-          var vh = parent as ViewHost;
-          if (vh != null) targetViewHost = vh;
-        }
-      }
-      bool showBreadcrumbs = targetViewHost.ShowBreadcrumbs;
-      targetViewHost.Content = null;
+      var mainForm = MainFormManager.GetMainForm<MainForm>();
+      var outermostViewHost = mainForm.GetOutermostViewOfType<ViewHost>(ViewHost);
+      bool showBreadcrumbs = outermostViewHost.ShowBreadcrumbs;
+      outermostViewHost.Content = null;
       var viewType = MainFormManager.GetDefaultViewType(content.GetType());
-      targetViewHost.ViewType = viewType;
-      targetViewHost.Content = content;
-      targetViewHost.UpdateBreadcrumbTrail(targetViewHost.Breadcrumbs, breadcrumbs);
-      targetViewHost.ShowBreadcrumbs = showBreadcrumbs;
+      outermostViewHost.ViewType = viewType;
+      outermostViewHost.Content = content;
+      outermostViewHost.UpdateBreadcrumbTrail(outermostViewHost.Breadcrumbs, breadcrumbs);
+      outermostViewHost.ShowBreadcrumbs = showBreadcrumbs;
     }
 
Index: branches/Breadcrumbs/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewHost.cs
===================================================================
--- branches/Breadcrumbs/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewHost.cs	(revision 10089)
+++ branches/Breadcrumbs/HeuristicLab.MainForm.WindowsForms/3.3/Controls/ViewHost.cs	(revision 10093)
@@ -379,4 +379,5 @@
     private void PerformOutermostViewHostDetection() {
       var mainForm = MainFormManager.GetMainForm<MainForm>();
+      if (mainForm == null) return;
       var outermostViewHost = mainForm.GetOutermostViewOfType<ViewHost>(this);
       isOutermostViewHost = outermostViewHost == this;
Index: branches/Breadcrumbs/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.cs
===================================================================
--- branches/Breadcrumbs/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.cs	(revision 10089)
+++ branches/Breadcrumbs/HeuristicLab.MainForm.WindowsForms/3.3/MainForms/MainForm.cs	(revision 10093)
@@ -224,4 +224,6 @@
 
     public T GetOutermostViewOfType<T>(Control childControl) where T : class, IView {
+      if (childControl == null) throw new ArgumentNullException("childControl", "ChildControl cannot be null.");
+
       T outermostView = null;
       for (var control = childControl; control != null; control = control.Parent) {
@@ -273,10 +275,29 @@
     }
 
-    public void ShowContentInSpecificViewHost(IContent content, ViewHost viewHost) {
-      if (viewHost == null) return;
-      viewHost.Content = null;
-      var viewType = MainFormManager.GetDefaultViewType(content.GetType());
-      viewHost.ViewType = viewType;
-      viewHost.Content = content;
+    public ViewHost ShowContentInOutermostViewHost(IContent content, Control childControl, bool requireHotlinking = false) {
+      if (content == null) throw new ArgumentNullException("content", "Content cannot be null.");
+      if (childControl == null) throw new ArgumentNullException("childControl", "ChildControl cannot be null.");
+
+      var outermostViewHost = GetOutermostViewOfType<ViewHost>(childControl);
+      if (outermostViewHost == null)
+        throw new ArgumentException("No outermost ViewHost could be found for the specified child control.", "childControl");
+
+      if (!requireHotlinking || outermostViewHost.HotlinkingEnabled) {
+        var oldCrumbs = outermostViewHost.Breadcrumbs;
+        var newCrumbs = new LinkedList<IContent>();
+        for (var control = childControl; control != null; control = control.Parent) {
+          var vh = control as ViewHost;
+          if (vh != null && vh.Content != null)
+            newCrumbs.AddFirst(vh.Content);
+        }
+        bool showBreadcrumbs = outermostViewHost.ShowBreadcrumbs;
+        outermostViewHost.Content = null;
+        var viewType = MainFormManager.GetDefaultViewType(content.GetType());
+        outermostViewHost.ViewType = viewType;
+        outermostViewHost.Content = content;
+        outermostViewHost.UpdateBreadcrumbTrail(oldCrumbs, newCrumbs.Concat(new[] { content }));
+        outermostViewHost.ShowBreadcrumbs = showBreadcrumbs;
+      }
+      return outermostViewHost;
     }
 
