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 2243)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/HeuristicLab.MainForm.Test-3.2.csproj	(revision 2243)
@@ -0,0 +1,125 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.MainForm.Test</RootNamespace>
+    <AssemblyName>HeuristicLab.MainForm.Test-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="OpenMenuItem.cs" />
+    <Compile Include="Resource1.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resource1.resx</DependentUpon>
+    </Compile>
+    <Compile Include="SaveMenuItem.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>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.MainForm\3.2\HeuristicLab.MainForm.csproj">
+      <Project>{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}</Project>
+      <Name>HeuristicLab.MainForm</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Resource1.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resource1.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\saveHS.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="Resources\openHS.png" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/HeuristicLab.MainForm.Test-3.2.csproj.user
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/HeuristicLab.MainForm.Test-3.2.csproj.user	(revision 2243)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/HeuristicLab.MainForm.Test-3.2.csproj.user	(revision 2243)
@@ -0,0 +1,5 @@
+﻿<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <ProjectView>ShowAllFiles</ProjectView>
+  </PropertyGroup>
+</Project>
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/HeuristicLabMainFormTestApplication.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/HeuristicLabMainFormTestApplication.cs	(revision 2243)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/HeuristicLabMainFormTestApplication.cs	(revision 2243)
@@ -0,0 +1,38 @@
+#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.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.MainForm.Test {
+  [ClassInfo(Name = "MainForm Test", Description="Test application for new mainform development.")]
+  class GridClientApplication : ApplicationBase {
+    public override void Run() {
+      DockingMainForm mainForm = new DockingMainForm(typeof(ITestUserInterfaceItemProvider));
+      mainForm.Title = "Test new MAINFORM concept";
+      Application.Run(mainForm);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/HeuristicLabMainFormTestPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/HeuristicLabMainFormTestPlugin.cs	(revision 2243)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/HeuristicLabMainFormTestPlugin.cs	(revision 2243)
@@ -0,0 +1,33 @@
+#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.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Modeling.Database {
+  [ClassInfo(Name = "HeuristicLab.MainForm.Test-3.2")]
+  [PluginFile(Filename = "HeuristicLab.MainForm.Test-3.2.dll", Filetype = PluginFileType.Assembly)]  
+  [Dependency(Dependency = "HeuristicLab.MainForm-3.2")]
+  public class HeuristicLabMainFormTestPlugin : PluginBase {
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/ITestUserInterfaceItemProvider.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/ITestUserInterfaceItemProvider.cs	(revision 2243)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/ITestUserInterfaceItemProvider.cs	(revision 2243)
@@ -0,0 +1,9 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.MainForm.Test {
+  public interface ITestUserInterfaceItemProvider {
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/OpenMenuItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/OpenMenuItem.cs	(revision 2243)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/OpenMenuItem.cs	(revision 2243)
@@ -0,0 +1,27 @@
+﻿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 OpenMenuItem : ToolStripMenuItemBase, IToolStripButtonItem, ITestUserInterfaceItemProvider {
+    public override string MenuStructure {
+      get { return "File"; }
+    }
+
+    public override string Name {
+      get { return "Open"; }
+    }
+
+    public override Keys ShortCutKeys {
+      get { return Keys.Control | Keys.O; }
+    }
+
+    public override void Execute(IMainForm mainform) {
+      MessageBox.Show("Open Execute called");
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/Properties/AssemblyInfo.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/Properties/AssemblyInfo.cs	(revision 2243)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/Properties/AssemblyInfo.cs	(revision 2243)
@@ -0,0 +1,39 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.MainForm.Test")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("HeuristicLab.MainForm.Test")]
+[assembly: AssemblyCopyright("Copyright © Microsoft 2009")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("a80799b9-1882-4c61-bc7e-bca44b61c067")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
+[assembly: AssemblyBuildDate("2009/08/04 18:20:50")]
+
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/Properties/AssemblyInfo.frame
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/Properties/AssemblyInfo.frame	(revision 2243)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/Properties/AssemblyInfo.frame	(revision 2243)
@@ -0,0 +1,58 @@
+#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.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.MainForm.Test")]
+[assembly: AssemblyDescription("HeuristicLab mainform  test application")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("f9718239-4d37-4410-84d7-9c3468b01cbf")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/Resource1.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/Resource1.Designer.cs	(revision 2243)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/Resource1.Designer.cs	(revision 2243)
@@ -0,0 +1,77 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.4016
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.MainForm.Test {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resource1 {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resource1() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HeuristicLab.MainForm.Test.Resource1", typeof(Resource1).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        internal static System.Drawing.Bitmap openHS {
+            get {
+                object obj = ResourceManager.GetObject("openHS", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap saveHS {
+            get {
+                object obj = ResourceManager.GetObject("saveHS", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+    }
+}
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/Resource1.resx
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/Resource1.resx	(revision 2243)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/Resource1.resx	(revision 2243)
@@ -0,0 +1,127 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="openHS" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\openHS.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="saveHS" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>Resources\saveHS.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+</root>
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/SaveMenuItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/SaveMenuItem.cs	(revision 2243)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/SaveMenuItem.cs	(revision 2243)
@@ -0,0 +1,23 @@
+﻿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 SaveMenuItem : ToolStripMenuItemBase, ITestUserInterfaceItemProvider {
+    public override string MenuStructure {
+      get { return "TEST/Test/Test/Test"; }
+    }
+
+    public override string Name {
+      get { return "Save"; }
+    }
+
+    public override void Execute(IMainForm mainform) {
+      MessageBox.Show("Save Execute called");
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm.Test/3.2/ViewsMenuItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.Test/3.2/ViewsMenuItem.cs	(revision 2243)
+++ /trunk/sources/HeuristicLab.MainForm.Test/3.2/ViewsMenuItem.cs	(revision 2243)
@@ -0,0 +1,31 @@
+﻿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, IToolStripButtonItem, ITestUserInterfaceItemProvider {
+    public override string MenuStructure {
+      get { return "File"; }
+    }
+
+    public override string Name {
+      get { return "Views"; }
+    }
+
+    public override Keys ShortCutKeys {
+      get { return Keys.Control | Keys.V; }
+    }
+
+    public override System.Drawing.Image Image {
+      get { return Resource1.openHS; }
+    }
+
+    public override void Execute(IMainForm mainform) {
+      MessageBox.Show("Views Execute called");
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.2/HeuristicLab.MainForm.csproj
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/HeuristicLab.MainForm.csproj	(revision 2242)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/HeuristicLab.MainForm.csproj	(revision 2243)
@@ -82,4 +82,8 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Interfaces\IUserInterfaceItem.cs" />
+    <Compile Include="ToolStripMenuItemBase.cs" />
+    <Compile Include="ToolStripButtonItemBase.cs" />
+    <Compile Include="ToolStripItemBase.cs" />
     <Compile Include="DockingMainForm.cs">
       <SubType>Form</SubType>
@@ -97,10 +101,11 @@
     <Compile Include="Interfaces\IAction.cs" />
     <Compile Include="Interfaces\IMainForm.cs" />
-    <Compile Include="Interfaces\IMenuItem.cs" />
+    <Compile Include="Interfaces\IToolStripMenuItem.cs" />
     <Compile Include="Interfaces\IModel.cs" />
+    <Compile Include="Interfaces\IToolStripButtonItem.cs" />
     <Compile Include="Interfaces\IToolStripItem.cs" />
-    <Compile Include="Interfaces\IUserInterfaceItem.cs" />
     <Compile Include="Interfaces\IView.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="UserInterfaceItemBase.cs" />
     <Compile Include="ViewBase.cs">
       <SubType>UserControl</SubType>
Index: /trunk/sources/HeuristicLab.MainForm/3.2/HeuristicLabMainFormPlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/HeuristicLabMainFormPlugin.cs	(revision 2242)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/HeuristicLabMainFormPlugin.cs	(revision 2243)
@@ -28,5 +28,4 @@
   [ClassInfo(Name = "HeuristicLab.MainForm-3.2")]
   [PluginFile(Filename = "HeuristicLab.MainForm-3.2.dll", Filetype = PluginFileType.Assembly)]
-  [PluginFile(Filename = "HeuristicLab.MainForm.Docking-3.2.dll", Filetype = PluginFileType.Assembly)]
   [Dependency(Dependency = "HeuristicLab.Core-3.2")]
   public class HeuristicLabMainFormPlugin : PluginBase {
Index: /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IAction.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IAction.cs	(revision 2242)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IAction.cs	(revision 2243)
@@ -28,5 +28,4 @@
   public interface IAction {
     void Execute(IMainForm mainform);
-    bool Enabled(IMainForm mainform);
   }
 }
Index: /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IMainForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IMainForm.cs	(revision 2242)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IMainForm.cs	(revision 2243)
@@ -32,10 +32,8 @@
     Icon Icon { get; set; } 
 
-    IModel Model { get; }
     IView ActiveView { get; }
     IEnumerable<IView> OpenViews { get; }
 
     Type UserInterfaceItemType { get; }
-
     void ShowView(IView view);
   }
Index: unk/sources/HeuristicLab.MainForm/3.2/Interfaces/IMenuItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IMenuItem.cs	(revision 2242)
+++ 	(revision )
@@ -1,30 +1,0 @@
-﻿#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;
-using System.Text;
-
-namespace HeuristicLab.MainForm {
-  public interface IMenuItem {
-  }
-}
Index: /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IToolStripButtonItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IToolStripButtonItem.cs	(revision 2243)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IToolStripButtonItem.cs	(revision 2243)
@@ -0,0 +1,30 @@
+﻿#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;
+using System.Text;
+
+namespace HeuristicLab.MainForm {
+  public interface IToolStripButtonItem : IToolStripItem {
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IToolStripItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IToolStripItem.cs	(revision 2242)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IToolStripItem.cs	(revision 2243)
@@ -24,7 +24,12 @@
 using System.Linq;
 using System.Text;
+using System.Drawing;
+using System.Windows.Forms;
 
 namespace HeuristicLab.MainForm {
-  public interface IToolStripItem {
+  public interface IToolStripItem : IUserInterfaceItem {
+    Image Image { get; }
+    ToolStripItemDisplayStyle DisplayStyle { 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 2243)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IToolStripMenuItem.cs	(revision 2243)
@@ -0,0 +1,34 @@
+﻿#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;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.MainForm {
+  public interface IToolStripMenuItem : IToolStripItem {
+    string MenuStructure { get; }
+    char MenuStructureSeparator { get; }
+    Keys ShortCutKeys { get; }
+  }
+}
Index: unk/sources/HeuristicLab.MainForm/3.2/Interfaces/IUserInterfaceItem.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/Interfaces/IUserInterfaceItem.cs	(revision 2242)
+++ 	(revision )
@@ -1,34 +1,0 @@
-﻿#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;
-using System.Text;
-using System.Drawing;
-
-namespace HeuristicLab.MainForm.Interfaces {
-  public interface IUserInterfaceItem : IAction {
-    string Name { get; }
-    Image Image { get; }
-    string ImagePath { get; }
-  }
-}
Index: /trunk/sources/HeuristicLab.MainForm/3.2/MainFormBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/MainFormBase.cs	(revision 2242)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/MainFormBase.cs	(revision 2243)
@@ -29,21 +29,20 @@
 using System.Windows.Forms;
 
+using HeuristicLab.PluginInfrastructure;
+
 namespace HeuristicLab.MainForm {
-  public partial class MainFormBase : Form, IMainForm {
-    public MainFormBase()
+  public abstract partial class MainFormBase : Form, IMainForm {
+    protected MainFormBase(Type userInterfaceItemType)
       : base() {
       InitializeComponent();
       openViews = new List<IView>();
-    }
-
-    public MainFormBase(Type userInterfaceItemType)
-      : this() {
       this.userInterfaceItemType = userInterfaceItemType;
+      CreateGUI();
     }
 
     #region IMainForm Members
     public string Title {
-      get { return this.Title; }
-      set { this.Title = value; }
+      get { return this.Text; }
+      set { this.Text = value; }
     }
 
@@ -56,10 +55,4 @@
     public Type UserInterfaceItemType {
       get { return this.userInterfaceItemType; }
-    }
-
-    protected IModel model;
-    public IModel Model {
-      get { return this.model; }
-      set { this.model = value; }
     }
 
@@ -79,5 +72,72 @@
       openViews.Add(view);
     }
+    #endregion
 
+    #region create menu and toolbar
+    private void CreateGUI() {
+      DiscoveryService ds = new DiscoveryService();
+      Type[] userInterfaceTypes = ds.GetTypes(userInterfaceItemType);
+
+      foreach (Type t in userInterfaceTypes.Where(t=> typeof(IToolStripMenuItem).IsAssignableFrom(t))) {
+        if (!t.IsAbstract && !t.IsInterface && !t.HasElementType) {
+          IToolStripMenuItem item = (IToolStripMenuItem) Activator.CreateInstance(t);
+          AddToolStripMenuItem(item);
+        }
+      }
+
+      foreach (Type t in userInterfaceTypes.Where(t => typeof(IToolStripButtonItem).IsAssignableFrom(t))) {
+        if (!t.IsAbstract && !t.IsInterface && !t.HasElementType) {
+          IToolStripButtonItem item = (IToolStripButtonItem)Activator.CreateInstance(t);
+          AddToolStripButtonItem(item);
+        }
+      }
+    }
+
+    private void AddToolStripMenuItem(IToolStripMenuItem menuItem) {
+      ToolStripMenuItem item = new ToolStripMenuItem();
+      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;
+        }
+      }
+
+      if (parent == null)
+        menuStrip.Items.Add(item);
+      else
+        parent.DropDownItems.Add(item);
+    }
+
+    private void AddToolStripButtonItem(IToolStripButtonItem buttonItem) {
+      ToolStripButton item = new ToolStripButton();
+      SetToolStripItemProperties(item, buttonItem);
+      toolStrip.Items.Add(item);
+    }
+
+    private void SetToolStripItemProperties(ToolStripItem toolStripItem, IToolStripItem iToolStripItem) {
+      toolStripItem.Text = iToolStripItem.Name;
+      toolStripItem.Name = iToolStripItem.Name;
+      toolStripItem.Tag = iToolStripItem;
+      toolStripItem.Image = iToolStripItem.Image;
+      toolStripItem.DisplayStyle = iToolStripItem.DisplayStyle;
+      toolStripItem.Click += new EventHandler(ToolStripItemClicked);
+      iToolStripItem.ToolStripItem = toolStripItem;
+    }
+
+    private void ToolStripItemClicked(object sender, EventArgs e) {
+      System.Windows.Forms.ToolStripItem item = (System.Windows.Forms.ToolStripItem)sender;
+      ((IAction)item.Tag).Execute(this);
+    }
     #endregion
   }
Index: /trunk/sources/HeuristicLab.MainForm/3.2/ToolStripButtonItemBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/ToolStripButtonItemBase.cs	(revision 2243)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/ToolStripButtonItemBase.cs	(revision 2243)
@@ -0,0 +1,39 @@
+﻿#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;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.MainForm {
+  public abstract class ToolStripButtonItemBase : ToolStripItemBase, IToolStripItem {
+    public override ToolStripItemDisplayStyle DisplayStyle {
+      get {
+        if (Image != null)
+          return ToolStripItemDisplayStyle.Image;
+        else
+          return ToolStripItemDisplayStyle.ImageAndText;
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.2/ToolStripItemBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/ToolStripItemBase.cs	(revision 2243)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/ToolStripItemBase.cs	(revision 2243)
@@ -0,0 +1,49 @@
+﻿#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;
+using System.Text;
+using System.Resources;
+using System.Reflection;
+using System.Windows.Forms;
+using System.Drawing;
+
+namespace HeuristicLab.MainForm {
+  public abstract class ToolStripItemBase : UserInterfaceItemBase, IToolStripItem {
+    #region IToolStripItem Members
+    public virtual System.Drawing.Image Image {
+      get { return null; }
+    }
+
+    public virtual ToolStripItemDisplayStyle DisplayStyle {
+      get { return ToolStripItemDisplayStyle.ImageAndText; }
+    }
+
+    private ToolStripItem toolStripItem;
+    public ToolStripItem ToolStripItem {
+      get { return this.toolStripItem; }
+      set { this.toolStripItem = value; }
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.MainForm/3.2/ToolStripMenuItemBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm/3.2/ToolStripMenuItemBase.cs	(revision 2243)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/ToolStripMenuItemBase.cs	(revision 2243)
@@ -0,0 +1,42 @@
+﻿#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;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.MainForm {
+  public abstract class ToolStripMenuItemBase : ToolStripItemBase, IToolStripMenuItem {
+    public virtual Keys ShortCutKeys { 
+      get { return Keys.None; } 
+    }
+    public virtual string MenuStructure {
+      get { return string.Empty; }
+    }
+
+    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 2243)
+++ /trunk/sources/HeuristicLab.MainForm/3.2/UserInterfaceItemBase.cs	(revision 2243)
@@ -0,0 +1,14 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.MainForm {
+  public abstract class UserInterfaceItemBase : IUserInterfaceItem{
+    public abstract string Name { get; }
+
+    #region IAction Members
+    public abstract void Execute(IMainForm mainform);
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.sln
===================================================================
--- /trunk/sources/HeuristicLab.sln	(revision 2242)
+++ /trunk/sources/HeuristicLab.sln	(revision 2243)
@@ -243,4 +243,6 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.MainForm", "HeuristicLab.MainForm\3.2\HeuristicLab.MainForm.csproj", "{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.MainForm.Test-3.2", "HeuristicLab.MainForm.Test\3.2\HeuristicLab.MainForm.Test-3.2.csproj", "{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}"
 EndProject
 Global
@@ -3906,4 +3908,30 @@
 		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Visualization Debug|x64.ActiveCfg = Debug|Any CPU
 		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Visualization Debug|x86.ActiveCfg = Debug|Any CPU
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.CEDMA Debug|x64.ActiveCfg = Debug|Any CPU
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.CEDMA Debug|x86.ActiveCfg = Debug|Any CPU
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.Debug|x86.ActiveCfg = Debug|x86
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.Debug|x86.Build.0 = Debug|x86
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.Modeling Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.Modeling Debug|Any CPU.Build.0 = Debug|Any CPU
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.Modeling Debug|x64.ActiveCfg = Debug|Any CPU
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.Modeling Debug|x86.ActiveCfg = Debug|Any CPU
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.Release|Any CPU.Build.0 = Release|Any CPU
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.Release|x64.ActiveCfg = Release|Any CPU
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.Release|x86.ActiveCfg = Release|x86
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.Release|x86.Build.0 = Release|x86
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.v3.2 Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.v3.2 Debug|Any CPU.Build.0 = Debug|Any CPU
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.v3.2 Debug|x64.ActiveCfg = Debug|Any CPU
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.v3.2 Debug|x86.ActiveCfg = Debug|Any CPU
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.Visualization Debug|Any CPU.Build.0 = Debug|Any CPU
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.Visualization Debug|x64.ActiveCfg = Debug|Any CPU
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.Visualization Debug|x86.ActiveCfg = Debug|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
@@ -3996,4 +4024,5 @@
 		{45D11FBD-A71B-48D3-8A94-8EB0DFE8E06A} = {410732DB-725A-4824-896B-C298978343C0}
 		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A} = {410732DB-725A-4824-896B-C298978343C0}
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC} = {410732DB-725A-4824-896B-C298978343C0}
 		{A9E282EA-180F-4233-B809-AEDF0787545C} = {78982D7C-D63D-4A3D-AE1F-F58AC007603B}
 		{BF7D9494-A586-457B-8DF9-ED599F9E6A71} = {78982D7C-D63D-4A3D-AE1F-F58AC007603B}
Index: /trunk/sources/HeuristicLab/CopyAssemblies.cmd
===================================================================
--- /trunk/sources/HeuristicLab/CopyAssemblies.cmd	(revision 2242)
+++ /trunk/sources/HeuristicLab/CopyAssemblies.cmd	(revision 2243)
@@ -71,4 +71,6 @@
 copy "%SolutionDir%\HeuristicLab.Logging\3.2\%Outdir%\HeuristicLab.Logging-3.2.dll" .\plugins
 copy "%SolutionDir%\HeuristicLab.Logging\3.3\%Outdir%\HeuristicLab.Logging-3.3.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.MainForm\3.2\%Outdir%\HeuristicLab.MainForm-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.MainForm.Test\3.2\%Outdir%\HeuristicLab.MainForm.Test-3.2.dll" .\plugins
 copy "%SolutionDir%\HeuristicLab.Modeling\3.2\%Outdir%\HeuristicLab.Modeling-3.2.dll" .\plugins
 copy "%SolutionDir%\HeuristicLab.Modeling\3.3\%Outdir%\HeuristicLab.Modeling-3.3.dll" .\plugins
