Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/Actions/NewEditorAction.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/Actions/NewEditorAction.cs	(revision 2249)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/Actions/NewEditorAction.cs	(revision 2249)
@@ -0,0 +1,18 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.MainForm.Test {
+  public class NewEditorAction : IAction{
+    #region IAction Members
+
+    public void Execute(IMainForm mainform) {
+      mainform.StatusStripText = "New Editor action called";
+    }
+
+    #endregion
+  }
+
+}
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/Actions/NewFormAction.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/Actions/NewFormAction.cs	(revision 2249)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/Actions/NewFormAction.cs	(revision 2249)
@@ -0,0 +1,18 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.MainForm.Test {
+  public class NewFormAction : IAction{
+    #region IAction Members
+
+    public void Execute(IMainForm mainform) {
+      mainform.StatusStripText = "New Form action called";
+    }
+
+    #endregion
+  }
+
+}
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/Actions/OpenAction.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/Actions/OpenAction.cs	(revision 2249)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/Actions/OpenAction.cs	(revision 2249)
@@ -0,0 +1,17 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.MainForm.Test {
+  public class OpenAction : IAction {
+    #region IAction Members
+
+    public void Execute(IMainForm mainform) {
+      mainform.StatusStripText = "Open action called";
+    }
+
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/Actions/SaveAction.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/Actions/SaveAction.cs	(revision 2249)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/Actions/SaveAction.cs	(revision 2249)
@@ -0,0 +1,15 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.MainForm.Test {
+  public class SaveAction : IAction{
+    #region IAction Members
+    public void Execute(IMainForm mainform) {
+      mainform.StatusStripText = "Save action called";
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/ButtonItems/NewEditorToolStripButtonItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/ButtonItems/NewEditorToolStripButtonItem.cs	(revision 2249)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/ButtonItems/NewEditorToolStripButtonItem.cs	(revision 2249)
@@ -0,0 +1,24 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.MainForm.Test {
+  public class NewEditorToolStripButtonItem : ToolStripButtonItemBase, ITestUserInterfaceItemProvider {
+    public override int Position {
+      get { return 12; }
+    }
+
+    public override string Name {
+      get { return "Editor"; }
+    }
+
+    public override string Structure {
+      get { return "New"; }
+    }
+
+    public override void Execute(IMainForm mainform) {
+      new NewEditorAction().Execute(mainform);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/ButtonItems/NewFormToolStripButtonItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/ButtonItems/NewFormToolStripButtonItem.cs	(revision 2249)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/ButtonItems/NewFormToolStripButtonItem.cs	(revision 2249)
@@ -0,0 +1,24 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.MainForm.Test {
+  public class NewFormToolStripButtonItem : ToolStripButtonItemBase, ITestUserInterfaceItemProvider {
+    public override int Position {
+      get { return 11; }
+    }
+
+    public override string Name {
+      get { return "Form"; }
+    }
+
+    public override string Structure {
+      get { return "New"; }
+    }
+
+    public override void Execute(IMainForm mainform) {
+      new NewFormAction().Execute(mainform);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/ButtonItems/NewToolStripButtonItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/ButtonItems/NewToolStripButtonItem.cs	(revision 2249)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/ButtonItems/NewToolStripButtonItem.cs	(revision 2249)
@@ -0,0 +1,27 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.MainForm.Test {
+  public class NewToolStripButtonItem : ToolStripButtonItemBase, ITestUserInterfaceItemProvider {
+    public override int Position {
+      get { return 10; }
+    }
+
+    public override string Name {
+      get { return "New"; }
+    }
+
+    public override bool IsDropDownButton {
+      get { return true; }
+    }
+
+    public override System.Drawing.Image Image {
+      get { return HeuristicLab.Common.Resources.Resources.NewIcon; }
+    }
+
+    public override void Execute(IMainForm mainform) {
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/ButtonItems/OpenToolStripButtonItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/ButtonItems/OpenToolStripButtonItem.cs	(revision 2249)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/ButtonItems/OpenToolStripButtonItem.cs	(revision 2249)
@@ -0,0 +1,24 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.MainForm.Test {
+  public class OpenToolStripButtonItem : ToolStripButtonItemBase, ITestUserInterfaceItemProvider {
+    public override int Position {
+      get { return 20; }
+    }
+
+    public override string Name {
+      get { return "Open"; }
+    }
+
+    public override System.Drawing.Image Image {
+      get { return HeuristicLab.Common.Resources.Resources.OpenIcon; }
+    }
+
+    public override void Execute(IMainForm mainform) {
+      new OpenAction().Execute(mainform);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/ButtonItems/SaveToolStripButtonItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/ButtonItems/SaveToolStripButtonItem.cs	(revision 2249)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/ButtonItems/SaveToolStripButtonItem.cs	(revision 2249)
@@ -0,0 +1,24 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.MainForm.Test {
+  public class SaveToolStripButtonItem : ToolStripButtonItemBase, ITestUserInterfaceItemProvider {
+    public override int Position {
+      get { return 30; }
+    }
+
+    public override string Name {
+      get { return "Save"; }
+    }
+
+    public override System.Drawing.Image Image {
+      get { return HeuristicLab.Common.Resources.Resources.SaveIcon; }
+    }
+
+    public override void Execute(IMainForm mainform) {
+      new SaveAction().Execute(mainform);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/HeuristicLab.MainForm.Test-3.2.csproj
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/HeuristicLab.MainForm.Test-3.2.csproj	(revision 2248)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/HeuristicLab.MainForm.Test-3.2.csproj	(revision 2249)
@@ -82,13 +82,23 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="OpenMenuItem.cs" />
-    <Compile Include="SaveMenuItem.cs" />
+    <Compile Include="Actions\NewEditorAction.cs" />
+    <Compile Include="ButtonItems\NewEditorToolStripButtonItem.cs" />
+    <Compile Include="ButtonItems\NewFormToolStripButtonItem.cs" />
+    <Compile Include="ButtonItems\SaveToolStripButtonItem.cs" />
+    <Compile Include="ButtonItems\OpenToolStripButtonItem.cs" />
+    <Compile Include="MenuItems\NewFormToolStripMenuItem.cs" />
+    <Compile Include="MenuItems\NewEditorToolStripMenuItem.cs" />
+    <Compile Include="MenuItems\FileToolStripMenuItem.cs" />
+    <Compile Include="MenuItems\NewToolStripMenuItem.cs" />
+    <Compile Include="Actions\NewFormAction.cs" />
+    <Compile Include="Actions\OpenAction.cs" />
+    <Compile Include="MenuItems\OpenToolStripMenuItem.cs" />
+    <Compile Include="Actions\SaveAction.cs" />
+    <Compile Include="MenuItems\SaveToolStripMenuItem.cs" />
     <Compile Include="HeuristicLabMainFormTestApplication.cs" />
     <Compile Include="HeuristicLabMainFormTestPlugin.cs" />
     <Compile Include="ITestUserInterfaceItemProvider.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="ViewsMenuItem.cs">
-      <SubType>Code</SubType>
-    </Compile>
+    <Compile Include="ButtonItems\NewToolStripButtonItem.cs" />
   </ItemGroup>
   <ItemGroup>
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/MenuItems/FileToolStripMenuItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/MenuItems/FileToolStripMenuItem.cs	(revision 2249)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/MenuItems/FileToolStripMenuItem.cs	(revision 2249)
@@ -0,0 +1,19 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.MainForm.Test.MenuItems {
+  public class FileToolStripMenuItem : ToolStripMenuItemBase, ITestUserInterfaceItemProvider{
+    public override int Position {
+      get { return 1000; }
+    }
+
+    public override string Name {
+      get { return "File"; }
+    }
+
+    public override void Execute(IMainForm mainform) {      
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/MenuItems/NewEditorToolStripMenuItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/MenuItems/NewEditorToolStripMenuItem.cs	(revision 2249)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/MenuItems/NewEditorToolStripMenuItem.cs	(revision 2249)
@@ -0,0 +1,28 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+using HeuristicLab.MainForm;
+using HeuristicLab.Common.Resources;
+
+namespace HeuristicLab.MainForm.Test {
+  public class NewEditorToolStripMenuItem : ToolStripMenuItemBase, ITestUserInterfaceItemProvider {
+    public override string Name {
+      get { return "Editor"; }
+    }
+
+    public override string Structure {
+      get { return "File/New"; }
+    }
+
+    public override int Position {
+      get { return 1120; }
+    }
+
+    public override void Execute(IMainForm mainform) {
+      new NewEditorAction().Execute(mainform);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/MenuItems/NewFormToolStripMenuItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/MenuItems/NewFormToolStripMenuItem.cs	(revision 2249)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/MenuItems/NewFormToolStripMenuItem.cs	(revision 2249)
@@ -0,0 +1,28 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+using HeuristicLab.MainForm;
+using HeuristicLab.Common.Resources;
+
+namespace HeuristicLab.MainForm.Test {
+  public class NewFormToolStripMenuItem : ToolStripMenuItemBase, ITestUserInterfaceItemProvider {
+    public override string Name {
+      get { return "Form"; }
+    }
+
+    public override string Structure {
+      get { return "File/New"; }
+    }
+
+    public override int Position {
+      get { return 1110; }
+    }
+
+    public override void Execute(IMainForm mainform) {
+      new NewFormAction().Execute(mainform);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/MenuItems/NewToolStripMenuItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/MenuItems/NewToolStripMenuItem.cs	(revision 2249)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/MenuItems/NewToolStripMenuItem.cs	(revision 2249)
@@ -0,0 +1,31 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+using HeuristicLab.MainForm;
+using HeuristicLab.Common.Resources;
+
+namespace HeuristicLab.MainForm.Test {
+  public class NewToolStripMenuItem : ToolStripMenuItemBase, ITestUserInterfaceItemProvider {
+    public override string Name {
+      get { return "New"; }
+    }
+
+    public override string Structure {
+      get { return "File"; }
+    }
+
+    public override int Position {
+      get { return 1100; }
+    }
+
+    public override System.Drawing.Image Image {
+      get { return Resources.NewIcon; }
+    }
+
+    public override void Execute(IMainForm mainform) {
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/MenuItems/OpenToolStripMenuItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/MenuItems/OpenToolStripMenuItem.cs	(revision 2249)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/MenuItems/OpenToolStripMenuItem.cs	(revision 2249)
@@ -0,0 +1,35 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.Common.Resources;
+
+namespace HeuristicLab.MainForm.Test {
+  public class OpenToolStripMenuItem : ToolStripMenuItemBase, ITestUserInterfaceItemProvider {
+    public override string Name {
+      get { return "Open"; }
+    }   
+
+    public override string Structure {
+      get { return "File"; }
+    }
+
+    public override int Position {
+      get { return 1200; }
+    }
+
+    public override Keys ShortCutKeys {
+      get { return Keys.Control | Keys.O; }
+    }
+
+    public override System.Drawing.Image Image {
+      get { return Resources.OpenIcon; }
+    }
+
+    public override void Execute(IMainForm mainform) {
+      new OpenAction().Execute(mainform);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/MenuItems/SaveToolStripMenuItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/MenuItems/SaveToolStripMenuItem.cs	(revision 2249)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/MenuItems/SaveToolStripMenuItem.cs	(revision 2249)
@@ -0,0 +1,36 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+using HeuristicLab.MainForm;
+using HeuristicLab.Common.Resources;
+
+namespace HeuristicLab.MainForm.Test {
+  public class SaveToolStripMenuItem : ToolStripMenuItemBase, ITestUserInterfaceItemProvider {
+    public override string Name {
+      get { return "Save"; }
+    }
+
+    public override string Structure {
+      get { return "File"; }
+    }
+
+    public override int Position {
+      get { return 1300; }
+    }
+
+    public override Keys ShortCutKeys {
+      get { return Keys.Control | Keys.S; }
+    }
+
+    public override System.Drawing.Image Image {
+      get { return Resources.SaveIcon; }
+    }
+
+    public override void Execute(IMainForm mainform) {
+      new SaveAction().Execute(mainform);
+    }
+  }
+}
Index: unk/sources/HeuristicLab.MainForm.Test/3.2/OpenMenuItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/OpenMenuItem.cs	(revision 2248)
+++ 	(revision )
@@ -1,35 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-using HeuristicLab.MainForm;
-using HeuristicLab.Common.Resources;
-
-namespace HeuristicLab.MainForm.Test {
-  public class OpenMenuItem : ToolStripMenuItemBase, ITestUserInterfaceItemProvider {
-    public override string Name {
-      get { return "Open"; }
-    }   
-
-    public override string MenuStructure {
-      get { return "File"; }
-    }
-
-    public override int Position {
-      get { return 1100; }
-    }
-
-    public override Keys ShortCutKeys {
-      get { return Keys.Control | Keys.O; }
-    }
-
-    public override System.Drawing.Image Image {
-      get { return Resources.OpenIcon; }
-    }
-
-    public override void Execute(IMainForm mainform) {
-      MessageBox.Show("Open Execute called");
-    }
-  }
-}
Index: unk/sources/HeuristicLab.MainForm.Test/3.2/SaveMenuItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/SaveMenuItem.cs	(revision 2248)
+++ 	(revision )
@@ -1,36 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Windows.Forms;
-
-using HeuristicLab.MainForm;
-using HeuristicLab.Common.Resources;
-
-namespace HeuristicLab.MainForm.Test {
-  public class SaveMenuItem : ToolStripMenuItemBase, ITestUserInterfaceItemProvider {
-    public override string Name {
-      get { return "Save"; }
-    }
-
-    public override string MenuStructure {
-      get { return "File"; }
-    }
-
-    public override int Position {
-      get { return 1200; }
-    }
-
-    public override Keys ShortCutKeys {
-      get { return Keys.Control | Keys.S; }
-    }
-
-    public override System.Drawing.Image Image {
-      get { return Resources.SaveIcon; }
-    }
-
-    public override void Execute(IMainForm mainform) {
-      MessageBox.Show("Save Execute called");
-    }
-  }
-}
Index: unk/sources/HeuristicLab.MainForm.Test/3.2/ViewsMenuItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/ViewsMenuItem.cs	(revision 2248)
+++ 	(revision )
@@ -1,27 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-
-using HeuristicLab.MainForm;
-using System.Windows.Forms;
-
-namespace HeuristicLab.MainForm.Test {
-  public class ViewsMenuItem : ToolStripMenuItemBase, ITestUserInterfaceItemProvider {
-    public override string Name {
-      get { return "Views"; }
-    }
-
-    public override int Position {
-      get { return 2000; }
-    }
-
-    public override Keys ShortCutKeys {
-      get { return Keys.Control | Keys.V; }
-    }
-
-    public override void Execute(IMainForm mainform) {
-      MessageBox.Show("Views Execute called");
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IToolStripButtonItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IToolStripButtonItem.cs	(revision 2248)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IToolStripButtonItem.cs	(revision 2249)
@@ -27,4 +27,5 @@
 namespace HeuristicLab.MainForm {
   public interface IToolStripButtonItem : IToolStripItem {
+    bool IsDropDownButton { get; }
   }
 }
Index: /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IToolStripItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IToolStripItem.cs	(revision 2248)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IToolStripItem.cs	(revision 2249)
@@ -32,4 +32,8 @@
     Image Image { get; }
     ToolStripItemDisplayStyle DisplayStyle { get; }
+
+    string Structure { get; }
+    char StructureSeparator { get; }
+
     ToolStripItem ToolStripItem { get; set; }
   }
Index: /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IToolStripMenuItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IToolStripMenuItem.cs	(revision 2248)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IToolStripMenuItem.cs	(revision 2249)
@@ -28,6 +28,4 @@
 namespace HeuristicLab.MainForm {
   public interface IToolStripMenuItem : IToolStripItem {
-    string MenuStructure { get; }
-    char MenuStructureSeparator { get; }
     Keys ShortCutKeys { get; }
   }
Index: /trunk/sources/HeuristicLab.MainForm/3.2/MainFormBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/MainFormBase.cs	(revision 2248)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/MainFormBase.cs	(revision 2249)
@@ -77,5 +77,4 @@
     private void CreateGUI() {
       DiscoveryService ds = new DiscoveryService();
-      Type[] userInterfaceTypes = ds.GetTypes(userInterfaceItemType);
 
       object[] items = ds.GetInstances(userInterfaceItemType);
@@ -96,22 +95,8 @@
     private void AddToolStripMenuItem(IToolStripMenuItem menuItem) {
       ToolStripMenuItem item = new ToolStripMenuItem();
-      SetToolStripItemProperties(item, menuItem);    
+      SetToolStripItemProperties(item, menuItem);
       item.ShortcutKeys = menuItem.ShortCutKeys;
 
-      ToolStripMenuItem parent = null;
-      if (!String.IsNullOrEmpty(menuItem.MenuStructure)) {
-        ToolStripItemCollection parentItems = menuStrip.Items;
-        foreach (string structure in menuItem.MenuStructure.Split(menuItem.MenuStructureSeparator)) {
-          if (parentItems.ContainsKey(structure))
-            parent = (ToolStripMenuItem)parentItems[structure];
-          else {
-            parent = new ToolStripMenuItem(structure);
-            parent.Name = structure;
-            parentItems.Add(parent);
-          }
-          parentItems = parent.DropDownItems;
-        }
-      }
-
+      ToolStripDropDownItem parent = FindParent(menuItem, menuStrip.Items);
       if (parent == null)
         menuStrip.Items.Add(item);
@@ -121,7 +106,28 @@
 
     private void AddToolStripButtonItem(IToolStripButtonItem buttonItem) {
-      ToolStripButton item = new ToolStripButton();
+      ToolStripItem item;
+      if (buttonItem.IsDropDownButton)
+        item = new ToolStripDropDownButton();
+      else
+        item = new ToolStripButton();
+
       SetToolStripItemProperties(item, buttonItem);
-      toolStrip.Items.Add(item);
+      ToolStripDropDownItem parent = FindParent(buttonItem,toolStrip.Items);
+      if (parent == null)
+        toolStrip.Items.Add(item);
+      else
+        parent.DropDownItems.Add(item);
+    }
+
+    private ToolStripDropDownItem FindParent(IToolStripItem item, ToolStripItemCollection parentItems) {
+      ToolStripDropDownItem parent = null;
+      foreach (string structure in item.Structure.Split(item.StructureSeparator)) {
+        if (parentItems.ContainsKey(structure))
+          parent = (ToolStripDropDownItem)parentItems[structure];
+        else
+          break;
+        parentItems = parent.DropDownItems;
+      }
+      return parent;
     }
 
Index: /trunk/sources/HeuristicLab.MainForm/3.2/ToolStripButtonItemBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/ToolStripButtonItemBase.cs	(revision 2248)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/ToolStripButtonItemBase.cs	(revision 2249)
@@ -27,5 +27,5 @@
 
 namespace HeuristicLab.MainForm {
-  public abstract class ToolStripButtonItemBase : ToolStripItemBase, IToolStripItem {
+  public abstract class ToolStripButtonItemBase : ToolStripItemBase, IToolStripButtonItem {
     public override ToolStripItemDisplayStyle DisplayStyle {
       get {
@@ -36,4 +36,8 @@
       }
     }
+
+    public virtual bool IsDropDownButton {
+      get { return false; }
+    }
   }
 }
Index: /trunk/sources/HeuristicLab.MainForm/3.2/ToolStripItemBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/ToolStripItemBase.cs	(revision 2248)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/ToolStripItemBase.cs	(revision 2249)
@@ -46,4 +46,13 @@
       set { this.toolStripItem = value; }
     }
+
+    public virtual string Structure {
+      get { return string.Empty; }
+    }
+
+    public static readonly char structureSeparator = '/';
+    public char StructureSeparator {
+      get { return ToolStripMenuItemBase.structureSeparator; }
+    }
     #endregion
   }
Index: /trunk/sources/HeuristicLab.MainForm/3.2/ToolStripMenuItemBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/ToolStripMenuItemBase.cs	(revision 2248)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/ToolStripMenuItemBase.cs	(revision 2249)
@@ -31,16 +31,8 @@
       get { return Keys.None; }
     }
-    public virtual string MenuStructure {
-      get { return string.Empty; }
-    }
 
     public override ToolStripItemDisplayStyle DisplayStyle {
       get { return ToolStripItemDisplayStyle.ImageAndText; }
     }
-
-    public static readonly char StructureSeparator = '/';
-    public char MenuStructureSeparator {
-      get { return ToolStripMenuItemBase.StructureSeparator; }
-    }
   }
 }
Index: /trunk/sources/HeuristicLab.MainForm/3.2/UserInterfaceItemBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/UserInterfaceItemBase.cs	(revision 2248)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/UserInterfaceItemBase.cs	(revision 2249)
@@ -1,3 +1,24 @@
-﻿using System;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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;
