Index: /branches/ItemTreeViews/3.3/HeuristicLab.ItemTreeViews.Views-3.3.csproj
===================================================================
--- /branches/ItemTreeViews/3.3/HeuristicLab.ItemTreeViews.Views-3.3.csproj	(revision 14335)
+++ /branches/ItemTreeViews/3.3/HeuristicLab.ItemTreeViews.Views-3.3.csproj	(revision 14335)
@@ -0,0 +1,199 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{D53E8E48-CFAA-4F57-AC35-63BEF4476159}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.ItemTreeViews</RootNamespace>
+    <AssemblyName>HeuristicLab.ItemTreeViews.Views-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <RunCodeAnalysis>true</RunCodeAnalysis>
+    <LangVersion>5</LangVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>
+    </AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup>
+    <StartupObject />
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>CODE_ANALYSIS;DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <RunCodeAnalysis>true</RunCodeAnalysis>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>CODE_ANALYSIS;DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <RunCodeAnalysis>true</RunCodeAnalysis>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Collections-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Collections-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Common.Resources-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core.Views-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Core.Views-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.MainForm-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm.WindowsForms-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.MainForm.WindowsForms-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Tests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Tests.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Windows.Forms.DataVisualization" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Views\ItemCollectionTreeView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\ItemCollectionTreeView.designer.cs">
+      <DependentUpon>ItemCollectionTreeView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\ItemCollectionTreeViewDummy.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\NamedItemCollectionTreeView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\NamedItemCollectionTreeView.designer.cs">
+      <DependentUpon>NamedItemCollectionTreeView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\ParameterCollectionTreeView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\ParameterCollectionTreeView.designer.cs">
+      <DependentUpon>ParameterCollectionTreeView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\ParameterizedNamedItemTreeView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\ParameterizedNamedItemTreeView.designer.cs">
+      <DependentUpon>ParameterizedNamedItemTreeView.cs</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Plugin.cs.frame" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Views\ItemCollectionTreeView.resx">
+      <DependentUpon>ItemCollectionTreeView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Views\ParameterizedNamedItemTreeView.resx">
+      <DependentUpon>ParameterizedNamedItemTreeView.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup />
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd
+</PreBuildEvent>
+    <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
+	export ProjectDir=$(ProjectDir)
+export SolutionDir=$(SolutionDir)
+
+$SolutionDir/PreBuildEvent.sh
+</PreBuildEvent>
+  </PropertyGroup>
+  <!-- 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>
+  -->
+</Project>
Index: /branches/ItemTreeViews/3.3/HeuristicLab.ItemTreeViews.Views-3.3.sln
===================================================================
--- /branches/ItemTreeViews/3.3/HeuristicLab.ItemTreeViews.Views-3.3.sln	(revision 14335)
+++ /branches/ItemTreeViews/3.3/HeuristicLab.ItemTreeViews.Views-3.3.sln	(revision 14335)
@@ -0,0 +1,34 @@
+﻿
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.ItemTreeViews.Views-3.3", "HeuristicLab.ItemTreeViews.Views-3.3.csproj", "{D53E8E48-CFAA-4F57-AC35-63BEF4476159}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Debug|x64 = Debug|x64
+		Debug|x86 = Debug|x86
+		Release|Any CPU = Release|Any CPU
+		Release|x64 = Release|x64
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{D53E8E48-CFAA-4F57-AC35-63BEF4476159}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D53E8E48-CFAA-4F57-AC35-63BEF4476159}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D53E8E48-CFAA-4F57-AC35-63BEF4476159}.Debug|x64.ActiveCfg = Debug|x64
+		{D53E8E48-CFAA-4F57-AC35-63BEF4476159}.Debug|x64.Build.0 = Debug|x64
+		{D53E8E48-CFAA-4F57-AC35-63BEF4476159}.Debug|x86.ActiveCfg = Debug|x86
+		{D53E8E48-CFAA-4F57-AC35-63BEF4476159}.Debug|x86.Build.0 = Debug|x86
+		{D53E8E48-CFAA-4F57-AC35-63BEF4476159}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D53E8E48-CFAA-4F57-AC35-63BEF4476159}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D53E8E48-CFAA-4F57-AC35-63BEF4476159}.Release|x64.ActiveCfg = Release|x64
+		{D53E8E48-CFAA-4F57-AC35-63BEF4476159}.Release|x64.Build.0 = Release|x64
+		{D53E8E48-CFAA-4F57-AC35-63BEF4476159}.Release|x86.ActiveCfg = Release|x86
+		{D53E8E48-CFAA-4F57-AC35-63BEF4476159}.Release|x86.Build.0 = Release|x86
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
Index: /branches/ItemTreeViews/3.3/Plugin.cs
===================================================================
--- /branches/ItemTreeViews/3.3/Plugin.cs	(revision 14335)
+++ /branches/ItemTreeViews/3.3/Plugin.cs	(revision 14335)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.ItemTreeViews.Views {
+  [Plugin("HeuristicLab.ItemTreeViews.Views", "3.3.14.14195")]
+  [PluginFile("HeuristicLab.ItemTreeViews.Views-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Core.Views", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
+  public class Plugin : PluginBase {
+  }
+}
Index: /branches/ItemTreeViews/3.3/PreBuildEvent.cmd
===================================================================
--- /branches/ItemTreeViews/3.3/PreBuildEvent.cmd	(revision 14335)
+++ /branches/ItemTreeViews/3.3/PreBuildEvent.cmd	(revision 14335)
@@ -0,0 +1,11 @@
+IF EXIST "%ProjectDir%\Properties\AssemblyInfo.cs.frame" SubWCRev "%ProjectDir%\" "%ProjectDir%\Properties\AssemblyInfo.cs.frame" "%ProjectDir%\Properties\AssemblyInfo.cs"
+IF %ERRORLEVEL% NEQ 0 GOTO Error_Handling
+IF EXIST "%ProjectDir%\Plugin.cs.frame" SubWCRev "%ProjectDir%\" "%ProjectDir%\Plugin.cs.frame" "%ProjectDir%\Plugin.cs"
+IF %ERRORLEVEL% NEQ 0 GOTO Error_Handling
+GOTO Done
+
+:Error_Handling
+ECHO There was an error while running subwcrev. Please verify that the *.cs.frame files have been correctly converted to *.cs files, otherwise HeuristicLab won't build. 
+exit 0
+
+:Done
Index: /branches/ItemTreeViews/3.3/Properties/AssemblyInfo.cs
===================================================================
--- /branches/ItemTreeViews/3.3/Properties/AssemblyInfo.cs	(revision 14335)
+++ /branches/ItemTreeViews/3.3/Properties/AssemblyInfo.cs	(revision 14335)
@@ -0,0 +1,56 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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.InteropServices;
+
+// 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.ItemTreeViews.Views")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2016 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("c8460c22-cba5-48ad-8283-1284313b2c17")]
+
+// 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("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.14.14195")]
Index: /branches/ItemTreeViews/3.3/Views/ItemCollectionTreeView.cs
===================================================================
--- /branches/ItemTreeViews/3.3/Views/ItemCollectionTreeView.cs	(revision 14335)
+++ /branches/ItemTreeViews/3.3/Views/ItemCollectionTreeView.cs	(revision 14335)
@@ -0,0 +1,544 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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.Reflection;
+using System.Windows.Forms;
+using HeuristicLab.Collections;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.ItemTreeViews.Views {
+  [View("ItemCollection Tree View")]
+  [Content(typeof(ItemCollection<>), false)]
+  [Content(typeof(IItemCollection<>), false)]
+  [Content(typeof(ReadOnlyItemCollection<>), false)]
+  public partial class ItemCollectionTreeView<T> : ItemView where T : class, IItem {
+
+    #region properties
+
+    protected Dictionary<T, TreeNode> itemTreeViewItemMapping;
+    protected Dictionary<T, T> treeViewChildrenMapping;
+    protected TypeSelectorDialog typeSelectorDialog;
+    protected bool validDragOperation;
+
+    public new IItemCollection<T> Content
+    {
+      get { return (IItemCollection<T>)base.Content; }
+      set
+      {
+        base.Content = value;
+        OnContentChanged();
+      }
+    }
+
+    public ObservableCollection<T> ItemCollection { get { return Content as ObservableCollection<T>; } }
+
+    public bool ShowDetails
+    {
+      get { return showDetailsCheckBox.Checked; }
+      set { showDetailsCheckBox.Checked = value; }
+    }
+
+    public TreeView ItemsTreeView { get { return itemsTreeView; } }
+
+    #endregion
+
+    public ItemCollectionTreeView() {
+      InitializeComponent();
+      itemTreeViewItemMapping = new Dictionary<T, TreeNode>();
+      treeViewChildrenMapping = new Dictionary<T, T>();
+    }
+
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (typeSelectorDialog != null) typeSelectorDialog.Dispose();
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region eventregistration
+
+    protected override void DeregisterContentEvents() {
+      Content.ItemsAdded -= Content_ItemsAdded;
+      Content.ItemsRemoved -= Content_ItemsRemoved;
+      Content.CollectionReset -= Content_CollectionReset;
+      base.DeregisterContentEvents();
+    }
+
+    protected override void RegisterContentEvents() {
+      DeregisterContentEvents(); //prevent multiattaching
+      base.RegisterContentEvents();
+      Content.ItemsAdded += Content_ItemsAdded;
+      Content.ItemsRemoved += Content_ItemsRemoved;
+      Content.CollectionReset += Content_CollectionReset;
+    }
+
+    protected virtual void DeregisterItemEvents(T item) {
+      item.ItemImageChanged -= Item_ItemImageChanged;
+      item.ToStringChanged -= Item_ToStringChanged;
+    }
+
+    protected virtual void RegisterItemEvents(T item) {
+      DeregisterItemEvents(item); //prevent multiattaching
+      item.ItemImageChanged += Item_ItemImageChanged;
+      item.ToStringChanged += Item_ToStringChanged;
+    }
+
+    protected virtual void DeregisterViewEvents() {
+      ItemsTreeView.AfterSelect -= itemsTreeView_SelectedIndexChanged;
+      ItemsTreeView.DoubleClick -= itemsTreeView_DoubleClick;
+      ItemsTreeView.KeyDown -= itemsTreeView_KeyDown;
+    }
+
+    protected virtual void RegisterViewEvents() {
+      DeregisterViewEvents(); //prevent multiattaching
+      ItemsTreeView.AfterSelect += itemsTreeView_SelectedIndexChanged;
+      ItemsTreeView.DoubleClick += itemsTreeView_DoubleClick;
+      ItemsTreeView.KeyDown += itemsTreeView_KeyDown;
+    }
+
+    protected override void OnContentChanged() {
+      ItemsTreeView.BeginUpdate();
+      base.OnContentChanged();
+      ItemsTreeView.Nodes.Clear();
+      itemTreeViewItemMapping.Clear();
+      RebuildTreeImageList();
+      viewHost.Content = null;
+      if (Content == null) { ItemsTreeView.EndUpdate(); return; }
+      RegisterViewEvents();
+      Caption += " (" + Content.GetType().Name + ")";
+
+      foreach (T item in Content)
+        AddTreeNodeRecursive(item, null);
+      SortItemsTreeView();
+      ItemsTreeView.EndUpdate();
+    }
+
+    #endregion
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      if (Content == null) {
+        addButton.Enabled = false;
+        sortAscendingButton.Enabled = false;
+        sortDescendingButton.Enabled = false;
+        removeButton.Enabled = false;
+        ItemsTreeView.Enabled = false;
+        detailsGroupBox.Enabled = false;
+      } else {
+        addButton.Enabled = !Content.IsReadOnly && !ReadOnly;
+        sortAscendingButton.Enabled = false;
+        sortDescendingButton.Enabled = false;
+        removeButton.Enabled = !Content.IsReadOnly && !ReadOnly && ItemsTreeView.Nodes.Count > 0;
+        ItemsTreeView.Enabled = true;
+        detailsGroupBox.Enabled = true;
+      }
+    }
+
+    protected virtual T CreateItem() {
+      if (typeSelectorDialog == null) {
+        typeSelectorDialog = new TypeSelectorDialog();
+        typeSelectorDialog.Caption = "Select Item";
+        typeSelectorDialog.TypeSelector.Caption = "Available Items";
+        typeSelectorDialog.TypeSelector.Configure(typeof(T), false, true);
+      }
+      if (typeSelectorDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          return (T)typeSelectorDialog.TypeSelector.CreateInstanceOfSelectedType();
+        }
+        catch (Exception ex) {
+          ErrorHandling.ShowErrorDialog(this, ex);
+        }
+      }
+      return null;
+    }
+
+    protected virtual TreeNode CreateTreeViewNode(T item) {
+      var treeViewNode = new TreeNode("noName");
+      treeViewNode.NodeFont = DefaultFont;
+      if (item == null) {
+        treeViewNode.Text = "null";
+        ItemsTreeView.ImageList.Images.Add(HeuristicLab.Common.Resources.VSImageLibrary.Nothing);
+        treeViewNode.ImageIndex = ItemsTreeView.ImageList.Images.Count - 1;
+        treeViewNode.SelectedImageIndex = treeViewNode.ImageIndex;
+      } else {
+        treeViewNode.Text = item.ToString();
+        treeViewNode.ToolTipText = item.ItemName + ": " + item.ItemDescription;
+        ItemsTreeView.ImageList.Images.Add(item.ItemImage);
+        treeViewNode.ImageIndex = ItemsTreeView.ImageList.Images.Count - 1;
+        treeViewNode.SelectedImageIndex = treeViewNode.ImageIndex;
+        treeViewNode.Tag = item;
+      }
+      return treeViewNode;
+    }
+
+    #region recursive adding
+
+    protected virtual void AddTreeNode(T item) {
+      if (item != null && !itemTreeViewItemMapping.ContainsKey(item) && treeViewChildrenMapping.ContainsKey(item)) { //create TreeNode if not exists
+        RegisterItemEvents(item);
+        var node = CreateTreeViewNode(item);
+        itemTreeViewItemMapping[item] = node;
+        var p = GetParent(item);
+        (p == null ? ItemsTreeView.Nodes : itemTreeViewItemMapping[p].Nodes).Add(node);
+      }
+
+    }
+    protected void AddTreeNodeRecursive(T item, TreeNode parent) {
+      if (item == null) return;
+      Queue<T> queue = new Queue<T>();
+      queue.Enqueue(item);
+      if (!treeViewChildrenMapping.ContainsKey(item))
+        treeViewChildrenMapping.Add(item, parent != null ? parent.Tag as T : null); //Set explicitly to null in some cases. who cares??
+      while (queue.Count > 0 && (item = queue.Dequeue()) != null) {
+        AddTreeNode(item);
+        foreach (var child in ExpandTreeViewItem(item)) { //Expand queue
+          if (!treeViewChildrenMapping.ContainsKey(child)) {
+            treeViewChildrenMapping.Add(child, item);
+          }
+          queue.Enqueue(child);
+        }
+      }
+    }
+
+
+    protected void UpdateTreeNodeRecursive(T item, TreeNode parent) {
+      if (item == null) return;
+      Queue<T> queue = new Queue<T>();
+      queue.Enqueue(item);
+      //parent relation has to exist by now
+      //if (!treeViewChildrenMapping.ContainsKey(item))
+      //treeViewChildrenMapping.Add(item, parent != null ? parent.Tag as T : null); //Set explicitly to null in some cases. who cares??
+      while (queue.Count > 0 && (item = queue.Dequeue()) != null) {
+        AddTreeNode(item);
+        var newChildren = ExpandTreeViewItem(item);
+        var deadChildren =
+          itemTreeViewItemMapping[item].Nodes.Cast<TreeNode>()
+            .Select(n => n.Tag as T)
+            .Where(t => !newChildren.Contains(t)).Select(t => itemTreeViewItemMapping[t])
+            .ToList();
+
+        foreach (var child in newChildren) { //Expand queue
+          if (!treeViewChildrenMapping.ContainsKey(child)) {
+            treeViewChildrenMapping.Add(child, item);
+          }
+          queue.Enqueue(child);
+        }
+
+        foreach (var child in deadChildren) {
+          RemoveTreeViewItem(child);
+        }
+      }
+    }
+
+
+
+    /// <summary>
+    /// This function defines which subnodes are created. 
+    /// Override this to change which items are used in the creation of new nodes
+    /// </summary>
+    /// <param name="parent"></param>
+    /// <returns></returns>
+    protected virtual List<T> ExpandTreeViewItem(object parent) {
+      //unpack enumerables
+      var p = parent as IEnumerable<T>;
+      if (p != null) return p.ToList();
+      //exclude LookupParameters from Value unpacking
+      if (parent is ILookupParameter) return new List<T>();
+      //unpack "value"/"Value"/"ActualValue" relationship if possible
+      object prop = GetValue(parent);
+      //return nothing if failed
+      return (prop != null) ? ExpandTreeViewItem(prop) : new List<T>();
+    }
+    #endregion
+
+    #region recursive removal 
+    protected virtual void RemoveTreeViewItem(TreeNode treeViewItem) {
+      if (treeViewItem == null) return;
+      T item = treeViewItem.Tag as T;
+      if (item != null) {
+        treeViewChildrenMapping.Remove(item);
+        itemTreeViewItemMapping.Remove(item);
+        DeregisterItemEvents(item);
+      }
+      var children = GetChildren(item);
+      foreach (var node in children)
+        if (node != null && itemTreeViewItemMapping.ContainsKey(node))
+          RemoveTreeViewItem(itemTreeViewItemMapping[node]);
+      treeViewItem.Remove();
+
+    }
+    protected virtual void UpdateTreeViewItemImage(TreeNode treeViewNode) {
+      if (treeViewNode == null) throw new ArgumentNullException();
+      var item = treeViewNode.Tag as T;
+      var i = treeViewNode.ImageIndex;
+      ItemsTreeView.ImageList.Images[i] = item == null ? Common.Resources.VSImageLibrary.Nothing : item.ItemImage;
+      treeViewNode.ImageIndex = -1;
+      treeViewNode.SelectedImageIndex = treeViewNode.ImageIndex;
+      treeViewNode.ImageIndex = i;
+    }
+    protected virtual void UpdateTreeViewItemText(TreeNode treeViewNode) {
+      if (treeViewNode == null) throw new ArgumentNullException();
+      T item = treeViewNode.Tag as T;
+      treeViewNode.Text = item == null ? "null" : item.ToString();
+      treeViewNode.ToolTipText = item == null ? string.Empty : item.ItemName + ": " + item.ItemDescription;
+    }
+    protected virtual TreeNode GetTreeNodeForItem(T item) {
+      if (item == null)
+        return GetAllNodes(ItemsTreeView).First(x => x.Tag == null);
+      TreeNode viewItem;
+      itemTreeViewItemMapping.TryGetValue(item, out viewItem);
+      return viewItem;
+
+    }
+    #endregion
+
+    #region View Events
+    protected virtual void itemsTreeView_SelectedIndexChanged(object sender, EventArgs e) {
+      removeButton.Enabled = (Content != null) && !Content.IsReadOnly && !ReadOnly && ItemsTreeView.SelectedNode != null;
+      if (showDetailsCheckBox.Checked) {
+        var item = ItemsTreeView.SelectedNode != null ? ItemsTreeView.SelectedNode.Tag as T : null;
+        detailsGroupBox.Enabled = true;
+        viewHost.Content = item;
+      }
+    }
+    protected virtual void itemsTreeView_KeyDown(object sender, KeyEventArgs e) {
+      if (e.KeyCode == Keys.Delete) {
+        if ((ItemsTreeView.SelectedNode != null) && !Content.IsReadOnly && !ReadOnly) {
+          //no multiselction but recursive deletion
+          var selected = GetAllNodes(ItemsTreeView.SelectedNode);
+          if (ItemCollection != null) ItemCollection.RemoveRange(selected.Select(i => (T)i.Tag));
+          else {
+            ItemsTreeView.BeginUpdate();
+            foreach (TreeNode item in selected) { Content.Remove((T)item.Tag); }
+            ItemsTreeView.EndUpdate();
+          }
+        }
+      }
+    }
+    protected virtual void itemsTreeView_DoubleClick(object sender, EventArgs e) {
+      T item = ItemsTreeView.SelectedNode != null ? ItemsTreeView.SelectedNode.Tag as T : null;
+      if (item == null) return;
+      IContentView view = MainFormManager.MainForm.ShowContent(item);
+      if (view == null) return;
+      view.ReadOnly = ReadOnly;
+      view.Locked = Locked;
+    }
+    #endregion
+
+    #region Button Events
+    protected virtual void addButton_Click(object sender, EventArgs e) {
+      T item = CreateItem();
+      if (item != null)
+        Content.Add(item);
+    }
+    protected virtual void sortAscendingButton_Click(object sender, EventArgs e) {
+      SortItemsTreeView();
+    }
+    protected virtual void sortDescendingButton_Click(object sender, EventArgs e) {
+      //DO nothing for Treeview (no custom sort order)
+    }
+    protected virtual void removeButton_Click(object sender, EventArgs e) {
+      if (ItemsTreeView.SelectedNode == null) return;
+      var selected = GetAllNodes(ItemsTreeView.SelectedNode);
+      if (ItemCollection != null) {
+        ItemCollection.RemoveRange(selected.Select(i => (T)i.Tag));
+      } else {
+        foreach (TreeNode item in selected)
+          Content.Remove((T)item.Tag);
+      }
+      ItemsTreeView.SelectedNode = null;
+    }
+    #endregion
+
+    #region CheckBox Events
+    protected virtual void showDetailsCheckBox_CheckedChanged(object sender, EventArgs e) {
+      if (showDetailsCheckBox.Checked) {
+        splitContainer.Panel2Collapsed = false;
+        detailsGroupBox.Enabled = ItemsTreeView.SelectedNode != null;
+        viewHost.Content = ItemsTreeView.SelectedNode != null ? ItemsTreeView.SelectedNode.Tag as T : null;
+      } else {
+        splitContainer.Panel2Collapsed = true;
+        viewHost.Content = null;
+      }
+    }
+    #endregion
+
+    #region Content Events
+    protected virtual void Content_ItemsAdded(object sender, CollectionItemsChangedEventArgs<T> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<T>(Content_ItemsAdded), sender, e);
+      else {
+        ItemsTreeView.BeginUpdate();
+        foreach (T item in e.Items) {
+          AddTreeNodeRecursive(item, null);
+        }
+        RebuildTreeImageList();
+        ItemsTreeView.EndUpdate();
+      }
+
+    }
+    protected virtual void Content_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<T> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<T>(Content_ItemsRemoved), sender, e);
+      else {
+        ItemsTreeView.BeginUpdate();
+        foreach (T item in e.Items) {
+          //remove only the first matching ViewItem, because the IItem could be contained multiple times in the ItemCollection
+          var treeNode = GetTreeNodeForItem(item);
+          if (treeNode != null) RemoveTreeViewItem(treeNode);
+
+        }
+        RebuildTreeImageList();
+        ItemsTreeView.EndUpdate();
+      }
+    }
+    protected virtual void Content_CollectionReset(object sender, CollectionItemsChangedEventArgs<T> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<T>(Content_CollectionReset), sender, e);
+      else {
+        ItemsTreeView.BeginUpdate();
+        foreach (T item in e.OldItems) {
+          //remove only the first matching ViewItem, because the IItem could be contained multiple times in the ItemCollection
+          var treeNode = GetTreeNodeForItem(item);
+          if (treeNode != null) RemoveTreeViewItem(treeNode);
+        }
+        RebuildTreeImageList();
+        foreach (T item in e.Items)
+          AddTreeNodeRecursive(item, null);
+        ItemsTreeView.EndUpdate();
+      }
+    }
+    #endregion
+
+    #region Item Events
+    protected virtual void Item_ItemImageChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Item_ItemImageChanged), sender, e);
+      else {
+        var item = sender as T;
+        var node = GetTreeNodeForItem(item);
+        if (node != null) { UpdateTreeViewItemImage(node); }
+
+      }
+    }
+    protected virtual void Item_ToStringChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Item_ToStringChanged), sender, e);
+      else {
+        var item = sender as T;
+        var itemNode = GetTreeNodeForItem(item);
+        if (itemNode == null) return; //nothing to remove
+        var parent = itemNode.Parent;
+        //update Node
+        ItemsTreeView.BeginUpdate();
+        //        if (itemNode.Nodes.Count > 0)
+        //          RemoveTreeViewItem(itemNode);
+        //        AddTreeNodeRecursive(item, parent);
+        UpdateTreeNodeRecursive(item, parent);
+        UpdateTreeViewItemText(itemNode);
+        ItemsTreeView.EndUpdate();
+      }
+    }
+    #endregion
+
+    #region Helpers
+    // no sortOrder in TreeView
+    protected virtual void SortItemsTreeView() {
+      ItemsTreeView.Sort();
+      ItemsTreeView.Sorted = true;
+    }
+    // recursive image list rebuilding
+    protected virtual void RebuildTreeImageList() {
+      if (ItemsTreeView.ImageList == null) ItemsTreeView.ImageList = new ImageList();
+      ItemsTreeView.ImageList.Images.Clear();
+      foreach (TreeNode treeNode in GetAllNodes(ItemsTreeView)) {
+        T item = treeNode.Tag as T;
+        try {
+          ItemsTreeView.ImageList.Images.Add(item == null ? Common.Resources.VSImageLibrary.Nothing : item.ItemImage);
+          treeNode.ImageIndex = ItemsTreeView.ImageList.Images.Count - 1;
+          treeNode.SelectedImageIndex = treeNode.ImageIndex;
+        }
+        catch (ArgumentException) {
+          treeNode.SelectedImageIndex = ItemsTreeView.ImageList.Images.Count + 10000;
+        }
+      }
+    }
+    protected List<TreeNode> GetAllNodes(TreeView view) {
+      var n = new List<TreeNode>();
+      foreach (TreeNode node in view.Nodes) {
+        AddAllNodes(n, node);
+      }
+      return n;
+    }
+    private List<TreeNode> GetAllNodes(TreeNode node) {
+      var n = new List<TreeNode>();
+      AddAllNodes(n, node);
+      return n;
+    }
+    private static void AddAllNodes(List<TreeNode> list, TreeNode node) {
+      if (list.Contains(node)) return;
+      list.Add(node);
+      foreach (TreeNode n in node.Nodes) {
+        AddAllNodes(list, n);
+      }
+    }
+
+    protected T GetParent(T child) {
+      return treeViewChildrenMapping.ContainsKey(child) ? treeViewChildrenMapping[child] : null;
+    }
+    protected TreeNode GetParent(TreeNode child) {
+      return child.Parent;
+    }
+    private static IItem GetValue(object parent) {
+      var props = parent.GetType().GetProperties();
+      foreach (var prop in props) {
+        if (prop.Name.Equals("Value", StringComparison.InvariantCultureIgnoreCase) || prop.Name.Equals("ActualValue", StringComparison.InvariantCultureIgnoreCase)) {
+          if (typeof(IItem).IsAssignableFrom(prop.PropertyType)) {
+            try { return prop.GetValue(parent) as IItem; }
+            catch (TargetInvocationException) { }  //if getting the value is not an option (LookUpParameters,...) try other properties
+
+          }
+        }
+      }
+      return null;
+    }
+
+    protected List<T> GetChildren(T parent) {
+      return treeViewChildrenMapping.Where(x => x.Value == parent).Select(x => x.Key).ToList();
+    }
+    private int CountAllNodes(TreeNode n) {
+      var nodes = n != null ? n.Nodes : null ?? ItemsTreeView.Nodes;
+      var res = 1;
+      foreach (var node in nodes.Cast<TreeNode>()) {
+        res += CountAllNodes(node);
+      }
+      return res;
+    }
+    #endregion
+  }
+}
Index: /branches/ItemTreeViews/3.3/Views/ItemCollectionTreeView.designer.cs
===================================================================
--- /branches/ItemTreeViews/3.3/Views/ItemCollectionTreeView.designer.cs	(revision 14335)
+++ /branches/ItemTreeViews/3.3/Views/ItemCollectionTreeView.designer.cs	(revision 14335)
@@ -0,0 +1,231 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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.Windows.Forms;
+
+namespace HeuristicLab.ItemTreeViews.Views {
+  partial class ItemCollectionTreeView<T> {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ItemCollectionTreeView));
+      this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.itemsTreeView = new System.Windows.Forms.TreeView();
+      this.showDetailsCheckBox = new System.Windows.Forms.CheckBox();
+      this.sortDescendingButton = new System.Windows.Forms.Button();
+      this.sortAscendingButton = new System.Windows.Forms.Button();
+      this.removeButton = new System.Windows.Forms.Button();
+      this.addButton = new System.Windows.Forms.Button();
+      this.detailsGroupBox = new System.Windows.Forms.GroupBox();
+      this.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
+      this.imageList = new System.Windows.Forms.ImageList(this.components);
+      this.itemsGroupBox = new System.Windows.Forms.GroupBox();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.detailsGroupBox.SuspendLayout();
+      this.itemsGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // splitContainer
+      // 
+      this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
+      this.splitContainer.Location = new System.Drawing.Point(3, 16);
+      this.splitContainer.Name = "splitContainer";
+      // 
+      // splitContainer.Panel1
+      // 
+      this.splitContainer.Panel1.Controls.Add(this.itemsTreeView);
+      this.splitContainer.Panel1.Controls.Add(this.showDetailsCheckBox);
+      this.splitContainer.Panel1.Controls.Add(this.sortDescendingButton);
+      this.splitContainer.Panel1.Controls.Add(this.sortAscendingButton);
+      this.splitContainer.Panel1.Controls.Add(this.removeButton);
+      this.splitContainer.Panel1.Controls.Add(this.addButton);
+      this.splitContainer.Panel1MinSize = 100;
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.detailsGroupBox);
+      this.splitContainer.Size = new System.Drawing.Size(526, 364);
+      this.splitContainer.SplitterDistance = 250;
+      this.splitContainer.TabIndex = 0;
+      // 
+      // itemsTreeView
+      // 
+      this.itemsTreeView.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.itemsTreeView.Location = new System.Drawing.Point(3, 27);
+      this.itemsTreeView.Name = "itemsTreeView";
+      this.itemsTreeView.Size = new System.Drawing.Size(241, 329);
+      this.itemsTreeView.TabIndex = 7;
+      // 
+      // showDetailsCheckBox
+      // 
+      this.showDetailsCheckBox.Appearance = System.Windows.Forms.Appearance.Button;
+      this.showDetailsCheckBox.Checked = true;
+      this.showDetailsCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
+      this.showDetailsCheckBox.Image = ((System.Drawing.Image)(resources.GetObject("showDetailsCheckBox.Image")));
+      this.showDetailsCheckBox.Location = new System.Drawing.Point(123, 3);
+      this.showDetailsCheckBox.Name = "showDetailsCheckBox";
+      this.showDetailsCheckBox.Size = new System.Drawing.Size(24, 24);
+      this.showDetailsCheckBox.TabIndex = 4;
+      this.toolTip.SetToolTip(this.showDetailsCheckBox, "Show/Hide Details");
+      this.showDetailsCheckBox.UseVisualStyleBackColor = true;
+      this.showDetailsCheckBox.CheckedChanged += new System.EventHandler(this.showDetailsCheckBox_CheckedChanged);
+      // 
+      // sortDescendingButton
+      // 
+      this.sortDescendingButton.Enabled = false;
+      this.sortDescendingButton.Image = ((System.Drawing.Image)(resources.GetObject("sortDescendingButton.Image")));
+      this.sortDescendingButton.Location = new System.Drawing.Point(33, 3);
+      this.sortDescendingButton.Name = "sortDescendingButton";
+      this.sortDescendingButton.Size = new System.Drawing.Size(24, 24);
+      this.sortDescendingButton.TabIndex = 1;
+      this.toolTip.SetToolTip(this.sortDescendingButton, "Sort Descending");
+      this.sortDescendingButton.UseVisualStyleBackColor = true;
+      this.sortDescendingButton.Click += new System.EventHandler(this.sortDescendingButton_Click);
+      // 
+      // sortAscendingButton
+      // 
+      this.sortAscendingButton.Enabled = false;
+      this.sortAscendingButton.Image = ((System.Drawing.Image)(resources.GetObject("sortAscendingButton.Image")));
+      this.sortAscendingButton.Location = new System.Drawing.Point(63, 3);
+      this.sortAscendingButton.Name = "sortAscendingButton";
+      this.sortAscendingButton.Size = new System.Drawing.Size(24, 24);
+      this.sortAscendingButton.TabIndex = 2;
+      this.toolTip.SetToolTip(this.sortAscendingButton, "Sort Ascending");
+      this.sortAscendingButton.UseVisualStyleBackColor = true;
+      this.sortAscendingButton.Click += new System.EventHandler(this.sortAscendingButton_Click);
+      // 
+      // removeButton
+      // 
+      this.removeButton.Enabled = false;
+      this.removeButton.Image = ((System.Drawing.Image)(resources.GetObject("removeButton.Image")));
+      this.removeButton.Location = new System.Drawing.Point(93, 3);
+      this.removeButton.Name = "removeButton";
+      this.removeButton.Size = new System.Drawing.Size(24, 24);
+      this.removeButton.TabIndex = 3;
+      this.toolTip.SetToolTip(this.removeButton, "Remove");
+      this.removeButton.UseVisualStyleBackColor = true;
+      this.removeButton.Click += new System.EventHandler(this.removeButton_Click);
+      // 
+      // addButton
+      // 
+      this.addButton.Image = ((System.Drawing.Image)(resources.GetObject("addButton.Image")));
+      this.addButton.Location = new System.Drawing.Point(3, 3);
+      this.addButton.Name = "addButton";
+      this.addButton.Size = new System.Drawing.Size(24, 24);
+      this.addButton.TabIndex = 0;
+      this.toolTip.SetToolTip(this.addButton, "Add");
+      this.addButton.UseVisualStyleBackColor = true;
+      this.addButton.Click += new System.EventHandler(this.addButton_Click);
+      // 
+      // detailsGroupBox
+      // 
+      this.detailsGroupBox.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.detailsGroupBox.Controls.Add(this.viewHost);
+      this.detailsGroupBox.Location = new System.Drawing.Point(3, 27);
+      this.detailsGroupBox.Name = "detailsGroupBox";
+      this.detailsGroupBox.Size = new System.Drawing.Size(266, 335);
+      this.detailsGroupBox.TabIndex = 0;
+      this.detailsGroupBox.TabStop = false;
+      this.detailsGroupBox.Text = "Details";
+      // 
+      // viewHost
+      // 
+      this.viewHost.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.viewHost.Caption = "View";
+      this.viewHost.Content = null;
+      this.viewHost.Enabled = false;
+      this.viewHost.Location = new System.Drawing.Point(6, 19);
+      this.viewHost.Name = "viewHost";
+      this.viewHost.ReadOnly = false;
+      this.viewHost.Size = new System.Drawing.Size(254, 310);
+      this.viewHost.TabIndex = 0;
+      this.viewHost.ViewsLabelVisible = true;
+      this.viewHost.ViewType = null;
+      // 
+      // imageList
+      // 
+      this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+      this.imageList.ImageSize = new System.Drawing.Size(16, 16);
+      this.imageList.TransparentColor = System.Drawing.Color.Transparent;
+      // 
+      // itemsGroupBox
+      // 
+      this.itemsGroupBox.Controls.Add(this.splitContainer);
+      this.itemsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.itemsGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.itemsGroupBox.Name = "itemsGroupBox";
+      this.itemsGroupBox.Size = new System.Drawing.Size(532, 383);
+      this.itemsGroupBox.TabIndex = 0;
+      this.itemsGroupBox.TabStop = false;
+      this.itemsGroupBox.Text = "Items";
+      // 
+      // ItemCollectionTreeView
+      // 
+      this.Controls.Add(this.itemsGroupBox);
+      this.Name = "ItemCollectionTreeView";
+      this.Size = new System.Drawing.Size(532, 383);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
+      this.splitContainer.ResumeLayout(false);
+      this.detailsGroupBox.ResumeLayout(false);
+      this.itemsGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.SplitContainer splitContainer;
+    protected GroupBox itemsGroupBox;
+    protected GroupBox detailsGroupBox;
+    protected Button addButton;
+    protected Button removeButton;
+    protected ToolTip toolTip;
+    protected ImageList imageList;
+    protected HeuristicLab.MainForm.WindowsForms.ViewHost viewHost;
+    protected Button sortAscendingButton;
+    protected Button sortDescendingButton;
+    protected CheckBox showDetailsCheckBox;
+    private TreeView itemsTreeView;
+  }
+}
Index: /branches/ItemTreeViews/3.3/Views/ItemCollectionTreeView.resx
===================================================================
--- /branches/ItemTreeViews/3.3/Views/ItemCollectionTreeView.resx	(revision 14335)
+++ /branches/ItemTreeViews/3.3/Views/ItemCollectionTreeView.resx	(revision 14335)
@@ -0,0 +1,329 @@
+﻿<?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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="showDetailsCheckBox.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        RU5ErkJggg==
+</value>
+  </data>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>138, 17</value>
+  </metadata>
+  <data name="sortDescendingButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+        dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGgSURBVDhPY/j//z8Y+1efkvAo2P/VKmGxGEyMGAxn
+        eBYdXOWavf2/VcT0UmQF6BgIqlH4MIZb7s57zmnrHxoH97xEVoCMgcAJiEEMY7gYiHAvOOAEtP27Texc
+        DeOAzv9WkTMCYAqQMRAcgxqwBS4GIoCaTzulrrtlFjZpmklQ9xfzsMkHYQrgChG2wzDYFSDNzK5Z2z8C
+        aQmQgGXUTF9j/47/5lHTtNAM6AJiV6hmbyBuBIu7ZG07Zh468Ydl+OQUq7AZXMb+ne9BBhj7t19ENgCG
+        QQag8JE5xGCsBkyNyF87NTRz5/ToorlTowp2TXT3vdhjrJmCrBCGsRow2TNwG4ieHZkiPtXT50Wtnuo9
+        ZEXIGKsB093cwKlvZlD8zDp91f8N+uphyIqQMVYDQHhORLbzJHff/3X6aquQFaBjnAZMjS560GWi+aLV
+        XEccxJ/i6KgNk0PGWA2YEZ7d229v97/DSCMVxJ/kaSvaZayxFFkhDGMYMMXdV7vDWPNLuY7S11o9tdnN
+        hmorKnVVXlXrqsxFVgjXgMsLxGJUA/4zAAD5anGfsaAn7wAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="sortAscendingButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6
+        JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsTAAALEwEAmpwYAAABpklE
+        QVQ4T2P4//8/GPtXn5LwKNj/1SphsRhMDBsGAiCFxIcxPIsOrnLN3v7fKmJ6KbICdIzTALfcnfec09Y/
+        NA7ueYmsAB1jNcC94IAT0PbvNrFzNYwDOv9bRc4IQFaEjLEaANR82il13S2zsEnTTIK6v5iHTT6IrAgZ
+        YxgA1MzsmrX9I5CWAAlYRs30Nfbv+G8eNU0LWSEMYxjgkrXtmHnoxB+W4ZNTrMJmcBn7d74HGWDs334R
+        WSFcAzYvkIKxGjA1In/t1NDMndOji+ZOjSrYNdHd92KPsWYKskIYxmrAZM/AbSB6dmSK+FRPnxe1eqr3
+        kBUhY6wGTHdzA6e+mUHxM+v0Vf836KuHISsCYSBoBGJvkAFA7ArEXWBxmII5EdnOk9x9/9fpq62CiSFj
+        IDCGaoZhJ7A4TMHU6KIHXSaaL1rNdcRB/CmOjtowORgGgi1QzcfgYiBiRnh2b7+93f8OI41UEH+Sp61o
+        l7HGUpgiGAYCmCvAtoPFprj7ancYa34p11H6WqunNrvZUG1Fpa7Kq2pdlbnImuEaGBiqUfjIHNLxfwYA
+        0Y1xn61Fg/MAAAAASUVORK5CYII=
+</value>
+  </data>
+  <data name="removeButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        vZo0AAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="addButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+</value>
+  </data>
+  <metadata name="imageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/ItemTreeViews/3.3/Views/ItemCollectionTreeViewDummy.cs
===================================================================
--- /branches/ItemTreeViews/3.3/Views/ItemCollectionTreeViewDummy.cs	(revision 14335)
+++ /branches/ItemTreeViews/3.3/Views/ItemCollectionTreeViewDummy.cs	(revision 14335)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 HeuristicLab.Core.Views;
+
+namespace HeuristicLab.ItemTreeViews.Views {
+
+  /// <summary>
+  /// the existance of this class allows the designer to display the generic ItemCollectionTreeView
+  /// </summary>
+  public class ItemCollectionTreeView : ItemView {
+  }
+}
Index: /branches/ItemTreeViews/3.3/Views/NamedItemCollectionTreeView.Designer.cs
===================================================================
--- /branches/ItemTreeViews/3.3/Views/NamedItemCollectionTreeView.Designer.cs	(revision 14335)
+++ /branches/ItemTreeViews/3.3/Views/NamedItemCollectionTreeView.Designer.cs	(revision 14335)
@@ -0,0 +1,62 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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
+
+
+namespace HeuristicLab.ItemTreeViews.Views {
+  partial class NamedItemCollectionTreeView<T> {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.SuspendLayout();
+      // 
+      // NamedItemCollectionTreeView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Name = "NamedItemCollectionView";
+      this.Size = new System.Drawing.Size(532, 383);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+  }
+}
Index: /branches/ItemTreeViews/3.3/Views/NamedItemCollectionTreeView.cs
===================================================================
--- /branches/ItemTreeViews/3.3/Views/NamedItemCollectionTreeView.cs	(revision 14335)
+++ /branches/ItemTreeViews/3.3/Views/NamedItemCollectionTreeView.cs	(revision 14335)
@@ -0,0 +1,115 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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.Windows.Forms;
+using HeuristicLab.Collections;
+using HeuristicLab.Core;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.ItemTreeViews.Views {
+  [View("NamedItemCollection Tree View")]
+  [Content(typeof(NamedItemCollection<>), false)]
+  public partial class NamedItemCollectionTreeView<T> : ItemCollectionTreeView<T> where T : class, INamedItem {
+    public new IKeyedItemCollection<string, T> Content
+    {
+      get { return (IKeyedItemCollection<string, T>)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public NamedItemCollectionTreeView() {
+      InitializeComponent();
+    }
+
+    protected override void DeregisterContentEvents() {
+      Content.ItemsReplaced -= Content_ItemsReplaced;
+      base.DeregisterContentEvents();
+    }
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ItemsReplaced += Content_ItemsReplaced;
+    }
+
+    protected override void OnContentChanged() {
+      string selectedName = null;
+      if ((ItemsTreeView.SelectedNode != null ? ItemsTreeView.SelectedNode.Tag as T : null) is T)
+        selectedName = ((T)ItemsTreeView.SelectedNode.Tag).Name;
+
+      base.OnContentChanged();
+
+      if (selectedName == null) return;
+      foreach (TreeNode item in ItemsTreeView.Nodes)
+        if ((item.Tag != null) && ((T)item.Tag).Name.Equals(selectedName))
+          ItemsTreeView.SelectedNode = item;
+    }
+
+    protected override T CreateItem() {
+      T item = base.CreateItem();
+      if (item != null) {
+        item.Name = GetUniqueName(item.Name);
+      }
+      return item;
+    }
+
+    protected override TreeNode CreateTreeViewNode(T item) {
+      var listViewItem = base.CreateTreeViewNode(item);
+      if (!string.IsNullOrEmpty(item != null ? item.Description : null)) {
+        listViewItem.ToolTipText = item.ItemName + ": " + item.Description;
+      }
+      return listViewItem;
+    }
+    protected override void UpdateTreeViewItemText(TreeNode treeViewNode) {
+      base.UpdateTreeViewItemText(treeViewNode);
+      T item = treeViewNode.Tag as T;
+      if (!string.IsNullOrEmpty(item != null ? item.Description : null)) {
+        treeViewNode.ToolTipText = item.ItemName + ": " + item.Description;
+      }
+    }
+
+    #region Content Events
+    protected virtual void Content_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<T> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<T>(Content_ItemsReplaced), sender, e);
+      else {
+        ItemsTreeView.BeginUpdate();
+        foreach (T item in e.Items)
+          UpdateTreeViewItemText(GetTreeNodeForItem(item));
+        ItemsTreeView.EndUpdate();
+      }
+    }
+    #endregion
+
+    #region Helpers
+    protected virtual string GetUniqueName(string originalName) {
+      if (!Content.ContainsKey(originalName))
+        return originalName;
+
+      string name;
+      int index = 0;
+      do {
+        index++;
+        name = originalName + index;
+      } while (Content.ContainsKey(name));
+      return name;
+
+    }
+    #endregion
+  }
+}
Index: /branches/ItemTreeViews/3.3/Views/ParameterCollectionTreeView.cs
===================================================================
--- /branches/ItemTreeViews/3.3/Views/ParameterCollectionTreeView.cs	(revision 14335)
+++ /branches/ItemTreeViews/3.3/Views/ParameterCollectionTreeView.cs	(revision 14335)
@@ -0,0 +1,235 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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.Drawing;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Collections;
+using HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.ItemTreeViews.Views {
+  [View("ParameterCollection Tree View")]
+  [Content(typeof(ParameterCollection), false)]
+  [Content(typeof(IKeyedItemCollection<string, IParameter>), false)]
+  public partial class ParameterCollectionTreeView : NamedItemCollectionTreeView<IParameter> {
+    protected CreateParameterDialog createParameterDialog;
+
+    protected bool allowEditingOfHiddenParameters;
+    public virtual bool AllowEditingOfHiddenParameters
+    {
+      get { return allowEditingOfHiddenParameters; }
+      set
+      {
+        if (value != allowEditingOfHiddenParameters) {
+          allowEditingOfHiddenParameters = value;
+          SetEnabledStateOfControls();
+        }
+      }
+    }
+
+    public ParameterCollectionTreeView() {
+      InitializeComponent();
+      itemsGroupBox.Text = "Parameters";
+      allowEditingOfHiddenParameters = true;
+    }
+
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (createParameterDialog != null)
+          createParameterDialog.Dispose();
+        if (components != null)
+          components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+    protected override void DeregisterItemEvents(IParameter item) {
+      item.HiddenChanged -= Item_HiddenChanged;
+      base.DeregisterItemEvents(item);
+    }
+    protected override void RegisterItemEvents(IParameter item) {
+      base.RegisterItemEvents(item);
+      item.HiddenChanged += Item_HiddenChanged;
+    }
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      if ((Content == null) || !Content.Any(x => x.Hidden))
+        showHiddenParametersCheckBox.Checked = false;
+    }
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      showHiddenParametersCheckBox.Enabled = (Content != null) && Content.Any(x => x.Hidden);
+      viewHost.ReadOnly = ReadOnly;
+    }
+    protected override IParameter CreateItem() {
+      if (createParameterDialog == null) createParameterDialog = new CreateParameterDialog();
+
+      if (createParameterDialog.ShowDialog(this) == DialogResult.OK) {
+        IParameter param = createParameterDialog.Parameter;
+        if ((param != null) && Content.ContainsKey(param.Name))
+          param = (IParameter)Activator.CreateInstance(param.GetType(), GetUniqueName(param.Name), param.Description);
+        return param;
+      }
+      return null;
+    }
+    protected override TreeNode CreateTreeViewNode(IParameter item) {
+      var viewItem = base.CreateTreeViewNode(item);
+      if ((item != null) && item.Hidden) {
+        viewItem.NodeFont = new Font(viewItem.NodeFont, FontStyle.Italic);
+        viewItem.ForeColor = Color.LightGray;
+      }
+      return viewItem;
+    }
+
+    protected override void AddTreeNode(IParameter p) {
+      base.AddTreeNode(p);
+      if (p != null) UpdateParameterVisibility(p);
+    }
+    protected virtual void UpdateParameterVisibility(IParameter parameter) {
+      var treeNode = GetTreeNodeForItem(parameter);
+      if (parameter.Hidden) {
+        treeNode.NodeFont = new Font(treeNode.NodeFont, FontStyle.Italic);
+        treeNode.ForeColor = Color.LightGray;
+      } else {
+        treeNode.NodeFont = new Font(treeNode.NodeFont, FontStyle.Regular);
+        treeNode.ForeColor = ItemsTreeView.ForeColor;
+      }
+
+      if (!showHiddenParametersCheckBox.Checked && parameter.Hidden) //remove hidden nodes
+        treeNode.Remove();
+      else if (treeNode.Parent == null && !ItemsTreeView.Nodes.Contains(treeNode)) {// nonadded  Nodes
+        var p = GetParent(parameter);
+        (p == null ? ItemsTreeView.Nodes : GetTreeNodeForItem(p).Nodes).Add(treeNode);
+      }
+
+    }
+    protected override List<IParameter> ExpandTreeViewItem(object parent) {
+      var p = parent as IParameterizedItem;
+      if (p == null || p.Parameters == null) return base.ExpandTreeViewItem(parent);
+      return p.Parameters.ToList();
+    }
+
+
+    #region Control Events
+    protected virtual void showHiddenParametersCheckBox_CheckedChanged(object sender, EventArgs e) {
+      if (Content == null) return;
+      var items = itemTreeViewItemMapping.Keys.Where(x => x.Hidden).OrderBy(x => x.ToString()).ToArray();
+      ItemsTreeView.BeginUpdate();
+      Array.ForEach(items, UpdateParameterVisibility);
+      ItemsTreeView.EndUpdate();
+    }
+    protected override void itemsTreeView_SelectedIndexChanged(object sender, EventArgs e) {
+      base.itemsTreeView_SelectedIndexChanged(sender, e);
+      SetEnabledStateOfControls();
+    }
+    protected override void itemsTreeView_DoubleClick(object sender, EventArgs e) {
+      var item = ItemsTreeView.SelectedNode != null ? ItemsTreeView.SelectedNode.Tag as IParameter : null;
+      if (item == null) return;
+      var view = MainFormManager.MainForm.ShowContent(item);
+      if (view == null) return;
+      view.ReadOnly = ReadOnly || (item.Hidden && !AllowEditingOfHiddenParameters);
+      view.Locked = Locked;
+
+    }
+    protected virtual void itemsTreeViewContextMenuStrip_Opening(object sender, System.ComponentModel.CancelEventArgs e) {
+      showHideParametersToolStripMenuItem.Text = "Show/Hide Parameters";
+      showHideParametersToolStripMenuItem.Enabled = false;
+      if (ItemsTreeView.SelectedNode == null) {
+        e.Cancel = true;
+      } else if (!ReadOnly && !Locked && AllowEditingOfHiddenParameters) {
+        List<IParameter> parameters = new List<IParameter>();
+        IParameter parameter = ItemsTreeView.SelectedNode.Tag as IParameter;
+        if (parameter != null) parameters.Add(parameter);
+
+        showHideParametersToolStripMenuItem.Enabled = parameters.Count > 0;
+        if (parameters.Count == 1) showHideParametersToolStripMenuItem.Text = parameters[0].Hidden ? "Show Parameter" : "Hide Parameter";
+        else if ((parameters.Count > 1) && parameters.All(x => x.Hidden == parameters[0].Hidden)) showHideParametersToolStripMenuItem.Text = parameters[0].Hidden ? "Show Parameters" : "Hide Parameters";
+        showHideParametersToolStripMenuItem.Tag = parameters;
+      }
+    }
+    protected virtual void showHideParametersToolStripMenuItem_Click(object sender, EventArgs e) {
+      foreach (IParameter parameter in (IEnumerable<IParameter>)showHideParametersToolStripMenuItem.Tag)
+        parameter.Hidden = !parameter.Hidden;
+    }
+    protected override void showDetailsCheckBox_CheckedChanged(object sender, EventArgs e) {
+      base.showDetailsCheckBox_CheckedChanged(sender, e);
+      SetEnabledStateOfControls();
+    }
+    #endregion
+
+    #region Content Events
+    protected override void Content_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IParameter> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<IParameter>(Content_ItemsAdded), sender, e);
+      else {
+        base.Content_ItemsAdded(sender, e);
+        showHiddenParametersCheckBox.Enabled = Content.Any(x => x.Hidden);
+      }
+    }
+    protected override void Content_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IParameter> e) {
+      if (InvokeRequired)
+        Invoke(new CollectionItemsChangedEventHandler<IParameter>(Content_ItemsRemoved), sender, e);
+      else {
+        base.Content_ItemsRemoved(sender, e);
+      }
+    }
+    protected override void Content_CollectionReset(object sender, CollectionItemsChangedEventArgs<IParameter> e) {
+      if (InvokeRequired) Invoke(new CollectionItemsChangedEventHandler<IParameter>(Content_CollectionReset), sender, e);
+      else base.Content_CollectionReset(sender, e);
+    }
+    #endregion
+
+    #region Item Events
+    protected virtual void Item_HiddenChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Item_HiddenChanged), sender, e);
+      else {
+        ItemsTreeView.BeginUpdate();
+        UpdateParameterVisibility((IParameter)sender);
+        ItemsTreeView.EndUpdate();
+      }
+    }
+    #endregion
+
+    #region Helpers
+    protected override void RebuildTreeImageList() {
+      base.RebuildTreeImageList();
+      if (!showHiddenParametersCheckBox.Checked) {
+        // update image of hidden list view items
+        foreach (IParameter parameter in itemTreeViewItemMapping.Keys.Where(x => x.Hidden)) {
+          var treeNode = GetTreeNodeForItem(parameter);
+          try {
+            ItemsTreeView.ImageList.Images.Add(parameter == null ? Common.Resources.VSImageLibrary.Nothing : parameter.ItemImage);
+            treeNode.ImageIndex = ItemsTreeView.ImageList.Images.Count - 1;
+            treeNode.SelectedImageIndex = treeNode.ImageIndex;
+          }
+          catch (ArgumentException) {
+            treeNode.SelectedImageIndex = ItemsTreeView.ImageList.Images.Count + 10000;
+          }
+        }
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/ItemTreeViews/3.3/Views/ParameterCollectionTreeView.designer.cs
===================================================================
--- /branches/ItemTreeViews/3.3/Views/ParameterCollectionTreeView.designer.cs	(revision 14335)
+++ /branches/ItemTreeViews/3.3/Views/ParameterCollectionTreeView.designer.cs	(revision 14335)
@@ -0,0 +1,106 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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.Windows.Forms;
+namespace HeuristicLab.ItemTreeViews.Views {
+  partial class ParameterCollectionTreeView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      components = new System.ComponentModel.Container();
+      this.showHiddenParametersCheckBox = new System.Windows.Forms.CheckBox();
+      this.itemsListViewContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+      this.showHideParametersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.detailsGroupBox.SuspendLayout();
+      this.itemsGroupBox.SuspendLayout();
+      this.itemsListViewContextMenuStrip.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // splitContainer.Panel1
+      // 
+      this.splitContainer.Panel1.Controls.Add(this.showHiddenParametersCheckBox);
+      // 
+      // itemsListView
+      //
+      // 
+      // showHiddenParametersCheckBox
+      // 
+      this.showHiddenParametersCheckBox.Appearance = System.Windows.Forms.Appearance.Button;
+      this.showHiddenParametersCheckBox.Checked = false;
+      this.showHiddenParametersCheckBox.CheckState = System.Windows.Forms.CheckState.Unchecked;
+      this.showHiddenParametersCheckBox.Image = HeuristicLab.Common.Resources.VSImageLibrary.HiddenField;
+      this.showHiddenParametersCheckBox.Location = new System.Drawing.Point(153, 3);
+      this.showHiddenParametersCheckBox.Name = "showHiddenParametersCheckBox";
+      this.showHiddenParametersCheckBox.Size = new System.Drawing.Size(24, 24);
+      this.showHiddenParametersCheckBox.TabIndex = 5;
+      this.toolTip.SetToolTip(this.showHiddenParametersCheckBox, "Show Hidden Parameters");
+      this.showHiddenParametersCheckBox.UseVisualStyleBackColor = true;
+      this.showHiddenParametersCheckBox.CheckedChanged += new System.EventHandler(showHiddenParametersCheckBox_CheckedChanged);
+      // 
+      // itemsListViewContextMenuStrip
+      // 
+      this.itemsListViewContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.showHideParametersToolStripMenuItem});
+      this.itemsListViewContextMenuStrip.Name = "itemsListViewContextMenuStrip";
+      this.itemsListViewContextMenuStrip.Size = new System.Drawing.Size(161, 26);
+      this.itemsListViewContextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(itemsTreeViewContextMenuStrip_Opening);
+      // 
+      // showHideParametersToolStripMenuItem
+      // 
+      this.showHideParametersToolStripMenuItem.Name = "showHideParametersToolStripMenuItem";
+      this.showHideParametersToolStripMenuItem.Size = new System.Drawing.Size(160, 22);
+      this.showHideParametersToolStripMenuItem.Text = "Show/Hide Parameters";
+      this.showHideParametersToolStripMenuItem.Click += new System.EventHandler(showHideParametersToolStripMenuItem_Click);
+      // 
+      // ParameterCollectionTreeView
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Name = "ParameterCollectionView";
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
+      this.splitContainer.ResumeLayout(false);
+      this.detailsGroupBox.ResumeLayout(false);
+      this.itemsGroupBox.ResumeLayout(false);
+      this.itemsListViewContextMenuStrip.ResumeLayout(false);
+      this.ResumeLayout(false);
+    }
+
+    #endregion
+
+    protected CheckBox showHiddenParametersCheckBox;
+    protected ContextMenuStrip itemsListViewContextMenuStrip;
+    protected ToolStripMenuItem showHideParametersToolStripMenuItem;
+  }
+}
Index: /branches/ItemTreeViews/3.3/Views/ParameterizedNamedItemTreeView.cs
===================================================================
--- /branches/ItemTreeViews/3.3/Views/ParameterizedNamedItemTreeView.cs	(revision 14335)
+++ /branches/ItemTreeViews/3.3/Views/ParameterizedNamedItemTreeView.cs	(revision 14335)
@@ -0,0 +1,54 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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 HeuristicLab.Core;
+using HeuristicLab.Core.Views;
+using HeuristicLab.MainForm;
+
+namespace HeuristicLab.ItemTreeViews.Views {
+  /// <summary>
+  /// The base class for visual representations of items.
+  /// </summary>
+  [View("ParameterizedNamedItem TreeView")]
+  [Content(typeof(ParameterizedNamedItem), false)]
+  [Content(typeof(IParameterizedNamedItem), false)]
+  public partial class ParameterizedNamedItemTreeView : NamedItemView {
+    public new IParameterizedNamedItem Content
+    {
+      get { return (IParameterizedNamedItem)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public ParameterizedNamedItemTreeView() {
+      InitializeComponent();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      parameterCollectionTreeView.Content = Content == null ? null : Content.Parameters;
+    }
+
+    protected override void SetEnabledStateOfControls() {
+      base.SetEnabledStateOfControls();
+      parameterCollectionTreeView.Enabled = Content != null;
+    }
+  }
+}
Index: /branches/ItemTreeViews/3.3/Views/ParameterizedNamedItemTreeView.designer.cs
===================================================================
--- /branches/ItemTreeViews/3.3/Views/ParameterizedNamedItemTreeView.designer.cs	(revision 14335)
+++ /branches/ItemTreeViews/3.3/Views/ParameterizedNamedItemTreeView.designer.cs	(revision 14335)
@@ -0,0 +1,97 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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
+
+namespace HeuristicLab.ItemTreeViews.Views {
+  partial class ParameterizedNamedItemTreeView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null) components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.parameterCollectionTreeView = new ItemTreeViews.Views.ParameterCollectionTreeView();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // nameTextBox
+      // 
+      this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      this.nameTextBox.Location = new System.Drawing.Point(59, 0);
+      this.nameTextBox.Size = new System.Drawing.Size(380, 20);
+      // 
+      // infoLabel
+      // 
+      this.infoLabel.Location = new System.Drawing.Point(445, 3);
+      // 
+      // parameterCollectionTreeView
+      // 
+      this.parameterCollectionTreeView.AllowEditingOfHiddenParameters = true;
+      this.parameterCollectionTreeView.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.parameterCollectionTreeView.Caption = "ParameterCollection Tree View";
+      this.parameterCollectionTreeView.Content = null;
+      this.parameterCollectionTreeView.Location = new System.Drawing.Point(7, 26);
+      this.parameterCollectionTreeView.Name = "parameterCollectionTreeView";
+      this.parameterCollectionTreeView.ReadOnly = false;
+      this.parameterCollectionTreeView.ShowDetails = true;
+      this.parameterCollectionTreeView.Size = new System.Drawing.Size(454, 389);
+      this.parameterCollectionTreeView.TabIndex = 3;
+      // 
+      // ParameterizedNamedItemTreeView
+      // 
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.parameterCollectionTreeView);
+      this.Name = "ParameterizedNamedItemTreeView";
+      this.Size = new System.Drawing.Size(464, 418);
+      this.Controls.SetChildIndex(this.infoLabel, 0);
+      this.Controls.SetChildIndex(this.nameTextBox, 0);
+      this.Controls.SetChildIndex(this.nameLabel, 0);
+      this.Controls.SetChildIndex(this.parameterCollectionTreeView, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private ItemTreeViews.Views.ParameterCollectionTreeView parameterCollectionTreeView;
+  }
+}
Index: /branches/ItemTreeViews/3.3/Views/ParameterizedNamedItemTreeView.resx
===================================================================
--- /branches/ItemTreeViews/3.3/Views/ParameterizedNamedItemTreeView.resx	(revision 14335)
+++ /branches/ItemTreeViews/3.3/Views/ParameterizedNamedItemTreeView.resx	(revision 14335)
@@ -0,0 +1,126 @@
+﻿<?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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>140, 17</value>
+  </metadata>
+</root>
